@yuuvis/app-templates 1.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/extensions/README.md +3 -0
- package/extensions/index.d.ts +1 -0
- package/extensions/lib/actions/apply.action.d.ts +16 -0
- package/extensions/lib/actions/apply.component.d.ts +28 -0
- package/extensions/lib/assets/i18n/de.json +11 -0
- package/extensions/lib/assets/i18n/en.json +11 -0
- package/extensions/lib/extensions.service.d.ts +14 -0
- package/fesm2022/yuuvis-app-templates-extensions.mjs +182 -0
- package/fesm2022/yuuvis-app-templates-extensions.mjs.map +1 -0
- package/fesm2022/yuuvis-app-templates.mjs +544 -0
- package/fesm2022/yuuvis-app-templates.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/lib/app-templates.component.d.ts +7 -0
- package/lib/app-templates.schema.d.ts +42 -0
- package/lib/app-templates.service.d.ts +24 -0
- package/lib/assets/i18n/de.json +24 -0
- package/lib/assets/i18n/en.json +24 -0
- package/lib/components/template-details/template-details.component.d.ts +7 -0
- package/lib/lib.routes.d.ts +2 -0
- package/lib/overlays/create-template/create-template.component.d.ts +18 -0
- package/lib/pages/management/template-management.component.d.ts +45 -0
- package/package.json +28 -0
- package/yuv-manifest.json +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yuuvis-app-templates.mjs","sources":["../../../../projects/yuuvis/app-templates/src/lib/app-templates.schema.ts","../../../../projects/yuuvis/app-templates/src/lib/app-templates.service.ts","../../../../projects/yuuvis/app-templates/src/lib/app-templates.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.ts","../../../../projects/yuuvis/app-templates/src/lib/components/template-details/template-details.component.html","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.ts","../../../../projects/yuuvis/app-templates/src/lib/overlays/create-template/create-template.component.html","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.ts","../../../../projects/yuuvis/app-templates/src/lib/pages/management/template-management.component.html","../../../../projects/yuuvis/app-templates/src/lib/lib.routes.ts","../../../../projects/yuuvis/app-templates/src/yuuvis-app-templates.ts"],"sourcesContent":["import { BaseObjectTypeField, CoreApiObject } from '@yuuvis/client-core';\nimport { AppSchema } from '@yuuvis/client-shell-core';\n\nexport const APP_ID = 'io.yuuvis.app.templates';\n\nexport const APP_ICONS = {\n close: 'close',\n refresh: 'refresh',\n actionApplyTemplate: 'article_shortcut',\n actionCreateNewTemplate: 'add_notes',\n actionToggleStateToPublished: 'input_circle',\n actionToggleStateToUnpublished: 'unpublished',\n actionDeleteTemplate: 'delete',\n actionDownloadTemplateContent: 'download',\n actionReplaceTemplateContent: 'upload_file',\n toggleRight: 'dock_to_left',\n};\n\nexport const APP_ACTIONS = {\n apply: APP_ID + 'action.apply',\n};\n\nexport const APP_SCHEMA: AppSchema = {\n id: APP_ID,\n name: 'yuuvis Templates',\n icon: 'library_books',\n types: {},\n flavors: []\n};\n\nexport const TEMPLATE_FILE_MIME_TYPE = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n\nexport class TemplateObject {\n readonly id: string;\n\n name: string;\n description: string;\n published: boolean;\n dataObjectType: string\n\n constructor(obj: CoreApiObject) {\n this.id = obj.properties[BaseObjectTypeField.OBJECT_ID].value as string;\n this.name = obj.properties[\"appTemplates:name\"].value as string;\n this.description = obj.properties[\"appTemplates:description\"]?.value as string;\n this.published = obj.properties[\"appTemplates:published\"].value as boolean;\n this.dataObjectType = (obj.properties[\"appTemplates:dataObjects\"].value as Array<string[]>)[0][1];\n }\n}\n\nexport enum TemplateManagementEventType {\n TEMPLATE_OBJECT_CREATED = APP_ID + '.object.created',\n TEMPLATE_OBJECT_UPDATED = APP_ID + '.object.updated',\n TEMPLATE_OBJECT_DELETED = APP_ID + '.object.deleted'\n}\n\nexport interface CreateTemplateResult {\n id: string;\n}\n\nexport interface TemplateSearchResponse {\n pageNumber: number;\n pageSize: number;\n totalNumItems: number;\n items: TemplateObject[];\n}","import { HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport {\n ApiBase,\n BackendService,\n BaseObjectTypeField,\n ContentStreamAllowed,\n CoreApiObject,\n DmsService,\n GenericObjectType,\n Logger,\n SearchResponse,\n SystemService,\n TranslateService,\n} from '@yuuvis/client-core';\nimport {\n catchError,\n map,\n Observable,\n of,\n ReplaySubject,\n switchMap,\n tap,\n throwError,\n} from 'rxjs';\nimport {\n CreateTemplateResult,\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from './app-templates.schema';\n\nimport { ConfirmService } from '@yuuvis/client-framework/common';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TemplateService {\n static PAGE_SIZE = 20;\n\n readonly #logger = inject(Logger);\n\n readonly #backendService = inject(BackendService);\n readonly #dmsService = inject(DmsService);\n readonly #confirmService = inject(ConfirmService);\n readonly #translateService = inject(TranslateService);\n readonly #systemService = inject(SystemService)\n\n private templates?: TemplateSearchResponse;\n\n private templatesDataSource = new ReplaySubject<TemplateSearchResponse>(1);\n public templates$: Observable<TemplateSearchResponse> =\n this.templatesDataSource.asObservable();\n\n private busyDataSource = signal<boolean>(false);\n public busy$ = this.busyDataSource.asReadonly();\n\n constructor() {}\n\n getAvailableDataObjectTypes(): GenericObjectType[] {\n return this.#systemService.getObjectTypes().filter((ot) => !ot.isFolder && ot.contentStreamAllowed !== ContentStreamAllowed.NOT_ALLOWED);\n }\n\n getPage(page?: number) {\n this.busyDataSource.set(true);\n\n this.#fetchTemplates(page)\n .subscribe({\n next: (res: TemplateSearchResponse) => {\n this.templates = res;\n this.templatesDataSource.next(this.templates);\n },\n error: (e: any) => {\n this.#logger.error('Failed to fetch templates', e);\n },\n })\n .add(() => this.busyDataSource.set(false));\n }\n\n createTemplate(\n name: string,\n description: string,\n dataObjectType: string\n ): Observable<CreateTemplateResult> {\n let requestParams = {\n name: name,\n description: description,\n dataObjects: { objectData: dataObjectType },\n };\n\n return this.#backendService\n .post(`/template-service/api/objects/`, requestParams, ApiBase.none)\n .pipe(\n catchError((e: HttpErrorResponse) => {\n this.#logger.error('Failed to create template', e);\n return throwError(() => new Error(e.message));\n }),\n map((res: CoreApiObject) => ({\n id: res.properties[BaseObjectTypeField.OBJECT_ID].value as string,\n })),\n tap((res: CreateTemplateResult) => this.refreshTemplates())\n );\n }\n\n downloadTemplateContent(template: TemplateObject): void {\n return this.#backendService.download(\n this.#dmsService.getContentPath(template.id, undefined)\n );\n }\n\n replaceTemplateContent(\n template: TemplateObject,\n file: File\n ): Observable<boolean> {\n if (file.type != TEMPLATE_FILE_MIME_TYPE) {\n return throwError(\n () =>\n new Error(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.error.unsupportedFileType'\n )\n )\n );\n }\n\n return this.#dmsService\n .uploadContent(template.id, file)\n .pipe(tap(() => this.refreshTemplates()));\n }\n\n toggleTemplateState(template: TemplateObject): Observable<boolean> {\n let requestParams = {\n published: !template.published,\n };\n\n return this.#confirmService\n .confirm(\n template.published\n ? {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.unpublish.confirm.message',\n { template: template.name }\n ),\n }\n : {\n title: this.#translateService.instant(\n 'yuv.app.templates.action.publish.label'\n ),\n message: this.#translateService.instant(\n 'yuv.app.templates.action.publish.confirm.message',\n { template: template.name }\n ),\n }\n )\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .patch(\n `/template-service/api/objects/${template.id}`,\n requestParams,\n ApiBase.none\n )\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n deleteTemplate(template: TemplateObject): Observable<boolean> {\n return this.#confirmService\n .confirm({\n title: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n message: template.published\n ? this.#translateService.instant(\n 'yuv.app.templates.action.delete.public.confirm.message',\n { template: template.name }\n )\n : this.#translateService.instant(\n 'yuv.app.templates.action.delete.confirm.message',\n { template: template.name }\n ),\n })\n .pipe(\n switchMap((confirmed: boolean) => {\n if (confirmed) {\n return this.#backendService\n .delete(`/dms/objects/${template.id}`, ApiBase.core)\n .pipe(\n map(() => true),\n tap(() => this.refreshTemplates())\n );\n } else return of(false);\n })\n );\n }\n\n refreshTemplates() {\n this.getPage(this.templates?.pageNumber);\n }\n\n #fetchTemplates(pageNumber = 0): Observable<TemplateSearchResponse> {\n let filterParams = new HttpParams()\n .set('page', pageNumber)\n .set('size', TemplateService.PAGE_SIZE)\n .set('sort', 'name%2Casc');\n\n return this.#backendService\n .get(`/template-service/api/objects/?${filterParams}`, ApiBase.none)\n .pipe(\n map((res: SearchResponse) => ({\n pageNumber: pageNumber,\n pageSize: TemplateService.PAGE_SIZE,\n totalNumItems: res.totalNumItems,\n items: res.objects.map(\n (obj: CoreApiObject) => new TemplateObject(obj)\n ),\n }))\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@yuuvis/client-core';\nimport { AppLogoComponent } from '@yuuvis/client-shell';\nimport { APP_SCHEMA } from './app-templates.schema';\n\nconst components = [AppLogoComponent];\n\nconst module = [CommonModule, TranslateModule, RouterModule];\n\n@Component({\n selector: 'ymtmpl-app-templates',\n standalone: true,\n imports: [...module, ...components],\n template: `\n <header>\n <yuv-app-logo [label]=\"appName\" routerLink=\"management\"></yuv-app-logo>\n </header>\n <main><router-outlet></router-outlet></main>\n `,\n styleUrl: './app-templates.component.scss',\n})\nexport class YuvTemplatesComponent {\n appName = APP_SCHEMA.name;\n appIcon = APP_SCHEMA.icon;\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { ObjectPreviewComponent } from '@yuuvis/client-framework/object-preview';\nimport { TemplateObject } from '../../app-templates.schema';\n\nconst components = [\n ObjectPreviewComponent\n];\n\nconst modules = [\n CommonModule\n];\n\n@Component({\n selector: 'ymtmpl-template-details',\n templateUrl: './template-details.component.html',\n styleUrls: ['./template-details.component.scss'],\n standalone: true,\n imports: [...modules, ...components]\n})\nexport class TemplateDetailsComponent {\n @Input() templateObject!: TemplateObject;\n}","<yuv-object-preview [objectId]=\"templateObject.id\"></yuv-object-preview>","import { CommonModule } from '@angular/common';\nimport { Component, inject, linkedSignal, signal } from '@angular/core';\nimport {\n FormBuilder,\n FormGroup,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { GenericObjectType, TranslateModule } from '@yuuvis/client-core';\nimport { StringComponent } from '@yuuvis/client-framework/forms';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { TemplateService } from './../../app-templates.service';\nimport { BusyOverlayDirective, DialogComponent } from '@yuuvis/client-framework/common';\n\nconst components = [BusyOverlayDirective, StringComponent, YmtButtonDirective, DialogComponent];\n\nconst modules = [\n CommonModule,\n ReactiveFormsModule,\n TranslateModule,\n MatFormFieldModule,\n MatSelectModule\n];\n\n@Component({\n selector: 'ymtmpl-create-template',\n templateUrl: './create-template.component.html',\n styleUrl: './create-template.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n '[class.busy]': '!busy()',\n },\n})\nexport class CreateTemplateComponent {\n readonly #fb = inject(FormBuilder);\n readonly #templateService = inject(TemplateService);\n readonly #dialogRef = inject(MatDialogRef<CreateTemplateComponent>);\n\n busy = signal<boolean>(false);\n\n error = signal<string | undefined>(undefined);\n\n form: FormGroup = this.#fb.group({\n name: ['New template', Validators.required],\n description: [''],\n dataObjectType: ['system:document', Validators.required]\n });\n\n dataObjectTypes = signal<GenericObjectType[]>([]);\n\n changedInput = signal<any | undefined>(undefined);\n \n disabledSubmit = linkedSignal({\n source: this.changedInput,\n computation: () => {\n return this.busy() || this.form.invalid || !this.form.value.name;\n }\n });\n\n constructor() {\n this.#loadDataObjectTypes();\n }\n\n #loadDataObjectTypes() {\n this.dataObjectTypes.set(this.#templateService.getAvailableDataObjectTypes().sort((ot1, ot2) => ot1.id > ot2.id ? 1 : -1))\n }\n\n createTemplate() {\n let createParams = this.form.value;\n\n this.busy.set(true);\n this.error.set(undefined);\n\n this.#templateService\n .createTemplate(\n createParams.name,\n createParams.description,\n createParams.dataObjectType\n )\n .subscribe({\n error: (e: any) => {\n this.error.set(e);\n this.busy.set(false);\n },\n complete: () => {\n this.close();\n },\n });\n }\n\n close() {\n this.#dialogRef.close();\n }\n\n ngAfterViewInit() {\n this.form.valueChanges.subscribe((value) => {\n this.changedInput.set(value);\n });\n }\n}\n","<yuv-dialog [yuvBusyOverlay]=\"busy()\" [headertitel]=\"'yuv.app.templates.action.create.headline' | translate\">\n <main>\n <form [formGroup]=\"form\">\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.name\" | translate }}</mat-label>\n <yuv-string [required]=\"true\" formControlName=\"name\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.description\" | translate}}</mat-label>\n <yuv-string formControlName=\"description\"></yuv-string>\n </mat-form-field>\n <mat-form-field class=\"yuv-form-field\">\n <mat-label>{{\"yuv.app.templates.object.property.dataObjectType\" | translate}}</mat-label>\n <mat-select formControlName=\"dataObjectType\">\n @for (dataObjectType of dataObjectTypes(); track dataObjectType) {\n <mat-option [value]=\"dataObjectType.id\">{{ dataObjectType.id }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if (error()) {\n <p class=\"error\">{{ error() }}</p>\n }\n </form>\n </main>\n <footer>\n <button ymtButton=\"secondary\" [disabled]=\"busy()\" (click)=\"close()\">\n {{ \"yuv.app.templates.action.create.button.cancel\" | translate }}\n </button>\n <button ymtButton=\"primary\" [disabled]=\"disabledSubmit()\" (click)=\"createTemplate()\">\n {{ 'yuv.object-flavor.apply-flavor.button.apply' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n Component,\n HostBinding,\n inject,\n OnInit,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterModule } from '@angular/router';\nimport {\n DeviceScreen,\n DeviceService,\n Logger,\n NotificationService,\n TranslateModule,\n TranslateService\n} from '@yuuvis/client-core';\nimport {\n ListComponent,\n ListItemDirective,\n} from '@yuuvis/client-framework/list';\nimport { YuvMasterDetailsModule } from '@yuuvis/client-framework/master-details';\nimport {\n OverflowMenuItem,\n YuvOverflowMenuModule,\n} from '@yuuvis/client-framework/overflow-menu';\nimport {\n Pagination,\n PaginationComponent,\n} from '@yuuvis/client-framework/pagination';\nimport { tap } from 'rxjs';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {\n APP_ICONS,\n TEMPLATE_FILE_MIME_TYPE,\n TemplateObject,\n TemplateSearchResponse,\n} from '../../app-templates.schema';\nimport { TemplateDetailsComponent } from '../../components/template-details/template-details.component';\nimport { CreateTemplateComponent } from '../../overlays/create-template/create-template.component';\nimport { TemplateService } from '../../app-templates.service';\n\nconst components = [\n ListComponent,\n ListItemDirective,\n PaginationComponent,\n TemplateDetailsComponent,\n];\n\nconst modules = [\n CommonModule,\n TranslateModule,\n RouterModule,\n YuvOverflowMenuModule,\n YuvMasterDetailsModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n];\n\n@Component({\n selector: 'ymtmpl-templates-management',\n templateUrl: './template-management.component.html',\n styleUrl: './template-management.component.scss',\n standalone: true,\n imports: [...modules, ...components],\n host: {\n 'class.smallScreen': 'smallScreenLayout()',\n },\n})\nexport class TemplateManagementComponent implements OnInit {\n readonly layoutSettingsID = 'template-management.layout.settings';\n\n readonly #logger = inject(Logger);\n\n readonly #document = inject(DOCUMENT);\n readonly #deviceService = inject(DeviceService);\n readonly #notificationService = inject(NotificationService);\n readonly #dialog = inject(MatDialog);\n\n readonly #templateService = inject(TemplateService);\n readonly #translateService = inject(TranslateService);\n\n @HostBinding('class.pagination') pagination?: Pagination;\n\n busy = this.#templateService.busy$;\n\n icons = {\n ...APP_ICONS,\n };\n\n selectedTemplate = signal<TemplateObject | undefined>(undefined);\n\n smallScreenLayout = signal(false);\n\n layoutOptions = signal<{ masterSize: number; detailsSize: number }>({\n masterSize: 40,\n detailsSize: 60,\n });\n\n actions: OverflowMenuItem[] = [];\n\n #templates: TemplateObject[] = [];\n\n templates$ = this.#templateService.templates$.pipe(\n tap((response: TemplateSearchResponse) => {\n this.#templates = response.items;\n const selectedTemplate = this.selectedTemplate();\n if (selectedTemplate) {\n // check if the selected template is still in the list\n const found = this.#templates.find((t) => t.id === selectedTemplate.id);\n if (found) {\n // update the selected template instance and the actions\n this.selectedTemplate.set(found);\n this.#updateActions(this.selectedTemplate());\n } \n // if not, set selected template to undefined\n else this.selectedTemplate.set(undefined);\n }\n this.pagination =\n response && response.totalNumItems > response.pageSize\n ? {\n total: response.totalNumItems,\n page: response.pageNumber + 1,\n pages: Math.ceil(response.totalNumItems / response.pageSize),\n }\n : undefined;\n })\n );\n\n templateListComponent = viewChild.required(ListComponent);\n enableDetails = signal<boolean>(true);\n\n constructor() {\n this.#deviceService.screenChange$\n .pipe(takeUntilDestroyed())\n .subscribe((s: DeviceScreen) => {\n this.smallScreenLayout.set(\n s.size === 's' && s.orientation === 'portrait'\n );\n });\n }\n\n #updateActions(obj: TemplateObject | undefined) {\n this.actions = obj\n ? [\n {\n id: 'yuv.app.templates.action.replaceContent',\n icon: APP_ICONS.actionReplaceTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.label'\n ),\n callback: () => this.replaceCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.downloadContent',\n icon: APP_ICONS.actionDownloadTemplateContent,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.downloadContent.label'\n ),\n callback: () => this.downloadCurrentContent(),\n },\n {\n id: 'yuv.app.templates.action.delete',\n icon: APP_ICONS.actionDeleteTemplate,\n label: this.#translateService.instant(\n 'yuv.app.templates.action.delete.label'\n ),\n callback: () => this.deleteCurrent(),\n },\n {\n id: 'yuv.app.templates.action.toggleState',\n icon: this.selectedTemplate()?.published\n ? APP_ICONS.actionToggleStateToUnpublished\n : APP_ICONS.actionToggleStateToPublished,\n label: this.#translateService.instant(\n this.selectedTemplate()?.published\n ? 'yuv.app.templates.action.unpublish.label'\n : 'yuv.app.templates.action.publish.label'\n ),\n callback: () => this.toggleCurrentState(),\n },\n ]\n : [];\n }\n\n createNewTemplate() {\n this.#logger.debug('Create new template ...');\n\n this.#dialog.open(CreateTemplateComponent, {\n width: '400px',\n maxWidth: '90vw',\n });\n }\n\n downloadCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService.downloadTemplateContent(template);\n }\n }\n\n replaceCurrentContent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Replace content of template ' + template.id + ' ...');\n\n const fileInput = this.#document.createElement('input');\n\n fileInput.type = 'file';\n fileInput.multiple = false;\n fileInput.accept = TEMPLATE_FILE_MIME_TYPE;\n\n fileInput.onchange = (e) => {\n const file = (e.target as HTMLInputElement).files?.[0];\n if (file) {\n this.#templateService\n .replaceTemplateContent(template, file)\n .subscribe({\n next: () => {\n this.#notificationService.success(\n this.#translateService.instant(\n 'yuv.app.templates.action.replaceContent.success'\n )\n );\n },\n error: (err: any) => {\n this.#notificationService.error(err);\n },\n complete: () => {\n this.#logger.debug('Template content replaced!');\n },\n });\n }\n };\n\n fileInput.click();\n fileInput.remove();\n }\n }\n\n toggleCurrentState() {\n const template = this.selectedTemplate();\n if (template) {\n this.#templateService\n .toggleTemplateState(template)\n .subscribe((res: boolean) => {\n if (res) {\n this.#logger.info('Template published state chenged!');\n this.#updateActions(template);\n }\n });\n }\n }\n\n deleteCurrent() {\n const template = this.selectedTemplate();\n if (template) {\n this.#logger.debug('Delete template ' + template.id + ' ...');\n\n this.#templateService.deleteTemplate(template).subscribe((res) => {\n if (res) {\n this.#logger.debug('Template deleted!');\n }\n });\n }\n }\n\n goToPage(pageNumber: number) {\n this.#templateService.getPage(pageNumber - 1);\n }\n\n onItemSelect(idx: number[]) {\n const item = this.#templates[idx[0]];\n if (item.id === this.selectedTemplate()?.id) return;\n\n this.selectedTemplate.set(item);\n\n this.#updateActions(this.selectedTemplate());\n }\n\n ngOnInit() {\n this.#templateService.refreshTemplates();\n }\n}\n","<header>\n <nav [attr.aria-label]=\"'yuv.app.templates.naviagtion.aria.label' | translate\">\n <div class=\"primary-actions\">\n <button mat-mini-fab (click)=\"createNewTemplate()\" [matTooltip]=\"'yuv.app.templates.action.create.label' | translate\">\n <mat-icon>{{icons.actionCreateNewTemplate}}</mat-icon> \n </button>\n </div>\n <div class=\"template-actions\">\n <yuv-overflow-menu [menuItems]=\"actions\"></yuv-overflow-menu>\n </div>\n <div class=\"secondary-actions\">\n @if (!smallScreenLayout()) {\n <button mat-icon-button [ngClass]=\"{ enabled: enableDetails() }\" title=\"{{ 'yuv.app.templates.toggledetails.tooltip' | translate }}\" (click)=\"enableDetails.set(!enableDetails())\">\n <mat-icon>{{icons.toggleRight}}</mat-icon>\n </button>\n }\n </div>\n </nav>\n</header>\n\n<yuv-master-details\n [gutterSize]=\"1\"\n [detailsActive]=\"smallScreenLayout() ? !!selectedTemplate() : enableDetails()\"\n [layoutOptions]=\"layoutOptions()\"\n [layoutSettingsID]=\"layoutSettingsID\">\n \n <ng-template #yuvMasterPane>\n @let templateObjects = (templates$ | async)?.items;\n @if (templateObjects?.length) {\n <yuv-list (itemSelect)=\"onItemSelect($event)\">\n @for (t of templateObjects; track t.id) {\n <div class=\"item\" [ngClass]=\"[t.published ? 'public' : '']\" yuvListItem [style.--i]=\"$index\">\n <mat-icon class=\"icon\">{{t.published ? 'export_notes' : 'article'}}</mat-icon>\n <div class=\"name\">{{ t.name }}</div>\n <div class=\"description\">{{ t.description }}</div>\n <div class=\"id\">{{ t.id.toUpperCase( ) }}</div>\n <div class=\"dataObjectType\">{{ t.dataObjectType }}</div> \n </div>\n }\n </yuv-list>\n @if (pagination) { <yuv-pagination [pagination]=\"pagination\" (pageChange)=\"goToPage($event)\"></yuv-pagination> }\n } @else {\n <div class=\"empty\">\n <p>{{ 'yuv.app.templates.list.empty' | translate }}</p>\n </div>\n }\n </ng-template>\n\n <ng-template #yuvDetailsPane>\n @let templateObject = selectedTemplate();\n @if (templateObject) {\n <div class=\"details\">\n @if (smallScreenLayout()) {\n <div class=\"toolbar\">\n <button (click)=\"selectedTemplate.set(undefined)\"> \n <mat-icon>{{icons.close}}</mat-icon> \n </button>\n </div>\n }\n <ymtmpl-template-details [templateObject]=\"templateObject\"></ymtmpl-template-details>\n </div>\n } @else {\n <div class=\"empty nothing-selected\">\n <h2>{{ 'yuv.app.templates.list.selection.empty' | translate }}</h2>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6C4.89 2 4 2.9 4 4V20C4 21.11 4.89 22 6 22H18C19.11 22 20 21.11 20 20V8L14 2M18 20H6V4H13V9H18V20M17.35 10L15.25 19H13.85L12.05 12.21L10.25 19H8.85L6.65 10H8.15L9.55 16.81L11.35 10H12.65L14.45 16.81L15.85 10H17.35Z\" /></svg>\n </div>\n }\n </ng-template>\n\n</yuv-master-details>\n\n<router-outlet name=\"modal\"></router-outlet>","import { Route } from '@angular/router';\nimport { YuvTemplatesComponent } from './app-templates.component';\nimport { TemplateManagementComponent } from './pages/management/template-management.component';\n\nexport const YuvTemplateManagerRoutes: Route[] = [\n {\n path: '',\n component: YuvTemplatesComponent,\n children: [\n { path: 'management', component: TemplateManagementComponent }, \n { path: '', redirectTo: 'management', pathMatch: 'full' },\n ]\n\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["components","modules","i1","i3","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAM,MAAM,GAAG;AAET,MAAA,SAAS,GAAG;AACvB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,mBAAmB,EAAE,kBAAkB;AACvC,IAAA,uBAAuB,EAAE,WAAW;AACpC,IAAA,4BAA4B,EAAE,cAAc;AAC5C,IAAA,8BAA8B,EAAE,aAAa;AAC7C,IAAA,oBAAoB,EAAE,QAAQ;AAC9B,IAAA,6BAA6B,EAAE,UAAU;AACzC,IAAA,4BAA4B,EAAE,aAAa;AAC3C,IAAA,WAAW,EAAE,cAAc;;AAGhB,MAAA,WAAW,GAAG;IACzB,KAAK,EAAE,MAAM,GAAG,cAAc;;AAGnB,MAAA,UAAU,GAAc;AACnC,IAAA,EAAE,EAAE,MAAM;AACV,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,IAAI,EAAE,eAAe;AACrB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,OAAO,EAAE;;AAGJ,MAAM,uBAAuB,GAAG;MAE1B,cAAc,CAAA;AAQzB,IAAA,WAAA,CAAY,GAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAe;QACvE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,KAAe;QAC/D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAe;QAC9E,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,KAAgB;AAC1E,QAAA,IAAI,CAAC,cAAc,GAAI,GAAG,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC,KAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEpG;IAEW;AAAZ,CAAA,UAAY,2BAA2B,EAAA;AACrC,IAAA,2BAAA,CAAA,yBAAA,CAAA,GAAA,wCAAoD;AACpD,IAAA,2BAAA,CAAA,yBAAA,CAAA,GAAA,wCAAoD;AACpD,IAAA,2BAAA,CAAA,yBAAA,CAAA,GAAA,wCAAoD;AACtD,CAAC,EAJW,2BAA2B,KAA3B,2BAA2B,GAItC,EAAA,CAAA,CAAA;;;MChBY,eAAe,CAAA;aACnB,IAAS,CAAA,SAAA,GAAG,EAAH,CAAM;AAEb,IAAA,OAAO;AAEP,IAAA,eAAe;AACf,IAAA,WAAW;AACX,IAAA,eAAe;AACf,IAAA,iBAAiB;AACjB,IAAA,cAAc;AAWvB,IAAA,WAAA,GAAA;AAjBS,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAExB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AAIvC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,CAAyB,CAAC,CAAC;AACnE,QAAA,IAAA,CAAA,UAAU,GACf,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;AAEjC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU,KAAK,CAAC;AACxC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;;IAI/C,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,WAAW,CAAC;;AAG1I,IAAA,OAAO,CAAC,IAAa,EAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAE7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI;AACtB,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAA2B,KAAI;AACpC,gBAAA,IAAI,CAAC,SAAS,GAAG,GAAG;gBACpB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;aAC9C;AACD,YAAA,KAAK,EAAE,CAAC,CAAM,KAAI;gBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;aACnD;SACF;AACA,aAAA,GAAG,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAG9C,IAAA,cAAc,CACZ,IAAY,EACZ,WAAmB,EACnB,cAAsB,EAAA;AAEtB,QAAA,IAAI,aAAa,GAAG;AAClB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,WAAW,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE;SAC5C;QAED,OAAO,IAAI,CAAC;aACT,IAAI,CAAC,gCAAgC,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI;AAClE,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,CAAoB,KAAI;YAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAClD,YAAA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC9C,CAAC,EACF,GAAG,CAAC,CAAC,GAAkB,MAAM;YAC3B,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAe;AAClE,SAAA,CAAC,CAAC,EACH,GAAG,CAAC,CAAC,GAAyB,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAC5D;;AAGL,IAAA,uBAAuB,CAAC,QAAwB,EAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAClC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,CACxD;;IAGH,sBAAsB,CACpB,QAAwB,EACxB,IAAU,EAAA;AAEV,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,uBAAuB,EAAE;AACxC,YAAA,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,mEAAmE,CACpE,CACF,CACJ;;QAGH,OAAO,IAAI,CAAC;AACT,aAAA,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;;AAG7C,IAAA,mBAAmB,CAAC,QAAwB,EAAA;AAC1C,QAAA,IAAI,aAAa,GAAG;AAClB,YAAA,SAAS,EAAE,CAAC,QAAQ,CAAC,SAAS;SAC/B;QAED,OAAO,IAAI,CAAC;aACT,OAAO,CACN,QAAQ,CAAC;AACP,cAAE;gBACE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,0CAA0C,CAC3C;AACD,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACrC,oDAAoD,EACpD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAC5B;AACF;AACH,cAAE;gBACE,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,wCAAwC,CACzC;AACD,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACrC,kDAAkD,EAClD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAC5B;aACF;AAEN,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,SAAkB,KAAI;YAC/B,IAAI,SAAS,EAAE;gBACb,OAAO,IAAI,CAAC;AACT,qBAAA,KAAK,CACJ,CAAA,8BAAA,EAAiC,QAAQ,CAAC,EAAE,CAAA,CAAE,EAC9C,aAAa,EACb,OAAO,CAAC,IAAI;qBAEb,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CACnC;;;AACE,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;SACxB,CAAC,CACH;;AAGL,IAAA,cAAc,CAAC,QAAwB,EAAA;QACrC,OAAO,IAAI,CAAC;AACT,aAAA,OAAO,CAAC;YACP,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,uCAAuC,CACxC;YACD,OAAO,EAAE,QAAQ,CAAC;AAChB,kBAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,wDAAwD,EACxD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;AAE/B,kBAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,iDAAiD,EACjD,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAC5B;SACN;AACA,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,SAAkB,KAAI;YAC/B,IAAI,SAAS,EAAE;gBACb,OAAO,IAAI,CAAC;qBACT,MAAM,CAAC,CAAgB,aAAA,EAAA,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI;qBAClD,IAAI,CACH,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CACnC;;;AACE,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;SACxB,CAAC,CACH;;IAGL,gBAAgB,GAAA;QACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;;IAG1C,eAAe,CAAC,UAAU,GAAG,CAAC,EAAA;AAC5B,QAAA,IAAI,YAAY,GAAG,IAAI,UAAU;AAC9B,aAAA,GAAG,CAAC,MAAM,EAAE,UAAU;AACtB,aAAA,GAAG,CAAC,MAAM,EAAE,EAAe,CAAC,SAAS;AACrC,aAAA,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;QAE5B,OAAO,IAAI,CAAC;aACT,GAAG,CAAC,kCAAkC,YAAY,CAAA,CAAE,EAAE,OAAO,CAAC,IAAI;aAClE,IAAI,CACH,GAAG,CAAC,CAAC,GAAmB,MAAM;AAC5B,YAAA,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,EAAe,CAAC,SAAS;YACnC,aAAa,EAAE,GAAG,CAAC,aAAa;AAChC,YAAA,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CACpB,CAAC,GAAkB,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,CAChD;SACF,CAAC,CAAC,CACJ;;+GA7LM,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA,CAAA;;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;AC7BD,MAAMA,YAAU,GAAG,CAAC,gBAAgB,CAAC;AAErC,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,eAAe,EAAE,YAAY,CAAC;MAc/C,qBAAqB,CAAA;AAZlC,IAAA,WAAA,GAAA;AAaE,QAAA,IAAA,CAAA,OAAO,GAAG,UAAU,CAAC,IAAI;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,UAAU,CAAC,IAAI;AAC1B;+GAHY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EARtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;AAKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXa,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8cAFvC,gBAAgB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAgBvB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,OAAA,EACP,CAAC,GAAG,MAAM,EAAE,GAAGA,YAAU,CAAC,EACzB,QAAA,EAAA;;;;;AAKT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,sKAAA,CAAA,EAAA;;;ACfH,MAAMA,YAAU,GAAG;IACf;CACH;AAED,MAAMC,SAAO,GAAG;IACd;CACD;MASY,wBAAwB,CAAA;+GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,ECpBrC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4EAAwE,EDUtE,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAJV,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAcb,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EAGvB,IAAI,EACP,OAAA,EAAA,CAAC,GAAGA,SAAO,EAAE,GAAGD,YAAU,CAAC,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA;8BAG3B,cAAc,EAAA,CAAA;sBAAtB;;;AEJH,MAAMA,YAAU,GAAG,CAAC,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,CAAC;AAE/F,MAAMC,SAAO,GAAG;IACd,YAAY;IACZ,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB;CACD;MAYY,uBAAuB,CAAA;AACzB,IAAA,GAAG;AACH,IAAA,gBAAgB;AAChB,IAAA,UAAU;AAuBnB,IAAA,WAAA,GAAA;AAzBS,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAqC,EAAC;AAEnE,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC;AAE7B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAqB,SAAS,CAAC;AAE7C,QAAA,IAAA,CAAA,IAAI,GAAc,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,YAAA,IAAI,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC;YAC3C,WAAW,EAAE,CAAC,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC,QAAQ;AACxD,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAsB,EAAE,CAAC;AAEjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAkB,SAAS,CAAC;QAEjD,IAAc,CAAA,cAAA,GAAG,YAAY,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,WAAW,EAAE,MAAK;AAChB,gBAAA,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;;AAEnE,SAAA,CAAC;QAGA,IAAI,CAAC,oBAAoB,EAAE;;IAG7B,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;IAG5H,cAAc,GAAA;AACZ,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AAEzB,QAAA,IAAI,CAAC;AACF,aAAA,cAAc,CACb,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,WAAW,EACxB,YAAY,CAAC,cAAc;AAE5B,aAAA,SAAS,CAAC;AACT,YAAA,KAAK,EAAE,CAAC,CAAM,KAAI;AAChB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;aACrB;YACD,QAAQ,EAAE,MAAK;gBACb,IAAI,CAAC,KAAK,EAAE;aACb;AACF,SAAA,CAAC;;IAGN,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;;IAGzB,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC9B,SAAC,CAAC;;+GAhEO,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,qICrCpC,wiDAiCA,EAAA,MAAA,EAAA,CAAA,0UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDbE,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,q6BACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,gtBAPG,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAE,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,uLAAE,eAAe,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAoBjF,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EAGtB,IAAI,EAAA,OAAA,EACP,CAAC,GAAGA,SAAO,EAAE,GAAGD,YAAU,CAAC,EAC9B,IAAA,EAAA;AACJ,wBAAA,cAAc,EAAE,SAAS;AAC1B,qBAAA,EAAA,QAAA,EAAA,wiDAAA,EAAA,MAAA,EAAA,CAAA,0UAAA,CAAA,EAAA;;;AEaH,MAAM,UAAU,GAAG;IACjB,aAAa;IACb,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;CACzB;AAED,MAAM,OAAO,GAAG;IACd,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,qBAAqB;IACrB,sBAAsB;IACtB,aAAa;IACb,eAAe;IACf,gBAAgB;CACjB;MAYY,2BAA2B,CAAA;AAG7B,IAAA,OAAO;AAEP,IAAA,SAAS;AACT,IAAA,cAAc;AACd,IAAA,oBAAoB;AACpB,IAAA,OAAO;AAEP,IAAA,gBAAgB;AAChB,IAAA,iBAAiB;AAqB1B,IAAA,UAAU;AA+BV,IAAA,WAAA,GAAA;QA9DS,IAAgB,CAAA,gBAAA,GAAG,qCAAqC;AAExD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AAExB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAE3B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAIrD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK;AAElC,QAAA,IAAA,CAAA,KAAK,GAAG;AACN,YAAA,GAAG,SAAS;SACb;AAED,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAA6B,SAAS,CAAC;AAEhE,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;QAEjC,IAAa,CAAA,aAAA,GAAG,MAAM,CAA8C;AAClE,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA,CAAC;QAEF,IAAO,CAAA,OAAA,GAAuB,EAAE;QAEhC,IAAU,CAAA,UAAA,GAAqB,EAAE;AAEjC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAChD,GAAG,CAAC,CAAC,QAAgC,KAAI;AACvC,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK;AAChC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAChD,IAAI,gBAAgB,EAAE;;gBAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,EAAE,CAAC;gBACvE,IAAI,KAAK,EAAE;;AAET,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;oBAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;;;;AAGzC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;;AAE3C,YAAA,IAAI,CAAC,UAAU;AACb,gBAAA,QAAQ,IAAI,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC5C,sBAAE;wBACE,KAAK,EAAE,QAAQ,CAAC,aAAa;AAC7B,wBAAA,IAAI,EAAE,QAAQ,CAAC,UAAU,GAAG,CAAC;AAC7B,wBAAA,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAC7D;sBACD,SAAS;SAChB,CAAC,CACH;AAED,QAAA,IAAA,CAAA,qBAAqB,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;AACzD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAU,IAAI,CAAC;QAGnC,IAAI,CAAC,cAAc,CAAC;aACjB,IAAI,CAAC,kBAAkB,EAAE;AACzB,aAAA,SAAS,CAAC,CAAC,CAAe,KAAI;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CACxB,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU,CAC/C;AACH,SAAC,CAAC;;AAGN,IAAA,cAAc,CAAC,GAA+B,EAAA;QAC5C,IAAI,CAAC,OAAO,GAAG;AACb,cAAE;AACE,gBAAA;AACE,oBAAA,EAAE,EAAE,yCAAyC;oBAC7C,IAAI,EAAE,SAAS,CAAC,4BAA4B;oBAC5C,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,+CAA+C,CAChD;AACD,oBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,qBAAqB,EAAE;AAC7C,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,0CAA0C;oBAC9C,IAAI,EAAE,SAAS,CAAC,6BAA6B;oBAC7C,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,gDAAgD,CACjD;AACD,oBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE;AAC9C,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,iCAAiC;oBACrC,IAAI,EAAE,SAAS,CAAC,oBAAoB;oBACpC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,uCAAuC,CACxC;AACD,oBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE;AACrC,iBAAA;AACD,gBAAA;AACE,oBAAA,EAAE,EAAE,sCAAsC;AAC1C,oBAAA,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE;0BAC3B,SAAS,CAAC;0BACV,SAAS,CAAC,4BAA4B;AAC1C,oBAAA,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACnC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AACvB,0BAAE;0BACA,wCAAwC,CAC7C;AACD,oBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,kBAAkB,EAAE;AAC1C,iBAAA;AACF;cACD,EAAE;;IAGR,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE;AACzC,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA,CAAC;;IAGJ,sBAAsB,GAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,CAAC;;;IAI3D,qBAAqB,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC;YAEzE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;AAEvD,YAAA,SAAS,CAAC,IAAI,GAAG,MAAM;AACvB,YAAA,SAAS,CAAC,QAAQ,GAAG,KAAK;AAC1B,YAAA,SAAS,CAAC,MAAM,GAAG,uBAAuB;AAE1C,YAAA,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAI;gBACzB,MAAM,IAAI,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,GAAG,CAAC,CAAC;gBACtD,IAAI,IAAI,EAAE;AACR,oBAAA,IAAI,CAAC;AACF,yBAAA,sBAAsB,CAAC,QAAQ,EAAE,IAAI;AACrC,yBAAA,SAAS,CAAC;wBACT,IAAI,EAAE,MAAK;AACT,4BAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAC/B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAC5B,iDAAiD,CAClD,CACF;yBACF;AACD,wBAAA,KAAK,EAAE,CAAC,GAAQ,KAAI;AAClB,4BAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;yBACrC;wBACD,QAAQ,EAAE,MAAK;AACb,4BAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC;yBACjD;AACF,qBAAA,CAAC;;AAER,aAAC;YAED,SAAS,CAAC,KAAK,EAAE;YACjB,SAAS,CAAC,MAAM,EAAE;;;IAItB,kBAAkB,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC;iBACF,mBAAmB,CAAC,QAAQ;AAC5B,iBAAA,SAAS,CAAC,CAAC,GAAY,KAAI;gBAC1B,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC;AACtD,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;AAEjC,aAAC,CAAC;;;IAIR,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;QACxC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC;AAE7D,YAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBAC/D,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC;;AAE3C,aAAC,CAAC;;;AAIN,IAAA,QAAQ,CAAC,UAAkB,EAAA;QACzB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC;;AAG/C,IAAA,YAAY,CAAC,GAAa,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE;YAAE;AAE7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;;IAG9C,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;;+GApN/B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA4DK,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxI1D,4nGAuE4C,EAAA,MAAA,EAAA,CAAA,g/FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDf1C,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAdhB,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wBAAwB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAwBb,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAG3B,IAAI,EAAA,OAAA,EACP,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,EAC9B,IAAA,EAAA;AACJ,wBAAA,mBAAmB,EAAE,qBAAqB;AAC3C,qBAAA,EAAA,QAAA,EAAA,4nGAAA,EAAA,MAAA,EAAA,CAAA,g/FAAA,CAAA,EAAA;wDAegC,UAAU,EAAA,CAAA;sBAA1C,WAAW;uBAAC,kBAAkB;;;AErFpB,MAAA,wBAAwB,GAAY;AAC/C,IAAA;AACE,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,QAAQ,EAAE;AACR,YAAA,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,2BAA2B,EAAE;YAC9D,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE;AAC1D;AAEF,KAAA;;;ACbH;;AAEG;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class YuvTemplatesComponent {
|
|
3
|
+
appName: string;
|
|
4
|
+
appIcon: string;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<YuvTemplatesComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<YuvTemplatesComponent, "ymtmpl-app-templates", never, {}, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CoreApiObject } from '@yuuvis/client-core';
|
|
2
|
+
import { AppSchema } from '@yuuvis/client-shell-core';
|
|
3
|
+
export declare const APP_ID = "io.yuuvis.app.templates";
|
|
4
|
+
export declare const APP_ICONS: {
|
|
5
|
+
close: string;
|
|
6
|
+
refresh: string;
|
|
7
|
+
actionApplyTemplate: string;
|
|
8
|
+
actionCreateNewTemplate: string;
|
|
9
|
+
actionToggleStateToPublished: string;
|
|
10
|
+
actionToggleStateToUnpublished: string;
|
|
11
|
+
actionDeleteTemplate: string;
|
|
12
|
+
actionDownloadTemplateContent: string;
|
|
13
|
+
actionReplaceTemplateContent: string;
|
|
14
|
+
toggleRight: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const APP_ACTIONS: {
|
|
17
|
+
apply: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const APP_SCHEMA: AppSchema;
|
|
20
|
+
export declare const TEMPLATE_FILE_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
21
|
+
export declare class TemplateObject {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
published: boolean;
|
|
26
|
+
dataObjectType: string;
|
|
27
|
+
constructor(obj: CoreApiObject);
|
|
28
|
+
}
|
|
29
|
+
export declare enum TemplateManagementEventType {
|
|
30
|
+
TEMPLATE_OBJECT_CREATED = "io.yuuvis.app.templates.object.created",
|
|
31
|
+
TEMPLATE_OBJECT_UPDATED = "io.yuuvis.app.templates.object.updated",
|
|
32
|
+
TEMPLATE_OBJECT_DELETED = "io.yuuvis.app.templates.object.deleted"
|
|
33
|
+
}
|
|
34
|
+
export interface CreateTemplateResult {
|
|
35
|
+
id: string;
|
|
36
|
+
}
|
|
37
|
+
export interface TemplateSearchResponse {
|
|
38
|
+
pageNumber: number;
|
|
39
|
+
pageSize: number;
|
|
40
|
+
totalNumItems: number;
|
|
41
|
+
items: TemplateObject[];
|
|
42
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GenericObjectType } from '@yuuvis/client-core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { CreateTemplateResult, TemplateObject, TemplateSearchResponse } from './app-templates.schema';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class TemplateService {
|
|
6
|
+
#private;
|
|
7
|
+
static PAGE_SIZE: number;
|
|
8
|
+
private templates?;
|
|
9
|
+
private templatesDataSource;
|
|
10
|
+
templates$: Observable<TemplateSearchResponse>;
|
|
11
|
+
private busyDataSource;
|
|
12
|
+
busy$: import("@angular/core").Signal<boolean>;
|
|
13
|
+
constructor();
|
|
14
|
+
getAvailableDataObjectTypes(): GenericObjectType[];
|
|
15
|
+
getPage(page?: number): void;
|
|
16
|
+
createTemplate(name: string, description: string, dataObjectType: string): Observable<CreateTemplateResult>;
|
|
17
|
+
downloadTemplateContent(template: TemplateObject): void;
|
|
18
|
+
replaceTemplateContent(template: TemplateObject, file: File): Observable<boolean>;
|
|
19
|
+
toggleTemplateState(template: TemplateObject): Observable<boolean>;
|
|
20
|
+
deleteTemplate(template: TemplateObject): Observable<boolean>;
|
|
21
|
+
refreshTemplates(): void;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TemplateService, never>;
|
|
23
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TemplateService>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"yuv.app.templates.action.create.button.cancel": "Abbrechen",
|
|
3
|
+
"yuv.app.templates.action.create.button.create": "Erstellen",
|
|
4
|
+
"yuv.app.templates.action.create.headline": "Neue Vorlage erstellen",
|
|
5
|
+
"yuv.app.templates.action.create.label": "Neue Vorlage",
|
|
6
|
+
"yuv.app.templates.action.delete.confirm.message": "Möchten Sie die Vorlage '{{template}}' wirklich löschen?",
|
|
7
|
+
"yuv.app.templates.action.delete.label": "Vorlage löschen",
|
|
8
|
+
"yuv.app.templates.action.delete.public.confirm.message": "Möchten Sie die bereits veröffentlichte Vorlage '{{template}}' wirklich löschen?",
|
|
9
|
+
"yuv.app.templates.action.downloadContent.label": "Vorlagendatei herunterladen",
|
|
10
|
+
"yuv.app.templates.action.publish.confirm.message": "Möchten Sie die Vorlage '{{template}}' veröffentlichen?",
|
|
11
|
+
"yuv.app.templates.action.publish.label": "Vorlage veröffentlichen",
|
|
12
|
+
"yuv.app.templates.action.replaceContent.error.unsupportedFileType": "Der MIME-Typ der ausgewählten Vorlagendatei wird nicht unterstützt.",
|
|
13
|
+
"yuv.app.templates.action.replaceContent.label": "Vorlagendatei ersetzen",
|
|
14
|
+
"yuv.app.templates.action.replaceContent.success": "Vorlagendatei erfolgreich ersetzt",
|
|
15
|
+
"yuv.app.templates.action.unpublish.confirm.message": "Möchten Sie die Veröffentlichung aufheben der Vorlage '{{template}}' wirklich aufheben?\nEs wird nicht mehr möglich sein, Dokumente auf Grundlage dieser Vorlage zu erstellen.",
|
|
16
|
+
"yuv.app.templates.action.unpublish.label": "Veröffentlichung der Vorlage aufheben",
|
|
17
|
+
"yuv.app.templates.list.empty": "Keine Vorlagen vorhanden",
|
|
18
|
+
"yuv.app.templates.list.selection.empty": "Keine Vorlage ausgewählt",
|
|
19
|
+
"yuv.app.templates.naviagtion.aria.label": "",
|
|
20
|
+
"yuv.app.templates.object.property.dataObjectType": "Typ",
|
|
21
|
+
"yuv.app.templates.object.property.description": "Beschreibung",
|
|
22
|
+
"yuv.app.templates.object.property.name": "Name",
|
|
23
|
+
"yuv.app.templates.toggledetails.tooltip": ""
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"yuv.app.templates.action.create.button.cancel": "Cancel",
|
|
3
|
+
"yuv.app.templates.action.create.button.create": "Create",
|
|
4
|
+
"yuv.app.templates.action.create.headline": "Create new template",
|
|
5
|
+
"yuv.app.templates.action.create.label": "New template",
|
|
6
|
+
"yuv.app.templates.action.delete.confirm.message": "Do you really want to delete the template '{{template}}'?",
|
|
7
|
+
"yuv.app.templates.action.delete.label": "Delete template",
|
|
8
|
+
"yuv.app.templates.action.delete.public.confirm.message": "Do you really want to delete the already published template '{{template}}'?",
|
|
9
|
+
"yuv.app.templates.action.downloadContent.label": "Download template file",
|
|
10
|
+
"yuv.app.templates.action.publish.confirm.message": "Do you want to publish the template '{{template}}'?",
|
|
11
|
+
"yuv.app.templates.action.publish.label": "Publish template",
|
|
12
|
+
"yuv.app.templates.action.replaceContent.error.unsupportedFileType": "The MIME type of the selected template file is not supported.",
|
|
13
|
+
"yuv.app.templates.action.replaceContent.label": "Replace template file",
|
|
14
|
+
"yuv.app.templates.action.replaceContent.success": "Template file replaced successfully",
|
|
15
|
+
"yuv.app.templates.action.unpublish.confirm.message": "Do you want to unpublish the template '{{template}}'?\nIt will no longer be possible to create documents based on this template.",
|
|
16
|
+
"yuv.app.templates.action.unpublish.label": "Unpublish template",
|
|
17
|
+
"yuv.app.templates.list.empty": "No templates available",
|
|
18
|
+
"yuv.app.templates.list.selection.empty": "No template selected",
|
|
19
|
+
"yuv.app.templates.naviagtion.aria.label": "",
|
|
20
|
+
"yuv.app.templates.object.property.dataObjectType": "Type",
|
|
21
|
+
"yuv.app.templates.object.property.description": "Description",
|
|
22
|
+
"yuv.app.templates.object.property.name": "Name",
|
|
23
|
+
"yuv.app.templates.toggledetails.tooltip": ""
|
|
24
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { TemplateObject } from '../../app-templates.schema';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class TemplateDetailsComponent {
|
|
4
|
+
templateObject: TemplateObject;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TemplateDetailsComponent, never>;
|
|
6
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TemplateDetailsComponent, "ymtmpl-template-details", never, { "templateObject": { "alias": "templateObject"; "required": false; }; }, {}, never, never, true, never>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FormGroup } from '@angular/forms';
|
|
2
|
+
import { GenericObjectType } from '@yuuvis/client-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class CreateTemplateComponent {
|
|
5
|
+
#private;
|
|
6
|
+
busy: import("@angular/core").WritableSignal<boolean>;
|
|
7
|
+
error: import("@angular/core").WritableSignal<string | undefined>;
|
|
8
|
+
form: FormGroup;
|
|
9
|
+
dataObjectTypes: import("@angular/core").WritableSignal<GenericObjectType[]>;
|
|
10
|
+
changedInput: import("@angular/core").WritableSignal<any>;
|
|
11
|
+
disabledSubmit: import("@angular/core").WritableSignal<boolean>;
|
|
12
|
+
constructor();
|
|
13
|
+
createTemplate(): void;
|
|
14
|
+
close(): void;
|
|
15
|
+
ngAfterViewInit(): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CreateTemplateComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CreateTemplateComponent, "ymtmpl-create-template", never, {}, {}, never, never, true, never>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { ListComponent } from '@yuuvis/client-framework/list';
|
|
3
|
+
import { OverflowMenuItem } from '@yuuvis/client-framework/overflow-menu';
|
|
4
|
+
import { Pagination } from '@yuuvis/client-framework/pagination';
|
|
5
|
+
import { TemplateObject, TemplateSearchResponse } from '../../app-templates.schema';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class TemplateManagementComponent implements OnInit {
|
|
8
|
+
#private;
|
|
9
|
+
readonly layoutSettingsID = "template-management.layout.settings";
|
|
10
|
+
pagination?: Pagination;
|
|
11
|
+
busy: import("@angular/core").Signal<boolean>;
|
|
12
|
+
icons: {
|
|
13
|
+
close: string;
|
|
14
|
+
refresh: string;
|
|
15
|
+
actionApplyTemplate: string;
|
|
16
|
+
actionCreateNewTemplate: string;
|
|
17
|
+
actionToggleStateToPublished: string;
|
|
18
|
+
actionToggleStateToUnpublished: string;
|
|
19
|
+
actionDeleteTemplate: string;
|
|
20
|
+
actionDownloadTemplateContent: string;
|
|
21
|
+
actionReplaceTemplateContent: string;
|
|
22
|
+
toggleRight: string;
|
|
23
|
+
};
|
|
24
|
+
selectedTemplate: import("@angular/core").WritableSignal<TemplateObject | undefined>;
|
|
25
|
+
smallScreenLayout: import("@angular/core").WritableSignal<boolean>;
|
|
26
|
+
layoutOptions: import("@angular/core").WritableSignal<{
|
|
27
|
+
masterSize: number;
|
|
28
|
+
detailsSize: number;
|
|
29
|
+
}>;
|
|
30
|
+
actions: OverflowMenuItem[];
|
|
31
|
+
templates$: import("rxjs").Observable<TemplateSearchResponse>;
|
|
32
|
+
templateListComponent: import("@angular/core").Signal<ListComponent>;
|
|
33
|
+
enableDetails: import("@angular/core").WritableSignal<boolean>;
|
|
34
|
+
constructor();
|
|
35
|
+
createNewTemplate(): void;
|
|
36
|
+
downloadCurrentContent(): void;
|
|
37
|
+
replaceCurrentContent(): void;
|
|
38
|
+
toggleCurrentState(): void;
|
|
39
|
+
deleteCurrent(): void;
|
|
40
|
+
goToPage(pageNumber: number): void;
|
|
41
|
+
onItemSelect(idx: number[]): void;
|
|
42
|
+
ngOnInit(): void;
|
|
43
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TemplateManagementComponent, never>;
|
|
44
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TemplateManagementComponent, "ymtmpl-templates-management", never, {}, {}, never, never, true, never>;
|
|
45
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yuuvis/app-templates",
|
|
3
|
+
"version": "1.0.0-rc.0",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^19.2.1",
|
|
6
|
+
"@angular/core": "^19.2.1",
|
|
7
|
+
"@yuuvis/client-shell": "^2.0.0"
|
|
8
|
+
},
|
|
9
|
+
"sideEffects": false,
|
|
10
|
+
"module": "fesm2022/yuuvis-app-templates.mjs",
|
|
11
|
+
"typings": "index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
"./package.json": {
|
|
14
|
+
"default": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./index.d.ts",
|
|
18
|
+
"default": "./fesm2022/yuuvis-app-templates.mjs"
|
|
19
|
+
},
|
|
20
|
+
"./extensions": {
|
|
21
|
+
"types": "./extensions/index.d.ts",
|
|
22
|
+
"default": "./fesm2022/yuuvis-app-templates-extensions.mjs"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"tslib": "^2.3.0"
|
|
27
|
+
}
|
|
28
|
+
}
|