@rolatech/angular-components 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/fesm2022/rolatech-angular-components.mjs +1845 -0
- package/fesm2022/rolatech-angular-components.mjs.map +1 -0
- package/index.d.ts +56 -0
- package/lib/accordion/accordion.component.d.ts +6 -0
- package/lib/angular-components.module.d.ts +7 -0
- package/lib/avatar/avatar.component.d.ts +12 -0
- package/lib/base.component.d.ts +14 -0
- package/lib/chip-bar/chip-bar.component.d.ts +30 -0
- package/lib/confirmation-dialog/confirmation-dialog.component.d.ts +13 -0
- package/lib/console-layout/console-layout.component.d.ts +5 -0
- package/lib/container/container.component.d.ts +7 -0
- package/lib/content/content.component.d.ts +5 -0
- package/lib/drawer/drawer-animations.d.ts +6 -0
- package/lib/drawer/drawer.component.d.ts +42 -0
- package/lib/editor/editor.component.d.ts +28 -0
- package/lib/empty/empty.component.d.ts +5 -0
- package/lib/filter/filter.component.d.ts +5 -0
- package/lib/folder/folder.component.d.ts +5 -0
- package/lib/footer/footer.component.d.ts +10 -0
- package/lib/icon/icon.component.d.ts +10 -0
- package/lib/icon-button/icon-button.component.d.ts +6 -0
- package/lib/image/image.component.d.ts +11 -0
- package/lib/image-placeholder/image-placeholder.component.d.ts +7 -0
- package/lib/image-preview-dialog/image-preview-dialog.component.d.ts +18 -0
- package/lib/input/input.component.d.ts +7 -0
- package/lib/layout/layout.component.d.ts +32 -0
- package/lib/list/list.component.d.ts +7 -0
- package/lib/material.module.d.ts +50 -0
- package/lib/media-list/media-list.component.d.ts +13 -0
- package/lib/media-list-item/media-list-item.component.d.ts +15 -0
- package/lib/media-preview/media-preview.component.d.ts +5 -0
- package/lib/media-preview-dialog/media-preview-dialog.component.d.ts +18 -0
- package/lib/media-upload/media-upload.component.d.ts +18 -0
- package/lib/media-upload-dialog/media-upload-dialog.component.d.ts +32 -0
- package/lib/menu-icon/menu-icon.component.d.ts +6 -0
- package/lib/menu-user/menu-user.component.d.ts +16 -0
- package/lib/mini-guide/mini-guide.component.d.ts +26 -0
- package/lib/not-found/not-found.component.d.ts +11 -0
- package/lib/page/page.component.d.ts +10 -0
- package/lib/paginator/paginator.component.d.ts +7 -0
- package/lib/panel/panel-animations.d.ts +6 -0
- package/lib/panel/panel-header.component.d.ts +5 -0
- package/lib/panel/panel.component.d.ts +17 -0
- package/lib/rich-item/rich-item.component.d.ts +13 -0
- package/lib/rich-view/rich-view.component.d.ts +18 -0
- package/lib/spinner/spinner.component.d.ts +16 -0
- package/lib/storage-bucket-create/storage-bucket-create.component.d.ts +10 -0
- package/lib/storage-file-upload/storage-file-upload.component.d.ts +17 -0
- package/lib/storage-folder-create/storage-folder-create.component.d.ts +11 -0
- package/lib/tab/tab.component.d.ts +10 -0
- package/lib/table/table.component.d.ts +18 -0
- package/lib/tabs/tabs.component.d.ts +19 -0
- package/lib/thumbnail/thumbnail.component.d.ts +20 -0
- package/lib/title/title.component.d.ts +9 -0
- package/lib/toolbar/toolbar.component.d.ts +13 -0
- package/lib/topbar/topbar.component.d.ts +22 -0
- package/lib/topbar-avatar-menu/topbar-avatar-menu.component.d.ts +10 -0
- package/lib/wechat-connect-dialog/wechat-connect-dialog.component.d.ts +19 -0
- package/package.json +50 -0
- package/provider.d.ts +17 -0
- package/themes/_default.scss +1 -0
|
@@ -0,0 +1,1845 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, inject, ElementRef, effect, Component, ViewEncapsulation, HostBinding, InjectionToken, makeEnvironmentProviders, Renderer2, PLATFORM_ID, viewChild, ChangeDetectionStrategy, contentChild, Inject, NgModule, ChangeDetectorRef, output, computed, model, HostListener, contentChildren } from '@angular/core';
|
|
3
|
+
import * as i1$5 from '@angular/common';
|
|
4
|
+
import { CommonModule, isPlatformBrowser, NgClass } from '@angular/common';
|
|
5
|
+
import * as i2$1 from '@angular/material/icon';
|
|
6
|
+
import { MatIcon, MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
8
|
+
import { MatListModule } from '@angular/material/list';
|
|
9
|
+
import * as i1$3 from '@angular/router';
|
|
10
|
+
import { RouterLink, RouterLinkActive, RouterEvent, NavigationEnd, ActivatedRoute, Router, RouterModule } from '@angular/router';
|
|
11
|
+
import * as i4 from '@angular/material/button';
|
|
12
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
13
|
+
import { BreakpointObserver, Breakpoints, LayoutModule } from '@angular/cdk/layout';
|
|
14
|
+
import { map, distinctUntilChanged, filter } from 'rxjs';
|
|
15
|
+
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
16
|
+
import { Platform } from '@angular/cdk/platform';
|
|
17
|
+
import { ViewportRuler, ScrollingModule } from '@angular/cdk/scrolling';
|
|
18
|
+
import { APP_CONFIG, AngularCommonModule } from '@rolatech/angular-common';
|
|
19
|
+
import * as i2 from '@angular/material/menu';
|
|
20
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
21
|
+
import * as i1 from '@angular/material/dialog';
|
|
22
|
+
import { MAT_DIALOG_DATA, MatDialogModule, MatDialog, MatDialogRef, MatDialogContent, MatDialogActions, MatDialogClose, MatDialogTitle } from '@angular/material/dialog';
|
|
23
|
+
import * as i3 from '@angular/material/divider';
|
|
24
|
+
import { MatDividerModule, MatDivider } from '@angular/material/divider';
|
|
25
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
26
|
+
import { ClipboardModule } from '@angular/cdk/clipboard';
|
|
27
|
+
import { DragDropModule } from '@angular/cdk/drag-drop';
|
|
28
|
+
import { PortalModule } from '@angular/cdk/portal';
|
|
29
|
+
import { CdkStepperModule } from '@angular/cdk/stepper';
|
|
30
|
+
import { CdkTableModule } from '@angular/cdk/table';
|
|
31
|
+
import { CdkTreeModule } from '@angular/cdk/tree';
|
|
32
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
33
|
+
import { MatBadgeModule } from '@angular/material/badge';
|
|
34
|
+
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
|
|
35
|
+
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
36
|
+
import { MatCardModule } from '@angular/material/card';
|
|
37
|
+
import * as i4$1 from '@angular/material/checkbox';
|
|
38
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
39
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
40
|
+
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
|
|
41
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
42
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
43
|
+
import * as i1$1 from '@angular/material/form-field';
|
|
44
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
45
|
+
import { MatGridListModule } from '@angular/material/grid-list';
|
|
46
|
+
import * as i2$2 from '@angular/material/input';
|
|
47
|
+
import { MatInputModule } from '@angular/material/input';
|
|
48
|
+
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
49
|
+
import * as i1$2 from '@angular/material/progress-bar';
|
|
50
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
51
|
+
import * as i4$2 from '@angular/material/progress-spinner';
|
|
52
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
53
|
+
import { MatRadioModule } from '@angular/material/radio';
|
|
54
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
55
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
56
|
+
import { MatSliderModule } from '@angular/material/slider';
|
|
57
|
+
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
58
|
+
import { MatSortModule } from '@angular/material/sort';
|
|
59
|
+
import { MatStepperModule } from '@angular/material/stepper';
|
|
60
|
+
import * as i1$4 from '@angular/material/table';
|
|
61
|
+
import { MatTableModule } from '@angular/material/table';
|
|
62
|
+
import { MatTabsModule } from '@angular/material/tabs';
|
|
63
|
+
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
64
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
65
|
+
import { MatTreeModule } from '@angular/material/tree';
|
|
66
|
+
import * as i2$3 from '@rolatech/angular-services';
|
|
67
|
+
import { LoadingService, DialogService, SnackBarService, NavigationService, BackButtonDirective } from '@rolatech/angular-services';
|
|
68
|
+
import * as i3$1 from '@angular/forms';
|
|
69
|
+
import { FormsModule } from '@angular/forms';
|
|
70
|
+
import * as i2$4 from '@angular/platform-browser';
|
|
71
|
+
import { DomSanitizer, Title } from '@angular/platform-browser';
|
|
72
|
+
import { map as map$1 } from 'lodash';
|
|
73
|
+
|
|
74
|
+
class IconComponent {
|
|
75
|
+
hasClass = true;
|
|
76
|
+
filled = input(false, { transform: booleanAttribute });
|
|
77
|
+
el = inject(ElementRef);
|
|
78
|
+
constructor() {
|
|
79
|
+
effect(() => {
|
|
80
|
+
if (this.filled()) {
|
|
81
|
+
this.el.nativeElement.setAttribute('filled', '');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.el.nativeElement.removeAttribute('filled');
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
89
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: IconComponent, isStandalone: true, selector: "rolatech-icon", inputs: { filled: { classPropertyName: "filled", publicName: "filled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-icon": "this.hasClass" } }, ngImport: i0, template: "<mat-icon>\n <ng-content></ng-content>\n</mat-icon>\n", styles: [".rolatech-icon{display:inline-flex;align-items:center;justify-content:center;position:relative;vertical-align:middle;width:var(--rt-icon-width, 24px);height:var(--rt-icon-height, 24px)}.rolatech-icon mat-icon{font-family:Material Symbols Rounded}.rolatech-icon[filled] mat-icon{font-family:Material Symbols Rounded Filled}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: IconComponent, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ selector: 'rolatech-icon', imports: [CommonModule, MatIcon], encapsulation: ViewEncapsulation.None, template: "<mat-icon>\n <ng-content></ng-content>\n</mat-icon>\n", styles: [".rolatech-icon{display:inline-flex;align-items:center;justify-content:center;position:relative;vertical-align:middle;width:var(--rt-icon-width, 24px);height:var(--rt-icon-height, 24px)}.rolatech-icon mat-icon{font-family:Material Symbols Rounded}.rolatech-icon[filled] mat-icon{font-family:Material Symbols Rounded Filled}\n"] }]
|
|
94
|
+
}], ctorParameters: () => [], propDecorators: { hasClass: [{
|
|
95
|
+
type: HostBinding,
|
|
96
|
+
args: ['class.rolatech-icon']
|
|
97
|
+
}] } });
|
|
98
|
+
|
|
99
|
+
class IconButtonComponent {
|
|
100
|
+
hasClass = true;
|
|
101
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: IconButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: IconButtonComponent, isStandalone: true, selector: "rolatech-icon-button", host: { properties: { "class.rolatech-icon-button": "this.hasClass" } }, ngImport: i0, template: "<button\n id=\"button\"\n class=\"w-10 h-10 p-2 inline-block relative cursor-pointer hover:bg-[--rt-10-percent-layer] rounded-full rolatech-icon-button\"\n onclick=\"this.blur()\"\n>\n <!-- <ng-content select=\"rolatech-icon\"></ng-content> -->\n <rolatech-icon>\n <ng-content></ng-content>\n </rolatech-icon>\n</button>\n", styles: [".rolatech-icon-button{--rt-icon-button-icon-width: 24px;--rt-icon-button-icon-height: 24px;color:var(--rt-spec-icon-active-other);width:40px;height:40px;box-sizing:border-box;display:block}button.rolatech-icon-button{vertical-align:middle;color:inherit;outline:none;background:none;margin:0;border:none;width:100%;height:100%;line-height:0;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IconComponent, selector: "rolatech-icon", inputs: ["filled"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
103
|
+
}
|
|
104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: IconButtonComponent, decorators: [{
|
|
105
|
+
type: Component,
|
|
106
|
+
args: [{ selector: 'rolatech-icon-button', imports: [CommonModule, IconComponent], encapsulation: ViewEncapsulation.None, template: "<button\n id=\"button\"\n class=\"w-10 h-10 p-2 inline-block relative cursor-pointer hover:bg-[--rt-10-percent-layer] rounded-full rolatech-icon-button\"\n onclick=\"this.blur()\"\n>\n <!-- <ng-content select=\"rolatech-icon\"></ng-content> -->\n <rolatech-icon>\n <ng-content></ng-content>\n </rolatech-icon>\n</button>\n", styles: [".rolatech-icon-button{--rt-icon-button-icon-width: 24px;--rt-icon-button-icon-height: 24px;color:var(--rt-spec-icon-active-other);width:40px;height:40px;box-sizing:border-box;display:block}button.rolatech-icon-button{vertical-align:middle;color:inherit;outline:none;background:none;margin:0;border:none;width:100%;height:100%;line-height:0;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-tap-highlight-color:transparent}\n"] }]
|
|
107
|
+
}], propDecorators: { hasClass: [{
|
|
108
|
+
type: HostBinding,
|
|
109
|
+
args: ['class.rolatech-icon-button']
|
|
110
|
+
}] } });
|
|
111
|
+
|
|
112
|
+
class TitleComponent {
|
|
113
|
+
hasClass = true;
|
|
114
|
+
title = input();
|
|
115
|
+
subtitle = input();
|
|
116
|
+
large = input(false, { transform: booleanAttribute });
|
|
117
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
118
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: TitleComponent, isStandalone: true, selector: "rolatech-title", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, large: { classPropertyName: "large", publicName: "large", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-title": "this.hasClass" } }, ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n @if (large()) {\n <a class=\"block text-3xl font-bold py-3\"\n ><span>{{ title() }}</span></a\n >\n } @else {\n <a class=\"block text-xl font-bold py-3\"\n ><span>{{ title() }}</span></a\n >\n }\n\n <a class=\"text-sm leading-3 text-[--rt-text-secondary]\"\n ><span>{{ subtitle() }}</span></a\n >\n</div>\n", styles: ["rolatech-title{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
119
|
+
}
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TitleComponent, decorators: [{
|
|
121
|
+
type: Component,
|
|
122
|
+
args: [{ selector: 'rolatech-title', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex flex-row items-center\">\n @if (large()) {\n <a class=\"block text-3xl font-bold py-3\"\n ><span>{{ title() }}</span></a\n >\n } @else {\n <a class=\"block text-xl font-bold py-3\"\n ><span>{{ title() }}</span></a\n >\n }\n\n <a class=\"text-sm leading-3 text-[--rt-text-secondary]\"\n ><span>{{ subtitle() }}</span></a\n >\n</div>\n", styles: ["rolatech-title{display:block}\n"] }]
|
|
123
|
+
}], propDecorators: { hasClass: [{
|
|
124
|
+
type: HostBinding,
|
|
125
|
+
args: ['class.rolatech-title']
|
|
126
|
+
}] } });
|
|
127
|
+
|
|
128
|
+
class ContainerComponent {
|
|
129
|
+
hasId = 'rolatech-container';
|
|
130
|
+
hasClass = true;
|
|
131
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
132
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ContainerComponent, isStandalone: true, selector: "rolatech-container", host: { properties: { "id": "this.hasId", "class.rolatech-container": "this.hasClass" } }, ngImport: i0, template: "<div class=\"xl:max-w-[1024px] 2xl:max-w-[1280px] m-auto text-[--rt-text-primary]\">\n <ng-content select=\"rolatech-toolbar\"></ng-content>\n <ng-content select=\"rolatech-filter\"></ng-content>\n <ng-content select=\"rolatech-tabs\"></ng-content>\n <ng-content select=\"rolatech-chip-bar\"></ng-content>\n <ng-content select=\"rolatech-list\"></ng-content>\n <ng-content select=\"rolatech-content\"></ng-content>\n <div class=\"container-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["@media (min-width: 1280){.rolatech-container{max-width:var(--rt-container-max-width, 1024px)}}@media (min-width: 1536px){.rolatech-container{max-width:var(--rt-container-max-width, 1280px)}}rolatech-container .container-content{margin:0 auto;display:block;padding-left:var(--rt-container-content-padding-left, 16px);padding-right:var(--rt-container-content-padding-right, 16px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
133
|
+
}
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ContainerComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{ selector: 'rolatech-container', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"xl:max-w-[1024px] 2xl:max-w-[1280px] m-auto text-[--rt-text-primary]\">\n <ng-content select=\"rolatech-toolbar\"></ng-content>\n <ng-content select=\"rolatech-filter\"></ng-content>\n <ng-content select=\"rolatech-tabs\"></ng-content>\n <ng-content select=\"rolatech-chip-bar\"></ng-content>\n <ng-content select=\"rolatech-list\"></ng-content>\n <ng-content select=\"rolatech-content\"></ng-content>\n <div class=\"container-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["@media (min-width: 1280){.rolatech-container{max-width:var(--rt-container-max-width, 1024px)}}@media (min-width: 1536px){.rolatech-container{max-width:var(--rt-container-max-width, 1280px)}}rolatech-container .container-content{margin:0 auto;display:block;padding-left:var(--rt-container-content-padding-left, 16px);padding-right:var(--rt-container-content-padding-right, 16px)}\n"] }]
|
|
137
|
+
}], propDecorators: { hasId: [{
|
|
138
|
+
type: HostBinding,
|
|
139
|
+
args: ['id']
|
|
140
|
+
}], hasClass: [{
|
|
141
|
+
type: HostBinding,
|
|
142
|
+
args: ['class.rolatech-container']
|
|
143
|
+
}] } });
|
|
144
|
+
|
|
145
|
+
const APP_LAYOUT = new InjectionToken('APP_LAYOUT');
|
|
146
|
+
function provideAngularLayout(config) {
|
|
147
|
+
const providers = [
|
|
148
|
+
{
|
|
149
|
+
provide: APP_LAYOUT,
|
|
150
|
+
useValue: config,
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
return makeEnvironmentProviders(providers);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
class MenuIconComponent {
|
|
157
|
+
hasClass = true;
|
|
158
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MenuIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
159
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: MenuIconComponent, isStandalone: true, selector: "rolatech-menu-icon", host: { properties: { "class.rolatech-icon-button": "this.hasClass" } }, ngImport: i0, template: "<button\n id=\"button\"\n class=\"w-10 h-10 p-2 inline-block relative cursor-pointer hover:bg-[--rt-10-percent-layer] rounded-full rolatech-icon-button\"\n onclick=\"this.blur()\"\n>\n <div style=\"width: 100%; height: 100%; display: block; fill: currentcolor\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"M21 6H3V5h18v1zm0 5H3v1h18v-1zm0 6H3v1h18v-1z\"></path>\n </svg>\n </div>\n</button>\n", styles: ["rolatech-menu-icon{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
160
|
+
}
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MenuIconComponent, decorators: [{
|
|
162
|
+
type: Component,
|
|
163
|
+
args: [{ selector: 'rolatech-menu-icon', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<button\n id=\"button\"\n class=\"w-10 h-10 p-2 inline-block relative cursor-pointer hover:bg-[--rt-10-percent-layer] rounded-full rolatech-icon-button\"\n onclick=\"this.blur()\"\n>\n <div style=\"width: 100%; height: 100%; display: block; fill: currentcolor\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"M21 6H3V5h18v1zm0 5H3v1h18v-1zm0 6H3v1h18v-1z\"></path>\n </svg>\n </div>\n</button>\n", styles: ["rolatech-menu-icon{display:block}\n"] }]
|
|
164
|
+
}], propDecorators: { hasClass: [{
|
|
165
|
+
type: HostBinding,
|
|
166
|
+
args: ['class.rolatech-icon-button']
|
|
167
|
+
}] } });
|
|
168
|
+
|
|
169
|
+
class TopbarComponent {
|
|
170
|
+
hostId = 'rolatech-topbar';
|
|
171
|
+
hasClass = true;
|
|
172
|
+
persistent = inject(APP_LAYOUT).persistent;
|
|
173
|
+
el = inject(ElementRef);
|
|
174
|
+
renderer = inject(Renderer2);
|
|
175
|
+
platformId = inject(PLATFORM_ID);
|
|
176
|
+
breakpointObserver = inject(BreakpointObserver);
|
|
177
|
+
appLayout = inject(APP_LAYOUT);
|
|
178
|
+
link = input('/');
|
|
179
|
+
appDrawer;
|
|
180
|
+
miniGuide;
|
|
181
|
+
ngOnInit() {
|
|
182
|
+
if (this.persistent) {
|
|
183
|
+
this.renderer.setAttribute(this.el.nativeElement, 'persistent', '');
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'persistent');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
onToggle() {
|
|
190
|
+
if (this.appLayout.guide) {
|
|
191
|
+
this.miniGuide.toggle();
|
|
192
|
+
}
|
|
193
|
+
this.appDrawer.toggle();
|
|
194
|
+
}
|
|
195
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TopbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
196
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: TopbarComponent, isStandalone: true, selector: "rolatech-topbar", inputs: { link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.hostId", "class.rolatech-topbar": "this.hasClass" } }, ngImport: i0, template: "<div class=\"h-14 flex items-center\">\n <rolatech-menu-icon id=\"topbar-menu-button\" (click)=\"onToggle()\"></rolatech-menu-icon>\n <div class=\"cursor-pointer ml-1\" [routerLink]=\"link()\">\n <div class=\"text-[--rt-text-primary] text-lg md:text-xl font-bold\">\n <span class=\"text-[--rt-brand-color]\">{{ appLayout.title }}</span>\n <span>{{ appLayout.subtitle }}</span>\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <ng-content></ng-content>\n</div>\n", styles: ["rolatech-topbar{position:fixed;top:0;width:100%;z-index:900;transform:translateY(0);transition:transform .3s ease;background:var(--rt-base-background, #fff);color:var(--rt-text-primary, #030303);padding-left:var(--rt-topbar-padding-left, 16px);padding-right:var(--rt-topbar-padding-right, 16px)}rolatech-topbar:not([persistent]) #topbar-menu-button{display:none}rolatech-topbar:not(:has(#topbar-menu-button)){--rt-topbar-padding-left: 16px}rolatech-layout rolatech-drawer[persistent][opened]~rolatech-topbar{margin-left:256px}@media (max-width: 768px){:root{--rt-topbar-padding-left: 8px}rolatech-topbar #topbar-menu-button{display:block!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MenuIconComponent, selector: "rolatech-menu-icon" }], encapsulation: i0.ViewEncapsulation.None });
|
|
197
|
+
}
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TopbarComponent, decorators: [{
|
|
199
|
+
type: Component,
|
|
200
|
+
args: [{ selector: 'rolatech-topbar', imports: [CommonModule, RouterLink, MatButtonModule, MenuIconComponent], encapsulation: ViewEncapsulation.None, template: "<div class=\"h-14 flex items-center\">\n <rolatech-menu-icon id=\"topbar-menu-button\" (click)=\"onToggle()\"></rolatech-menu-icon>\n <div class=\"cursor-pointer ml-1\" [routerLink]=\"link()\">\n <div class=\"text-[--rt-text-primary] text-lg md:text-xl font-bold\">\n <span class=\"text-[--rt-brand-color]\">{{ appLayout.title }}</span>\n <span>{{ appLayout.subtitle }}</span>\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <ng-content></ng-content>\n</div>\n", styles: ["rolatech-topbar{position:fixed;top:0;width:100%;z-index:900;transform:translateY(0);transition:transform .3s ease;background:var(--rt-base-background, #fff);color:var(--rt-text-primary, #030303);padding-left:var(--rt-topbar-padding-left, 16px);padding-right:var(--rt-topbar-padding-right, 16px)}rolatech-topbar:not([persistent]) #topbar-menu-button{display:none}rolatech-topbar:not(:has(#topbar-menu-button)){--rt-topbar-padding-left: 16px}rolatech-layout rolatech-drawer[persistent][opened]~rolatech-topbar{margin-left:256px}@media (max-width: 768px){:root{--rt-topbar-padding-left: 8px}rolatech-topbar #topbar-menu-button{display:block!important}}\n"] }]
|
|
201
|
+
}], propDecorators: { hostId: [{
|
|
202
|
+
type: HostBinding,
|
|
203
|
+
args: ['id']
|
|
204
|
+
}], hasClass: [{
|
|
205
|
+
type: HostBinding,
|
|
206
|
+
args: ['class.rolatech-topbar']
|
|
207
|
+
}] } });
|
|
208
|
+
|
|
209
|
+
// export const DRAWER_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';
|
|
210
|
+
// export const heightAnimation = trigger('heightAnimation', [
|
|
211
|
+
// state(
|
|
212
|
+
// 'expanded',
|
|
213
|
+
// style({
|
|
214
|
+
// height: '*',
|
|
215
|
+
// visibility: 'visible',
|
|
216
|
+
// }),
|
|
217
|
+
// ),
|
|
218
|
+
// state(
|
|
219
|
+
// 'collapsed',
|
|
220
|
+
// style({
|
|
221
|
+
// height: '0px',
|
|
222
|
+
// visibility: 'hidden',
|
|
223
|
+
// }),
|
|
224
|
+
// ),
|
|
225
|
+
// transition('expanded <=> collapsed', [animate(DRAWER_ANIMATION_TIMING)]),
|
|
226
|
+
// ]);
|
|
227
|
+
const PANEL_ANIMATION_TIMING$1 = '225ms cubic-bezier(0.4,0.0,0.2,1)';
|
|
228
|
+
const panelAnimations$1 = {
|
|
229
|
+
/** Animation that rotates the indicator arrow. */
|
|
230
|
+
indicator: trigger('indicator', [
|
|
231
|
+
state('collapsed, void', style({ transform: 'rotate(0deg)' })),
|
|
232
|
+
state('expanded', style({ transform: 'rotate(180deg)' })),
|
|
233
|
+
transition('expanded <=> collapsed, void => collapsed', animate(PANEL_ANIMATION_TIMING$1)),
|
|
234
|
+
]),
|
|
235
|
+
/** Animation that expands and collapses the panel content. */
|
|
236
|
+
content: trigger('content', [
|
|
237
|
+
state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),
|
|
238
|
+
state('expanded', style({ height: '*', visibility: 'visible' })),
|
|
239
|
+
transition('expanded <=> collapsed, void => collapsed', animate(PANEL_ANIMATION_TIMING$1)),
|
|
240
|
+
]),
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
class DrawerComponent {
|
|
244
|
+
_enableAnimations = false;
|
|
245
|
+
persistent = inject(APP_LAYOUT).persistent;
|
|
246
|
+
links = input();
|
|
247
|
+
position = input('left');
|
|
248
|
+
opened = input(true);
|
|
249
|
+
el = inject(ElementRef);
|
|
250
|
+
renderer = inject(Renderer2);
|
|
251
|
+
platformId = inject(PLATFORM_ID);
|
|
252
|
+
breakpointObserver = inject(BreakpointObserver);
|
|
253
|
+
appLayout = inject(APP_LAYOUT);
|
|
254
|
+
guideEl = viewChild('guide');
|
|
255
|
+
content = viewChild('content');
|
|
256
|
+
scrimEl = viewChild('scrim');
|
|
257
|
+
headerEl = viewChild('header');
|
|
258
|
+
isMobile = false;
|
|
259
|
+
isPersistent = true;
|
|
260
|
+
panelOpenState = false;
|
|
261
|
+
_opened = false;
|
|
262
|
+
_platform = inject(Platform);
|
|
263
|
+
open() {
|
|
264
|
+
this._opened = true;
|
|
265
|
+
this.renderer.setAttribute(this.el.nativeElement, 'opened', '');
|
|
266
|
+
this.renderer.setAttribute(this.content()?.nativeElement, 'opened', '');
|
|
267
|
+
if (this.isMobile) {
|
|
268
|
+
this.renderer.addClass(this.scrimEl()?.nativeElement, 'visible');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
close() {
|
|
272
|
+
this._opened = false;
|
|
273
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'opened');
|
|
274
|
+
this.renderer.removeAttribute(this.content()?.nativeElement, 'opened');
|
|
275
|
+
if (this.isMobile) {
|
|
276
|
+
this.renderer.removeClass(this.scrimEl()?.nativeElement, 'visible');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
toggle() {
|
|
280
|
+
if (this._opened) {
|
|
281
|
+
this.close();
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.open();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
init(isMobile) {
|
|
288
|
+
this._opened = !isMobile;
|
|
289
|
+
this.isMobile = isMobile;
|
|
290
|
+
this.isPersistent = !isMobile;
|
|
291
|
+
if (this._platform.isBrowser) {
|
|
292
|
+
if (isMobile) {
|
|
293
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'persistent');
|
|
294
|
+
this.renderer.removeAttribute(this.headerEl()?.nativeElement, 'hidden', '');
|
|
295
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'opened');
|
|
296
|
+
this.renderer.removeAttribute(this.content()?.nativeElement, 'opened');
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
if (this.persistent) {
|
|
300
|
+
this.renderer.setAttribute(this.el.nativeElement, 'persistent', '');
|
|
301
|
+
this.renderer.setAttribute(this.headerEl()?.nativeElement, 'hidden', '');
|
|
302
|
+
this.renderer.setAttribute(this.el.nativeElement, 'opened', '');
|
|
303
|
+
this.renderer.setAttribute(this.content()?.nativeElement, 'opened', '');
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
ngAfterContentInit() {
|
|
309
|
+
this.renderer.setAttribute(this.el.nativeElement, 'position', this.position());
|
|
310
|
+
this.breakpointObserver
|
|
311
|
+
.observe(['(max-width: 768px)'])
|
|
312
|
+
.pipe(map((result) => result.matches))
|
|
313
|
+
.subscribe({
|
|
314
|
+
next: (res) => {
|
|
315
|
+
this.init(res);
|
|
316
|
+
},
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
ngAfterContentChecked() {
|
|
320
|
+
if (this._platform.isBrowser) {
|
|
321
|
+
this._enableAnimations = true;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
325
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: DrawerComponent, isStandalone: true, selector: "rolatech-drawer", inputs: { links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "id": "rolatech-drawer", "style.transition-duration": "200ms", "ngSkipHydration": "" }, classAttribute: "rolatech-drawer" }, viewQueries: [{ propertyName: "guideEl", first: true, predicate: ["guide"], descendants: true, isSignal: true }, { propertyName: "content", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "scrimEl", first: true, predicate: ["scrim"], descendants: true, isSignal: true }, { propertyName: "headerEl", first: true, predicate: ["header"], descendants: true, isSignal: true }], ngImport: i0, template: "<div id=\"scrim\" #scrim class=\"rolatech-drawer\" (click)=\"close()\"></div>\n<div id=\"contentContainer\" #content class=\"rolatech-drawer\">\n <div id=\"guide-wrapper\" class=\"rolatech-drawer\">\n <div id=\"guide-spacer\"></div>\n <div id=\"guide-content\" class=\"rolatech-drawer\">\n <div id=\"header\" #header class=\"flex pl-4 h-14 items-center\">\n <rolatech-menu-icon #menuButton (click)=\"this.toggle()\" onclick=\"this.blur()\"></rolatech-menu-icon>\n <div class=\"text-[--rt-text-primary] text-lg md:text-xl font-bold\" routerLink=\"/\">\n <span class=\"text-[--rt-brand-color]\">{{ appLayout.title }}</span>\n <span>{{ appLayout.subtitle }}</span>\n </div>\n </div>\n <div id=\"guide-inner-content\" class=\"rolatech-drawer\">\n <div class=\"block p-3\">\n @for (item of links(); track $index) {\n @if (item.children) {\n <div class=\"flex cursor-pointer overflow-hidden\">\n @if (item.icon) {\n <div class=\"h-11 flex items-center\">\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n </div>\n }\n <div class=\"w-full\">\n <div class=\"flex items-center h-11 mr-2\" (click)=\"panelOpenState = !panelOpenState\">\n <span class=\"ml-3\">{{ item.title }}</span>\n <div class=\"flex-1\"></div>\n <rolatech-icon [@indicator]=\"panelOpenState === true ? 'expanded' : 'collapsed'\">expand_more</rolatech-icon>\n </div>\n <div\n class=\"flex flex-col ml-4 overflow-visible\"\n [@content]=\"panelOpenState === true ? 'expanded' : 'collapsed'\"\n >\n @for (child of item.children; track child) {\n {{ child.exact }}\n <a\n id=\"endpoint\"\n [routerLink]=\"child.link\"\n routerLinkActive=\"drawer-active\"\n [routerLinkActiveOptions]=\"{ exact: item.exact === false ? false : true }\"\n class=\"p-2 rt-guide-entry\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <span class=\"text-sm\">{{ child.title }}</span>\n </a>\n }\n </div>\n </div>\n </div>\n } @else {\n @if (item.openinView) {\n <a\n class=\"flex hover:bg-[--rt-10-percent-layer] min-h-11\"\n [href]=\"item.link\"\n target=\"_blank\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm opacity-75 text-[--rt-text-secondary]\">{{ item.subtitle }}</span>\n </div>\n </div>\n <rolatech-icon class=\"scale-90 mr-3\">open_in_new</rolatech-icon>\n </div>\n </a>\n } @else {\n @if (item.button) {\n <a\n class=\"flex rolatech-drawer-button min-h-11 rounded-xl mb-2\"\n [routerLink]=\"item.link\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm\">{{ item.subtitle }}</span>\n </div>\n </div>\n </div>\n </a>\n } @else {\n <a\n id=\"endpoint\"\n class=\"flex hover:bg-[--rt-10-percent-layer] min-h-11 rt-guide-entry\"\n [routerLink]=\"item.link\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n routerLinkActive=\"drawer-active\"\n [routerLinkActiveOptions]=\"{ exact: item.exact === false ? false : true }\"\n #routerLink=\"routerLinkActive\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\" [filled]=\"routerLink.isActive\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm text-[--rt-text-secondary]\">{{ item.subtitle }}</span>\n </div>\n </div>\n </div>\n </a>\n }\n }\n }\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["rolatech-drawer{position:fixed;z-index:1;inset:-120px 0;visibility:hidden;transition-property:visibility;transition-duration:.2s;touch-action:pan-y}rolatech-drawer[persistent]{width:var(--rt-drawer-width, 256px)}rolatech-drawer[persistent][position=top]{width:100%}rolatech-drawer[opened]{visibility:visible}rolatech-drawer[position=top] #contentContainer{left:0;right:0;width:100%;height:var(--rt-topbar-height, 56px);transform:translate3d(0,-100%,0)}rolatech-drawer[position=top] #contentContainer #guide-inner-content{height:56px}rolatech-drawer[position=top] #contentContainer #guide-inner-content div{display:flex!important;flex-direction:row!important;overflow:hidden;flex:1;flex-basis:.000000001px;overflow-y:auto;scrollbar-color:transparent transparent;scrollbar-width:thin;height:56px;align-items:center}rolatech-drawer[position=bottom] #contentContainer{left:0;right:0;transform:translate3d(0,100%,0)}rolatech-drawer[position=left] #contentContainer{left:0;transform:translate3d(-100%,0,0)}rolatech-drawer[position=right] #contentContainer{right:0;transform:translate3d(100%,0,0)}rolatech-drawer[persistent][position=left]{right:auto}rolatech-drawer[persistent][position=right]{left:auto}rolatech-drawer[persistent][position=top] #contentContainer{transform:translate3d(0,-100%,0)}rolatech-drawer[persistent][position=left] #contentContainer{transform:translate3d(-100%,0,0)}rolatech-drawer[persistent][position=right] #contentContainer{transform:translate3d(100%,0,0)}rolatech-drawer[persistent][position=top] #contentContainer[opened]{transform:translateZ(0)}rolatech-drawer[persistent][position=left] #contentContainer[opened]{transform:translateZ(0)}rolatech-drawer[persistent][position=right] #contentContainer[opened]{transform:translateZ(0)}[hidden]{display:none!important}#guide-wrapper.rolatech-drawer{height:100%;display:flex;flex-direction:column}#contentContainer.rolatech-drawer{position:absolute;top:0;bottom:0;width:var(--rt-drawer-width, 256px);padding:var(--rt-drawer-content-padding, 120px 0);transition-property:transform;color:var(--rt-drawer-content-container-color, #000);background-color:var(--rt-drawer-content-container-background-color, #fff);transition-duration:.2s}#contentContainer.rolatech-drawer[opened]{transform:translateZ(0)}#guide-content.rolatech-drawer{background:var(--rt-base-background);flex:1;flex-basis:.000000001px;display:flex;flex-direction:column}#guide-inner-content.rolatech-drawer{overflow:hidden;flex:1;flex-basis:.000000001px;overflow-y:auto;scrollbar-color:transparent transparent;scrollbar-width:thin}#scrim.rolatech-drawer{position:absolute;inset:0;transition-property:opacity;transform:translateZ(0);transition-duration:.2s;opacity:0;background:var(--rt-drawer-scrim-background, rgba(0, 0, 0, .5))}#scrim.visible.rolatech-drawer{opacity:1}#guide-spacer{margin-top:var(--ytd-masthead-height, 56px)}rolatech-drawer:not([persistent]) #guide-spacer{display:none}rolatech-drawer:not([persistent]){z-index:2030}.drawer-active{background-color:var(--rt-drawer-active-background-color, rgba(0, 0, 0, .05));font-weight:500;border-radius:10px}.content{display:flex;flex-direction:column;overflow:visible}.rolatech-drawer-button{background-color:var(--rt-brand-color, #000);color:var(--rt-brand-color-inverse, #fff)}.rolatech-drawer-button:hover{box-shadow:0 1px 3px #3c40434d,0 4px 8px 3px #3c404326;background-color:var(--rt-brand-color, #c2e7ff)}#endpoint.rt-guide-entry:hover{background-color:var(--rt-drawer-active-background-color);border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: IconComponent, selector: "rolatech-icon", inputs: ["filled"] }, { kind: "component", type: MenuIconComponent, selector: "rolatech-menu-icon" }, { kind: "ngmodule", type: MatButtonModule }], animations: [panelAnimations$1.indicator, panelAnimations$1.content], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
326
|
+
}
|
|
327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DrawerComponent, decorators: [{
|
|
328
|
+
type: Component,
|
|
329
|
+
args: [{ selector: 'rolatech-drawer', imports: [CommonModule, RouterLink, RouterLinkActive, IconComponent, MenuIconComponent, MatButtonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [panelAnimations$1.indicator, panelAnimations$1.content], host: {
|
|
330
|
+
id: 'rolatech-drawer',
|
|
331
|
+
class: 'rolatech-drawer',
|
|
332
|
+
'style.transition-duration': '200ms',
|
|
333
|
+
ngSkipHydration: '',
|
|
334
|
+
}, template: "<div id=\"scrim\" #scrim class=\"rolatech-drawer\" (click)=\"close()\"></div>\n<div id=\"contentContainer\" #content class=\"rolatech-drawer\">\n <div id=\"guide-wrapper\" class=\"rolatech-drawer\">\n <div id=\"guide-spacer\"></div>\n <div id=\"guide-content\" class=\"rolatech-drawer\">\n <div id=\"header\" #header class=\"flex pl-4 h-14 items-center\">\n <rolatech-menu-icon #menuButton (click)=\"this.toggle()\" onclick=\"this.blur()\"></rolatech-menu-icon>\n <div class=\"text-[--rt-text-primary] text-lg md:text-xl font-bold\" routerLink=\"/\">\n <span class=\"text-[--rt-brand-color]\">{{ appLayout.title }}</span>\n <span>{{ appLayout.subtitle }}</span>\n </div>\n </div>\n <div id=\"guide-inner-content\" class=\"rolatech-drawer\">\n <div class=\"block p-3\">\n @for (item of links(); track $index) {\n @if (item.children) {\n <div class=\"flex cursor-pointer overflow-hidden\">\n @if (item.icon) {\n <div class=\"h-11 flex items-center\">\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n </div>\n }\n <div class=\"w-full\">\n <div class=\"flex items-center h-11 mr-2\" (click)=\"panelOpenState = !panelOpenState\">\n <span class=\"ml-3\">{{ item.title }}</span>\n <div class=\"flex-1\"></div>\n <rolatech-icon [@indicator]=\"panelOpenState === true ? 'expanded' : 'collapsed'\">expand_more</rolatech-icon>\n </div>\n <div\n class=\"flex flex-col ml-4 overflow-visible\"\n [@content]=\"panelOpenState === true ? 'expanded' : 'collapsed'\"\n >\n @for (child of item.children; track child) {\n {{ child.exact }}\n <a\n id=\"endpoint\"\n [routerLink]=\"child.link\"\n routerLinkActive=\"drawer-active\"\n [routerLinkActiveOptions]=\"{ exact: item.exact === false ? false : true }\"\n class=\"p-2 rt-guide-entry\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <span class=\"text-sm\">{{ child.title }}</span>\n </a>\n }\n </div>\n </div>\n </div>\n } @else {\n @if (item.openinView) {\n <a\n class=\"flex hover:bg-[--rt-10-percent-layer] min-h-11\"\n [href]=\"item.link\"\n target=\"_blank\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm opacity-75 text-[--rt-text-secondary]\">{{ item.subtitle }}</span>\n </div>\n </div>\n <rolatech-icon class=\"scale-90 mr-3\">open_in_new</rolatech-icon>\n </div>\n </a>\n } @else {\n @if (item.button) {\n <a\n class=\"flex rolatech-drawer-button min-h-11 rounded-xl mb-2\"\n [routerLink]=\"item.link\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm\">{{ item.subtitle }}</span>\n </div>\n </div>\n </div>\n </a>\n } @else {\n <a\n id=\"endpoint\"\n class=\"flex hover:bg-[--rt-10-percent-layer] min-h-11 rt-guide-entry\"\n [routerLink]=\"item.link\"\n (click)=\"this.isPersistent ? '' : this.close()\"\n routerLinkActive=\"drawer-active\"\n [routerLinkActiveOptions]=\"{ exact: item.exact === false ? false : true }\"\n #routerLink=\"routerLinkActive\"\n >\n <div class=\"flex justify-between items-center w-full\">\n <div class=\"flex justify-start items-center\">\n @if (item.icon) {\n <rolatech-icon class=\"ml-3\" [filled]=\"routerLink.isActive\">{{ item.icon }}</rolatech-icon>\n }\n <div class=\"flex flex-col ml-3\">\n <span>{{ item.title }}</span>\n <span class=\"text-sm text-[--rt-text-secondary]\">{{ item.subtitle }}</span>\n </div>\n </div>\n </div>\n </a>\n }\n }\n }\n }\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["rolatech-drawer{position:fixed;z-index:1;inset:-120px 0;visibility:hidden;transition-property:visibility;transition-duration:.2s;touch-action:pan-y}rolatech-drawer[persistent]{width:var(--rt-drawer-width, 256px)}rolatech-drawer[persistent][position=top]{width:100%}rolatech-drawer[opened]{visibility:visible}rolatech-drawer[position=top] #contentContainer{left:0;right:0;width:100%;height:var(--rt-topbar-height, 56px);transform:translate3d(0,-100%,0)}rolatech-drawer[position=top] #contentContainer #guide-inner-content{height:56px}rolatech-drawer[position=top] #contentContainer #guide-inner-content div{display:flex!important;flex-direction:row!important;overflow:hidden;flex:1;flex-basis:.000000001px;overflow-y:auto;scrollbar-color:transparent transparent;scrollbar-width:thin;height:56px;align-items:center}rolatech-drawer[position=bottom] #contentContainer{left:0;right:0;transform:translate3d(0,100%,0)}rolatech-drawer[position=left] #contentContainer{left:0;transform:translate3d(-100%,0,0)}rolatech-drawer[position=right] #contentContainer{right:0;transform:translate3d(100%,0,0)}rolatech-drawer[persistent][position=left]{right:auto}rolatech-drawer[persistent][position=right]{left:auto}rolatech-drawer[persistent][position=top] #contentContainer{transform:translate3d(0,-100%,0)}rolatech-drawer[persistent][position=left] #contentContainer{transform:translate3d(-100%,0,0)}rolatech-drawer[persistent][position=right] #contentContainer{transform:translate3d(100%,0,0)}rolatech-drawer[persistent][position=top] #contentContainer[opened]{transform:translateZ(0)}rolatech-drawer[persistent][position=left] #contentContainer[opened]{transform:translateZ(0)}rolatech-drawer[persistent][position=right] #contentContainer[opened]{transform:translateZ(0)}[hidden]{display:none!important}#guide-wrapper.rolatech-drawer{height:100%;display:flex;flex-direction:column}#contentContainer.rolatech-drawer{position:absolute;top:0;bottom:0;width:var(--rt-drawer-width, 256px);padding:var(--rt-drawer-content-padding, 120px 0);transition-property:transform;color:var(--rt-drawer-content-container-color, #000);background-color:var(--rt-drawer-content-container-background-color, #fff);transition-duration:.2s}#contentContainer.rolatech-drawer[opened]{transform:translateZ(0)}#guide-content.rolatech-drawer{background:var(--rt-base-background);flex:1;flex-basis:.000000001px;display:flex;flex-direction:column}#guide-inner-content.rolatech-drawer{overflow:hidden;flex:1;flex-basis:.000000001px;overflow-y:auto;scrollbar-color:transparent transparent;scrollbar-width:thin}#scrim.rolatech-drawer{position:absolute;inset:0;transition-property:opacity;transform:translateZ(0);transition-duration:.2s;opacity:0;background:var(--rt-drawer-scrim-background, rgba(0, 0, 0, .5))}#scrim.visible.rolatech-drawer{opacity:1}#guide-spacer{margin-top:var(--ytd-masthead-height, 56px)}rolatech-drawer:not([persistent]) #guide-spacer{display:none}rolatech-drawer:not([persistent]){z-index:2030}.drawer-active{background-color:var(--rt-drawer-active-background-color, rgba(0, 0, 0, .05));font-weight:500;border-radius:10px}.content{display:flex;flex-direction:column;overflow:visible}.rolatech-drawer-button{background-color:var(--rt-brand-color, #000);color:var(--rt-brand-color-inverse, #fff)}.rolatech-drawer-button:hover{box-shadow:0 1px 3px #3c40434d,0 4px 8px 3px #3c404326;background-color:var(--rt-brand-color, #c2e7ff)}#endpoint.rt-guide-entry:hover{background-color:var(--rt-drawer-active-background-color);border-radius:10px}\n"] }]
|
|
335
|
+
}] });
|
|
336
|
+
|
|
337
|
+
class MiniGuideComponent {
|
|
338
|
+
el = inject(ElementRef);
|
|
339
|
+
renderer = inject(Renderer2);
|
|
340
|
+
platformId = inject(PLATFORM_ID);
|
|
341
|
+
breakpointObserver = inject(BreakpointObserver);
|
|
342
|
+
items = input();
|
|
343
|
+
title = input(true);
|
|
344
|
+
opened = false;
|
|
345
|
+
disableToggle = false;
|
|
346
|
+
breakpoint$ = this.breakpointObserver.observe([Breakpoints.Large, Breakpoints.Medium, '(max-width: 768px)']);
|
|
347
|
+
ngOnInit() {
|
|
348
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
349
|
+
this.renderer.setAttribute(this.el.nativeElement, 'hidden', '');
|
|
350
|
+
this.breakpoint$.subscribe(() => this.breakpointChanged());
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
breakpointChanged() {
|
|
354
|
+
if (this.breakpointObserver.isMatched(Breakpoints.Large)) {
|
|
355
|
+
this.disableToggle = false;
|
|
356
|
+
// this.renderer.removeAttribute(this.el.nativeElement, 'mini-guide-visible');
|
|
357
|
+
// this.renderer.setAttribute(this.el.nativeElement, 'hidden', '');
|
|
358
|
+
}
|
|
359
|
+
else if (this.breakpointObserver.isMatched(Breakpoints.Medium)) {
|
|
360
|
+
// this.renderer.setAttribute(this.el.nativeElement, 'mini-guide-visible', '');
|
|
361
|
+
// this.renderer.removeAttribute(this.el.nativeElement, 'hidden');
|
|
362
|
+
}
|
|
363
|
+
else if (this.breakpointObserver.isMatched('(max-width: 768px)')) {
|
|
364
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'mini-guide-visible');
|
|
365
|
+
this.renderer.setAttribute(this.el.nativeElement, 'hidden', '');
|
|
366
|
+
this.disableToggle = true;
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
this.disableToggle = false;
|
|
370
|
+
// this.renderer.setAttribute(this.el.nativeElement, 'mini-guide-visible', '');
|
|
371
|
+
// this.renderer.removeAttribute(this.el.nativeElement, 'hidden');
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
open() {
|
|
375
|
+
this.opened = true;
|
|
376
|
+
this.renderer.setAttribute(this.el.nativeElement, 'mini-guide-visible', '');
|
|
377
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'hidden');
|
|
378
|
+
}
|
|
379
|
+
close() {
|
|
380
|
+
this.opened = false;
|
|
381
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'mini-guide-visible');
|
|
382
|
+
this.renderer.setAttribute(this.el.nativeElement, 'hidden', '');
|
|
383
|
+
}
|
|
384
|
+
toggle() {
|
|
385
|
+
if (this.disableToggle) {
|
|
386
|
+
this.close();
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
if (this.opened) {
|
|
390
|
+
this.close();
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this.open();
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MiniGuideComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
397
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MiniGuideComponent, isStandalone: true, selector: "rolatech-mini-guide", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "id": "rolatech-mini-guide" }, classAttribute: "rolatech-mini-guide" }, ngImport: i0, template: "<div id=\"items\" class=\"w-16 mt-[6px]\" style=\"transition-duration: 200ms\">\n @for (item of items(); track $index) {\n <div>\n <a\n id=\"min-guide-endpoint\"\n [routerLink]=\"item.link\"\n routerLinkActive=\"min-guide-active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n #routerLink=\"routerLinkActive\"\n class=\"flex flex-col justify-center items-center py-3 rt-guide-entry\"\n >\n <rolatech-icon [filled]=\"routerLink.isActive\">{{ item.icon }}</rolatech-icon>\n @if (title()) {\n <span class=\"text-xs mt-1 max-w-full truncate\">{{ item.title }}</span>\n }\n </a>\n </div>\n }\n</div>\n", styles: ["rolatech-mini-guide{position:fixed;left:0;top:var(--rt-toolbar-height, 56px);bottom:0;width:var(--rt-mini-guide-width, 72px);box-sizing:border-box;display:inline-block;background-color:var(--rt-base-background, #fff);color:var(--rt-text-primary, #000);z-index:2028;padding:0 4px;scrollbar-width:none;overflow:scroll}.min-guide-active{background-color:#0000000d;border-radius:8px;font-weight:500}#min-guide-endpoint.rt-guide-entry:hover{background-color:var(--rt-drawer-active-background-color);border-radius:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IconComponent, selector: "rolatech-icon", inputs: ["filled"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
398
|
+
}
|
|
399
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MiniGuideComponent, decorators: [{
|
|
400
|
+
type: Component,
|
|
401
|
+
args: [{ selector: 'rolatech-mini-guide', imports: [CommonModule, IconComponent, RouterLink, RouterLinkActive], encapsulation: ViewEncapsulation.None, host: {
|
|
402
|
+
id: 'rolatech-mini-guide',
|
|
403
|
+
class: 'rolatech-mini-guide',
|
|
404
|
+
}, template: "<div id=\"items\" class=\"w-16 mt-[6px]\" style=\"transition-duration: 200ms\">\n @for (item of items(); track $index) {\n <div>\n <a\n id=\"min-guide-endpoint\"\n [routerLink]=\"item.link\"\n routerLinkActive=\"min-guide-active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n #routerLink=\"routerLinkActive\"\n class=\"flex flex-col justify-center items-center py-3 rt-guide-entry\"\n >\n <rolatech-icon [filled]=\"routerLink.isActive\">{{ item.icon }}</rolatech-icon>\n @if (title()) {\n <span class=\"text-xs mt-1 max-w-full truncate\">{{ item.title }}</span>\n }\n </a>\n </div>\n }\n</div>\n", styles: ["rolatech-mini-guide{position:fixed;left:0;top:var(--rt-toolbar-height, 56px);bottom:0;width:var(--rt-mini-guide-width, 72px);box-sizing:border-box;display:inline-block;background-color:var(--rt-base-background, #fff);color:var(--rt-text-primary, #000);z-index:2028;padding:0 4px;scrollbar-width:none;overflow:scroll}.min-guide-active{background-color:#0000000d;border-radius:8px;font-weight:500}#min-guide-endpoint.rt-guide-entry:hover{background-color:var(--rt-drawer-active-background-color);border-radius:10px}\n"] }]
|
|
405
|
+
}] });
|
|
406
|
+
|
|
407
|
+
class AppPageComponent {
|
|
408
|
+
el = inject((ElementRef));
|
|
409
|
+
constructor() { }
|
|
410
|
+
ngOnInit() { }
|
|
411
|
+
ngAfterContentInit() { }
|
|
412
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AppPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
413
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AppPageComponent, isStandalone: true, selector: "rolatech-page", host: { attributes: { "id": "rolatech-page", "ngSkipHydration": "" }, classAttribute: "rolatech-page rt-page" }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: ["rolatech-page[transparent]{opacity:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
414
|
+
}
|
|
415
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AppPageComponent, decorators: [{
|
|
416
|
+
type: Component,
|
|
417
|
+
args: [{ selector: 'rolatech-page', imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
418
|
+
id: 'rolatech-page',
|
|
419
|
+
class: 'rolatech-page rt-page',
|
|
420
|
+
ngSkipHydration: '',
|
|
421
|
+
}, template: "<ng-content></ng-content>\n", styles: ["rolatech-page[transparent]{opacity:0}\n"] }]
|
|
422
|
+
}], ctorParameters: () => [] });
|
|
423
|
+
|
|
424
|
+
const EXTRA_SMALL_WIDTH_BREAKPOINT = 768;
|
|
425
|
+
class LayoutComponent {
|
|
426
|
+
appLayout = inject(APP_LAYOUT);
|
|
427
|
+
viewportRuler = inject(ViewportRuler);
|
|
428
|
+
el = inject((ElementRef));
|
|
429
|
+
renderer = inject(Renderer2);
|
|
430
|
+
_platform = inject(Platform);
|
|
431
|
+
breakpointObserver = inject(BreakpointObserver);
|
|
432
|
+
topbar = contentChild.required(TopbarComponent);
|
|
433
|
+
drawer = contentChild.required(DrawerComponent);
|
|
434
|
+
page = contentChild.required(AppPageComponent);
|
|
435
|
+
guide = contentChild.required(MiniGuideComponent);
|
|
436
|
+
breakpoint$ = this.breakpointObserver
|
|
437
|
+
.observe([Breakpoints.Large, Breakpoints.Medium, '(max-width: 768px)'])
|
|
438
|
+
.pipe(distinctUntilChanged());
|
|
439
|
+
constructor() { }
|
|
440
|
+
ngAfterContentInit() {
|
|
441
|
+
this.renderer.setAttribute(this.page().el.nativeElement, 'transparent', '');
|
|
442
|
+
if (this._platform.isBrowser) {
|
|
443
|
+
this.init();
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
ngOnInit() { }
|
|
447
|
+
open() { }
|
|
448
|
+
close() { }
|
|
449
|
+
toggle() { }
|
|
450
|
+
init() {
|
|
451
|
+
this.renderer.removeAttribute(this.page().el.nativeElement, 'transparent', '');
|
|
452
|
+
if (this.topbar()) {
|
|
453
|
+
this.topbar().appDrawer = this.drawer();
|
|
454
|
+
}
|
|
455
|
+
if (this.appLayout.guide) {
|
|
456
|
+
this.topbar().miniGuide = this.guide();
|
|
457
|
+
}
|
|
458
|
+
if (this.appLayout.guide) {
|
|
459
|
+
this.breakpoint$.subscribe(() => this.breakpointChanged());
|
|
460
|
+
}
|
|
461
|
+
this.breakpointObserver
|
|
462
|
+
.observe(`(max-width: ${EXTRA_SMALL_WIDTH_BREAKPOINT}px)`)
|
|
463
|
+
.pipe(map((result) => result.matches))
|
|
464
|
+
.subscribe({
|
|
465
|
+
next: (res) => {
|
|
466
|
+
if (res) {
|
|
467
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'persistent');
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
this.renderer.setAttribute(this.el.nativeElement, 'persistent', '');
|
|
471
|
+
}
|
|
472
|
+
},
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
breakpointChanged() {
|
|
476
|
+
if (this.breakpointObserver.isMatched(Breakpoints.Large)) {
|
|
477
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'mini-guide-visible');
|
|
478
|
+
}
|
|
479
|
+
else if (this.breakpointObserver.isMatched(Breakpoints.Medium)) {
|
|
480
|
+
this.renderer.setAttribute(this.el.nativeElement, 'mini-guide-visible', '');
|
|
481
|
+
}
|
|
482
|
+
else if (this.breakpointObserver.isMatched('(max-width: 768px)')) {
|
|
483
|
+
this.renderer.removeAttribute(this.el.nativeElement, 'mini-guide-visible');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: LayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
487
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: LayoutComponent, isStandalone: true, selector: "rolatech-layout", host: { attributes: { "id": "rolatech-layout", "ngSkipHydration": "" }, classAttribute: "rolatech-layout" }, queries: [{ propertyName: "topbar", first: true, predicate: TopbarComponent, descendants: true, isSignal: true }, { propertyName: "drawer", first: true, predicate: DrawerComponent, descendants: true, isSignal: true }, { propertyName: "page", first: true, predicate: AppPageComponent, descendants: true, isSignal: true }, { propertyName: "guide", first: true, predicate: MiniGuideComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content select=\"rolatech-topbar\"></ng-content>\n<ng-content select=\"rolatech-drawer\"></ng-content>\n<ng-content select=\"rolatech-mini-guide\"></ng-content>\n<ng-content select=\"rolatech-page\"></ng-content>\n<div class=\"flex-1\"></div>\n<ng-content select=\"rolatech-footer\"></ng-content>\n", styles: ["rolatech-layout{--rt-persistent-guide-width: 256px;--rt-mini-guide-width: 72px;display:flex;flex-direction:column;width:100%;height:100%;background-color:var(--rt-layout-background-color, #fff);color:var(--rt-layout-color, #000)}rolatech-layout rolatech-drawer[persistent][opened][position=top]~rolatech-page{margin-top:56px}rolatech-layout rolatech-drawer[persistent][opened][position=left]~rolatech-page{margin-left:var(--rt-persistent-guide-width)}rolatech-layout rolatech-drawer[persistent][opened][position=right]~rolatech-page{margin-right:var(--rt-persistent-guide-width)}rolatech-layout rolatech-mini-guide[mini-guide-visible]~rolatech-page{margin-left:var(--rt-mini-guide-width)}rolatech-page{display:block;margin-top:56px}rolatech-page[mini-guide-visible] .content{margin-left:72px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatSidenavModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
488
|
+
}
|
|
489
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: LayoutComponent, decorators: [{
|
|
490
|
+
type: Component,
|
|
491
|
+
args: [{ selector: 'rolatech-layout', imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule, MatSidenavModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
492
|
+
id: 'rolatech-layout',
|
|
493
|
+
class: 'rolatech-layout',
|
|
494
|
+
ngSkipHydration: '',
|
|
495
|
+
}, template: "<ng-content select=\"rolatech-topbar\"></ng-content>\n<ng-content select=\"rolatech-drawer\"></ng-content>\n<ng-content select=\"rolatech-mini-guide\"></ng-content>\n<ng-content select=\"rolatech-page\"></ng-content>\n<div class=\"flex-1\"></div>\n<ng-content select=\"rolatech-footer\"></ng-content>\n", styles: ["rolatech-layout{--rt-persistent-guide-width: 256px;--rt-mini-guide-width: 72px;display:flex;flex-direction:column;width:100%;height:100%;background-color:var(--rt-layout-background-color, #fff);color:var(--rt-layout-color, #000)}rolatech-layout rolatech-drawer[persistent][opened][position=top]~rolatech-page{margin-top:56px}rolatech-layout rolatech-drawer[persistent][opened][position=left]~rolatech-page{margin-left:var(--rt-persistent-guide-width)}rolatech-layout rolatech-drawer[persistent][opened][position=right]~rolatech-page{margin-right:var(--rt-persistent-guide-width)}rolatech-layout rolatech-mini-guide[mini-guide-visible]~rolatech-page{margin-left:var(--rt-mini-guide-width)}rolatech-page{display:block;margin-top:56px}rolatech-page[mini-guide-visible] .content{margin-left:72px}\n"] }]
|
|
496
|
+
}], ctorParameters: () => [] });
|
|
497
|
+
|
|
498
|
+
class FooterComponent {
|
|
499
|
+
hostId = 'rolatech-footer';
|
|
500
|
+
hasClass = true;
|
|
501
|
+
config = inject(APP_CONFIG);
|
|
502
|
+
title = input();
|
|
503
|
+
copyright = input('');
|
|
504
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
505
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: FooterComponent, isStandalone: true, selector: "rolatech-footer", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, copyright: { classPropertyName: "copyright", publicName: "copyright", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.hostId", "class.rolatech-footer": "this.hasClass" } }, ngImport: i0, template: "<div class=\"bg-[--rt-base-background] flex flex-col justify-between px-5 md:px-16 py-6\">\n <div class=\"flex flex-col md:flex-row md:gap-10 gap-3 py-3\">\n <ng-content></ng-content>\n </div>\n <div class=\"flex justify-between items-end\">\n <div class=\"cursor-pointer\">\n <a href=\"/\" target=\"_blank\" class=\"text-lg font-bold\">{{ title() }}</a>\n </div>\n <span class=\"text-sm\">\u00A9{{ copyright() }}</span>\n </div>\n</div>\n", styles: [".rolatech-footer{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
506
|
+
}
|
|
507
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FooterComponent, decorators: [{
|
|
508
|
+
type: Component,
|
|
509
|
+
args: [{ selector: 'rolatech-footer', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"bg-[--rt-base-background] flex flex-col justify-between px-5 md:px-16 py-6\">\n <div class=\"flex flex-col md:flex-row md:gap-10 gap-3 py-3\">\n <ng-content></ng-content>\n </div>\n <div class=\"flex justify-between items-end\">\n <div class=\"cursor-pointer\">\n <a href=\"/\" target=\"_blank\" class=\"text-lg font-bold\">{{ title() }}</a>\n </div>\n <span class=\"text-sm\">\u00A9{{ copyright() }}</span>\n </div>\n</div>\n", styles: [".rolatech-footer{width:100%}\n"] }]
|
|
510
|
+
}], propDecorators: { hostId: [{
|
|
511
|
+
type: HostBinding,
|
|
512
|
+
args: ['id']
|
|
513
|
+
}], hasClass: [{
|
|
514
|
+
type: HostBinding,
|
|
515
|
+
args: ['class.rolatech-footer']
|
|
516
|
+
}] } });
|
|
517
|
+
|
|
518
|
+
class ConsoleLayoutComponent {
|
|
519
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ConsoleLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
520
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ConsoleLayoutComponent, isStandalone: true, selector: "rolatech-console-layout", ngImport: i0, template: "<p>console-layout works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
521
|
+
}
|
|
522
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ConsoleLayoutComponent, decorators: [{
|
|
523
|
+
type: Component,
|
|
524
|
+
args: [{ selector: 'rolatech-console-layout', imports: [CommonModule], template: "<p>console-layout works!</p>\n" }]
|
|
525
|
+
}] });
|
|
526
|
+
|
|
527
|
+
class TopbarAvatarMenuComponent {
|
|
528
|
+
environment = inject(APP_CONFIG);
|
|
529
|
+
platformId = inject(PLATFORM_ID);
|
|
530
|
+
menu = input.required();
|
|
531
|
+
avatar = input();
|
|
532
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TopbarAvatarMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
533
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: TopbarAvatarMenuComponent, isStandalone: true, selector: "rolatech-topbar-avatar-menu", inputs: { menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: true, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex\">\n <a\n class=\"flex justify-center items-center rounded-full overflow-hidden cursor-pointer hover:outline-[--rt-raised-background] outline outline-transparent outline-4\"\n [matMenuTriggerFor]=\"menu()\"\n >\n <div class=\"bg-[--rt-brand-color] w-9 h-9\">\n @if (avatar()) {\n <img class=\"w-9 h-9 object-cover\" [src]=\"avatar()\" alt />\n }\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] });
|
|
534
|
+
}
|
|
535
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TopbarAvatarMenuComponent, decorators: [{
|
|
536
|
+
type: Component,
|
|
537
|
+
args: [{ selector: 'rolatech-topbar-avatar-menu', imports: [CommonModule, MatSidenavModule, MatListModule, MatIconModule, MatMenuModule], template: "<div class=\"flex\">\n <a\n class=\"flex justify-center items-center rounded-full overflow-hidden cursor-pointer hover:outline-[--rt-raised-background] outline outline-transparent outline-4\"\n [matMenuTriggerFor]=\"menu()\"\n >\n <div class=\"bg-[--rt-brand-color] w-9 h-9\">\n @if (avatar()) {\n <img class=\"w-9 h-9 object-cover\" [src]=\"avatar()\" alt />\n }\n </div>\n </a>\n</div>\n" }]
|
|
538
|
+
}] });
|
|
539
|
+
|
|
540
|
+
class FolderComponent {
|
|
541
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FolderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
542
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: FolderComponent, isStandalone: true, selector: "rolatech-folder", ngImport: i0, template: "<div></div>\n", styles: [""] });
|
|
543
|
+
}
|
|
544
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FolderComponent, decorators: [{
|
|
545
|
+
type: Component,
|
|
546
|
+
args: [{ selector: 'rolatech-folder', template: "<div></div>\n" }]
|
|
547
|
+
}] });
|
|
548
|
+
|
|
549
|
+
class MediaPreviewDialogComponent {
|
|
550
|
+
data;
|
|
551
|
+
dialogRef;
|
|
552
|
+
selected;
|
|
553
|
+
index = 0;
|
|
554
|
+
prevDisabled = false;
|
|
555
|
+
nextDisabled = false;
|
|
556
|
+
constructor(data, dialogRef) {
|
|
557
|
+
this.data = data;
|
|
558
|
+
this.dialogRef = dialogRef;
|
|
559
|
+
this.data.title = '图片预览';
|
|
560
|
+
}
|
|
561
|
+
ngOnInit() {
|
|
562
|
+
this.selected = this.data.selected;
|
|
563
|
+
this.prevDisabled = this.selected === 0;
|
|
564
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
565
|
+
}
|
|
566
|
+
close() {
|
|
567
|
+
this.dialogRef.close();
|
|
568
|
+
}
|
|
569
|
+
prev() {
|
|
570
|
+
this.selected--;
|
|
571
|
+
this.prevDisabled = this.selected === 0;
|
|
572
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
573
|
+
}
|
|
574
|
+
next() {
|
|
575
|
+
this.selected++;
|
|
576
|
+
this.prevDisabled = this.selected === 0;
|
|
577
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
578
|
+
}
|
|
579
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaPreviewDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
580
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MediaPreviewDialogComponent, isStandalone: true, selector: "rolatech-media-preview-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden overflow-y-auto\">\n <div class=\"p-3 flex justify-center items-center\">\n <img class=\"object-cover\" [src]=\"data.media[selected].url\" alt />\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-between items-center px-5\">\n <button mat-flat-button [disabled]=\"prevDisabled\" (click)=\"prev()\">Prev</button>\n <div>{{ selected + 1 }} / {{ data.media.length }}</div>\n <button mat-flat-button [disabled]=\"nextDisabled\" (click)=\"next()\">Next</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] });
|
|
581
|
+
}
|
|
582
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaPreviewDialogComponent, decorators: [{
|
|
583
|
+
type: Component,
|
|
584
|
+
args: [{ selector: 'rolatech-media-preview-dialog', imports: [MatIconModule, MatDividerModule, MatButtonModule], template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex-1 overflow-hidden overflow-y-auto\">\n <div class=\"p-3 flex justify-center items-center\">\n <img class=\"object-cover\" [src]=\"data.media[selected].url\" alt />\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-between items-center px-5\">\n <button mat-flat-button [disabled]=\"prevDisabled\" (click)=\"prev()\">Prev</button>\n <div>{{ selected + 1 }} / {{ data.media.length }}</div>\n <button mat-flat-button [disabled]=\"nextDisabled\" (click)=\"next()\">Next</button>\n </div>\n</div>\n" }]
|
|
585
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
586
|
+
type: Inject,
|
|
587
|
+
args: [MAT_DIALOG_DATA]
|
|
588
|
+
}] }, { type: i1.MatDialogRef }] });
|
|
589
|
+
|
|
590
|
+
const MAT_MODULE = [
|
|
591
|
+
A11yModule,
|
|
592
|
+
ClipboardModule,
|
|
593
|
+
CdkStepperModule,
|
|
594
|
+
CdkTableModule,
|
|
595
|
+
CdkTreeModule,
|
|
596
|
+
DragDropModule,
|
|
597
|
+
LayoutModule,
|
|
598
|
+
MatAutocompleteModule,
|
|
599
|
+
MatBadgeModule,
|
|
600
|
+
MatBottomSheetModule,
|
|
601
|
+
MatButtonModule,
|
|
602
|
+
MatButtonToggleModule,
|
|
603
|
+
MatCardModule,
|
|
604
|
+
MatCheckboxModule,
|
|
605
|
+
MatChipsModule,
|
|
606
|
+
MatStepperModule,
|
|
607
|
+
MatDatepickerModule,
|
|
608
|
+
MatDialogModule,
|
|
609
|
+
MatDividerModule,
|
|
610
|
+
MatExpansionModule,
|
|
611
|
+
MatGridListModule,
|
|
612
|
+
MatIconModule,
|
|
613
|
+
MatFormFieldModule,
|
|
614
|
+
MatInputModule,
|
|
615
|
+
MatListModule,
|
|
616
|
+
MatMenuModule,
|
|
617
|
+
MatNativeDateModule,
|
|
618
|
+
MatPaginatorModule,
|
|
619
|
+
MatProgressBarModule,
|
|
620
|
+
MatProgressSpinnerModule,
|
|
621
|
+
MatRadioModule,
|
|
622
|
+
MatRippleModule,
|
|
623
|
+
MatSelectModule,
|
|
624
|
+
MatSidenavModule,
|
|
625
|
+
MatSliderModule,
|
|
626
|
+
MatSlideToggleModule,
|
|
627
|
+
MatSnackBarModule,
|
|
628
|
+
MatSortModule,
|
|
629
|
+
MatTableModule,
|
|
630
|
+
MatTabsModule,
|
|
631
|
+
MatToolbarModule,
|
|
632
|
+
MatTooltipModule,
|
|
633
|
+
MatTreeModule,
|
|
634
|
+
PortalModule,
|
|
635
|
+
ScrollingModule,
|
|
636
|
+
];
|
|
637
|
+
class MaterialModule {
|
|
638
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
639
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: MaterialModule, imports: [A11yModule,
|
|
640
|
+
ClipboardModule,
|
|
641
|
+
CdkStepperModule,
|
|
642
|
+
CdkTableModule,
|
|
643
|
+
CdkTreeModule,
|
|
644
|
+
DragDropModule,
|
|
645
|
+
LayoutModule,
|
|
646
|
+
MatAutocompleteModule,
|
|
647
|
+
MatBadgeModule,
|
|
648
|
+
MatBottomSheetModule,
|
|
649
|
+
MatButtonModule,
|
|
650
|
+
MatButtonToggleModule,
|
|
651
|
+
MatCardModule,
|
|
652
|
+
MatCheckboxModule,
|
|
653
|
+
MatChipsModule,
|
|
654
|
+
MatStepperModule,
|
|
655
|
+
MatDatepickerModule,
|
|
656
|
+
MatDialogModule,
|
|
657
|
+
MatDividerModule,
|
|
658
|
+
MatExpansionModule,
|
|
659
|
+
MatGridListModule,
|
|
660
|
+
MatIconModule,
|
|
661
|
+
MatFormFieldModule,
|
|
662
|
+
MatInputModule,
|
|
663
|
+
MatListModule,
|
|
664
|
+
MatMenuModule,
|
|
665
|
+
MatNativeDateModule,
|
|
666
|
+
MatPaginatorModule,
|
|
667
|
+
MatProgressBarModule,
|
|
668
|
+
MatProgressSpinnerModule,
|
|
669
|
+
MatRadioModule,
|
|
670
|
+
MatRippleModule,
|
|
671
|
+
MatSelectModule,
|
|
672
|
+
MatSidenavModule,
|
|
673
|
+
MatSliderModule,
|
|
674
|
+
MatSlideToggleModule,
|
|
675
|
+
MatSnackBarModule,
|
|
676
|
+
MatSortModule,
|
|
677
|
+
MatTableModule,
|
|
678
|
+
MatTabsModule,
|
|
679
|
+
MatToolbarModule,
|
|
680
|
+
MatTooltipModule,
|
|
681
|
+
MatTreeModule,
|
|
682
|
+
PortalModule,
|
|
683
|
+
ScrollingModule], exports: [A11yModule,
|
|
684
|
+
ClipboardModule,
|
|
685
|
+
CdkStepperModule,
|
|
686
|
+
CdkTableModule,
|
|
687
|
+
CdkTreeModule,
|
|
688
|
+
DragDropModule,
|
|
689
|
+
LayoutModule,
|
|
690
|
+
MatAutocompleteModule,
|
|
691
|
+
MatBadgeModule,
|
|
692
|
+
MatBottomSheetModule,
|
|
693
|
+
MatButtonModule,
|
|
694
|
+
MatButtonToggleModule,
|
|
695
|
+
MatCardModule,
|
|
696
|
+
MatCheckboxModule,
|
|
697
|
+
MatChipsModule,
|
|
698
|
+
MatStepperModule,
|
|
699
|
+
MatDatepickerModule,
|
|
700
|
+
MatDialogModule,
|
|
701
|
+
MatDividerModule,
|
|
702
|
+
MatExpansionModule,
|
|
703
|
+
MatGridListModule,
|
|
704
|
+
MatIconModule,
|
|
705
|
+
MatFormFieldModule,
|
|
706
|
+
MatInputModule,
|
|
707
|
+
MatListModule,
|
|
708
|
+
MatMenuModule,
|
|
709
|
+
MatNativeDateModule,
|
|
710
|
+
MatPaginatorModule,
|
|
711
|
+
MatProgressBarModule,
|
|
712
|
+
MatProgressSpinnerModule,
|
|
713
|
+
MatRadioModule,
|
|
714
|
+
MatRippleModule,
|
|
715
|
+
MatSelectModule,
|
|
716
|
+
MatSidenavModule,
|
|
717
|
+
MatSliderModule,
|
|
718
|
+
MatSlideToggleModule,
|
|
719
|
+
MatSnackBarModule,
|
|
720
|
+
MatSortModule,
|
|
721
|
+
MatTableModule,
|
|
722
|
+
MatTabsModule,
|
|
723
|
+
MatToolbarModule,
|
|
724
|
+
MatTooltipModule,
|
|
725
|
+
MatTreeModule,
|
|
726
|
+
PortalModule,
|
|
727
|
+
ScrollingModule] });
|
|
728
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MaterialModule, imports: [MAT_MODULE, A11yModule,
|
|
729
|
+
ClipboardModule,
|
|
730
|
+
CdkStepperModule,
|
|
731
|
+
CdkTableModule,
|
|
732
|
+
CdkTreeModule,
|
|
733
|
+
DragDropModule,
|
|
734
|
+
LayoutModule,
|
|
735
|
+
MatAutocompleteModule,
|
|
736
|
+
MatBadgeModule,
|
|
737
|
+
MatBottomSheetModule,
|
|
738
|
+
MatButtonModule,
|
|
739
|
+
MatButtonToggleModule,
|
|
740
|
+
MatCardModule,
|
|
741
|
+
MatCheckboxModule,
|
|
742
|
+
MatChipsModule,
|
|
743
|
+
MatStepperModule,
|
|
744
|
+
MatDatepickerModule,
|
|
745
|
+
MatDialogModule,
|
|
746
|
+
MatDividerModule,
|
|
747
|
+
MatExpansionModule,
|
|
748
|
+
MatGridListModule,
|
|
749
|
+
MatIconModule,
|
|
750
|
+
MatFormFieldModule,
|
|
751
|
+
MatInputModule,
|
|
752
|
+
MatListModule,
|
|
753
|
+
MatMenuModule,
|
|
754
|
+
MatNativeDateModule,
|
|
755
|
+
MatPaginatorModule,
|
|
756
|
+
MatProgressBarModule,
|
|
757
|
+
MatProgressSpinnerModule,
|
|
758
|
+
MatRadioModule,
|
|
759
|
+
MatRippleModule,
|
|
760
|
+
MatSelectModule,
|
|
761
|
+
MatSidenavModule,
|
|
762
|
+
MatSliderModule,
|
|
763
|
+
MatSlideToggleModule,
|
|
764
|
+
MatSnackBarModule,
|
|
765
|
+
MatSortModule,
|
|
766
|
+
MatTableModule,
|
|
767
|
+
MatTabsModule,
|
|
768
|
+
MatToolbarModule,
|
|
769
|
+
MatTooltipModule,
|
|
770
|
+
MatTreeModule,
|
|
771
|
+
PortalModule,
|
|
772
|
+
ScrollingModule] });
|
|
773
|
+
}
|
|
774
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MaterialModule, decorators: [{
|
|
775
|
+
type: NgModule,
|
|
776
|
+
args: [{
|
|
777
|
+
imports: [...MAT_MODULE],
|
|
778
|
+
exports: [...MAT_MODULE],
|
|
779
|
+
}]
|
|
780
|
+
}] });
|
|
781
|
+
|
|
782
|
+
class AngularComponentsModule {
|
|
783
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
784
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AngularComponentsModule, imports: [MaterialModule], exports: [MaterialModule] });
|
|
785
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AngularComponentsModule, imports: [MaterialModule, MaterialModule] });
|
|
786
|
+
}
|
|
787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AngularComponentsModule, decorators: [{
|
|
788
|
+
type: NgModule,
|
|
789
|
+
args: [{
|
|
790
|
+
imports: [MaterialModule],
|
|
791
|
+
exports: [MaterialModule],
|
|
792
|
+
}]
|
|
793
|
+
}] });
|
|
794
|
+
|
|
795
|
+
class SpinnerComponent {
|
|
796
|
+
title = input();
|
|
797
|
+
isLoading;
|
|
798
|
+
loadingSubscription;
|
|
799
|
+
loadingService = inject(LoadingService);
|
|
800
|
+
_elmRef = inject(ElementRef);
|
|
801
|
+
_changeDetectorRef = inject(ChangeDetectorRef);
|
|
802
|
+
ngAfterViewInit() {
|
|
803
|
+
this._elmRef.nativeElement.style.display = 'none';
|
|
804
|
+
this.loadingSubscription = this.loadingService.loading$.pipe().subscribe((status) => {
|
|
805
|
+
this._elmRef.nativeElement.style.display = status ? 'block' : 'none';
|
|
806
|
+
this._changeDetectorRef.detectChanges();
|
|
807
|
+
this.isLoading = status;
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
ngOnDestroy() {
|
|
811
|
+
if (this.loadingSubscription)
|
|
812
|
+
this.loadingSubscription.unsubscribe();
|
|
813
|
+
}
|
|
814
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
815
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: SpinnerComponent, isStandalone: true, selector: "rolatech-spinner", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"flex justify-center\">\n <div class=\"lds-spinner\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n</div>\n", styles: [".lds-spinner{color:official;display:inline-block;position:relative;width:40px;height:40px}.lds-spinner div{transform-origin:20px 20px;animation:lds-spinner 1.2s linear infinite}.lds-spinner div:after{content:\" \";display:block;position:absolute;top:4px;left:18px;width:4px;height:8px;border-radius:20%;background:#333}.lds-spinner div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.lds-spinner div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.lds-spinner div:nth-child(3){transform:rotate(60deg);animation-delay:-.9s}.lds-spinner div:nth-child(4){transform:rotate(90deg);animation-delay:-.8s}.lds-spinner div:nth-child(5){transform:rotate(120deg);animation-delay:-.7s}.lds-spinner div:nth-child(6){transform:rotate(150deg);animation-delay:-.6s}.lds-spinner div:nth-child(7){transform:rotate(180deg);animation-delay:-.5s}.lds-spinner div:nth-child(8){transform:rotate(210deg);animation-delay:-.4s}.lds-spinner div:nth-child(9){transform:rotate(240deg);animation-delay:-.3s}.lds-spinner div:nth-child(10){transform:rotate(270deg);animation-delay:-.2s}.lds-spinner div:nth-child(11){transform:rotate(300deg);animation-delay:-.1s}.lds-spinner div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes lds-spinner{0%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
816
|
+
}
|
|
817
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SpinnerComponent, decorators: [{
|
|
818
|
+
type: Component,
|
|
819
|
+
args: [{ selector: 'rolatech-spinner', imports: [CommonModule], template: "<div class=\"flex justify-center\">\n <div class=\"lds-spinner\">\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n</div>\n", styles: [".lds-spinner{color:official;display:inline-block;position:relative;width:40px;height:40px}.lds-spinner div{transform-origin:20px 20px;animation:lds-spinner 1.2s linear infinite}.lds-spinner div:after{content:\" \";display:block;position:absolute;top:4px;left:18px;width:4px;height:8px;border-radius:20%;background:#333}.lds-spinner div:nth-child(1){transform:rotate(0);animation-delay:-1.1s}.lds-spinner div:nth-child(2){transform:rotate(30deg);animation-delay:-1s}.lds-spinner div:nth-child(3){transform:rotate(60deg);animation-delay:-.9s}.lds-spinner div:nth-child(4){transform:rotate(90deg);animation-delay:-.8s}.lds-spinner div:nth-child(5){transform:rotate(120deg);animation-delay:-.7s}.lds-spinner div:nth-child(6){transform:rotate(150deg);animation-delay:-.6s}.lds-spinner div:nth-child(7){transform:rotate(180deg);animation-delay:-.5s}.lds-spinner div:nth-child(8){transform:rotate(210deg);animation-delay:-.4s}.lds-spinner div:nth-child(9){transform:rotate(240deg);animation-delay:-.3s}.lds-spinner div:nth-child(10){transform:rotate(270deg);animation-delay:-.2s}.lds-spinner div:nth-child(11){transform:rotate(300deg);animation-delay:-.1s}.lds-spinner div:nth-child(12){transform:rotate(330deg);animation-delay:0s}@keyframes lds-spinner{0%{opacity:1}to{opacity:0}}\n"] }]
|
|
820
|
+
}] });
|
|
821
|
+
|
|
822
|
+
class MediaUploadComponent {
|
|
823
|
+
title = input('上传图片');
|
|
824
|
+
subtitle = input('文件大小');
|
|
825
|
+
description = input('不能超过5MB');
|
|
826
|
+
isUploading = input(false);
|
|
827
|
+
mediaItemClick = output();
|
|
828
|
+
upload = output();
|
|
829
|
+
media = [];
|
|
830
|
+
dialog = inject(MatDialog);
|
|
831
|
+
onMediaItemClick(item) {
|
|
832
|
+
this.mediaItemClick.emit(item);
|
|
833
|
+
}
|
|
834
|
+
onMediaClick(i) {
|
|
835
|
+
const dialogRef = this.dialog.open(MediaPreviewDialogComponent, {
|
|
836
|
+
maxWidth: '80vw',
|
|
837
|
+
maxHeight: '80vh',
|
|
838
|
+
height: '80%',
|
|
839
|
+
width: '80%',
|
|
840
|
+
panelClass: 'full-screen-modal',
|
|
841
|
+
data: {
|
|
842
|
+
media: this.media,
|
|
843
|
+
selected: i,
|
|
844
|
+
},
|
|
845
|
+
});
|
|
846
|
+
dialogRef.afterClosed().subscribe((result) => { });
|
|
847
|
+
}
|
|
848
|
+
onUpload(event) {
|
|
849
|
+
const file = event.target.files[0];
|
|
850
|
+
if (file) {
|
|
851
|
+
const reader = new FileReader();
|
|
852
|
+
reader.readAsDataURL(file);
|
|
853
|
+
reader.onload = () => {
|
|
854
|
+
this.media.push({
|
|
855
|
+
url: reader.result,
|
|
856
|
+
alt: 'upload image',
|
|
857
|
+
});
|
|
858
|
+
const formData = new FormData();
|
|
859
|
+
formData.append('file', file);
|
|
860
|
+
this.upload.emit(formData);
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
865
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MediaUploadComponent, isStandalone: true, selector: "rolatech-media-upload", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, isUploading: { classPropertyName: "isUploading", publicName: "isUploading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaItemClick: "mediaItemClick", upload: "upload" }, ngImport: i0, template: "<div class=\"bg-[--rt-raised-background] rounded p-6 min-h-[320px] flex items-center justify-center\">\n @if (isUploading()) {\n <div class=\"flex flex-col items-center justify-center\">\n <div class=\"p-3\">\n <mat-icon>upload</mat-icon>\n </div>\n <div class=\"flex flex-col items-center justify-center\">\n <div class=\"font-lg font-bold py-3\">{{ title() }}</div>\n <div class=\"font-sm text-[--rt-text-secondary]\">{{ subtitle() }}</div>\n <div class=\"font-sm text-[--rt-text-secondary]\">{{ description() }}</div>\n </div>\n <div class=\"py-2\">\n <input style=\"display: none\" type=\"file\" (change)=\"onUpload($event)\" #fileInput />\n <button mat-flat-button color=\"primary\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u56FE\u7247</button>\n </div>\n </div>\n } @else {\n <rolatech-spinner title=\"\u4E0A\u4F20\u4E2D\"></rolatech-spinner>\n }\n</div>\n<div class=\"flex flex-row\">\n @for (media of media; track $index) {\n <div (click)=\"onMediaClick($index)\" class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer rounded-md\">\n <img class=\"rounded-md aspect-video object-cover w-32\" [src]=\"media.url\" alt />\n </div>\n }\n</div>\n", styles: [".mat-icon{transform:scale(2)}\n"], dependencies: [{ kind: "ngmodule", type: AngularCommonModule }, { kind: "ngmodule", type: AngularComponentsModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SpinnerComponent, selector: "rolatech-spinner", inputs: ["title"] }] });
|
|
866
|
+
}
|
|
867
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaUploadComponent, decorators: [{
|
|
868
|
+
type: Component,
|
|
869
|
+
args: [{ imports: [AngularCommonModule, AngularComponentsModule, SpinnerComponent], selector: 'rolatech-media-upload', template: "<div class=\"bg-[--rt-raised-background] rounded p-6 min-h-[320px] flex items-center justify-center\">\n @if (isUploading()) {\n <div class=\"flex flex-col items-center justify-center\">\n <div class=\"p-3\">\n <mat-icon>upload</mat-icon>\n </div>\n <div class=\"flex flex-col items-center justify-center\">\n <div class=\"font-lg font-bold py-3\">{{ title() }}</div>\n <div class=\"font-sm text-[--rt-text-secondary]\">{{ subtitle() }}</div>\n <div class=\"font-sm text-[--rt-text-secondary]\">{{ description() }}</div>\n </div>\n <div class=\"py-2\">\n <input style=\"display: none\" type=\"file\" (change)=\"onUpload($event)\" #fileInput />\n <button mat-flat-button color=\"primary\" (click)=\"fileInput.click()\">\u4E0A\u4F20\u56FE\u7247</button>\n </div>\n </div>\n } @else {\n <rolatech-spinner title=\"\u4E0A\u4F20\u4E2D\"></rolatech-spinner>\n }\n</div>\n<div class=\"flex flex-row\">\n @for (media of media; track $index) {\n <div (click)=\"onMediaClick($index)\" class=\"inline-flex flex-row mt-3 mr-3 cursor-pointer rounded-md\">\n <img class=\"rounded-md aspect-video object-cover w-32\" [src]=\"media.url\" alt />\n </div>\n }\n</div>\n", styles: [".mat-icon{transform:scale(2)}\n"] }]
|
|
870
|
+
}] });
|
|
871
|
+
|
|
872
|
+
class StorageBucketCreateComponent {
|
|
873
|
+
name = input();
|
|
874
|
+
output = output();
|
|
875
|
+
ngOnInit() { }
|
|
876
|
+
ngDoCheck() {
|
|
877
|
+
this.output.emit(this.name());
|
|
878
|
+
}
|
|
879
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageBucketCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
880
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: StorageBucketCreateComponent, isStandalone: true, selector: "rolatech-storage-bucket-create", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { output: "output" }, ngImport: i0, template: "<div>\n <mat-form-field>\n <mat-label>\u540D\u79F0</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u540D\u79F0\" [(ngModel)]=\"name\" />\n </mat-form-field>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
881
|
+
}
|
|
882
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageBucketCreateComponent, decorators: [{
|
|
883
|
+
type: Component,
|
|
884
|
+
args: [{ selector: 'rolatech-storage-bucket-create', imports: [MatFormFieldModule, MatInputModule, FormsModule], template: "<div>\n <mat-form-field>\n <mat-label>\u540D\u79F0</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u540D\u79F0\" [(ngModel)]=\"name\" />\n </mat-form-field>\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
885
|
+
}] });
|
|
886
|
+
|
|
887
|
+
class StorageFileUploadComponent {
|
|
888
|
+
title = input();
|
|
889
|
+
output = output();
|
|
890
|
+
fileData;
|
|
891
|
+
progressInfos = [];
|
|
892
|
+
isFinished = false;
|
|
893
|
+
isUploaded = false;
|
|
894
|
+
file;
|
|
895
|
+
ngOnInit() { }
|
|
896
|
+
ngDoCheck() {
|
|
897
|
+
this.output.emit({
|
|
898
|
+
title: this.title,
|
|
899
|
+
file: this.file,
|
|
900
|
+
});
|
|
901
|
+
}
|
|
902
|
+
selectFiles(event) {
|
|
903
|
+
this.isFinished = false;
|
|
904
|
+
this.file = event.target.files[0];
|
|
905
|
+
event.target.value = '';
|
|
906
|
+
}
|
|
907
|
+
removeFile() {
|
|
908
|
+
this.file = null;
|
|
909
|
+
}
|
|
910
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageFileUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
911
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: StorageFileUploadComponent, isStandalone: true, selector: "rolatech-storage-file-upload", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { output: "output" }, ngImport: i0, template: "<div>\n <mat-form-field>\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u6807\u9898\" [(ngModel)]=\"title\" />\n </mat-form-field>\n\n <div class=\"mt-2\">\n <input #fileInput class=\"hidden\" type=\"file\" (change)=\"selectFiles($event)\" />\n <button mat-raised-button (click)=\"fileInput.click()\">\u9009\u62E9\u6587\u4EF6</button>\n </div>\n @if (file) {\n <div class=\"p-2 flex justify-between items-center\">\n <div>{{ file.name }}</div>\n <button matSuffix mat-icon-button (click)=\"removeFile()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
912
|
+
}
|
|
913
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageFileUploadComponent, decorators: [{
|
|
914
|
+
type: Component,
|
|
915
|
+
args: [{ selector: 'rolatech-storage-file-upload', imports: [MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule, MatIconModule], template: "<div>\n <mat-form-field>\n <mat-label>\u6807\u9898</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u6807\u9898\" [(ngModel)]=\"title\" />\n </mat-form-field>\n\n <div class=\"mt-2\">\n <input #fileInput class=\"hidden\" type=\"file\" (change)=\"selectFiles($event)\" />\n <button mat-raised-button (click)=\"fileInput.click()\">\u9009\u62E9\u6587\u4EF6</button>\n </div>\n @if (file) {\n <div class=\"p-2 flex justify-between items-center\">\n <div>{{ file.name }}</div>\n <button matSuffix mat-icon-button (click)=\"removeFile()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n }\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
916
|
+
}] });
|
|
917
|
+
|
|
918
|
+
class StorageFolderCreateComponent {
|
|
919
|
+
name = input();
|
|
920
|
+
isPublic = input(true);
|
|
921
|
+
output = output();
|
|
922
|
+
ngOnInit() { }
|
|
923
|
+
ngDoCheck() {
|
|
924
|
+
this.output.emit({ name: this.name(), isPublic: this.isPublic() });
|
|
925
|
+
}
|
|
926
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageFolderCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
927
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: StorageFolderCreateComponent, isStandalone: true, selector: "rolatech-storage-folder-create", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, isPublic: { classPropertyName: "isPublic", publicName: "isPublic", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { output: "output" }, ngImport: i0, template: "<div>\n <mat-form-field>\n <mat-label>\u540D\u79F0</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u540D\u79F0\" [(ngModel)]=\"name\" />\n </mat-form-field>\n <div class=\"flex flex-col\">\n <mat-checkbox [(ngModel)]=\"isPublic\">\u516C\u5F00\u8D44\u6E90</mat-checkbox>\n <span class=\"text-sm text-[--rt-text-secondary] ml-2 mt-1\">\u6587\u4EF6\u5939\u4E3A\u56FE\u7247\u5185\u5BB9\u65F6, \u8BF7\u53D6\u6D88\u52FE\u9009\u6B64\u9879</span>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }] });
|
|
928
|
+
}
|
|
929
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: StorageFolderCreateComponent, decorators: [{
|
|
930
|
+
type: Component,
|
|
931
|
+
args: [{ selector: 'rolatech-storage-folder-create', imports: [MatFormFieldModule, MatInputModule, FormsModule, MatCheckboxModule], template: "<div>\n <mat-form-field>\n <mat-label>\u540D\u79F0</mat-label>\n <input matInput placeholder=\"\u8F93\u5165\u540D\u79F0\" [(ngModel)]=\"name\" />\n </mat-form-field>\n <div class=\"flex flex-col\">\n <mat-checkbox [(ngModel)]=\"isPublic\">\u516C\u5F00\u8D44\u6E90</mat-checkbox>\n <span class=\"text-sm text-[--rt-text-secondary] ml-2 mt-1\">\u6587\u4EF6\u5939\u4E3A\u56FE\u7247\u5185\u5BB9\u65F6, \u8BF7\u53D6\u6D88\u52FE\u9009\u6B64\u9879</span>\n </div>\n</div>\n", styles: ["mat-form-field{width:100%}\n"] }]
|
|
932
|
+
}] });
|
|
933
|
+
|
|
934
|
+
class MenuUserComponent {
|
|
935
|
+
environment = inject(APP_CONFIG);
|
|
936
|
+
myaccountUrl = this.environment.myaccountUrl;
|
|
937
|
+
user = input();
|
|
938
|
+
avatar = computed(() => {
|
|
939
|
+
return this.user().avatar;
|
|
940
|
+
});
|
|
941
|
+
constructor() {
|
|
942
|
+
// effect(() => {
|
|
943
|
+
// this.data = this.user();
|
|
944
|
+
// });
|
|
945
|
+
}
|
|
946
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MenuUserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
947
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MenuUserComponent, isStandalone: true, selector: "rolatech-menu-user", inputs: { user: { classPropertyName: "user", publicName: "user", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"min-w-[256px]\">\n @if (user()) {\n <div class=\"px-6 py-3\">\n <div class=\"flex flex-row items-center\">\n <div class=\"mr-3 w-14 h-14 rounded-full bg-[--rt-brand-color]\">\n @if (user().avatar) {\n <img [src]=\"user().avatar\" class=\"w-14 h-14 object-cover rounded-full\" alt />\n }\n </div>\n <div class=\"flex flex-col\">\n <div>\n <div class=\"text-lg font-bold\">{{ user().name }}</div>\n <div class=\"formated-string\">\n <span>@{{ user().username }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"flex justify-between items-center\">\n <a mat-menu-item [href]=\"myaccountUrl\" target=\"_blank\" class=\"px-6\">\n <span class=\"flex justify-between items-center\">\n <span class=\"pl-2\"> \u7528\u6237\u4E2D\u5FC3 </span>\n <span class=\"flex\"> <mat-icon>open_in_new</mat-icon></span>\n </span>\n </a>\n </div>\n</div>\n", styles: ["rolatech-menu-user{background-color:var(--rt-menu-background, #fff);color:var(--rt-text-primary, #000)}.formated-string{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
948
|
+
}
|
|
949
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MenuUserComponent, decorators: [{
|
|
950
|
+
type: Component,
|
|
951
|
+
args: [{ imports: [MatMenuModule, MatIconModule], selector: 'rolatech-menu-user', encapsulation: ViewEncapsulation.None, template: "<div class=\"min-w-[256px]\">\n @if (user()) {\n <div class=\"px-6 py-3\">\n <div class=\"flex flex-row items-center\">\n <div class=\"mr-3 w-14 h-14 rounded-full bg-[--rt-brand-color]\">\n @if (user().avatar) {\n <img [src]=\"user().avatar\" class=\"w-14 h-14 object-cover rounded-full\" alt />\n }\n </div>\n <div class=\"flex flex-col\">\n <div>\n <div class=\"text-lg font-bold\">{{ user().name }}</div>\n <div class=\"formated-string\">\n <span>@{{ user().username }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"flex justify-between items-center\">\n <a mat-menu-item [href]=\"myaccountUrl\" target=\"_blank\" class=\"px-6\">\n <span class=\"flex justify-between items-center\">\n <span class=\"pl-2\"> \u7528\u6237\u4E2D\u5FC3 </span>\n <span class=\"flex\"> <mat-icon>open_in_new</mat-icon></span>\n </span>\n </a>\n </div>\n</div>\n", styles: ["rolatech-menu-user{background-color:var(--rt-menu-background, #fff);color:var(--rt-text-primary, #000)}.formated-string{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}\n"] }]
|
|
952
|
+
}], ctorParameters: () => [] });
|
|
953
|
+
|
|
954
|
+
class WechatConnectDialogComponent {
|
|
955
|
+
dialogRef = inject(MatDialogRef);
|
|
956
|
+
environment = inject(APP_CONFIG);
|
|
957
|
+
appId = model();
|
|
958
|
+
redirectUri = model('');
|
|
959
|
+
state = model();
|
|
960
|
+
urlSafe;
|
|
961
|
+
sanitizer = inject(DomSanitizer);
|
|
962
|
+
baseUrl = 'https://open.weixin.qq.com/connect/qrconnect';
|
|
963
|
+
loaded = false;
|
|
964
|
+
constructor() {
|
|
965
|
+
effect(() => {
|
|
966
|
+
const href = 'https://cloudcache.tencent-cloud.com/open_proj/proj_qcloud_v2/gateway/login-regist/css/link-wx-login.css';
|
|
967
|
+
// const encodedURI = encodeURI(this.redirectUri());
|
|
968
|
+
const encodedURI = encodeURI('https://accounts.pinxiaoke.cn');
|
|
969
|
+
const src = `${this.baseUrl}?appid=${this.appId()}&response_type=code&self_redirect=true&scope=snsapi_login&href=${href}&redirect_uri=${encodedURI}&state=${this.state()}#wechat_redirect`;
|
|
970
|
+
this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(src);
|
|
971
|
+
this.loaded = true;
|
|
972
|
+
});
|
|
973
|
+
}
|
|
974
|
+
onNoClick() {
|
|
975
|
+
this.dialogRef.close();
|
|
976
|
+
}
|
|
977
|
+
onLogin(event) {
|
|
978
|
+
if (event.origin === this.environment.accountsUrl && event.data.code === 200) {
|
|
979
|
+
this.dialogRef.close();
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: WechatConnectDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
983
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: WechatConnectDialogComponent, isStandalone: true, selector: "rolatech-wechat-connect-dialog", inputs: { appId: { classPropertyName: "appId", publicName: "appId", isSignal: true, isRequired: false, transformFunction: null }, redirectUri: { classPropertyName: "redirectUri", publicName: "redirectUri", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { appId: "appIdChange", redirectUri: "redirectUriChange", state: "stateChange" }, host: { listeners: { "window:message": "onLogin($event)" } }, ngImport: i0, template: "<div class=\"flex flex-col p-3\">\n <div class=\"w-[190px] h-[190px]\">\n @if (loaded) {\n <iframe [src]=\"urlSafe\" class=\"w-full h-full inline\" scrolling=\"no\" frameBorder=\"no\"></iframe>\n }\n </div>\n</div>\n", styles: ["*{margin:0;padding:0}.normalPanel .panelContent{width:188px;height:188px}.normalPanel .wrp_code{position:relative;width:188px;height:188px;margin:0}.impowerBox .title,.normalPanel .info{display:none}.impowerBox .qrcode{margin-top:0;border:0;width:188px;height:188px}#MAXIM{content:\"veg20170418191511\"}mat-mdc-dialog-content mdc-dialog__content{padding:0}\n"] });
|
|
984
|
+
}
|
|
985
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: WechatConnectDialogComponent, decorators: [{
|
|
986
|
+
type: Component,
|
|
987
|
+
args: [{ selector: 'rolatech-wechat-connect-dialog', template: "<div class=\"flex flex-col p-3\">\n <div class=\"w-[190px] h-[190px]\">\n @if (loaded) {\n <iframe [src]=\"urlSafe\" class=\"w-full h-full inline\" scrolling=\"no\" frameBorder=\"no\"></iframe>\n }\n </div>\n</div>\n", styles: ["*{margin:0;padding:0}.normalPanel .panelContent{width:188px;height:188px}.normalPanel .wrp_code{position:relative;width:188px;height:188px;margin:0}.impowerBox .title,.normalPanel .info{display:none}.impowerBox .qrcode{margin-top:0;border:0;width:188px;height:188px}#MAXIM{content:\"veg20170418191511\"}mat-mdc-dialog-content mdc-dialog__content{padding:0}\n"] }]
|
|
988
|
+
}], ctorParameters: () => [], propDecorators: { onLogin: [{
|
|
989
|
+
type: HostListener,
|
|
990
|
+
args: ['window:message', ['$event']]
|
|
991
|
+
}] } });
|
|
992
|
+
|
|
993
|
+
class MediaUploadDialogComponent {
|
|
994
|
+
dialogRef;
|
|
995
|
+
data;
|
|
996
|
+
mediaService;
|
|
997
|
+
fileData;
|
|
998
|
+
progressInfos = [];
|
|
999
|
+
media = [];
|
|
1000
|
+
preMedia = [];
|
|
1001
|
+
isFinished = false;
|
|
1002
|
+
isUploaded = false;
|
|
1003
|
+
constructor(dialogRef, data, mediaService) {
|
|
1004
|
+
this.dialogRef = dialogRef;
|
|
1005
|
+
this.data = data;
|
|
1006
|
+
this.mediaService = mediaService;
|
|
1007
|
+
}
|
|
1008
|
+
ngOnInit() { }
|
|
1009
|
+
selectFiles(event) {
|
|
1010
|
+
this.isFinished = false;
|
|
1011
|
+
for (const file of event.target.files) {
|
|
1012
|
+
this.addImage(file);
|
|
1013
|
+
}
|
|
1014
|
+
event.target.value = '';
|
|
1015
|
+
}
|
|
1016
|
+
addImage(file) {
|
|
1017
|
+
const reader = new FileReader();
|
|
1018
|
+
reader.readAsDataURL(file);
|
|
1019
|
+
reader.onload = () => {
|
|
1020
|
+
this.preMedia.push({
|
|
1021
|
+
url: reader.result,
|
|
1022
|
+
alt: 'upload image',
|
|
1023
|
+
isUploading: false,
|
|
1024
|
+
isUploaded: false,
|
|
1025
|
+
file: file,
|
|
1026
|
+
});
|
|
1027
|
+
};
|
|
1028
|
+
reader.onerror = (error) => { };
|
|
1029
|
+
}
|
|
1030
|
+
removeImage(index) {
|
|
1031
|
+
this.preMedia.splice(index, 1);
|
|
1032
|
+
}
|
|
1033
|
+
uploadFiles() {
|
|
1034
|
+
for (let i = 0; i < this.preMedia.length; i++) {
|
|
1035
|
+
if (!this.preMedia[i].isUploaded) {
|
|
1036
|
+
this.upload(i, this.preMedia[i].file);
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
upload(idx, file) {
|
|
1041
|
+
this.progressInfos[idx] = { value: 0, fileName: file.name };
|
|
1042
|
+
const formData = new FormData();
|
|
1043
|
+
formData.append('file', file);
|
|
1044
|
+
this.preMedia[idx].isUploading = true;
|
|
1045
|
+
formData.append('groupId', this.data.groupId);
|
|
1046
|
+
this.mediaService.uploadAndSave(formData).subscribe({
|
|
1047
|
+
next: (res) => {
|
|
1048
|
+
this.media.push(res.data);
|
|
1049
|
+
this.preMedia[idx].isUploading = false;
|
|
1050
|
+
this.preMedia[idx].isUploaded = true;
|
|
1051
|
+
this.progressInfos[idx].value = 100;
|
|
1052
|
+
const tmp = this.progressInfos.filter((item) => item.value !== 100);
|
|
1053
|
+
if (tmp.length <= 0) {
|
|
1054
|
+
this.isFinished = true;
|
|
1055
|
+
}
|
|
1056
|
+
},
|
|
1057
|
+
error: (error) => {
|
|
1058
|
+
this.progressInfos[idx].value = 0;
|
|
1059
|
+
},
|
|
1060
|
+
});
|
|
1061
|
+
}
|
|
1062
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaUploadDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2$3.MediaService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1063
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MediaUploadDialogComponent, isStandalone: true, selector: "rolatech-media-upload-dialog", ngImport: i0, template: "<mat-dialog-content>\n <div class=\"border-dashed border-2 border-[--rt-border-color] py-12 flex flex-col justify-center items-center\">\n <input #fileInput multiple class=\"hidden\" type=\"file\" (change)=\"selectFiles($event)\" />\n <button mat-button (click)=\"fileInput.click()\">\u4E0A\u4F20\u56FE\u7247</button>\n </div>\n <div class=\"mt-4\">\n <h2 class=\"\">\u9884\u89C8</h2>\n <div>\n <ul id=\"gallery\" class=\"flex flex-1 flex-wrap -m-1\">\n @for (item of preMedia; track item.url; let i = $index) {\n <li class=\"block p-1 w-1/2 sm:w-1/3 md:w-1/4 lg:w-1/6 xl:w-1/8 h-24\">\n <article\n tabindex=\"0\"\n [ngClass]=\"item.isUploading ? 'isUploading' : ''\"\n class=\"group hasImage w-full h-full rounded-md focus:outline-none focus:shadow-outline bg-[--rt-raised-background] cursor-pointer relative text-transparent hover:text-white shadow-sm\"\n >\n <img [src]=\"item.url\" class=\"img-preview w-full h-full sticky object-cover rounded-md bg-fixed\" alt />\n <section class=\"flex flex-col rounded-md text-xs break-words w-full h-full z-20 absolute top-0 py-2 px-3\">\n @if (item.isUploading) {\n <div class=\"flex justify-center items-center w-full h-full\">\n <mat-spinner color=\"white\" diameter=\"28\"></mat-spinner>\n </div>\n } @else {\n <div class=\"flex\">\n <button\n (click)=\"removeImage(i)\"\n class=\"delete ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1 rounded-md\"\n >\n <svg\n class=\"pointer-events-none fill-current w-4 h-4 ml-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n class=\"pointer-events-none\"\n d=\"M3 6l3 18h12l3-18h-18zm19-4v2h-20v-2h5.711c.9 0 1.631-1.099 1.631-2h5.316c0 .901.73 2 1.631 2h5.711z\"\n />\n </svg>\n </button>\n </div>\n }\n </section>\n </article>\n </li>\n }\n </ul>\n </div>\n @if (preMedia.length <= 0) {\n <div class=\"flex flex-1 flex-wrap\">\n <div class=\"h-full w-full text-center flex flex-col justify-center items-center py-6\">\n <span class=\"text-small text-[--rt-text-secondary]\">No files selected</span>\n </div>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n @if (preMedia.length <= 0) {\n <button mat-button>\u7B49\u5F85\u9009\u62E9</button>\n }\n @if (!isFinished && preMedia.length > 0) {\n <button mat-button (click)=\"uploadFiles()\">\u7ACB\u523B\u4E0A\u4F20</button>\n }\n @if (isFinished) {\n <button mat-button [mat-dialog-close]=\"media\">\u5B8C\u6210</button>\n }\n</mat-dialog-actions>\n", styles: [".hasImage:hover section{background-color:#05050566}.hasImage:hover button:hover{background:#05050573}.isUploading section{background-color:#05050566}\n"], dependencies: [{ kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4$2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
1064
|
+
}
|
|
1065
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaUploadDialogComponent, decorators: [{
|
|
1066
|
+
type: Component,
|
|
1067
|
+
args: [{ selector: 'rolatech-media-upload-dialog', imports: [MatDialogContent, MatButtonModule, NgClass, MatProgressSpinnerModule, MatDialogActions, MatDialogClose], template: "<mat-dialog-content>\n <div class=\"border-dashed border-2 border-[--rt-border-color] py-12 flex flex-col justify-center items-center\">\n <input #fileInput multiple class=\"hidden\" type=\"file\" (change)=\"selectFiles($event)\" />\n <button mat-button (click)=\"fileInput.click()\">\u4E0A\u4F20\u56FE\u7247</button>\n </div>\n <div class=\"mt-4\">\n <h2 class=\"\">\u9884\u89C8</h2>\n <div>\n <ul id=\"gallery\" class=\"flex flex-1 flex-wrap -m-1\">\n @for (item of preMedia; track item.url; let i = $index) {\n <li class=\"block p-1 w-1/2 sm:w-1/3 md:w-1/4 lg:w-1/6 xl:w-1/8 h-24\">\n <article\n tabindex=\"0\"\n [ngClass]=\"item.isUploading ? 'isUploading' : ''\"\n class=\"group hasImage w-full h-full rounded-md focus:outline-none focus:shadow-outline bg-[--rt-raised-background] cursor-pointer relative text-transparent hover:text-white shadow-sm\"\n >\n <img [src]=\"item.url\" class=\"img-preview w-full h-full sticky object-cover rounded-md bg-fixed\" alt />\n <section class=\"flex flex-col rounded-md text-xs break-words w-full h-full z-20 absolute top-0 py-2 px-3\">\n @if (item.isUploading) {\n <div class=\"flex justify-center items-center w-full h-full\">\n <mat-spinner color=\"white\" diameter=\"28\"></mat-spinner>\n </div>\n } @else {\n <div class=\"flex\">\n <button\n (click)=\"removeImage(i)\"\n class=\"delete ml-auto focus:outline-none hover:bg-[--rt-base-background] p-1 rounded-md\"\n >\n <svg\n class=\"pointer-events-none fill-current w-4 h-4 ml-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n class=\"pointer-events-none\"\n d=\"M3 6l3 18h12l3-18h-18zm19-4v2h-20v-2h5.711c.9 0 1.631-1.099 1.631-2h5.316c0 .901.73 2 1.631 2h5.711z\"\n />\n </svg>\n </button>\n </div>\n }\n </section>\n </article>\n </li>\n }\n </ul>\n </div>\n @if (preMedia.length <= 0) {\n <div class=\"flex flex-1 flex-wrap\">\n <div class=\"h-full w-full text-center flex flex-col justify-center items-center py-6\">\n <span class=\"text-small text-[--rt-text-secondary]\">No files selected</span>\n </div>\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n @if (preMedia.length <= 0) {\n <button mat-button>\u7B49\u5F85\u9009\u62E9</button>\n }\n @if (!isFinished && preMedia.length > 0) {\n <button mat-button (click)=\"uploadFiles()\">\u7ACB\u523B\u4E0A\u4F20</button>\n }\n @if (isFinished) {\n <button mat-button [mat-dialog-close]=\"media\">\u5B8C\u6210</button>\n }\n</mat-dialog-actions>\n", styles: [".hasImage:hover section{background-color:#05050566}.hasImage:hover button:hover{background:#05050573}.isUploading section{background-color:#05050566}\n"] }]
|
|
1068
|
+
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
1069
|
+
type: Inject,
|
|
1070
|
+
args: [MAT_DIALOG_DATA]
|
|
1071
|
+
}] }, { type: i2$3.MediaService }] });
|
|
1072
|
+
|
|
1073
|
+
class MediaListComponent {
|
|
1074
|
+
isUploading = input();
|
|
1075
|
+
media = input();
|
|
1076
|
+
showAdd = input(true);
|
|
1077
|
+
mediaItemClick = output();
|
|
1078
|
+
upload = output();
|
|
1079
|
+
onMediaItemClick(item) {
|
|
1080
|
+
this.mediaItemClick.emit(item);
|
|
1081
|
+
}
|
|
1082
|
+
onUpload(event) {
|
|
1083
|
+
this.upload.emit(event);
|
|
1084
|
+
}
|
|
1085
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1086
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: MediaListComponent, isStandalone: true, selector: "rolatech-media-list", inputs: { isUploading: { classPropertyName: "isUploading", publicName: "isUploading", isSignal: true, isRequired: false, transformFunction: null }, media: { classPropertyName: "media", publicName: "media", isSignal: true, isRequired: false, transformFunction: null }, showAdd: { classPropertyName: "showAdd", publicName: "showAdd", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaItemClick: "mediaItemClick", upload: "upload" }, ngImport: i0, template: "<div class=\"flex flex-row flex-wrap box-border items-center\">\n <div class=\"progress-bar\">\n @if (isUploading()) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n <div class=\"flex flex-row flex-wrap box-border items-center gap-2\">\n <ng-content></ng-content>\n <div>\n <input style=\"display: none\" type=\"file\" accept=\"image/*, video/*\" (change)=\"onUpload($event)\" #fileInput />\n @if (showAdd()) {\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 }\n </div>\n </div>\n</div>\n", styles: [".progress-bar{display:block;min-height:6px;width:100%;padding:4px 0}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:80px;width:80px;object-fit:contain;cursor:pointer;padding:6px;position:relative;box-sizing:border-box}rolatech-media-list-item:before{border-radius:12px}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
|
|
1087
|
+
}
|
|
1088
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaListComponent, decorators: [{
|
|
1089
|
+
type: Component,
|
|
1090
|
+
args: [{ selector: 'rolatech-media-list', imports: [MatProgressBarModule], template: "<div class=\"flex flex-row flex-wrap box-border items-center\">\n <div class=\"progress-bar\">\n @if (isUploading()) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </div>\n <div class=\"flex flex-row flex-wrap box-border items-center gap-2\">\n <ng-content></ng-content>\n <div>\n <input style=\"display: none\" type=\"file\" accept=\"image/*, video/*\" (change)=\"onUpload($event)\" #fileInput />\n @if (showAdd()) {\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 }\n </div>\n </div>\n</div>\n", styles: [".progress-bar{display:block;min-height:6px;width:100%;padding:4px 0}.add-button{cursor:pointer;position:relative;box-sizing:border-box;padding:2px}.tile-media{height:80px;width:80px;object-fit:contain;cursor:pointer;padding:6px;position:relative;box-sizing:border-box}rolatech-media-list-item:before{border-radius:12px}\n"] }]
|
|
1091
|
+
}] });
|
|
1092
|
+
|
|
1093
|
+
class MediaListItemComponent {
|
|
1094
|
+
media = input.required();
|
|
1095
|
+
uploadProgress = input(0);
|
|
1096
|
+
mediaItemClick = output();
|
|
1097
|
+
deleteMedia = output();
|
|
1098
|
+
onMediaItemClick(event) {
|
|
1099
|
+
this.mediaItemClick.emit(event);
|
|
1100
|
+
}
|
|
1101
|
+
onDeleteMedia(media) {
|
|
1102
|
+
this.deleteMedia.emit(media);
|
|
1103
|
+
}
|
|
1104
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1105
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: MediaListItemComponent, isStandalone: true, selector: "rolatech-media-list-item", inputs: { media: { classPropertyName: "media", publicName: "media", isSignal: true, isRequired: true, transformFunction: null }, uploadProgress: { classPropertyName: "uploadProgress", publicName: "uploadProgress", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mediaItemClick: "mediaItemClick", deleteMedia: "deleteMedia" }, ngImport: i0, template: "<div\n class=\"media-list-item relative hasImage focus:outline-none focus:shadow-outline bg-[--rt-raised-background] cursor-pointer text-transparent hover:text-white shadow-sm\"\n>\n <div class=\"absolute z-30 right-0\">\n <div class=\"flex-1\"></div>\n <div>\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(media())\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n <div id=\"thumbnail\" class=\"thumbnail\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media().url\" [alt]=\"media().alt\" />\n </div>\n <section\n (click)=\"onMediaItemClick(media())\"\n class=\"flex flex-col text-xs break-words w-full h-full z-20 absolute top-0\"\n ></section>\n</div>\n", styles: [".media-list-item{cursor:pointer;box-sizing:border-box;height:128px;width:228px;display:inline-block;display:block;position:relative;flex:none}.tile-media{height:100%;width:100%;object-fit:cover;display:inline-block;background-color:transparent}#thumbnail.thumbnail{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block;position:absolute;border-radius:8px;inset:0}.hasImage:hover section{background-color:#05050566}.hasImage:hover button:hover{background:#05050573}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.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: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.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: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
1106
|
+
}
|
|
1107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaListItemComponent, decorators: [{
|
|
1108
|
+
type: Component,
|
|
1109
|
+
args: [{ selector: 'rolatech-media-list-item', imports: [MatButtonModule, MatMenuModule, MatIconModule], template: "<div\n class=\"media-list-item relative hasImage focus:outline-none focus:shadow-outline bg-[--rt-raised-background] cursor-pointer text-transparent hover:text-white shadow-sm\"\n>\n <div class=\"absolute z-30 right-0\">\n <div class=\"flex-1\"></div>\n <div>\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(media())\">\n <span>\u5220\u9664</span>\n </button>\n </mat-menu>\n </div>\n </div>\n <div id=\"thumbnail\" class=\"thumbnail\">\n <img class=\"tile-media\" (click)=\"onMediaItemClick(media)\" [src]=\"media().url\" [alt]=\"media().alt\" />\n </div>\n <section\n (click)=\"onMediaItemClick(media())\"\n class=\"flex flex-col text-xs break-words w-full h-full z-20 absolute top-0\"\n ></section>\n</div>\n", styles: [".media-list-item{cursor:pointer;box-sizing:border-box;height:128px;width:228px;display:inline-block;display:block;position:relative;flex:none}.tile-media{height:100%;width:100%;object-fit:cover;display:inline-block;background-color:transparent}#thumbnail.thumbnail{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block;position:absolute;border-radius:8px;inset:0}.hasImage:hover section{background-color:#05050566}.hasImage:hover button:hover{background:#05050573}\n"] }]
|
|
1110
|
+
}] });
|
|
1111
|
+
|
|
1112
|
+
class NotFoundComponent {
|
|
1113
|
+
router;
|
|
1114
|
+
url;
|
|
1115
|
+
constructor(router) {
|
|
1116
|
+
this.router = router;
|
|
1117
|
+
router.events.pipe(filter((e) => e instanceof RouterEvent)).subscribe((e) => {
|
|
1118
|
+
if (e instanceof NavigationEnd) {
|
|
1119
|
+
this.url = e.url;
|
|
1120
|
+
}
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
ngOnInit() {
|
|
1124
|
+
this.router.events.pipe(filter((e) => e instanceof RouterEvent)).subscribe((e) => {
|
|
1125
|
+
if (e instanceof NavigationEnd) {
|
|
1126
|
+
this.url = e.url;
|
|
1127
|
+
}
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NotFoundComponent, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
1131
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: NotFoundComponent, isStandalone: true, selector: "rolatech-not-found", ngImport: i0, template: "<div class=\"not-found-content\">\n <p>\n <b>404.</b>\n <ins>That\u2019s an error.</ins>\n </p>\n <p>\n The requested URL <code>{{ url }}</code> not found on this server.\n </p>\n <a href=\"/\">return home</a>\n</div>\n", styles: [":host{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}.not-found-content{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}\n"] });
|
|
1132
|
+
}
|
|
1133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NotFoundComponent, decorators: [{
|
|
1134
|
+
type: Component,
|
|
1135
|
+
args: [{ selector: 'rolatech-not-found', template: "<div class=\"not-found-content\">\n <p>\n <b>404.</b>\n <ins>That\u2019s an error.</ins>\n </p>\n <p>\n The requested URL <code>{{ url }}</code> not found on this server.\n </p>\n <a href=\"/\">return home</a>\n</div>\n", styles: [":host{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}.not-found-content{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}\n"] }]
|
|
1136
|
+
}], ctorParameters: () => [{ type: i1$3.Router }] });
|
|
1137
|
+
|
|
1138
|
+
class ConfirmationDialogComponent {
|
|
1139
|
+
data = inject(MAT_DIALOG_DATA);
|
|
1140
|
+
dialogRef;
|
|
1141
|
+
onNoClick() {
|
|
1142
|
+
this.dialogRef.close();
|
|
1143
|
+
}
|
|
1144
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ConfirmationDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1145
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ConfirmationDialogComponent, isStandalone: true, selector: "rolatech-confirmation-dialog", ngImport: i0, template: "@if (data.title) {\n <h2 mat-dialog-title>{{ data.title }}</h2>\n}\n<div mat-dialog-content>\n {{ data.message }}\n</div>\n<div mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"true\" cdkFocusInitial>\u786E\u5B9A</button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }] });
|
|
1146
|
+
}
|
|
1147
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ConfirmationDialogComponent, decorators: [{
|
|
1148
|
+
type: Component,
|
|
1149
|
+
args: [{ selector: 'rolatech-confirmation-dialog', imports: [MatDialogTitle, MatDialogContent, MatDialogActions, MatButtonModule, MatDialogClose], template: "@if (data.title) {\n <h2 mat-dialog-title>{{ data.title }}</h2>\n}\n<div mat-dialog-content>\n {{ data.message }}\n</div>\n<div mat-dialog-actions align=\"end\">\n <button mat-button mat-dialog-close>\u53D6\u6D88</button>\n <button mat-button [mat-dialog-close]=\"true\" cdkFocusInitial>\u786E\u5B9A</button>\n</div>\n" }]
|
|
1150
|
+
}] });
|
|
1151
|
+
|
|
1152
|
+
class FilterComponent {
|
|
1153
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1154
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: FilterComponent, isStandalone: true, selector: "rolatech-filter", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1155
|
+
}
|
|
1156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FilterComponent, decorators: [{
|
|
1157
|
+
type: Component,
|
|
1158
|
+
args: [{ selector: 'rolatech-filter', imports: [CommonModule], template: "<ng-content></ng-content>\n" }]
|
|
1159
|
+
}] });
|
|
1160
|
+
|
|
1161
|
+
class BaseComponent {
|
|
1162
|
+
route = inject(ActivatedRoute);
|
|
1163
|
+
router = inject(Router);
|
|
1164
|
+
id = this.route.snapshot.params['id'];
|
|
1165
|
+
dialogService = inject(DialogService);
|
|
1166
|
+
dialog = inject(MatDialog);
|
|
1167
|
+
snackBarService = inject(SnackBarService);
|
|
1168
|
+
titleService = inject(Title);
|
|
1169
|
+
navigation = inject(NavigationService);
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
class TableComponent {
|
|
1173
|
+
dataSource = input.required();
|
|
1174
|
+
displayedColumns = [];
|
|
1175
|
+
ngOnInit() {
|
|
1176
|
+
this.displayedColumns = map$1(this.dataSource().columns, 'ref');
|
|
1177
|
+
}
|
|
1178
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1179
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: TableComponent, isStandalone: true, selector: "rolatech-table", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<table mat-table [dataSource]=\"dataSource().data\">\n @for (column of dataSource().columns; track $index) {\n <ng-container [matColumnDef]=\"column.ref\" sticky>\n <th mat-header-cell *matHeaderCellDef>{{ column.name }}</th>\n <td mat-cell *matCellDef=\"let item\">{{ item[column.ref] }}</td>\n </ng-container>\n }\n <!-- <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">\u8BE6\u60C5</th>\n <td mat-cell *matCellDef=\"let item\" class=\"actions\">\n <a [routerLink]=\"['../', item.id]\"> \u8BE6\u60C5 </a>\n </td>\n </ng-container> -->\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n</table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: RouterModule }] });
|
|
1180
|
+
}
|
|
1181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TableComponent, decorators: [{
|
|
1182
|
+
type: Component,
|
|
1183
|
+
args: [{ selector: 'rolatech-table', imports: [CommonModule, MatTableModule, RouterModule], template: "<table mat-table [dataSource]=\"dataSource().data\">\n @for (column of dataSource().columns; track $index) {\n <ng-container [matColumnDef]=\"column.ref\" sticky>\n <th mat-header-cell *matHeaderCellDef>{{ column.name }}</th>\n <td mat-cell *matCellDef=\"let item\">{{ item[column.ref] }}</td>\n </ng-container>\n }\n <!-- <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions\">\u8BE6\u60C5</th>\n <td mat-cell *matCellDef=\"let item\" class=\"actions\">\n <a [routerLink]=\"['../', item.id]\"> \u8BE6\u60C5 </a>\n </td>\n </ng-container> -->\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n</table>\n" }]
|
|
1184
|
+
}] });
|
|
1185
|
+
|
|
1186
|
+
class PaginatorComponent {
|
|
1187
|
+
prevClick() { }
|
|
1188
|
+
nextClick() { }
|
|
1189
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1190
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: PaginatorComponent, isStandalone: true, selector: "rolatech-paginator", ngImport: i0, template: "<div class=\"flex h-14 items-center\">\n <button mat-icon-button (click)=\"prevClick()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div></div>\n <button mat-icon-button (click)=\"nextClick()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1191
|
+
}
|
|
1192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PaginatorComponent, decorators: [{
|
|
1193
|
+
type: Component,
|
|
1194
|
+
args: [{ selector: 'rolatech-paginator', imports: [CommonModule, MatButtonModule, MatIconModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex h-14 items-center\">\n <button mat-icon-button (click)=\"prevClick()\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <div></div>\n <button mat-icon-button (click)=\"nextClick()\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n</div>\n" }]
|
|
1195
|
+
}] });
|
|
1196
|
+
|
|
1197
|
+
class MediaPreviewComponent {
|
|
1198
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1199
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: MediaPreviewComponent, isStandalone: true, selector: "rolatech-media-preview", ngImport: i0, template: "<p>media-preview works!</p>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1200
|
+
}
|
|
1201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: MediaPreviewComponent, decorators: [{
|
|
1202
|
+
type: Component,
|
|
1203
|
+
args: [{ selector: 'rolatech-media-preview', imports: [CommonModule], template: "<p>media-preview works!</p>\n" }]
|
|
1204
|
+
}] });
|
|
1205
|
+
|
|
1206
|
+
class ToolbarComponent {
|
|
1207
|
+
hasId = 'rolatech-toolbar';
|
|
1208
|
+
hasClass = true;
|
|
1209
|
+
title = input();
|
|
1210
|
+
subtitle = input();
|
|
1211
|
+
back = input(false, { transform: booleanAttribute });
|
|
1212
|
+
link = input('');
|
|
1213
|
+
large = input(false, { transform: booleanAttribute });
|
|
1214
|
+
divider = input(false, { transform: booleanAttribute });
|
|
1215
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1216
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ToolbarComponent, isStandalone: true, selector: "rolatech-toolbar", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, back: { classPropertyName: "back", publicName: "back", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null }, large: { classPropertyName: "large", publicName: "large", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.hasId", "class.rolatech-toolbar": "this.hasClass" } }, ngImport: i0, template: "<div class=\"flex justify-between items-center\" [ngClass]=\"subtitle() ? 'h-16' : 'h-14'\">\n <ng-container>\n @if (back()) {\n <rolatech-icon-button rolatechBackButton class=\"left-button\">arrow_back</rolatech-icon-button>\n }\n @if (link()) {\n <rolatech-icon-button [routerLink]=\"link()\" class=\"left-button\">arrow_back</rolatech-icon-button>\n }\n </ng-container>\n @if (title()) {\n @if (large()) {\n <span class=\"text-2xl font-medium\">{{ title() }}</span>\n } @else {\n <span class=\"text-xl font-medium\">{{ title() }}</span>\n }\n }\n <div class=\"flex-1\"></div>\n <div class=\"flex justify-center items-center\">\n <ng-content></ng-content>\n </div>\n</div>\n@if (subtitle()) {\n <div class=\"-mt-4 mb-2 leading-none\" [ngClass]=\"back() || link() ? 'ml-[40px]' : ''\">\n <span class=\"text-sm text-[--rt-text-secondary]\">{{ subtitle() }}</span>\n </div>\n}\n@if (divider()) {\n <mat-divider></mat-divider>\n}\n", styles: ["rolatech-toolbar{display:block;padding-left:var(--rt-toolbar-padding-left, 16px);padding-right:var(--rt-toolbar-padding-right, 16px);background-color:var(--rt-base-background, #fff);border-radius:var(--rt-toolbar-border-radius, 0px);color:var(--rt-text-primary, #000)}rolatech-toolbar:has(.left-button){--rt-toolbar-padding-left: 8px;--rt-toolbar-padding-right: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: IconButtonComponent, selector: "rolatech-icon-button" }, { kind: "directive", type: BackButtonDirective, selector: "[rolatechBackButton]" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1217
|
+
}
|
|
1218
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ToolbarComponent, decorators: [{
|
|
1219
|
+
type: Component,
|
|
1220
|
+
args: [{ selector: 'rolatech-toolbar', imports: [CommonModule, RouterLink, IconButtonComponent, BackButtonDirective, MatDivider], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex justify-between items-center\" [ngClass]=\"subtitle() ? 'h-16' : 'h-14'\">\n <ng-container>\n @if (back()) {\n <rolatech-icon-button rolatechBackButton class=\"left-button\">arrow_back</rolatech-icon-button>\n }\n @if (link()) {\n <rolatech-icon-button [routerLink]=\"link()\" class=\"left-button\">arrow_back</rolatech-icon-button>\n }\n </ng-container>\n @if (title()) {\n @if (large()) {\n <span class=\"text-2xl font-medium\">{{ title() }}</span>\n } @else {\n <span class=\"text-xl font-medium\">{{ title() }}</span>\n }\n }\n <div class=\"flex-1\"></div>\n <div class=\"flex justify-center items-center\">\n <ng-content></ng-content>\n </div>\n</div>\n@if (subtitle()) {\n <div class=\"-mt-4 mb-2 leading-none\" [ngClass]=\"back() || link() ? 'ml-[40px]' : ''\">\n <span class=\"text-sm text-[--rt-text-secondary]\">{{ subtitle() }}</span>\n </div>\n}\n@if (divider()) {\n <mat-divider></mat-divider>\n}\n", styles: ["rolatech-toolbar{display:block;padding-left:var(--rt-toolbar-padding-left, 16px);padding-right:var(--rt-toolbar-padding-right, 16px);background-color:var(--rt-base-background, #fff);border-radius:var(--rt-toolbar-border-radius, 0px);color:var(--rt-text-primary, #000)}rolatech-toolbar:has(.left-button){--rt-toolbar-padding-left: 8px;--rt-toolbar-padding-right: 8px}\n"] }]
|
|
1221
|
+
}], propDecorators: { hasId: [{
|
|
1222
|
+
type: HostBinding,
|
|
1223
|
+
args: ['id']
|
|
1224
|
+
}], hasClass: [{
|
|
1225
|
+
type: HostBinding,
|
|
1226
|
+
args: ['class.rolatech-toolbar']
|
|
1227
|
+
}] } });
|
|
1228
|
+
|
|
1229
|
+
class ThumbnailComponent {
|
|
1230
|
+
hasClass = true;
|
|
1231
|
+
myColor = '56.25%';
|
|
1232
|
+
el = inject((ElementRef));
|
|
1233
|
+
src = input();
|
|
1234
|
+
size = input();
|
|
1235
|
+
mode = input('clip'); // full, clip
|
|
1236
|
+
ratio = input('rectangle'); // rectangle, square
|
|
1237
|
+
img = viewChild.required('img');
|
|
1238
|
+
width = input();
|
|
1239
|
+
height = input();
|
|
1240
|
+
renderer = inject(Renderer2);
|
|
1241
|
+
sizea = effect(() => {
|
|
1242
|
+
this.renderer.setAttribute(this.el.nativeElement, 'size', this.size());
|
|
1243
|
+
});
|
|
1244
|
+
full = effect(() => {
|
|
1245
|
+
this.renderer.setAttribute(this.el.nativeElement, 'mode', this.mode());
|
|
1246
|
+
if (this.mode() === 'full') {
|
|
1247
|
+
if (this.width() && this.height()) {
|
|
1248
|
+
this.renderer.setStyle(this.el.nativeElement, 'aspect-ratio', this.width() / this.height());
|
|
1249
|
+
}
|
|
1250
|
+
else {
|
|
1251
|
+
this.renderer.setStyle(this.el.nativeElement, 'aspect-ratio', 16 / 9);
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
});
|
|
1255
|
+
ratioSet = effect(() => {
|
|
1256
|
+
this.renderer.setAttribute(this.el.nativeElement, 'ratio', this.ratio());
|
|
1257
|
+
});
|
|
1258
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ThumbnailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1259
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ThumbnailComponent, isStandalone: true, selector: "rolatech-thumbnail", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, ratio: { classPropertyName: "ratio", publicName: "ratio", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rt-rich-grid-media": "this.hasClass", "style.--rt-thumbnail-padding-top": "this.myColor" } }, viewQueries: [{ propertyName: "img", first: true, predicate: ["img"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #edge class=\"absolute top-0 left-0\"></div>\n@defer (on viewport(edge)) {\n <a id=\"thumbnail\" class=\"rt-thumbnail\">\n <rolatech-image [src]=\"src()\"> </rolatech-image>\n </a>\n} @placeholder {\n <div class=\"bg-[--rt-raised-background] w-full h-full rounded-lg\"></div>\n}\n", styles: ["rolatech-thumbnail{display:block;width:100%;position:relative;--rt-thumbnail-padding-top: 56.25%}rolatech-thumbnail:before{display:block;content:\"\";width:100%;height:100%;background-color:var(--rt-10-percent-layer, rgba(0, 0, 0, .1))}rolatech-thumbnail[mode=full]:before{padding-top:0}rolatech-thumbnail[ratio=square]:before{--rt-thumbnail-padding-top: 100%}rolatech-thumbnail[mode=clip]:before{padding-top:var(--rt-thumbnail-padding-top)}rolatech-thumbnail #thumbnail.rt-thumbnail{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block}rolatech-thumbnail #thumbnail.rt-thumbnail{position:absolute;inset:0}rolatech-thumbnail[mode=clip] #thumbnail.rt-thumbnail{position:absolute;inset:0}rolatech-thumbnail a.rt-thumbnail,rolatech-thumbnail:before{border-radius:0}rolatech-thumbnail[size][circular] a.rt-thumbnail,rolatech-thumbnail[size][circular]:before{border-radius:50%}rolatech-thumbnail[size=small] a.rt-thumbnail,rolatech-thumbnail[size=small]:before{border-radius:4px}rolatech-thumbnail[size=medium] a.rt-thumbnail,rolatech-thumbnail[size=medium]:before{border-radius:8px}rolatech-thumbnail[size=large] a.rt-thumbnail,rolatech-thumbnail[size=large]:before{border-radius:12px}rolatech-thumbnail[size][has-clip] a.rt-thumbnail,rolatech-thumbnail[size][has-clip]:before{border-radius:0}rolatech-thumbnail[mode=full] #thumbnail rolatech-image img{object-fit:contain;background-color:var(--rt-thumbnail-background-color)}rolatech-thumbnail #thumbnail rolatech-image img{background-color:var(--rt-thumbnail-background-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)]] });
|
|
1260
|
+
}
|
|
1261
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.0.3", ngImport: i0, type: ThumbnailComponent, resolveDeferredDeps: () => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)], resolveMetadata: ImageComponent => ({ decorators: [{
|
|
1262
|
+
type: Component,
|
|
1263
|
+
args: [{ selector: 'rolatech-thumbnail', imports: [CommonModule, ImageComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #edge class=\"absolute top-0 left-0\"></div>\n@defer (on viewport(edge)) {\n <a id=\"thumbnail\" class=\"rt-thumbnail\">\n <rolatech-image [src]=\"src()\"> </rolatech-image>\n </a>\n} @placeholder {\n <div class=\"bg-[--rt-raised-background] w-full h-full rounded-lg\"></div>\n}\n", styles: ["rolatech-thumbnail{display:block;width:100%;position:relative;--rt-thumbnail-padding-top: 56.25%}rolatech-thumbnail:before{display:block;content:\"\";width:100%;height:100%;background-color:var(--rt-10-percent-layer, rgba(0, 0, 0, .1))}rolatech-thumbnail[mode=full]:before{padding-top:0}rolatech-thumbnail[ratio=square]:before{--rt-thumbnail-padding-top: 100%}rolatech-thumbnail[mode=clip]:before{padding-top:var(--rt-thumbnail-padding-top)}rolatech-thumbnail #thumbnail.rt-thumbnail{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block}rolatech-thumbnail #thumbnail.rt-thumbnail{position:absolute;inset:0}rolatech-thumbnail[mode=clip] #thumbnail.rt-thumbnail{position:absolute;inset:0}rolatech-thumbnail a.rt-thumbnail,rolatech-thumbnail:before{border-radius:0}rolatech-thumbnail[size][circular] a.rt-thumbnail,rolatech-thumbnail[size][circular]:before{border-radius:50%}rolatech-thumbnail[size=small] a.rt-thumbnail,rolatech-thumbnail[size=small]:before{border-radius:4px}rolatech-thumbnail[size=medium] a.rt-thumbnail,rolatech-thumbnail[size=medium]:before{border-radius:8px}rolatech-thumbnail[size=large] a.rt-thumbnail,rolatech-thumbnail[size=large]:before{border-radius:12px}rolatech-thumbnail[size][has-clip] a.rt-thumbnail,rolatech-thumbnail[size][has-clip]:before{border-radius:0}rolatech-thumbnail[mode=full] #thumbnail rolatech-image img{object-fit:contain;background-color:var(--rt-thumbnail-background-color)}rolatech-thumbnail #thumbnail rolatech-image img{background-color:var(--rt-thumbnail-background-color)}\n"] }]
|
|
1264
|
+
}], ctorParameters: null, propDecorators: { hasClass: [{
|
|
1265
|
+
type: HostBinding,
|
|
1266
|
+
args: ['class.rt-rich-grid-media']
|
|
1267
|
+
}], myColor: [{
|
|
1268
|
+
type: HostBinding,
|
|
1269
|
+
args: ['style.--rt-thumbnail-padding-top']
|
|
1270
|
+
}] } }) });
|
|
1271
|
+
|
|
1272
|
+
var thumbnail_component = /*#__PURE__*/Object.freeze({
|
|
1273
|
+
__proto__: null,
|
|
1274
|
+
ThumbnailComponent: ThumbnailComponent
|
|
1275
|
+
});
|
|
1276
|
+
|
|
1277
|
+
class ImageComponent {
|
|
1278
|
+
hasId = 'rolatech-image';
|
|
1279
|
+
hasClass = true;
|
|
1280
|
+
src = input();
|
|
1281
|
+
img = viewChild.required('img');
|
|
1282
|
+
ngOnInit() {
|
|
1283
|
+
const image = this.img().nativeElement;
|
|
1284
|
+
image.onload = () => {
|
|
1285
|
+
image.style.visibility = 'visible';
|
|
1286
|
+
};
|
|
1287
|
+
}
|
|
1288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: ImageComponent, isStandalone: true, selector: "rolatech-image", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.hasId", "class.rt-image": "this.hasClass" } }, viewQueries: [{ propertyName: "img", first: true, predicate: ["img"], descendants: true, isSignal: true }], ngImport: i0, template: "<img #img class=\"rolatech-image bg-[--rt-base-background]\" [src]=\"src()\" style=\"visibility: hidden\" loading=\"lazy\" alt />\n", styles: [".rolatech-image{display:inline-block;min-height:1px;min-width:1px;width:100%;height:100%;object-fit:cover}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1290
|
+
}
|
|
1291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImageComponent, decorators: [{
|
|
1292
|
+
type: Component,
|
|
1293
|
+
args: [{ selector: 'rolatech-image', imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<img #img class=\"rolatech-image bg-[--rt-base-background]\" [src]=\"src()\" style=\"visibility: hidden\" loading=\"lazy\" alt />\n", styles: [".rolatech-image{display:inline-block;min-height:1px;min-width:1px;width:100%;height:100%;object-fit:cover}\n"] }]
|
|
1294
|
+
}], propDecorators: { hasId: [{
|
|
1295
|
+
type: HostBinding,
|
|
1296
|
+
args: ['id']
|
|
1297
|
+
}], hasClass: [{
|
|
1298
|
+
type: HostBinding,
|
|
1299
|
+
args: ['class.rt-image']
|
|
1300
|
+
}] } });
|
|
1301
|
+
|
|
1302
|
+
var image_component = /*#__PURE__*/Object.freeze({
|
|
1303
|
+
__proto__: null,
|
|
1304
|
+
ImageComponent: ImageComponent
|
|
1305
|
+
});
|
|
1306
|
+
|
|
1307
|
+
class TabComponent {
|
|
1308
|
+
hasId = 'tab';
|
|
1309
|
+
hasClass = true;
|
|
1310
|
+
label = input.required();
|
|
1311
|
+
item = viewChild('content');
|
|
1312
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1313
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: TabComponent, isStandalone: true, selector: "rolatech-tab", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "id": "this.hasId", "class.tab": "this.hasClass" } }, viewQueries: [{ propertyName: "item", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"content\" #content>\n {{ label() }}\n</div>\n", styles: ["rolatech-tab{display:inline-flex;align-items:center;-ms-flex-pack:center;justify-content:center;flex:1 1 auto;position:relative;padding-left:var(--rt-tab-padding-left, 12px);padding-right:var(--rt-tab-padding-right, 12px);overflow:hidden;cursor:pointer;vertical-align:middle;font-family:Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased}rolatech-tab:hover{background-color:var(--rt-tab-hover-background-color, rgb(243, 244, 246))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1314
|
+
}
|
|
1315
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TabComponent, decorators: [{
|
|
1316
|
+
type: Component,
|
|
1317
|
+
args: [{ selector: 'rolatech-tab', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"content\" #content>\n {{ label() }}\n</div>\n", styles: ["rolatech-tab{display:inline-flex;align-items:center;-ms-flex-pack:center;justify-content:center;flex:1 1 auto;position:relative;padding-left:var(--rt-tab-padding-left, 12px);padding-right:var(--rt-tab-padding-right, 12px);overflow:hidden;cursor:pointer;vertical-align:middle;font-family:Roboto,Arial,sans-serif;-webkit-font-smoothing:antialiased}rolatech-tab:hover{background-color:var(--rt-tab-hover-background-color, rgb(243, 244, 246))}\n"] }]
|
|
1318
|
+
}], propDecorators: { hasId: [{
|
|
1319
|
+
type: HostBinding,
|
|
1320
|
+
args: ['id']
|
|
1321
|
+
}], hasClass: [{
|
|
1322
|
+
type: HostBinding,
|
|
1323
|
+
args: ['class.tab']
|
|
1324
|
+
}] } });
|
|
1325
|
+
|
|
1326
|
+
class TabsComponent {
|
|
1327
|
+
ngAfterContentInit() {
|
|
1328
|
+
// this.init();
|
|
1329
|
+
}
|
|
1330
|
+
renderer = inject(Renderer2);
|
|
1331
|
+
tabs = contentChildren(TabComponent, { read: ElementRef });
|
|
1332
|
+
selectionBar = viewChild.required('selectionBar', { read: ElementRef });
|
|
1333
|
+
select = model(0);
|
|
1334
|
+
loading = input(false);
|
|
1335
|
+
preSelect = 0;
|
|
1336
|
+
clientWidths = [];
|
|
1337
|
+
_isServer = !inject(Platform).isBrowser;
|
|
1338
|
+
ngOnInit() { }
|
|
1339
|
+
ngAfterViewInit() {
|
|
1340
|
+
this.init();
|
|
1341
|
+
}
|
|
1342
|
+
init() {
|
|
1343
|
+
const gap = 24; // 24 = 2 * margin-left
|
|
1344
|
+
this.tabs()[this.select()].nativeElement.setAttribute('style-target', 'host');
|
|
1345
|
+
const selectionBarElement = this.selectionBar().nativeElement;
|
|
1346
|
+
selectionBarElement.setAttribute('style-target', 'selection-bar');
|
|
1347
|
+
// selectionBarElement.setAttribute('transition-target', 'selection-bar-transition');
|
|
1348
|
+
setTimeout(() => {
|
|
1349
|
+
selectionBarElement.setAttribute('transition-target', 'selection-bar-transition');
|
|
1350
|
+
}, 10);
|
|
1351
|
+
this.tabs().forEach((element, index) => {
|
|
1352
|
+
this.clientWidths.push(element.nativeElement.clientWidth);
|
|
1353
|
+
this.renderer.listen(element.nativeElement, 'click', () => {
|
|
1354
|
+
this.select.set(index);
|
|
1355
|
+
this.tabs()[this.preSelect].nativeElement.removeAttribute('style-target');
|
|
1356
|
+
this.tabs()[index].nativeElement.setAttribute('style-target', 'host');
|
|
1357
|
+
selectionBarElement.style.left = this.getOffset(index) + 'px';
|
|
1358
|
+
selectionBarElement.style.width = element.nativeElement.clientWidth - gap + 'px';
|
|
1359
|
+
this.preSelect = index;
|
|
1360
|
+
});
|
|
1361
|
+
});
|
|
1362
|
+
selectionBarElement.style.left = this.getOffset(this.select()) + 'px';
|
|
1363
|
+
selectionBarElement.style.width = this.clientWidths[this.select()] - gap + 'px';
|
|
1364
|
+
this.preSelect = this.select();
|
|
1365
|
+
}
|
|
1366
|
+
getOffset(index) {
|
|
1367
|
+
let offset = 0;
|
|
1368
|
+
for (let i = 0; i < index; i++) {
|
|
1369
|
+
offset += this.clientWidths[i];
|
|
1370
|
+
}
|
|
1371
|
+
return offset;
|
|
1372
|
+
}
|
|
1373
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1374
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: TabsComponent, isStandalone: true, selector: "rolatech-tabs", inputs: { select: { classPropertyName: "select", publicName: "select", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { select: "selectChange" }, host: { attributes: { "ngSkipHydration": "" }, classAttribute: "rolatech-tabs" }, queries: [{ propertyName: "tabs", predicate: TabComponent, read: ElementRef, isSignal: true }], viewQueries: [{ propertyName: "selectionBar", first: true, predicate: ["selectionBar"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<!-- <rolatech-icon-button>chevron_left</rolatech-icon-button> -->\n<div id=\"tabsContainer\" class=\"h-full\">\n <div id=\"tabsContent\" class=\"flex flex-row h-full\" style-target=\"selection-bar\">\n <div #selectionBar id=\"selectionBar\" class=\"selection-bar\"></div>\n @for (tab of tabs(); track $index) {\n <ng-content></ng-content>\n }\n </div>\n</div>\n<!-- <rolatech-icon-button>chevron_right</rolatech-icon-button> -->\n", styles: ["rolatech-tabs{display:flex;flex-direction:row;align-items:center;font-weight:500;height:44px;padding-left:var(--rt-tabs-padding-left, 0px);padding-right:var(--rt-tabs-padding-right, 0px)}.selection-bar{position:absolute;height:0;bottom:0;left:0;right:0;border-bottom:2px solid var(--rt-tabs-selection-bar-color, rgb(234, 88, 12));transform:scale(0);transform-origin:left center;transition:transform;z-index:100}rolatech-tab[style-target=host]{color:var(--rt-tab-color, rgb(234, 88, 12))}.selection-bar[transition-target=selection-bar-transition]{transition:width .15s cubic-bezier(.4,0,1,1),left .15s cubic-bezier(.4,0,1,1)}.selection-bar[style-target=selection-bar]{border-width:0;background-color:var(--rt-tab-color, rgb(234, 88, 12));border-radius:3px 3px 0 0;height:3px;margin-left:12px;right:auto;transform:none}#tabsContainer{position:relative}#tabsContent>:not(#selectionBar){height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1375
|
+
}
|
|
1376
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: TabsComponent, decorators: [{
|
|
1377
|
+
type: Component,
|
|
1378
|
+
args: [{ selector: 'rolatech-tabs', imports: [CommonModule], encapsulation: ViewEncapsulation.None, host: {
|
|
1379
|
+
ngSkipHydration: '',
|
|
1380
|
+
class: 'rolatech-tabs',
|
|
1381
|
+
}, template: "<!-- <rolatech-icon-button>chevron_left</rolatech-icon-button> -->\n<div id=\"tabsContainer\" class=\"h-full\">\n <div id=\"tabsContent\" class=\"flex flex-row h-full\" style-target=\"selection-bar\">\n <div #selectionBar id=\"selectionBar\" class=\"selection-bar\"></div>\n @for (tab of tabs(); track $index) {\n <ng-content></ng-content>\n }\n </div>\n</div>\n<!-- <rolatech-icon-button>chevron_right</rolatech-icon-button> -->\n", styles: ["rolatech-tabs{display:flex;flex-direction:row;align-items:center;font-weight:500;height:44px;padding-left:var(--rt-tabs-padding-left, 0px);padding-right:var(--rt-tabs-padding-right, 0px)}.selection-bar{position:absolute;height:0;bottom:0;left:0;right:0;border-bottom:2px solid var(--rt-tabs-selection-bar-color, rgb(234, 88, 12));transform:scale(0);transform-origin:left center;transition:transform;z-index:100}rolatech-tab[style-target=host]{color:var(--rt-tab-color, rgb(234, 88, 12))}.selection-bar[transition-target=selection-bar-transition]{transition:width .15s cubic-bezier(.4,0,1,1),left .15s cubic-bezier(.4,0,1,1)}.selection-bar[style-target=selection-bar]{border-width:0;background-color:var(--rt-tab-color, rgb(234, 88, 12));border-radius:3px 3px 0 0;height:3px;margin-left:12px;right:auto;transform:none}#tabsContainer{position:relative}#tabsContent>:not(#selectionBar){height:100%}\n"] }]
|
|
1382
|
+
}] });
|
|
1383
|
+
|
|
1384
|
+
class ListComponent {
|
|
1385
|
+
id = 'rolatech-list';
|
|
1386
|
+
hasClass = true;
|
|
1387
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1388
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ListComponent, isStandalone: true, selector: "rolatech-list", host: { properties: { "id": "this.id", "class.rolatech-list": "this.hasClass" } }, ngImport: i0, template: "<div class=\"flex flex-col\">\n <ng-content></ng-content>\n</div>\n", styles: ["rolatech-list{padding-left:var(--rt-list-padding-left, 0px);padding-right:var(--rt-list-padding-right, 0px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1389
|
+
}
|
|
1390
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ListComponent, decorators: [{
|
|
1391
|
+
type: Component,
|
|
1392
|
+
args: [{ selector: 'rolatech-list', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex flex-col\">\n <ng-content></ng-content>\n</div>\n", styles: ["rolatech-list{padding-left:var(--rt-list-padding-left, 0px);padding-right:var(--rt-list-padding-right, 0px)}\n"] }]
|
|
1393
|
+
}], propDecorators: { id: [{
|
|
1394
|
+
type: HostBinding,
|
|
1395
|
+
args: ['id']
|
|
1396
|
+
}], hasClass: [{
|
|
1397
|
+
type: HostBinding,
|
|
1398
|
+
args: ['class.rolatech-list']
|
|
1399
|
+
}] } });
|
|
1400
|
+
|
|
1401
|
+
class ContentComponent {
|
|
1402
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1403
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ContentComponent, isStandalone: true, selector: "rolatech-content", ngImport: i0, template: "<ng-content></ng-content>\n", styles: ["rolatech-content{padding-left:var(--rt-content-padding-left, 0px);padding-right:var(--rt-content-padding-right, 0px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1404
|
+
}
|
|
1405
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ContentComponent, decorators: [{
|
|
1406
|
+
type: Component,
|
|
1407
|
+
args: [{ selector: 'rolatech-content', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n", styles: ["rolatech-content{padding-left:var(--rt-content-padding-left, 0px);padding-right:var(--rt-content-padding-right, 0px)}\n"] }]
|
|
1408
|
+
}] });
|
|
1409
|
+
|
|
1410
|
+
const CHEVRON_LEFT = `
|
|
1411
|
+
<svg
|
|
1412
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
1413
|
+
height="24"
|
|
1414
|
+
viewBox="0 0 24 24"
|
|
1415
|
+
width="24"
|
|
1416
|
+
focusable="false"
|
|
1417
|
+
style="pointer-events: none; display: inherit; width: 100%; height: 100%"
|
|
1418
|
+
>
|
|
1419
|
+
<path d="M14.96 18.96 8 12l6.96-6.96.71.71L9.41 12l6.25 6.25-.7.71z"></path>
|
|
1420
|
+
</svg>
|
|
1421
|
+
`;
|
|
1422
|
+
const CHEVRON_RIGHT = `
|
|
1423
|
+
<svg
|
|
1424
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
1425
|
+
height="24"
|
|
1426
|
+
viewBox="0 0 24 24"
|
|
1427
|
+
width="24"
|
|
1428
|
+
focusable="false"
|
|
1429
|
+
style="pointer-events: none; display: inherit; width: 100%; height: 100%"
|
|
1430
|
+
>
|
|
1431
|
+
<path d="m9.4 18.4-.7-.7 5.6-5.6-5.7-5.7.7-.7 6.4 6.4-6.3 6.3z"></path>
|
|
1432
|
+
</svg>
|
|
1433
|
+
`;
|
|
1434
|
+
class ChipBarComponent {
|
|
1435
|
+
hasId = 'rolatech-chip-bar';
|
|
1436
|
+
hasClass = true;
|
|
1437
|
+
el = inject(ElementRef);
|
|
1438
|
+
renderer = inject(Renderer2);
|
|
1439
|
+
resizeObserver;
|
|
1440
|
+
chips = viewChild('chips', { read: ElementRef });
|
|
1441
|
+
scroller = viewChild.required('scroller', { read: ElementRef });
|
|
1442
|
+
router = input('../courses/categories/');
|
|
1443
|
+
items = input([]);
|
|
1444
|
+
fluid = input(false, { transform: booleanAttribute });
|
|
1445
|
+
fixed = input(false, { transform: booleanAttribute });
|
|
1446
|
+
platformId = inject(PLATFORM_ID);
|
|
1447
|
+
clientWidth = 0;
|
|
1448
|
+
scrollWidth = 0;
|
|
1449
|
+
scrollLeft = 0;
|
|
1450
|
+
constructor(iconRegistry, sanitizer) {
|
|
1451
|
+
iconRegistry.addSvgIconLiteral('chevron_left', sanitizer.bypassSecurityTrustHtml(CHEVRON_LEFT));
|
|
1452
|
+
iconRegistry.addSvgIconLiteral('chevron_right', sanitizer.bypassSecurityTrustHtml(CHEVRON_RIGHT));
|
|
1453
|
+
effect(() => {
|
|
1454
|
+
if (this.fixed()) {
|
|
1455
|
+
this.el.nativeElement.setAttribute('fixed', '');
|
|
1456
|
+
}
|
|
1457
|
+
else {
|
|
1458
|
+
this.el.nativeElement.removeAttribute('fixed');
|
|
1459
|
+
}
|
|
1460
|
+
});
|
|
1461
|
+
}
|
|
1462
|
+
ngAfterViewInit() {
|
|
1463
|
+
this.clientWidth = this.el.nativeElement.clientWidth;
|
|
1464
|
+
this.scrollWidth = this.scroller()?.nativeElement.scrollWidth;
|
|
1465
|
+
this.el.nativeElement.setAttribute('at-start', '');
|
|
1466
|
+
this.el.nativeElement.setAttribute('fluid-width', '');
|
|
1467
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
1468
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
1469
|
+
for (const entry of entries) {
|
|
1470
|
+
this.setCustomProperties(entry.contentRect.width);
|
|
1471
|
+
this.init();
|
|
1472
|
+
}
|
|
1473
|
+
});
|
|
1474
|
+
this.resizeObserver.observe(this.el.nativeElement);
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
setCustomProperties(width) {
|
|
1478
|
+
this.clientWidth = width;
|
|
1479
|
+
this.el.nativeElement.style.setProperty('--rt-rich-grid-chips-bar-width', width + 'px');
|
|
1480
|
+
}
|
|
1481
|
+
init() {
|
|
1482
|
+
// fix: this.scrollWidth 1365.11 ~ 1366, this.scrollWidth - 1
|
|
1483
|
+
if (this.clientWidth + this.scrollLeft > this.scrollWidth - 1) {
|
|
1484
|
+
this.el.nativeElement.setAttribute('at-end', '');
|
|
1485
|
+
}
|
|
1486
|
+
else {
|
|
1487
|
+
this.el.nativeElement.removeAttribute('at-end', '');
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
onScroll(event) {
|
|
1491
|
+
this.scrollLeft = event.target.scrollLeft;
|
|
1492
|
+
this.init();
|
|
1493
|
+
if (this.scrollLeft > 0) {
|
|
1494
|
+
this.el.nativeElement.removeAttribute('at-start', '');
|
|
1495
|
+
}
|
|
1496
|
+
else {
|
|
1497
|
+
this.el.nativeElement.setAttribute('at-start', '');
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
leftArrowClick() {
|
|
1501
|
+
this.scroller().nativeElement.scrollLeft -= 320;
|
|
1502
|
+
}
|
|
1503
|
+
rightArrowClick() {
|
|
1504
|
+
this.scroller().nativeElement.scrollLeft += 320;
|
|
1505
|
+
}
|
|
1506
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ChipBarComponent, deps: [{ token: i2$1.MatIconRegistry }, { token: i2$4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
1507
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ChipBarComponent, isStandalone: true, selector: "rolatech-chip-bar", inputs: { router: { classPropertyName: "router", publicName: "router", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, fluid: { classPropertyName: "fluid", publicName: "fluid", isSignal: true, isRequired: false, transformFunction: null }, fixed: { classPropertyName: "fixed", publicName: "fixed", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "this.hasId", "class.rolatech-chip-bar": "this.hasClass" } }, viewQueries: [{ propertyName: "chips", first: true, predicate: ["chips"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<div id=\"chips-wrapper\" class=\"rolatech-chip-bar\">\n <div id=\"chips-content\" class=\"rolatech-chip-bar\">\n <div id=\"left-arrow\" class=\"rolatech-chip-bar\">\n <div id=\"left-arrow-button\" class=\"rolatech-chip-bar\">\n <button mat-icon-button (click)=\"leftArrowClick()\">\n <mat-icon>chevron_left</mat-icon>\n <!-- <mat-icon svgIcon=\"chevron_left\"></mat-icon> -->\n\n <!-- <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"M14.96 18.96 8 12l6.96-6.96.71.71L9.41 12l6.25 6.25-.7.71z\"></path>\n </svg> -->\n </button>\n </div>\n </div>\n <div\n id=\"scroll-container\"\n #scroller\n class=\"rolatech-chip-bar overflow-x-scroll overflow-y-hidden scrollbar-hide\"\n (scroll)=\"onScroll($event)\"\n >\n <div id=\"chips\" #chips class=\"rolatech-chip-bar inline-block\">\n @for (link of items(); track link; let index = $index) {\n <a\n id=\"chip-item\"\n class=\"rolatech-chip-bar h-8 cursor-pointer bg-[--rt-10-percent-layer] rounded-md inline-flex items-center px-3 m-3 ml-0\"\n routerLinkActive=\"chip-bar-active\"\n [routerLink]=\"[router(), link.link]\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"px-3 text-md\">{{ link.name }}</span>\n </a>\n }\n </div>\n </div>\n <div id=\"right-arrow\" class=\"rolatech-chip-bar\">\n <div id=\"right-arrow-button\" class=\"rolatech-chip-bar\">\n <button mat-icon-button (click)=\"rightArrowClick()\">\n <mat-icon>chevron_right</mat-icon>\n <!-- <mat-icon svgIcon=\"chevron_right\"></mat-icon> -->\n\n <!-- <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"m9.4 18.4-.7-.7 5.6-5.6-5.7-5.7.7-.7 6.4 6.4-6.3 6.3z\"></path>\n </svg> -->\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}rolatech-chip-bar{--rt-chips-bar-base-height: 56px;display:flex;width:100%;padding-left:var(--rt-chip-bar-padding, 0px);padding-right:var(--rt-chip-bar-padding, 0px);background-color:var(--rt-chip-bar-barckground-color, #fff);color:var(--rt-chip-bar-color, #000);height:var(--rt-chips-bar-base-height)}.chip-bar-active{border-radius:var(--rt-chip-bar-border-radius, 8px);color:var(--rt-chip-bar-active-color, orangered)}@media (max-width: 768px){.chip-bar-active{border-radius:var(--rt-chip-bar-border-radius, 8px);background-color:#000;color:#fff}}#scroll-container.rolatech-chip-bar{scroll-behavior:smooth;position:relative;white-space:nowrap}rolatech-chip-bar[fixed] #chips-wrapper.rolatech-chip-bar{position:fixed;top:var(--rt-rich-grid-chips-bar-top, 56px)}#chips-wrapper.rolatech-chip-bar{position:relative;width:var(--rt-rich-grid-chips-bar-width);background-color:var(--rt-base-background);z-index:2000;display:flex;justify-content:center}rolatech-chip-bar[fluid-width] #chips-content.rolatech-chip-bar{max-width:calc(var(--rt-rich-grid-content-max-width) + 2 * var(--rt-chip-bar-padding));padding-left:var(--rt-chip-bar-padding, 0px);padding-right:var(--rt-chip-bar-padding, 0px)}#chips-content.rolatech-chip-bar{box-sizing:border-box;width:100%;display:flex}#chips.rolatech-chip-bar{transition-duration:.15s;transition-timing-function:cubic-bezier(.05,0,0,1);will-change:transform;white-space:nowrap}#left-arrow.rolatech-chip-bar,#right-arrow.rolatech-chip-bar{position:absolute;height:100%;z-index:2020;display:flex;flex-direction:row;justify-content:center}#left-arrow.rolatech-chip-bar{top:0;left:0}#right-arrow.rolatech-chip-bar{top:0;right:0}#left-arrow-button.rolatech-chip-bar,#right-arrow-button.rolatech-chip-bar{background-color:var(--rt-base-background);display:flex;flex-direction:column;justify-content:center}#right-arrow.rolatech-chip-bar:before{height:100%;width:50px;content:\"\";pointer-events:none}rolatech-chip-bar[at-start] #left-arrow.rolatech-chip-bar{display:none}rolatech-chip-bar[at-end] #right-arrow.rolatech-chip-bar{display:none}#left-arrow.rolatech-chip-bar:after,#right-arrow.rolatech-chip-bar:before{height:100%;width:50px;content:\"\";pointer-events:none}#left-arrow.rolatech-chip-bar:after{background:linear-gradient(to right,var(--rt-base-background) 20%,rgba(255,255,255,0) 80%)}#right-arrow.rolatech-chip-bar:before{background:linear-gradient(to left,var(--rt-base-background) 20%,rgba(255,255,255,0) 80%)}#chip-item.rolatech-chip-bar{margin:12px 12px 12px 0}#chip-item.rolatech-chip-bar:last-of-type{margin-right:0}#chip-item:not([selected]):hover,#chip-item:not([selected]):focus{background-color:var(--rt-20-percent-layer)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1508
|
+
}
|
|
1509
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ChipBarComponent, decorators: [{
|
|
1510
|
+
type: Component,
|
|
1511
|
+
args: [{ selector: 'rolatech-chip-bar', imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule], encapsulation: ViewEncapsulation.None, template: "<div id=\"chips-wrapper\" class=\"rolatech-chip-bar\">\n <div id=\"chips-content\" class=\"rolatech-chip-bar\">\n <div id=\"left-arrow\" class=\"rolatech-chip-bar\">\n <div id=\"left-arrow-button\" class=\"rolatech-chip-bar\">\n <button mat-icon-button (click)=\"leftArrowClick()\">\n <mat-icon>chevron_left</mat-icon>\n <!-- <mat-icon svgIcon=\"chevron_left\"></mat-icon> -->\n\n <!-- <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"M14.96 18.96 8 12l6.96-6.96.71.71L9.41 12l6.25 6.25-.7.71z\"></path>\n </svg> -->\n </button>\n </div>\n </div>\n <div\n id=\"scroll-container\"\n #scroller\n class=\"rolatech-chip-bar overflow-x-scroll overflow-y-hidden scrollbar-hide\"\n (scroll)=\"onScroll($event)\"\n >\n <div id=\"chips\" #chips class=\"rolatech-chip-bar inline-block\">\n @for (link of items(); track link; let index = $index) {\n <a\n id=\"chip-item\"\n class=\"rolatech-chip-bar h-8 cursor-pointer bg-[--rt-10-percent-layer] rounded-md inline-flex items-center px-3 m-3 ml-0\"\n routerLinkActive=\"chip-bar-active\"\n [routerLink]=\"[router(), link.link]\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n >\n <span class=\"px-3 text-md\">{{ link.name }}</span>\n </a>\n }\n </div>\n </div>\n <div id=\"right-arrow\" class=\"rolatech-chip-bar\">\n <div id=\"right-arrow-button\" class=\"rolatech-chip-bar\">\n <button mat-icon-button (click)=\"rightArrowClick()\">\n <mat-icon>chevron_right</mat-icon>\n <!-- <mat-icon svgIcon=\"chevron_right\"></mat-icon> -->\n\n <!-- <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n focusable=\"false\"\n style=\"pointer-events: none; display: inherit; width: 100%; height: 100%\"\n >\n <path d=\"m9.4 18.4-.7-.7 5.6-5.6-5.7-5.7.7-.7 6.4 6.4-6.3 6.3z\"></path>\n </svg> -->\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}rolatech-chip-bar{--rt-chips-bar-base-height: 56px;display:flex;width:100%;padding-left:var(--rt-chip-bar-padding, 0px);padding-right:var(--rt-chip-bar-padding, 0px);background-color:var(--rt-chip-bar-barckground-color, #fff);color:var(--rt-chip-bar-color, #000);height:var(--rt-chips-bar-base-height)}.chip-bar-active{border-radius:var(--rt-chip-bar-border-radius, 8px);color:var(--rt-chip-bar-active-color, orangered)}@media (max-width: 768px){.chip-bar-active{border-radius:var(--rt-chip-bar-border-radius, 8px);background-color:#000;color:#fff}}#scroll-container.rolatech-chip-bar{scroll-behavior:smooth;position:relative;white-space:nowrap}rolatech-chip-bar[fixed] #chips-wrapper.rolatech-chip-bar{position:fixed;top:var(--rt-rich-grid-chips-bar-top, 56px)}#chips-wrapper.rolatech-chip-bar{position:relative;width:var(--rt-rich-grid-chips-bar-width);background-color:var(--rt-base-background);z-index:2000;display:flex;justify-content:center}rolatech-chip-bar[fluid-width] #chips-content.rolatech-chip-bar{max-width:calc(var(--rt-rich-grid-content-max-width) + 2 * var(--rt-chip-bar-padding));padding-left:var(--rt-chip-bar-padding, 0px);padding-right:var(--rt-chip-bar-padding, 0px)}#chips-content.rolatech-chip-bar{box-sizing:border-box;width:100%;display:flex}#chips.rolatech-chip-bar{transition-duration:.15s;transition-timing-function:cubic-bezier(.05,0,0,1);will-change:transform;white-space:nowrap}#left-arrow.rolatech-chip-bar,#right-arrow.rolatech-chip-bar{position:absolute;height:100%;z-index:2020;display:flex;flex-direction:row;justify-content:center}#left-arrow.rolatech-chip-bar{top:0;left:0}#right-arrow.rolatech-chip-bar{top:0;right:0}#left-arrow-button.rolatech-chip-bar,#right-arrow-button.rolatech-chip-bar{background-color:var(--rt-base-background);display:flex;flex-direction:column;justify-content:center}#right-arrow.rolatech-chip-bar:before{height:100%;width:50px;content:\"\";pointer-events:none}rolatech-chip-bar[at-start] #left-arrow.rolatech-chip-bar{display:none}rolatech-chip-bar[at-end] #right-arrow.rolatech-chip-bar{display:none}#left-arrow.rolatech-chip-bar:after,#right-arrow.rolatech-chip-bar:before{height:100%;width:50px;content:\"\";pointer-events:none}#left-arrow.rolatech-chip-bar:after{background:linear-gradient(to right,var(--rt-base-background) 20%,rgba(255,255,255,0) 80%)}#right-arrow.rolatech-chip-bar:before{background:linear-gradient(to left,var(--rt-base-background) 20%,rgba(255,255,255,0) 80%)}#chip-item.rolatech-chip-bar{margin:12px 12px 12px 0}#chip-item.rolatech-chip-bar:last-of-type{margin-right:0}#chip-item:not([selected]):hover,#chip-item:not([selected]):focus{background-color:var(--rt-20-percent-layer)}\n"] }]
|
|
1512
|
+
}], ctorParameters: () => [{ type: i2$1.MatIconRegistry }, { type: i2$4.DomSanitizer }], propDecorators: { hasId: [{
|
|
1513
|
+
type: HostBinding,
|
|
1514
|
+
args: ['id']
|
|
1515
|
+
}], hasClass: [{
|
|
1516
|
+
type: HostBinding,
|
|
1517
|
+
args: ['class.rolatech-chip-bar']
|
|
1518
|
+
}] } });
|
|
1519
|
+
|
|
1520
|
+
class AvatarComponent {
|
|
1521
|
+
hasClass = true;
|
|
1522
|
+
src = input();
|
|
1523
|
+
size = input.required();
|
|
1524
|
+
el = inject(ElementRef);
|
|
1525
|
+
renderer = inject(Renderer2);
|
|
1526
|
+
sizea = effect(() => {
|
|
1527
|
+
this.renderer.setAttribute(this.el.nativeElement, 'size', this.size());
|
|
1528
|
+
});
|
|
1529
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1530
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AvatarComponent, isStandalone: true, selector: "rolatech-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.rt-rich-grid-media": "this.hasClass" } }, ngImport: i0, template: "@defer (on viewport()) {\n <a id=\"avatar\" class=\"rt-avatar\">\n <rolatech-image [src]=\"src()\"> </rolatech-image>\n </a>\n} @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] w-full h-full rounded-lg\"></div>\n}\n", styles: ["rolatech-avatar{display:block;width:100%;position:relative}rolatech-avatar:before{display:block;content:\"\";width:100%;padding-top:100%;background-color:var(--rt-10-percent-layer, #f1f1f1)}rolatech-avatar #avatar.rt-avatar{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block}rolatech-avatar #avatar.rt-avatar{position:absolute;inset:0}rolatech-avatar a.rt-avatar,rolatech-avatar:before{border-radius:0}rolatech-avatar[size=small] a.rt-avatar,rolatech-avatar[size=small]:before{border-radius:4px}rolatech-avatar[size=medium] a.rt-avatar,rolatech-avatar[size=medium]:before{border-radius:8px}rolatech-avatar[size=large] a.rt-avatar,rolatech-avatar[size=large]:before{border-radius:12px}rolatech-avatar[size=full] a.rt-avatar,rolatech-avatar[size=full]:before{border-radius:50%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)]] });
|
|
1531
|
+
}
|
|
1532
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.0.3", ngImport: i0, type: AvatarComponent, resolveDeferredDeps: () => [Promise.resolve().then(function () { return image_component; }).then(m => m.ImageComponent)], resolveMetadata: ImageComponent => ({ decorators: [{
|
|
1533
|
+
type: Component,
|
|
1534
|
+
args: [{ selector: 'rolatech-avatar', imports: [CommonModule, ImageComponent], encapsulation: ViewEncapsulation.None, template: "@defer (on viewport()) {\n <a id=\"avatar\" class=\"rt-avatar\">\n <rolatech-image [src]=\"src()\"> </rolatech-image>\n </a>\n} @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] w-full h-full rounded-lg\"></div>\n}\n", styles: ["rolatech-avatar{display:block;width:100%;position:relative}rolatech-avatar:before{display:block;content:\"\";width:100%;padding-top:100%;background-color:var(--rt-10-percent-layer, #f1f1f1)}rolatech-avatar #avatar.rt-avatar{height:100%;position:relative;margin-left:auto;margin-right:auto;overflow:hidden;display:block}rolatech-avatar #avatar.rt-avatar{position:absolute;inset:0}rolatech-avatar a.rt-avatar,rolatech-avatar:before{border-radius:0}rolatech-avatar[size=small] a.rt-avatar,rolatech-avatar[size=small]:before{border-radius:4px}rolatech-avatar[size=medium] a.rt-avatar,rolatech-avatar[size=medium]:before{border-radius:8px}rolatech-avatar[size=large] a.rt-avatar,rolatech-avatar[size=large]:before{border-radius:12px}rolatech-avatar[size=full] a.rt-avatar,rolatech-avatar[size=full]:before{border-radius:50%}\n"] }]
|
|
1535
|
+
}], ctorParameters: null, propDecorators: { hasClass: [{
|
|
1536
|
+
type: HostBinding,
|
|
1537
|
+
args: ['class.rt-rich-grid-media']
|
|
1538
|
+
}] } }) });
|
|
1539
|
+
|
|
1540
|
+
class ImagePlaceholderComponent {
|
|
1541
|
+
ngOnInit() { }
|
|
1542
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImagePlaceholderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1543
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: ImagePlaceholderComponent, isStandalone: true, selector: "rolatech-image-placeholder", ngImport: i0, template: "<div class=\"w-full h-full flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z\"\n />\n </svg>\n</div>\n", styles: ["rolatech-image-placeholder{display:block;aspect-ratio:16/9;background-color:var(--rt-10-percent-layer);border-radius:var(--rt-rounded-base, 8px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1544
|
+
}
|
|
1545
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImagePlaceholderComponent, decorators: [{
|
|
1546
|
+
type: Component,
|
|
1547
|
+
args: [{ selector: 'rolatech-image-placeholder', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"w-full h-full flex justify-center items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z\"\n />\n </svg>\n</div>\n", styles: ["rolatech-image-placeholder{display:block;aspect-ratio:16/9;background-color:var(--rt-10-percent-layer);border-radius:var(--rt-rounded-base, 8px)}\n"] }]
|
|
1548
|
+
}] });
|
|
1549
|
+
|
|
1550
|
+
class ImagePreviewDialogComponent {
|
|
1551
|
+
data;
|
|
1552
|
+
dialogRef;
|
|
1553
|
+
selected;
|
|
1554
|
+
index = 0;
|
|
1555
|
+
prevDisabled = false;
|
|
1556
|
+
nextDisabled = false;
|
|
1557
|
+
constructor(data, dialogRef) {
|
|
1558
|
+
this.data = data;
|
|
1559
|
+
this.dialogRef = dialogRef;
|
|
1560
|
+
this.data.title = '图片预览';
|
|
1561
|
+
}
|
|
1562
|
+
ngOnInit() {
|
|
1563
|
+
this.selected = this.data.selected;
|
|
1564
|
+
this.prevDisabled = this.selected === 0;
|
|
1565
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
1566
|
+
}
|
|
1567
|
+
close() {
|
|
1568
|
+
this.dialogRef.close();
|
|
1569
|
+
}
|
|
1570
|
+
prev() {
|
|
1571
|
+
this.selected--;
|
|
1572
|
+
this.prevDisabled = this.selected === 0;
|
|
1573
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
1574
|
+
}
|
|
1575
|
+
next() {
|
|
1576
|
+
this.selected++;
|
|
1577
|
+
this.prevDisabled = this.selected === 0;
|
|
1578
|
+
this.nextDisabled = this.selected === this.data.media.length - 1;
|
|
1579
|
+
}
|
|
1580
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImagePreviewDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1581
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: ImagePreviewDialogComponent, isStandalone: true, selector: "rolatech-image-preview-dialog", ngImport: i0, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex overflow-hidden overflow-y-auto\">\n <div class=\"p-3 flex justify-center items-center\">\n <img class=\"object-cover\" [src]=\"data.media[selected].url\" alt />\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-between items-center px-5\">\n <button mat-flat-button [disabled]=\"prevDisabled\" (click)=\"prev()\">Prev</button>\n <div>{{ selected + 1 }} / {{ data.media.length }}</div>\n <button mat-flat-button [disabled]=\"nextDisabled\" (click)=\"next()\">Next</button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1582
|
+
}
|
|
1583
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ImagePreviewDialogComponent, decorators: [{
|
|
1584
|
+
type: Component,
|
|
1585
|
+
args: [{ selector: 'rolatech-image-preview-dialog', imports: [MatIconModule, MatDividerModule, MatButtonModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"flex flex-col h-full overflow-hidden\">\n <div class=\"h-16 flex justify-between items-center px-5\">\n @if (data.title) {\n <div class=\"text-md font-medium\">{{ data.title }}</div>\n }\n <div class=\"cursor-pointer\" (click)=\"close()\">\n <mat-icon fontIcon=\"close\"></mat-icon>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"flex overflow-hidden overflow-y-auto\">\n <div class=\"p-3 flex justify-center items-center\">\n <img class=\"object-cover\" [src]=\"data.media[selected].url\" alt />\n </div>\n </div>\n <div class=\"flex-1\"></div>\n <mat-divider></mat-divider>\n <div class=\"h-16 flex justify-between items-center px-5\">\n <button mat-flat-button [disabled]=\"prevDisabled\" (click)=\"prev()\">Prev</button>\n <div>{{ selected + 1 }} / {{ data.media.length }}</div>\n <button mat-flat-button [disabled]=\"nextDisabled\" (click)=\"next()\">Next</button>\n </div>\n</div>\n" }]
|
|
1586
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
1587
|
+
type: Inject,
|
|
1588
|
+
args: [MAT_DIALOG_DATA]
|
|
1589
|
+
}] }, { type: i1.MatDialogRef }] });
|
|
1590
|
+
|
|
1591
|
+
class EmptyComponent {
|
|
1592
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: EmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1593
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: EmptyComponent, isStandalone: true, selector: "rolatech-empty", ngImport: i0, template: "<div class=\"px-4 py-2 flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"M460-300h40v-220h-40v220Zm20-276.92q10.46 0 17.54-7.08 7.08-7.08 7.08-17.54 0-10.46-7.08-17.54-7.08-7.07-17.54-7.07-10.46 0-17.54 7.07-7.08 7.08-7.08 17.54 0 10.46 7.08 17.54 7.08 7.08 17.54 7.08Zm.13 456.92q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"\n />\n </svg>\n <span class=\"ml-2\">No Data</span>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
1594
|
+
}
|
|
1595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: EmptyComponent, decorators: [{
|
|
1596
|
+
type: Component,
|
|
1597
|
+
args: [{ selector: 'rolatech-empty', imports: [CommonModule], template: "<div class=\"px-4 py-2 flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\">\n <path\n d=\"M460-300h40v-220h-40v220Zm20-276.92q10.46 0 17.54-7.08 7.08-7.08 7.08-17.54 0-10.46-7.08-17.54-7.08-7.07-17.54-7.07-10.46 0-17.54 7.07-7.08 7.08-7.08 17.54 0 10.46 7.08 17.54 7.08 7.08 17.54 7.08Zm.13 456.92q-74.67 0-140.41-28.34-65.73-28.34-114.36-76.92-48.63-48.58-76.99-114.26Q120-405.19 120-479.87q0-74.67 28.34-140.41 28.34-65.73 76.92-114.36 48.58-48.63 114.26-76.99Q405.19-840 479.87-840q74.67 0 140.41 28.34 65.73 28.34 114.36 76.92 48.63 48.58 76.99 114.26Q840-554.81 840-480.13q0 74.67-28.34 140.41-28.34 65.73-76.92 114.36-48.58 48.63-114.26 76.99Q554.81-120 480.13-120Zm-.13-40q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"\n />\n </svg>\n <span class=\"ml-2\">No Data</span>\n</div>\n" }]
|
|
1598
|
+
}] });
|
|
1599
|
+
|
|
1600
|
+
class InputComponent {
|
|
1601
|
+
title = model();
|
|
1602
|
+
placeholder = input('Title');
|
|
1603
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: InputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1604
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: InputComponent, isStandalone: true, selector: "rolatech-input", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "titleChange" }, ngImport: i0, template: "<div class=\"rt-input-wrapper\">\n <input class=\"rt__input\" [placeholder]=\"placeholder()\" [(ngModel)]=\"title\" />\n</div>\n", styles: ["rolatech-input{width:100%;padding:8px}.rt-input-wrapper{width:100%;z-index:0;padding:12px;background-color:var(--rt-additive-background, #fff);border-radius:var(--rt-input-rounded, 8px);border:1px solid var(--rt-brand-color)}.rt__input{box-shadow:none;background:none;border-radius:0;width:100%;min-width:0;border:none;display:block}.rt__input:focus-visible{outline:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
1605
|
+
}
|
|
1606
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: InputComponent, decorators: [{
|
|
1607
|
+
type: Component,
|
|
1608
|
+
args: [{ selector: 'rolatech-input', imports: [CommonModule, FormsModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"rt-input-wrapper\">\n <input class=\"rt__input\" [placeholder]=\"placeholder()\" [(ngModel)]=\"title\" />\n</div>\n", styles: ["rolatech-input{width:100%;padding:8px}.rt-input-wrapper{width:100%;z-index:0;padding:12px;background-color:var(--rt-additive-background, #fff);border-radius:var(--rt-input-rounded, 8px);border:1px solid var(--rt-brand-color)}.rt__input{box-shadow:none;background:none;border-radius:0;width:100%;min-width:0;border:none;display:block}.rt__input:focus-visible{outline:none}\n"] }]
|
|
1609
|
+
}] });
|
|
1610
|
+
|
|
1611
|
+
class RichItemComponent {
|
|
1612
|
+
hasClass = true;
|
|
1613
|
+
list = input(false, { transform: booleanAttribute });
|
|
1614
|
+
thumbnail = input();
|
|
1615
|
+
avatar = input();
|
|
1616
|
+
title = input();
|
|
1617
|
+
subtitle = input();
|
|
1618
|
+
price = input(0);
|
|
1619
|
+
thumbnailRatio = input('rectangle');
|
|
1620
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: RichItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1621
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: RichItemComponent, isStandalone: true, selector: "rolatech-rich-item", inputs: { list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: false, transformFunction: null }, thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, avatar: { classPropertyName: "avatar", publicName: "avatar", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, price: { classPropertyName: "price", publicName: "price", isSignal: true, isRequired: false, transformFunction: null }, thumbnailRatio: { classPropertyName: "thumbnailRatio", publicName: "thumbnailRatio", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-rich-item": "this.hasClass" } }, ngImport: i0, template: "<div id=\"thumbnail\" class=\"rolatech-rich-item\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"thumbnail()\" size=\"medium\" [ratio]=\"thumbnailRatio()\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n</div>\n<div id=\"details\" class=\"rolatech-rich-item\">\n <div>\n <div class=\"py-1\">\n <a class=\"md:text-xl font-bold break-words line-clamp-1 md:line-clamp-2 whitespace-normal\">\n {{ title() }}\n </a>\n </div>\n <div class=\"invisible h-0 md:h-auto md:visible break-words line-clamp-1 whitespace-normal\">\n {{ subtitle() }}\n </div>\n <ng-content></ng-content>\n </div>\n @if (price()) {\n <div class=\"md:text-lg font-bold py-1\">\u00A5{{ price() }}</div>\n }\n</div>\n", styles: ["rolatech-rich-item{--rt-rich-view-item-margin: 16px;display:flex;position:relative;cursor:pointer;flex-direction:column;margin-left:calc(var(--rt-rich-view-item-margin) / 2);margin-right:calc(var(--rt-rich-view-item-margin) / 2);width:calc(100% / var(--rt-rich-view-items-per-row) - var(--rt-rich-view-item-margin) - .01px)}#details.rolatech-rich-item{display:flex;flex-direction:column;justify-content:space-between}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [Promise.resolve().then(function () { return thumbnail_component; }).then(m => m.ThumbnailComponent)]] });
|
|
1622
|
+
}
|
|
1623
|
+
i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "19.0.3", ngImport: i0, type: RichItemComponent, resolveDeferredDeps: () => [Promise.resolve().then(function () { return thumbnail_component; }).then(m => m.ThumbnailComponent)], resolveMetadata: ThumbnailComponent => ({ decorators: [{
|
|
1624
|
+
type: Component,
|
|
1625
|
+
args: [{ selector: 'rolatech-rich-item', imports: [CommonModule, ThumbnailComponent], encapsulation: ViewEncapsulation.None, template: "<div id=\"thumbnail\" class=\"rolatech-rich-item\">\n @defer (on viewport()) {\n <rolatech-thumbnail [src]=\"thumbnail()\" size=\"medium\" [ratio]=\"thumbnailRatio()\"></rolatech-thumbnail>\n } @placeholder {\n <div class=\"bg-[--rt-10-percent-layer] h-full w-full object-cover aspect-video rounded-lg\"></div>\n }\n</div>\n<div id=\"details\" class=\"rolatech-rich-item\">\n <div>\n <div class=\"py-1\">\n <a class=\"md:text-xl font-bold break-words line-clamp-1 md:line-clamp-2 whitespace-normal\">\n {{ title() }}\n </a>\n </div>\n <div class=\"invisible h-0 md:h-auto md:visible break-words line-clamp-1 whitespace-normal\">\n {{ subtitle() }}\n </div>\n <ng-content></ng-content>\n </div>\n @if (price()) {\n <div class=\"md:text-lg font-bold py-1\">\u00A5{{ price() }}</div>\n }\n</div>\n", styles: ["rolatech-rich-item{--rt-rich-view-item-margin: 16px;display:flex;position:relative;cursor:pointer;flex-direction:column;margin-left:calc(var(--rt-rich-view-item-margin) / 2);margin-right:calc(var(--rt-rich-view-item-margin) / 2);width:calc(100% / var(--rt-rich-view-items-per-row) - var(--rt-rich-view-item-margin) - .01px)}#details.rolatech-rich-item{display:flex;flex-direction:column;justify-content:space-between}\n"] }]
|
|
1626
|
+
}], ctorParameters: null, propDecorators: { hasClass: [{
|
|
1627
|
+
type: HostBinding,
|
|
1628
|
+
args: ['class.rolatech-rich-item']
|
|
1629
|
+
}] } }) });
|
|
1630
|
+
|
|
1631
|
+
class RichViewComponent {
|
|
1632
|
+
hasClass = true;
|
|
1633
|
+
disableScrollbar = true;
|
|
1634
|
+
platformId = inject(PLATFORM_ID);
|
|
1635
|
+
el = inject(ElementRef);
|
|
1636
|
+
items = contentChildren(RichItemComponent, { read: ElementRef });
|
|
1637
|
+
list = input(false, { transform: booleanAttribute });
|
|
1638
|
+
wrap = input(false, { transform: booleanAttribute });
|
|
1639
|
+
resizeObserver;
|
|
1640
|
+
constructor() {
|
|
1641
|
+
effect(() => {
|
|
1642
|
+
if (this.list()) {
|
|
1643
|
+
this.el.nativeElement.setAttribute('list', '');
|
|
1644
|
+
}
|
|
1645
|
+
else {
|
|
1646
|
+
this.el.nativeElement.removeAttribute('list', '');
|
|
1647
|
+
}
|
|
1648
|
+
if (this.wrap()) {
|
|
1649
|
+
this.el.nativeElement.setAttribute('wrap', '');
|
|
1650
|
+
}
|
|
1651
|
+
else {
|
|
1652
|
+
this.el.nativeElement.removeAttribute('wrap', '');
|
|
1653
|
+
}
|
|
1654
|
+
});
|
|
1655
|
+
}
|
|
1656
|
+
ngOnInit() {
|
|
1657
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
1658
|
+
this.resizeObserver = new ResizeObserver((entries) => {
|
|
1659
|
+
for (const entry of entries) {
|
|
1660
|
+
// this.setCustomProperties(entry.contentRect.width);
|
|
1661
|
+
}
|
|
1662
|
+
});
|
|
1663
|
+
this.resizeObserver.observe(this.el.nativeElement);
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
ngAfterViewInit() { }
|
|
1667
|
+
setCustomProperties(width) {
|
|
1668
|
+
if (width <= 600) {
|
|
1669
|
+
this.el.nativeElement.style.setProperty('--rt-rich-view-items-per-row', 1);
|
|
1670
|
+
}
|
|
1671
|
+
if (600 < width && width <= 768) {
|
|
1672
|
+
this.el.nativeElement.style.setProperty('--rt-rich-view-items-per-row', 2);
|
|
1673
|
+
}
|
|
1674
|
+
if (768 < width && width <= 1280) {
|
|
1675
|
+
this.el.nativeElement.style.setProperty('--rt-rich-view-items-per-row', 3);
|
|
1676
|
+
}
|
|
1677
|
+
if (1280 < width && width <= 1536) {
|
|
1678
|
+
this.el.nativeElement.style.setProperty('--rt-rich-view-items-per-row', 4);
|
|
1679
|
+
}
|
|
1680
|
+
if (width > 1536) {
|
|
1681
|
+
this.el.nativeElement.style.setProperty('--rt-rich-view-items-per-row', 5);
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: RichViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1685
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: RichViewComponent, isStandalone: true, selector: "rolatech-rich-view", inputs: { list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rolatech-rich-view": "this.hasClass", "class.scrollbar-hide": "this.disableScrollbar" } }, queries: [{ propertyName: "items", predicate: RichItemComponent, read: ElementRef, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n\n<!-- <div class=\"rich-view-content\">\n <ng-content></ng-content>\n</div> -->\n<!-- <div class=\"rich-view-button\">\n <button mat-stroked-button>\u52A0\u8F7D\u66F4\u591A</button>\n</div> -->\n", styles: ["rolatech-rich-view{--rt-rich-view-items-per-row: 1;--rt-rich-view-item-max-width: 500px;position:relative;display:flex;padding-bottom:16px;margin-bottom:56px}rolatech-rich-view[list]{flex-direction:column;flex-wrap:nowrap}rolatech-rich-view[wrap]{flex-wrap:wrap;--rt-rich-view-items-per-row: 2}rolatech-rich-view:not([wrap]){overflow-x:scroll}rolatech-rich-view:not([wrap]) rolatech-rich-item{--rt-rich-view-item-min-width: 40%;min-width:var(--rt-rich-view-item-min-width)}@media (min-width: 768px){rolatech-rich-view:not([wrap]) rolatech-rich-item{--rt-rich-view-item-min-width: 28%}}rolatech-rich-view[list] rolatech-rich-item{flex-direction:row;padding:12px 0;cursor:pointer}rolatech-rich-view[list] rolatech-rich-item #thumbnail.rolatech-rich-item{width:33%;min-width:33%}rolatech-rich-view[list] rolatech-rich-item #details.rolatech-rich-item{margin-left:12px}rolatech-rich-view[list] rolatech-rich-item:hover{background-color:var(--rt-10-percent-layer)}rolatech-rich-view:not([list]) rolatech-rich-item{margin-bottom:32px}@media (min-width: 600px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 2}}@media (min-width: 768px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 3}}@media (min-width: 1280px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 3}}@media (min-width: 1536px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 4}}@media (min-width: 1920px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 5}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.rich-view-button{position:absolute;bottom:-44px;left:50%;transform:translate(-50%,-50%);background-color:var(--yt-spec-base-background);z-index:1;width:360px;max-width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1686
|
+
}
|
|
1687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: RichViewComponent, decorators: [{
|
|
1688
|
+
type: Component,
|
|
1689
|
+
args: [{ selector: 'rolatech-rich-view', imports: [CommonModule, MatButtonModule], encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n\n<!-- <div class=\"rich-view-content\">\n <ng-content></ng-content>\n</div> -->\n<!-- <div class=\"rich-view-button\">\n <button mat-stroked-button>\u52A0\u8F7D\u66F4\u591A</button>\n</div> -->\n", styles: ["rolatech-rich-view{--rt-rich-view-items-per-row: 1;--rt-rich-view-item-max-width: 500px;position:relative;display:flex;padding-bottom:16px;margin-bottom:56px}rolatech-rich-view[list]{flex-direction:column;flex-wrap:nowrap}rolatech-rich-view[wrap]{flex-wrap:wrap;--rt-rich-view-items-per-row: 2}rolatech-rich-view:not([wrap]){overflow-x:scroll}rolatech-rich-view:not([wrap]) rolatech-rich-item{--rt-rich-view-item-min-width: 40%;min-width:var(--rt-rich-view-item-min-width)}@media (min-width: 768px){rolatech-rich-view:not([wrap]) rolatech-rich-item{--rt-rich-view-item-min-width: 28%}}rolatech-rich-view[list] rolatech-rich-item{flex-direction:row;padding:12px 0;cursor:pointer}rolatech-rich-view[list] rolatech-rich-item #thumbnail.rolatech-rich-item{width:33%;min-width:33%}rolatech-rich-view[list] rolatech-rich-item #details.rolatech-rich-item{margin-left:12px}rolatech-rich-view[list] rolatech-rich-item:hover{background-color:var(--rt-10-percent-layer)}rolatech-rich-view:not([list]) rolatech-rich-item{margin-bottom:32px}@media (min-width: 600px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 2}}@media (min-width: 768px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 3}}@media (min-width: 1280px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 3}}@media (min-width: 1536px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 4}}@media (min-width: 1920px){rolatech-rich-view:not([list]){--rt-rich-view-items-per-row: 5}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.rich-view-button{position:absolute;bottom:-44px;left:50%;transform:translate(-50%,-50%);background-color:var(--yt-spec-base-background);z-index:1;width:360px;max-width:100%}\n"] }]
|
|
1690
|
+
}], ctorParameters: () => [], propDecorators: { hasClass: [{
|
|
1691
|
+
type: HostBinding,
|
|
1692
|
+
args: ['class.rolatech-rich-view']
|
|
1693
|
+
}], disableScrollbar: [{
|
|
1694
|
+
type: HostBinding,
|
|
1695
|
+
args: ['class.scrollbar-hide']
|
|
1696
|
+
}] } });
|
|
1697
|
+
|
|
1698
|
+
class EditorComponent {
|
|
1699
|
+
platformId = inject(PLATFORM_ID);
|
|
1700
|
+
isBrowser;
|
|
1701
|
+
editor;
|
|
1702
|
+
constructor() {
|
|
1703
|
+
this.isBrowser = isPlatformBrowser(this.platformId);
|
|
1704
|
+
// const options = {
|
|
1705
|
+
// debug: 'info',
|
|
1706
|
+
// modules: {
|
|
1707
|
+
// toolbar: true,
|
|
1708
|
+
// },
|
|
1709
|
+
// placeholder: 'Compose an epic...',
|
|
1710
|
+
// theme: 'snow',
|
|
1711
|
+
// };
|
|
1712
|
+
// const quill = new Quill('#editor', options);
|
|
1713
|
+
}
|
|
1714
|
+
ngAfterViewInit() {
|
|
1715
|
+
this.quill();
|
|
1716
|
+
}
|
|
1717
|
+
ngOnInit() {
|
|
1718
|
+
// this.quill();
|
|
1719
|
+
}
|
|
1720
|
+
get toolbar() {
|
|
1721
|
+
return [
|
|
1722
|
+
['bold', 'italic', 'underline', 'strike'], // toggled buttons
|
|
1723
|
+
['blockquote', 'code-block'],
|
|
1724
|
+
// [{ header: 1 }, { header: 2 }], // custom button values
|
|
1725
|
+
[{ list: 'ordered' }, { list: 'bullet' }],
|
|
1726
|
+
[{ script: 'sub' }, { script: 'super' }], // superscript/subscript
|
|
1727
|
+
[{ indent: '-1' }, { indent: '+1' }], // outdent/indent
|
|
1728
|
+
[{ direction: 'rtl' }], // text direction
|
|
1729
|
+
// [{ size: ['small', false, 'large', 'huge'] }], // custom dropdown
|
|
1730
|
+
[{ header: [1, 2, 3, 4, 5, 6, false] }],
|
|
1731
|
+
// [{ color: [] }, { background: [] }], // dropdown with defaults from theme
|
|
1732
|
+
[{ font: [] }],
|
|
1733
|
+
[{ align: [] }],
|
|
1734
|
+
['clean'], // remove formatting button
|
|
1735
|
+
];
|
|
1736
|
+
}
|
|
1737
|
+
async quill() {
|
|
1738
|
+
if (this.isBrowser) {
|
|
1739
|
+
const m = await import('quill');
|
|
1740
|
+
this.editor = new m.default('#editor', {
|
|
1741
|
+
// modules: { toolbar: '#toolbar' },
|
|
1742
|
+
modules: { toolbar: this.toolbar },
|
|
1743
|
+
theme: 'snow',
|
|
1744
|
+
placeholder: 'placeholder',
|
|
1745
|
+
});
|
|
1746
|
+
}
|
|
1747
|
+
}
|
|
1748
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: EditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1749
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: EditorComponent, isStandalone: true, selector: "rolatech-editor", ngImport: i0, template: "<div id=\"editor\"></div>\n", styles: ["@import\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\";.ql-snow{position:relative}.ql-snow .ql-toolbar{position:sticky;top:5em}.ql-snow button{width:inherit!important;height:24px!important}.ql-snow .ql-editor{border:4px solid #efefef}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1750
|
+
}
|
|
1751
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: EditorComponent, decorators: [{
|
|
1752
|
+
type: Component,
|
|
1753
|
+
args: [{ selector: 'rolatech-editor', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<div id=\"editor\"></div>\n", styles: ["@import\"https://cdn.jsdelivr.net/npm/quill@2.0.2/dist/quill.snow.css\";.ql-snow{position:relative}.ql-snow .ql-toolbar{position:sticky;top:5em}.ql-snow button{width:inherit!important;height:24px!important}.ql-snow .ql-editor{border:4px solid #efefef}\n"] }]
|
|
1754
|
+
}], ctorParameters: () => [] });
|
|
1755
|
+
|
|
1756
|
+
class AccordionComponent {
|
|
1757
|
+
hasClass = true;
|
|
1758
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1759
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AccordionComponent, isStandalone: true, selector: "rolatech-accordion", host: { properties: { "class.rolatech-accordion": "this.hasClass" } }, ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1760
|
+
}
|
|
1761
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AccordionComponent, decorators: [{
|
|
1762
|
+
type: Component,
|
|
1763
|
+
args: [{ selector: 'rolatech-accordion', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n" }]
|
|
1764
|
+
}], propDecorators: { hasClass: [{
|
|
1765
|
+
type: HostBinding,
|
|
1766
|
+
args: ['class.rolatech-accordion']
|
|
1767
|
+
}] } });
|
|
1768
|
+
|
|
1769
|
+
const PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';
|
|
1770
|
+
const panelAnimations = {
|
|
1771
|
+
/** Animation that rotates the indicator arrow. */
|
|
1772
|
+
indicator: trigger('indicator', [
|
|
1773
|
+
state('collapsed, void', style({ transform: 'rotate(0deg)' })),
|
|
1774
|
+
state('expanded', style({ transform: 'rotate(180deg)' })),
|
|
1775
|
+
transition('expanded <=> collapsed, void => collapsed', animate(PANEL_ANIMATION_TIMING)),
|
|
1776
|
+
]),
|
|
1777
|
+
/** Animation that expands and collapses the panel content. */
|
|
1778
|
+
content: trigger('content', [
|
|
1779
|
+
state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),
|
|
1780
|
+
state('expanded', style({ height: '*', visibility: 'visible' })),
|
|
1781
|
+
transition('expanded <=> collapsed, void => collapsed', animate(PANEL_ANIMATION_TIMING)),
|
|
1782
|
+
]),
|
|
1783
|
+
};
|
|
1784
|
+
|
|
1785
|
+
class PanelComponent {
|
|
1786
|
+
hasClass = true;
|
|
1787
|
+
border = input(false, { transform: booleanAttribute });
|
|
1788
|
+
divider = input(false, { transform: booleanAttribute });
|
|
1789
|
+
expanded = model(false);
|
|
1790
|
+
title = input();
|
|
1791
|
+
subtitle = input();
|
|
1792
|
+
el = inject(ElementRef);
|
|
1793
|
+
constructor() {
|
|
1794
|
+
effect(() => {
|
|
1795
|
+
if (this.expanded()) {
|
|
1796
|
+
this.el.nativeElement.setAttribute('expanded', '');
|
|
1797
|
+
}
|
|
1798
|
+
else {
|
|
1799
|
+
this.el.nativeElement.removeAttribute('expanded');
|
|
1800
|
+
}
|
|
1801
|
+
if (this.border()) {
|
|
1802
|
+
this.el.nativeElement.setAttribute('border', '');
|
|
1803
|
+
}
|
|
1804
|
+
else {
|
|
1805
|
+
this.el.nativeElement.removeAttribute('border');
|
|
1806
|
+
}
|
|
1807
|
+
if (this.divider()) {
|
|
1808
|
+
this.el.nativeElement.setAttribute('divider', '');
|
|
1809
|
+
}
|
|
1810
|
+
else {
|
|
1811
|
+
this.el.nativeElement.removeAttribute('divider');
|
|
1812
|
+
}
|
|
1813
|
+
});
|
|
1814
|
+
}
|
|
1815
|
+
ngOnInit() { }
|
|
1816
|
+
ngAfterViewInit() { }
|
|
1817
|
+
toggle() {
|
|
1818
|
+
this.expanded.set(!this.expanded());
|
|
1819
|
+
}
|
|
1820
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1821
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: PanelComponent, isStandalone: true, selector: "rolatech-panel", inputs: { border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expanded: "expandedChange" }, host: { properties: { "class.rolatech-panel": "this.hasClass" } }, ngImport: i0, template: "<div id=\"header\" class=\"header rolatech-panel w-full h-11\" (click)=\"toggle(); $event.stopPropagation()\">\n <ng-content select=\"rolatech-panel-header\"></ng-content>\n <div>{{ title() }}</div>\n <rolatech-icon [@indicator]=\"expanded() === true ? 'expanded' : 'collapsed'\">expand_more</rolatech-icon>\n</div>\n<div class=\"content-container rolatech-panel\" [@content]=\"expanded() === true ? 'expanded' : 'collapsed'\">\n <div class=\"content-inner rolatech-panel\">\n <ng-content>No content</ng-content>\n </div>\n</div>\n", styles: ["rolatech-panel{box-sizing:content-box;display:block;overflow:hidden;background:var(--rt-base-background);color:var(--rt-text-primary);--rt-panel-padding: 12px}rolatech-panel:not([border]){margin-bottom:var(--rt-panel-padding)}rolatech-panel .header{padding:var(--rt-panel-padding);display:flex;justify-content:space-between;align-items:center;height:44px;background-color:var(--rt-10-percent-layer);cursor:pointer}rolatech-panel .header:hover{background-color:var(--rt-20-percent-layer)}rolatech-panel .content-container{overflow:visible}rolatech-panel .content-container .content-inner{padding:var(--rt-panel-padding)}rolatech-panel[border]{border-top:1px solid #d1d7dc;border-left:1px solid #d1d7dc;border-right:1px solid #d1d7dc}rolatech-panel[border]:last-child{border-bottom:1px solid #d1d7dc}rolatech-panel[divider]{border-bottom:1px solid #d1d7dc}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IconComponent, selector: "rolatech-icon", inputs: ["filled"] }], animations: [panelAnimations.indicator, panelAnimations.content], encapsulation: i0.ViewEncapsulation.None });
|
|
1822
|
+
}
|
|
1823
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PanelComponent, decorators: [{
|
|
1824
|
+
type: Component,
|
|
1825
|
+
args: [{ selector: 'rolatech-panel', imports: [CommonModule, IconComponent], encapsulation: ViewEncapsulation.None, animations: [panelAnimations.indicator, panelAnimations.content], template: "<div id=\"header\" class=\"header rolatech-panel w-full h-11\" (click)=\"toggle(); $event.stopPropagation()\">\n <ng-content select=\"rolatech-panel-header\"></ng-content>\n <div>{{ title() }}</div>\n <rolatech-icon [@indicator]=\"expanded() === true ? 'expanded' : 'collapsed'\">expand_more</rolatech-icon>\n</div>\n<div class=\"content-container rolatech-panel\" [@content]=\"expanded() === true ? 'expanded' : 'collapsed'\">\n <div class=\"content-inner rolatech-panel\">\n <ng-content>No content</ng-content>\n </div>\n</div>\n", styles: ["rolatech-panel{box-sizing:content-box;display:block;overflow:hidden;background:var(--rt-base-background);color:var(--rt-text-primary);--rt-panel-padding: 12px}rolatech-panel:not([border]){margin-bottom:var(--rt-panel-padding)}rolatech-panel .header{padding:var(--rt-panel-padding);display:flex;justify-content:space-between;align-items:center;height:44px;background-color:var(--rt-10-percent-layer);cursor:pointer}rolatech-panel .header:hover{background-color:var(--rt-20-percent-layer)}rolatech-panel .content-container{overflow:visible}rolatech-panel .content-container .content-inner{padding:var(--rt-panel-padding)}rolatech-panel[border]{border-top:1px solid #d1d7dc;border-left:1px solid #d1d7dc;border-right:1px solid #d1d7dc}rolatech-panel[border]:last-child{border-bottom:1px solid #d1d7dc}rolatech-panel[divider]{border-bottom:1px solid #d1d7dc}\n"] }]
|
|
1826
|
+
}], ctorParameters: () => [], propDecorators: { hasClass: [{
|
|
1827
|
+
type: HostBinding,
|
|
1828
|
+
args: ['class.rolatech-panel']
|
|
1829
|
+
}] } });
|
|
1830
|
+
|
|
1831
|
+
class PanelHeaderComponent {
|
|
1832
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PanelHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1833
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: PanelHeaderComponent, isStandalone: true, selector: "rolatech-panel-header", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None });
|
|
1834
|
+
}
|
|
1835
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: PanelHeaderComponent, decorators: [{
|
|
1836
|
+
type: Component,
|
|
1837
|
+
args: [{ selector: 'rolatech-panel-header', imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n" }]
|
|
1838
|
+
}] });
|
|
1839
|
+
|
|
1840
|
+
/**
|
|
1841
|
+
* Generated bundle index. Do not edit.
|
|
1842
|
+
*/
|
|
1843
|
+
|
|
1844
|
+
export { APP_LAYOUT, AccordionComponent, AngularComponentsModule, AppPageComponent, AvatarComponent, BaseComponent, ChipBarComponent, ConfirmationDialogComponent, ConsoleLayoutComponent, ContainerComponent, ContentComponent, DrawerComponent, EditorComponent, EmptyComponent, FilterComponent, FolderComponent, FooterComponent, IconButtonComponent, IconComponent, ImageComponent, ImagePlaceholderComponent, ImagePreviewDialogComponent, InputComponent, LayoutComponent, ListComponent, MaterialModule, MediaListComponent, MediaListItemComponent, MediaPreviewComponent, MediaPreviewDialogComponent, MediaUploadComponent, MediaUploadDialogComponent, MenuIconComponent, MenuUserComponent, MiniGuideComponent, NotFoundComponent, PaginatorComponent, PanelComponent, PanelHeaderComponent, RichItemComponent, RichViewComponent, SpinnerComponent, StorageBucketCreateComponent, StorageFileUploadComponent, StorageFolderCreateComponent, TabComponent, TableComponent, TabsComponent, ThumbnailComponent, TitleComponent, ToolbarComponent, TopbarAvatarMenuComponent, TopbarComponent, WechatConnectDialogComponent, provideAngularLayout };
|
|
1845
|
+
//# sourceMappingURL=rolatech-angular-components.mjs.map
|