ichec-angular-core 0.3.1 → 0.3.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/models/member.ts","../../../projects/ichec-angular-core/src/lib/models/group.ts","../../../projects/ichec-angular-core/src/lib/models/organization.ts","../../../projects/ichec-angular-core/src/lib/models/address.ts","../../../projects/ichec-angular-core/src/lib/models/http.ts","../../../projects/ichec-angular-core/src/lib/models/form.ts","../../../projects/ichec-angular-core/src/lib/models/file-record.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/item.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/item-with-user.service.ts","../../../projects/ichec-angular-core/src/lib/services/form.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/services/api/address.service.ts","../../../projects/ichec-angular-core/src/lib/services/api/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/mocks.ts","../../../projects/ichec-angular-core/src/lib/views/base/delete-dialog/delete-dialog.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/delete-dialog/delete-dialog.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/select-table.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/select-table.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/user-table.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/selection-manager.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/detail/form-field-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/detail/form-field-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-group-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/dynamic-form-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-value-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/populated-form-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/view/dynamic-form.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/view/dynamic-form.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/group-edit/form-group-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/group-edit/form-group-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/builder/dynamic-form-builder.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/builder/dynamic-form-builder.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/populated-form/populated-form.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/populated-form/populated-form.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-table-view/list-table-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-table-view/list-table-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-scroll-view/list-scroll-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-scroll-view/list-scroll-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-data-source.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-header/list-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-header/list-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-view/list-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-view/list-view.component.html","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/feedback/feedback.component.ts","../../../projects/ichec-angular-core/src/lib/views/feedback/feedback.component.html","../../../projects/ichec-angular-core/src/lib/views/avatar/avatar.component.ts","../../../projects/ichec-angular-core/src/lib/views/avatar/avatar.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list-detail/user-list-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list-detail/user-list-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["import { FormGroup } from \"@angular/forms\";\n\nexport interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPaginated<T extends Identifiable>{\n count: number;\n next: string | null;\n previous: string | null;\n results: T[];\n}\n\nexport class Paginated<T extends Identifiable> implements IPaginated<T>{\n count = 0;\n next = null;\n previous = null;\n results: T[] = [];\n}\n\nexport interface IPermission extends Identifiable{\n codename: string;\n}\n\nexport class Permission {\n static typename = \"permission\";\n static plural = \"permissions\";\n}\n\nexport interface IForm<C, D, U = D>\n{\n form: FormGroup;\n\n setValue(item: D): void;\n \n createItem(): C;\n \n updateItem(item: D): U;\n}\n\n","import { Identifiable } from \"./core\";\n\nexport interface IMemberIdentifierBase\n{\n id_type: string;\n value: string;\n}\n\nexport type IMemberIdentifierCreate = IMemberIdentifierBase;\n\nexport interface IMemberIdentifierDetail extends IMemberIdentifierBase\n{\n id: number;\n}\n\nexport interface IPortalMemberBase\n{\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n}\n\nexport interface IPortalMemberCreate extends IPortalMemberBase\n{\n identifiers: IMemberIdentifierCreate[];\n}\n\nexport interface IPortalMemberList extends IPortalMemberBase, Identifiable\n{\n organization: string;\n profile: string | null;\n profile_thumbnail: string | null;\n permissions: string[];\n identifiers: IMemberIdentifierDetail[]; \n}\n\nexport type IPortalMemberDetail = IPortalMemberList;\n\nexport class PortalMember {\n\n static typename = \"member\";\n static plural = \"members\";\n \n static getInitials(member: IPortalMemberDetail): string\n {\n let first_initial = \"\";\n let second_initial = \"\";\n if (member.first_name)\n {\n first_initial = member.first_name[0];\n }\n else \n {\n first_initial = member.username[0];\n }\n if (member.first_name)\n {\n second_initial = member.last_name[0];\n }\n const combined = first_initial + second_initial;\n return combined.toUpperCase();\n }\n}","import { Identifiable } from \"./core\";\n\nexport interface IGroupBase\n{\n name: string;\n}\n\nexport type IGroupCreate = IGroupBase;\n\nexport interface IGroupList extends IGroupBase, Identifiable {\n}\n\nexport type IGroupDetail = IGroupList;\n\nexport class Group {\n\n static typename = \"group\";\n static plural = \"groups\";\n}","import { Identifiable } from \"./core\";\nimport { IAddressCreate, IAddressDetail } from \"./address\";\n\nexport interface IOrganizationBase {\n name: string;\n acronym: string;\n description: string;\n website: string;\n members: string[];\n}\n\nexport interface IOrganizationCreate extends IOrganizationBase {\n address: IAddressCreate;\n}\n\nexport interface IOrganizationList extends IOrganizationBase, Identifiable{\n address: string;\n}\n\nexport interface IOrganizationDetail extends IOrganizationBase, Identifiable {\n address: IAddressDetail;\n}\n\nexport class Organization {\n\n static typename = \"organization\";\n static plural = \"organizations\";\n}","import { Identifiable } from \"./core\";\n\nexport interface ICountry {\n name: string \n code: string \n flag: string\n}\n\nexport interface IAddressBase {\n line1: string;\n line2: string | null;\n line3: string | null;\n city: string | null;\n region: string;\n postcode: string | null;\n country: string;\n}\n\nexport type IAddressCreate = IAddressBase;\n\nexport interface IAddressList extends IAddressBase, Identifiable {\n country_name: string;\n country_flag: string;\n}\n\nexport type IAddressDetail = IAddressList;\n\nexport class Address {\n static typename = \"address\";\n static plural = \"addresses\";\n}","export interface IItemQuery\n{\n queries: Map<string, string>;\n page: number;\n page_size: number;\n sort_field: string;\n sort_order: string;\n filter_field: string;\n filter: string;\n}\n\nexport class ItemQuery\n{\n queries = new Map<string, string>();\n page = 0;\n page_size = 0;\n sort_field = \"\";\n sort_order = \"\";\n filter_field = \"\";\n filter = \"\";\n\n constructor(params: Partial<IItemQuery> = {})\n {\n Object.assign(this, params);\n }\n}\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport interface OptionActionChoice {\n value: string;\n display_name: string;\n}\n\nexport interface OptionAction {\n label: string;\n type: string;\n required: boolean;\n read_only: boolean;\n max_length?: number;\n choices?: OptionActionChoice[];\n}\n\nexport interface IRestOptions {\n name: string;\n description: string;\n renders: string[];\n parses: string[];\n actions?: Record<string, Record<string, OptionAction>>;\n}\n\n","import { IFileRecord } from \"./file-record\";\n\nexport interface TypeChoice\n{\n value: string;\n display_name: string;\n}\n\nexport enum FieldType \n{\n Boolean,\n Char,\n Text,\n RichText,\n Selection,\n Integer,\n File,\n Undefined\n}\n\nexport const FORM_FIELD_CHOICES: TypeChoice[] = [{value: \"BOOLEAN\", display_name: \"Boolean\"},\n {value: \"CHAR\", display_name: \"Short Text\"},\n {value: \"TEXT\", display_name: \"Long Text\"},\n {value: \"RICH_TEXT\", display_name: \"Rich Text\"},\n {value: \"SELECTION\", display_name: \"Selection\"},\n {value: \"INTEGER\", display_name: \"Integer\"},\n {value: \"FILE\", display_name: \"File\"}\n ];\n\nexport function getFieldTypeFromKey(key: string): FieldType\n{\n switch(key)\n {\n case \"CHAR\":\n return FieldType.Char;\n case \"TEXT\":\n return FieldType.Text;\n case \"RICH_TEXT\":\n return FieldType.RichText; \n case \"SELECTION\":\n return FieldType.Selection; \n case \"INTEGER\":\n return FieldType.Integer;\n case \"FILE\":\n return FieldType.File; \n }\n return FieldType.Char;\n}\n\nexport interface IFormFieldBase{\n label: string;\n key: string;\n required: boolean;\n order: number;\n field_type: string;\n description: string;\n default: string;\n options: {key: string, value: string}[] | null;\n}\n\nexport type IFormFieldCreate = IFormFieldBase;\n\nexport interface IFormFieldDetail extends IFormFieldBase{\n id: number;\n template: string | null;\n}\n\nexport interface IFormGroupBase{\n label: string | null;\n description: string | null;\n order: number;\n}\n\nexport interface IFormGroupCreate extends IFormGroupBase{\n fields: IFormFieldCreate[];\n}\n\nexport interface IFormGroupDetail extends IFormGroupBase{\n id: number;\n fields: IFormFieldDetail[];\n}\n\nexport interface IFormGroupUpdate extends IFormGroupBase{\n id: number;\n fields: IFormFieldBase[];\n}\n\nexport interface IFormCreate {\n groups: IFormGroupCreate[];\n}\n\nexport interface IFormDetail {\n id: number;\n groups: IFormGroupDetail[];\n}\n\nexport interface IFormUpdate {\n id: number;\n groups: IFormGroupBase[];\n}\n\nexport interface IFileField {\n id: number;\n file: IFileRecord;\n}\n\nexport function getFileFieldIds(form: IFormDetail): number[]\n{\n const ids: number[] = [];\n form.groups.map(g => g.fields.map(f => {if (f.field_type == \"FILE\"){\n ids.push(f.id)\n }}));\n return ids;\n}\n\nexport interface IFormFieldValueBase {\n value: string;\n asset: string | null;\n}\n\nexport interface IFormFieldValueCreate extends IFormFieldValueBase\n{\n field: number\n}\n\nexport interface IFormFieldValueUpdate extends IFormFieldValueBase\n{\n id: number;\n field: number\n}\n\nexport interface IFormFieldValueDetail extends IFormFieldValueBase\n{\n id: number;\n field: IFormFieldDetail\n}\n\nexport interface IPopulatedFormCreate \n{\n values: IFormFieldValueCreate[];\n}\n\nexport interface IPopulatedFormDetail\n{\n id: number;\n values: IFormFieldValueDetail[];\n}\n\nexport interface IPopulatedFormUpdate\n{\n id: number;\n values: IFormFieldValueUpdate[];\n}\n\n\n\n\n\n","export interface IFileRecord\n{\n name: string;\n display_name: string;\n file_type: string;\n file: File | null;\n remote: string;\n local: string | ArrayBuffer;\n}\n\nexport class FileRecord\n{\n name = \"\";\n display_name = \"\";\n file_type = \"standard\";\n file: File | null = null;\n remote = \"\";\n local: string | ArrayBuffer = \"\";\n\n constructor(params: Partial<IFileRecord> = {})\n {\n Object.assign(this, params);\n } \n}\n","import { Observable, catchError, map, mergeMap, throwError } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken, inject } from '@angular/core';\n\nimport { CookieService } from 'ngx-cookie-service';\n\nimport { Identifiable, IPaginated } from '../models/core';\nimport { IPortalMemberDetail } from '../models/member';\nimport { IRestOptions, IItemQuery, ItemQuery } from '../models/http';\n\nexport interface RestServiceConfig {\n endpoint_url: string,\n self_url: string,\n auth_type: string\n}\n\ninterface IRequestBase {\n headers: HttpHeaders;\n credentials: RequestCredentials;\n params: HttpParams;\n}\n\nexport interface IServerManifest{\n login_url: string;\n logout_url: string;\n supports_cors: boolean;\n}\n\nexport const REST_SERVICE_CONFIG = new InjectionToken<RestServiceConfig>(\"Config for the rest service\");\n\nexport class RestService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> {\n\n manifest: IServerManifest = {login_url: \"\", logout_url: \"\", supports_cors: false};\n readonly _url: string = \"\";\n config = inject(REST_SERVICE_CONFIG);\n protected _http = inject(HttpClient);\n protected cookieService = inject(CookieService);\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.baseUrl + id + \"/\", this.getRequestBase()).pipe(\n map(_ => { return void (0); }),\n catchError(this.handleError));\n }\n\n getForUser(user: IPortalMemberDetail, query: IItemQuery = new ItemQuery()): Observable<IPaginated<L>> {\n query.queries.set('user', user.id.toString());\n return this.get(query);\n }\n\n get(query: IItemQuery = new ItemQuery()): Observable<IPaginated<L>> {\n\n const params = query.queries;\n if (query.page > 0) {\n params.set('page', query.page.toString());\n }\n if (query.page_size > 0) {\n params.set('page_size', query.page_size.toString());\n }\n if (query.sort_field) {\n let sort_field = query.sort_field;\n if (query.sort_order === \"desc\") {\n sort_field = \"-\" + sort_field;\n }\n params.set('ordering', sort_field);\n }\n if (query.filter_field) {\n params.set('search_field', query.filter_field);\n }\n if (query.filter) {\n params.set('search', query.filter);\n }\n return this._http.get<IPaginated<L>>(this.baseUrl, this.getRequestBase(\"json\",\n new HttpParams({ fromObject: Object.fromEntries(params) }))).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<D> {\n return this._http.get<D>(this.baseUrl + id + \"/\", this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<D> {\n return this._http.get<D>(url, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getPaginatedUrl(url: string): Observable<IPaginated<L>> {\n return this._http.get<IPaginated<L>>(url, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.baseUrl, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n putItem(item: U, content_type = \"json\"): Observable<D> {\n return this._http.put<D>(this.baseUrl + item.id + \"/\", item, this.getRequestBase(content_type)).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<D> {\n return this._http.patch(this.mediaUrl + id + \"/\", form, this.getRequestBase(\"\")).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n postFile(id: number, field: string, file: File): Observable<D> {\n const form = new FormData();\n form.append(\"file\", file);\n return this._http.post(this.baseUrl + id + \"/\" + field + \"/upload\",\n form, this.getRequestBase(\"\")).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n putFile(id: number, field: string, file: File): Observable<D> {\n return this._http.put(this.baseUrl + id + \"/\" + field + \"/upload\",\n file, this.getRequestBase(\"\", new HttpParams(), file.name)).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n putFileStandalone(url: string, file: File): Observable<void> {\n return this._http.put(this.config.endpoint_url + \"/api/\" + url + \"/upload\",\n file, this.getRequestBase(\"\", new HttpParams(), file.name)).pipe(\n map(_response => { return void (0); }),\n catchError(this.handleError));\n }\n\n patchItem(item: U, include_keys: string[], exclude_keys: string[]): Observable<D> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any) {\n if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\n return value;\n }\n }\n return this._http.patch(this.baseUrl + item.id + \"/\",\n JSON.stringify(item, replacer), this.getRequestBase()).pipe(\n map(response => response as D),\n catchError(this.handleError));\n }\n\n postItem(item: C): Observable<D> {\n return this._http.post<D>(this.baseUrl, item, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"json\", file = \"\"): HttpHeaders {\n let headers = new HttpHeaders({'Accept': 'application/json'});\n if (this.config.auth_type === \"token\") {\n headers = headers.set('Authorization', \"Token \" + localStorage.getItem(\"api_token\"));\n }\n else \n {\n headers = headers.set('X-CSRFToken', this.cookieService.get(\"csrftoken\"));\n }\n if (file)\n {\n headers = headers.set('Content-Disposition', 'attachment; filename=' + file);\n }\n else if (content_type === \"json\")\n {\n headers = headers.set('Content-Type', 'application/json');\n }\n else if(content_type)\n {\n headers = headers.set('Content-Type', content_type);\n }\n return headers;\n }\n\n protected get baseUrl(): string {\n return this.config.endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private get mediaUrl(): string {\n return this.config.endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n protected getRequestBase(content_type = \"json\", params: HttpParams = new HttpParams(), file = \"\"): IRequestBase \n {\n return { headers: this.getHeaders(content_type, file),\n credentials: this.manifest.supports_cors ? 'include' : 'same-origin',\n params: params}\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Identifiable} from '../models/core';\nimport { RestService } from './rest.service';\n\nexport class ItemService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> extends RestService<D, L, C, U>{\n\n typenamePlural = \"\";\n typename = \"\";\n\n canEdit(): boolean\n {\n return false;\n }\n\n canCreate(): boolean\n {\n return false;\n }\n\n canDelete(): boolean\n {\n return false;\n }\n\n canView(): boolean\n {\n return false;\n }\n\n typePlural(): string \n {\n return this.typenamePlural? this.typenamePlural : this.typename + \"s\";\n }\n}\n","import { Observable, BehaviorSubject, tap, map, catchError, throwError, of, mergeMap } from 'rxjs';\n\nimport { Injectable, inject, DOCUMENT } from '@angular/core';\nimport { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\n\nimport { ItemService } from './item.service';\nimport { PortalMember, IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../models/member';\n\nimport { IServerManifest } from './rest.service';\n\ninterface IPermission{\n feature: string;\n capability: string;\n}\n\nexport class ResolvedPermission{\n canEdit = false;\n canAdd = false;\n canView = false;\n canDelete = false;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService extends ItemService<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> {\n\n /**\n Service to handle IPortalMember via REST and also handle logins.\n */\n loggedInUser = new BehaviorSubject<IPortalMemberDetail | null>(null);\n\n private document = inject(DOCUMENT);\n override readonly _url = PortalMember.plural;\n override typename = PortalMember.typename;\n private permissions: Map<string, ResolvedPermission> = new Map<string, ResolvedPermission>();\n \n login(next = \"/\")\n {\n console.log(\"Starting login flow\");\n this._getServiceManifest().subscribe(m => {this.manifest = m; this._do_login(next);});\n }\n\n logout(next = \"\") {\n if (this.loggedInUser.value === null) {\n return;\n }\n\n console.log(\"Session Log Out\");\n let prefix = \"\";\n if (this.config.endpoint_url)\n {\n prefix = this.config.endpoint_url + \"/\";\n } \n let suffix = \"\";\n if (next)\n {\n suffix = \"?next=\" + next\n }\n console.log(\"posting logout to: \", prefix + this.manifest.logout_url + \"/\" + suffix)\n this._http.post(prefix + this.manifest.logout_url + \"/\" + suffix, \"\", {\n headers: new HttpHeaders({\n 'X-CSRFToken': this.cookieService.get(\"csrftoken\")\n }), \n responseType: 'text',\n credentials: this.manifest.supports_cors ? 'include' : 'same-origin'}).pipe(\n // The backend can return an error as it tries to redirect to a non-existing url.\n catchError(_ => this.document.location.href = prefix + \"/\" + suffix)).subscribe(_ => {console.log(\"Logged Out\"); \n // Force a page reload\n this.document.location.href = prefix + \"/\" + suffix;\n //this.login(next)\n });\n }\n\n getSelf(): Observable<IPortalMemberDetail | null> \n {\n console.log(\"Attempting to fetch self profile\");\n return this._getServiceManifest().pipe(\n mergeMap(m => {this.manifest = m; return this._getSelf()}));\n }\n\n private _getSelf(): Observable<IPortalMemberDetail | null> \n {\n return this.getUrl(this.config.endpoint_url + \"/api/self/\").pipe(\n tap(user => this.onSelf(user)),\n map(user => { return user }),\n catchError(e => this._selfFetchFailed(e)));\n }\n\n private _selfFetchFailed(error: HttpErrorResponse): Observable<null> \n {\n if (error.status == 401)\n {\n console.log(\"No valid user session found:\", error);\n return of(null);\n }\n else \n {\n console.log(\"Unexpected error fetching user session: \", error);\n return throwError(() => error)\n }\n }\n\n private _getServiceManifest(): Observable<IServerManifest>\n {\n console.log(\"Fetching service manifest\")\n return this._http.get<IServerManifest>(this.config.endpoint_url + \"/manifest\")\n }\n\n private _do_login(next: string)\n {\n let prefix = \"\";\n if (this.config.endpoint_url)\n {\n prefix = this.config.endpoint_url + \"/\";\n }\n this.document.location.href = prefix + this.manifest.login_url + \"/?next=\" + next;\n }\n\n hasAddPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canAdd;\n }\n\n hasDeletePermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canDelete;\n } \n\n hasEditPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canEdit;\n } \n\n hasViewPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canView;\n } \n\n private onSelf(user: IPortalMemberDetail) {\n console.log(\"Fetched self user: \" + user.username);\n this.loggedInUser.next(user);\n this.processPermissions();\n }\n\n private parsePermission(p: string) : IPermission\n {\n const split_module = p.split(\".\");\n const split_cap = split_module[split_module.length -1].split(\"_\");\n return {feature: split_cap[1], capability: split_cap[0]};\n }\n\n private processPermissions()\n {\n const user = this.loggedInUser.value;\n if (!user)\n {\n return;\n }\n\n user.permissions.forEach(p => this.permissions.set(\n this.parsePermission(p).feature, new ResolvedPermission()));\n\n user.permissions.forEach(p => {\n const permission = this.parsePermission(p);\n if (permission.capability === \"view\")\n {\n this.permissions.get(permission.feature)!.canView = true;\n }\n else if (permission.capability === \"delete\")\n {\n this.permissions.get(permission.feature)!.canDelete = true;\n }\n else if (permission.capability === \"change\")\n {\n this.permissions.get(permission.feature)!.canEdit = true;\n }\n else if (permission.capability === \"add\")\n {\n this.permissions.get(permission.feature)!.canAdd = true;\n }\n });\n }\n}\n","import { BehaviorSubject, Observable, of } from 'rxjs';\n\nimport { Injectable, inject } from '@angular/core';\n\nimport { Identifiable, IPaginated, Paginated } from '../models/core';\nimport { IPortalMemberDetail } from '../models/member';\nimport { ItemService } from './item.service'\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ItemWithUserService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> extends ItemService<D, L, C, U> {\n\n protected userService = inject(UserService);\n userItems: BehaviorSubject<L[]> = new BehaviorSubject<L[]>([]);\n\n constructor()\n {\n super();\n this.userService.loggedInUser.subscribe(_ => this.manifest = this.userService.manifest);\n }\n\n override canCreate(): boolean {\n return this.userService.hasAddPermission(this.permissionName());\n }\n\n override canView(): boolean {\n return this.userService.hasViewPermission(this.permissionName());\n }\n\n override canEdit(): boolean {\n return this.userService.hasEditPermission(this.permissionName());\n }\n\n override canDelete(): boolean {\n return this.userService.hasDeletePermission(this.permissionName());\n }\n\n private permissionName(): string \n {\n return this.typename.replace(\"_\", \"\");\n }\n\n getUserItems(): Observable<IPaginated<L> >\n {\n if (this.userService.loggedInUser.value)\n {\n return this.getForUser(this.userService.loggedInUser.value);\n }\n return of(new Paginated<L>());\n }\n\n protected refreshUserItems(user: IPortalMemberDetail | null)\n {\n if (user)\n {\n this.getUserItems().subscribe(items => this.userItems.next(items.results)); \n }\n else\n {\n this.userItems.next([]);\n }\n } \n}","/* eslint-disable @typescript-eslint/no-explicit-any */ \n\nimport {Injectable} from '@angular/core';\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\n\nimport { IFormDetail, IFormFieldValueCreate, IFormFieldValueDetail, IFormFieldValueUpdate, IPopulatedFormCreate, IPopulatedFormDetail, IPopulatedFormUpdate } from '../models/form';\nimport { IFileRecord } from '../../public-api';\n\n\nexport interface IFieldFile\n{\n id: number;\n asset: IFileRecord;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class FormService {\n\n static getBaseTemplate(): IFileRecord\n {\n return {name: \"template\", display_name: \"template\", file_type: \"\", remote: \"\", local: \"\", file: null};\n } \n\n toFormGroup(form: IFormDetail) {\n const controls: any = {};\n \n for (const group of form.groups)\n {\n for (const field of group.fields)\n {\n if (field.field_type == \"CHAR\" || field.field_type == \"TEXT\" || field.field_type == \"RICH_TEXT\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<string>(field.default || '', Validators.required)\n : new FormControl<string>(field.default || '');\n }\n else if(field.field_type == \"BOOLEAN\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<boolean>(field.default == \"true\", Validators.required)\n : new FormControl<boolean>(field.default == \"true\");\n }\n else if(field.field_type == \"FILE\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<IFileRecord>(FormService.getBaseTemplate(), Validators.required)\n : new FormControl<IFileRecord>(FormService.getBaseTemplate());\n }\n else \n {\n controls[field.id.toString()] = field.required ? new FormControl(field.default || '', Validators.required)\n : new FormControl(field.default || ''); \n } \n }\n }\n return new FormGroup(controls);\n }\n\n createFieldValue(key: string, control: FormControl, input: IFormDetail) : IFormFieldValueCreate\n {\n const field_type = this.getType(key, input);\n if (field_type == \"FILE\")\n {\n return {field: parseInt(key),\n asset: null,\n value: \"\"\n }\n }\n else if (field_type == \"BOOLEAN\")\n {\n return {field: parseInt(key),\n asset: null,\n value: control.value ? \"true\" : \"false\"\n }\n }\n else \n {\n return {field: parseInt(key),\n asset: null,\n value: control.value\n }\n }\n }\n\n createItem(form: FormGroup, input: IFormDetail) : IPopulatedFormCreate\n {\n const values = Object.keys(form.controls).map(key => this.createFieldValue(key, form.controls[key] as FormControl, input));\n return {values : Array.from(values)};\n }\n\n getValueId(field_id: number, populated: IPopulatedFormDetail): number\n {\n for(const value of populated.values)\n {\n if (value.field.id == field_id)\n {\n return value.id;\n }\n }\n return -1;\n }\n\n getFiles(form: FormGroup, input: IFormDetail, populated: IPopulatedFormDetail): IFieldFile[]\n {\n const files: IFieldFile[] = [];\n for(const key of Object.keys(form.controls))\n {\n if (this.getType(key, input) == \"FILE\")\n {\n files.push({id: this.getValueId(parseInt(key), populated), asset: form.get(key)?.value});\n }\n }\n return files;\n }\n\n updateFieldValue(control: FormControl, item: IFormFieldValueDetail) : IFormFieldValueUpdate\n {\n return {value: control.value.value,\n field: item.field.id,\n id: item.id,\n asset: item.asset\n }\n }\n\n getType(key: string, input: IFormDetail): string\n {\n const field_id = parseInt(key);\n for (const group of input.groups)\n {\n for (const field of group.fields)\n {\n if (field.id == field_id)\n {\n return field.field_type;\n }\n }\n }\n return \"\"; \n }\n\n getValue(key: string, item: IPopulatedFormDetail) : IFormFieldValueDetail | null\n {\n const field = parseInt(key);\n for(const value of item.values)\n {\n if (value.field.id == field)\n {\n return value;\n }\n }\n return null;\n }\n\n updateItem(form: FormGroup, item: IPopulatedFormDetail): IPopulatedFormUpdate\n {\n const updated: IPopulatedFormUpdate = {id: item.id, values: []};\n Object.keys(form.controls).forEach(key => {\n const value = this.getValue(key, item);\n if (value)\n {\n const updated_value = this.updateFieldValue(form.controls[key] as FormControl, value);\n updated.values.push(updated_value);\n }\n });\n return updated;\n }\n \n}\n","import { Injectable } from '@angular/core';\n\nimport { ItemWithUserService } from './item-with-user.service';\nimport { Group, IGroupCreate, IGroupDetail, IGroupList } from '../models/group';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends ItemWithUserService<IGroupDetail, IGroupList, IGroupCreate> {\n\n override readonly _url = Group.plural;\n override typename = Group.typename;\n \n constructor() {\n super();\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n } \n}\n","import { Injectable, inject, signal } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroupList } from '../models/group';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n}\n\nexport interface NavGroup\n{\n name: string;\n options: NavOption[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeOptions = signal<Set<NavOption>>(new Set<NavOption>());\n private _groups: NavGroup[] = [];\n private _defaultOptions: NavOption[] = [];\n private _groupService: GroupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroupList[]) {\n const options = new Set<NavOption>();\n this._defaultOptions.forEach(e => options.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n n.options.forEach(o => options.add(o));};}));\n\n this.activeOptions.set(options);\n }\n\n setDefaultOptions(options: NavOption[])\n {\n this._defaultOptions = options;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport { IRestOptions, OptionAction, OptionActionChoice, \n IAddressDetail, IAddressCreate, IAddressList, Address, ICountry } from '../../models';\nimport { ItemWithUserService } from '../item-with-user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService extends ItemWithUserService<IAddressDetail, IAddressList, IAddressCreate> {\n\n override readonly _url = Address.plural;\n override typename = Address.typename;\n\n countryOptions = signal<ICountry[]>([]);\n\n refreshCountryOptions() {\n this.getOptions().subscribe(options => this.onOptions(options));\n }\n\n protected onOptions(options: IRestOptions) {\n if (!options.actions) {\n return;\n }\n if ('POST' in options.actions) {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(actions: Record<string, OptionAction>) {\n if ('country' in actions && actions['country'].choices) {\n this.onCountryChoices(actions['country'].choices);\n }\n }\n\n protected onCountryChoices(choices: OptionActionChoice[]) {\n this.countryOptions.update(() => choices.map(c => {return {name: c.display_name, code: c.value, flag: \"\"};}));\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { Organization, IOrganizationCreate, IOrganizationDetail, IOrganizationList } from '../../models'\nimport { ItemWithUserService } from '../item-with-user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends ItemWithUserService<IOrganizationDetail, IOrganizationList, IOrganizationCreate> {\n override readonly _url = Organization.plural;\n override typename = Organization.typename; \n}\n","export class MockItemService {\n \n canEdit()\n {\n return false;\n }\n\n canDelete()\n {\n return false;\n }\n\n canCreate()\n {\n return false;\n } \n\n typePlural(): string \n {\n return \"mock_plurals\";\n }\n}","import { Component, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\n\nexport interface DialogData\n{\n message: string;\n title: string;\n}\n\n@Component({\n selector: 'lib-delete-dialog',\n imports: [MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './delete-dialog.component.html',\n styleUrl: './delete-dialog.component.scss'\n})\nexport class DeleteDialogComponent {\n readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}\n","<h2 mat-dialog-title>{{data.title}}</h2>\n<mat-dialog-content>\n <p>{{data.message}}</p>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button matButton (click)=\"onNoClick()\">No Thanks</button>\n <button matButton [mat-dialog-close]=\"true\" cdkFocusInitial>Delete</button>\n</mat-dialog-actions>","import { signal, inject } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router'\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Identifiable } from '../../models/core';\nimport { IPortalMemberDetail } from '../../models/member';\nimport { ItemService } from '../../services/item.service';\nimport { UserService } from '../../services/user.service';\n\nimport { DeleteDialogComponent } from './delete-dialog/delete-dialog.component';\n\nexport abstract class DetailView<D extends Identifiable, L extends Identifiable, C = D, U extends Identifiable = D> {\n\n protected item = signal<D | null>(null);\n protected route: ActivatedRoute = inject(ActivatedRoute);\n protected userService: UserService = inject(UserService);\n protected itemService: ItemService<D, L, C, U>;\n protected location = inject(Location);\n\n readonly deleteDialog = inject(MatDialog);\n\n constructor(itemService: ItemService<D, L, C, U>) {\n this.itemService = itemService;\n }\n \n onInit(): void {\n const id = Number(this.route.snapshot.paramMap.get('id'));\n if (id)\n {\n this._getItem(id);\n }\n }\n\n onSelection(id: number | null)\n {\n if (id)\n {\n this._getItem(id);\n }\n else \n {\n this.item.set(null);\n }\n }\n\n title(): string\n {\n if (this.itemService.typename)\n {\n return this.itemService.typename.replace(\"_\", \" \");\n }\n return \"\";\n }\n\n onItemAvailable(item: D) {\n this.item.set(item);\n this.userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(item, user); } });\n }\n\n onItemAndUserAvailable(_item: D, _user: IPortalMemberDetail) {}\n\n onDeleteClicked(): void {\n const dialogRef = this.deleteDialog.open(DeleteDialogComponent, {\n data: {\n title: \"Delete \" + this.title() + \"?\", \n message: \"Are you sure you want to delete this \" + this.title() + \"?. This cannot be undone.\"},});\n\n dialogRef.afterClosed().subscribe(result => {\n if (result !== undefined) {\n this.onDelete();\n }\n });\n }\n\n onDelete(): void\n {\n const item = this.item();\n if (item)\n {\n this.itemService.deleteItem(item.id).subscribe(_ => this.goBack());\n }\n }\n\n goBack()\n {\n this.location.back();\n }\n\n protected canEdit(): boolean\n {\n return this.itemService.canEdit();\n }\n\n protected canDelete(): boolean\n {\n return this.itemService.canDelete();\n }\n\n private _getItem(id: number): void {\n this.itemService.getItem(id).subscribe(item => {\n this.onItemAvailable(item);\n });\n }\n}\n","import { signal, inject, computed } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IForm } from '../../models/core';\nimport { IPortalMemberDetail } from '../../models/member';\nimport { IRestOptions, OptionAction } from '../../models/http'; \nimport { ItemService } from '../../services/item.service';\nimport { UserService } from '../../services/user.service';\n\nimport { IFileRecord } from '../../models/file-record';\n\nexport abstract class EditView<D extends Identifiable, L extends Identifiable, C = D, U extends Identifiable = D> {\n\n createMode = signal(false);\n heading = computed(() => { const prefix = this.createMode() ? \"New \" : \"Edit \"; return prefix + this.getTitle(); });\n \n protected item = signal<D | null>(null);\n protected fileKeys: string[] = [];\n protected _route = inject(ActivatedRoute);\n protected _location = inject(Location);\n protected _userService = inject(UserService);\n protected form: IForm<C, D, U>;\n protected itemService: ItemService<D, L, C, U>;\n\n private uploadedFiles: string[] = [];\n\n constructor(itemService: ItemService<D, L, C, U>, form: IForm<C, D, U>) {\n this.itemService = itemService;\n this.form = form;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable(item: D) {\n this.form.setValue(item);\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(item, user); } });\n }\n\n onItemAndUserAvailable(_item: D, _user: IPortalMemberDetail) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n submit() {\n this.save();\n } \n\n save() {\n if (this.createMode()) {\n this.postItem();\n }\n else {\n const item = this.item();\n {\n if(item)\n {\n this.putItem(item);\n }\n }\n }\n }\n\n cancel() {\n this.goBack();\n }\n\n getTitle(): string \n {\n if (this.itemService && this.itemService.typename)\n {\n return this.itemService.typename.replace(\"_\", \" \");\n }\n return \"\";\n }\n\n protected fetchRestOptions()\n {\n this.itemService.getOptions().subscribe(options => this.onOptions(options)); \n } \n\n protected onUploadedFileReady(_file: File)\n {\n }\n\n protected onFileRead(_content: string | ArrayBuffer)\n {\n }\n\n protected createItem(): C\n {\n return this.form.createItem();\n }\n\n protected updateItem(item: D): U\n {\n return this.form.updateItem(item);\n }\n\n protected postItem() {\n this.itemService.postItem(this.createItem()).subscribe(item => this.saveFiles(item));\n }\n\n protected putItem(item: D)\n {\n this.itemService.putItem(this.updateItem(item)).subscribe(item => this.saveFiles(item));\n }\n\n protected saveFiles(item: D)\n {\n const next_file = this.getNextFileForUpload();\n if (next_file)\n {\n this.saveFile(item, next_file);\n }\n else \n {\n this.onItemUpdated(item);\n }\n }\n\n saveFile(item: D, record: IFileRecord)\n {\n this.uploadedFiles.push(record.name);\n if (record.file)\n {\n this.itemService.putFile(item.id, record.name, record.file).subscribe(item => this.saveFiles(item));\n }\n else{\n this.saveFiles(item);\n }\n }\n\n getNextFileForUpload(): IFileRecord | null\n {\n for(const key of this.fileKeys)\n {\n if (!this.uploadedFiles.includes(key))\n {\n return this.form.form.get(key)?.value;\n }\n }\n return null;\n } \n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (!urls)\n {\n return false;\n }\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n if (this.isCreateRoute()) {\n this.createMode.set(true);\n }\n else {\n const id_str = this._route.snapshot.paramMap.get('id');\n this.itemService.getItem(Number(id_str))\n .subscribe(item => {\n this.item.set(item);\n this.onItemAvailable(item)\n });\n }\n }\n\n protected onItemUpdated(item: D) {\n this.uploadedFiles = [];\n this.item.set(item);\n this.goBack();\n }\n\n protected onOptions(options: IRestOptions)\n {\n if (!options.actions)\n {\n return;\n }\n\n if ('POST' in options.actions)\n {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(_actions: Record<string, OptionAction>)\n {\n\n }\n}\n","import { Component, viewChild, input, output, computed, OnInit, TemplateRef } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { Identifiable } from '../../../models/core';\nimport { TableColumn } from '../table';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInputModule } from '@angular/material/input';\n\nexport interface Selectable<T extends Identifiable>\n{\n title: string;\n item: T;\n}\n\n@Component({\n selector: 'lib-select-table',\n imports: [MatTableModule,\n MatFormFieldModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatInputModule,\n NgTemplateOutlet],\n templateUrl: './select-table.component.html',\n styleUrl: './select-table.component.css'\n})\nexport class SelectTableComponent<T extends Identifiable> implements OnInit{\n\n itemType = input(\"\");\n selected = input<T[]>([]);\n options = input<Selectable<T>[]>([]);\n\n columns = input<TableColumn[]>([]);\n\n itemAdded = output<string>();\n itemRemoved = output<number>();\n searchChanged = output<string | null>();\n itemTemplate = input<TemplateRef<unknown> | null | undefined>(null);\n\n columnNames = computed(() => {const names = this.columns().map(c => c.name); names.push(\"remove\"); return names;});\n searchControl = new FormControl('');\n\n table = viewChild(MatTable);\n\n ngOnInit(): void {\n this.searchControl.valueChanges.subscribe(value => this.searchChanged.emit(value));\n }\n\n remove(id: number) {\n this.itemRemoved.emit(id);\n this.table()?.renderRows();\n }\n\n add() {\n if (this.searchControl.value)\n {\n this.itemAdded.emit(this.searchControl.value);\n }\n this.searchControl.reset();\n this.table()?.renderRows();\n }\n\n\n}\n","<div class='select-container' style=\"width:100%\">\n <div style=\"width:100%; display:flex; flex-direction: row;\">\n <mat-form-field style=\"width:100%\">\n <mat-label>Add {{itemType()}}</mat-label>\n <input \n type=\"text\"\n aria-label=\"Selected item\"\n matInput\n [formControl]=\"searchControl\" \n placeholder=\"Search\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" style=\"width:100%\">\n @for(item of options(); track item.item.id){\n <mat-option [value]=\"item.title\" style=\"width:100%\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplate(); context: { item: item.item }\">\n </ng-container>\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n\n <button mat-mini-fab type=\"button\" \n class=\"form_action_button\" \n (click)=\"add()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n\n @if(selected().length > 0){\n <table mat-table [dataSource]=\"selected()\" class=\"mat-elevation-z8\">\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.name] }}</td>\n </ng-container>\n }\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove an item\"\n (click)=\"remove(element.id)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\">\n </tr>\n <tr mat-row *matRowDef=\"let row; columns: columnNames();\">\n </tr>\n </table>\n }\n</div>","import { TableColumn } from \"../../base\";\n\nexport const USER_TABLE_FULL: TableColumn[] = [\n {name: 'first_name', title: 'First Name', element_type: 'string'},\n {name: 'last_name', title: 'Surname', element_type: 'string'},\n {name: 'username', title: 'Username', element_type: 'string'},\n {name: 'email', title: 'Email', element_type: 'email'}]; ","import { inject, signal } from '@angular/core';\n\nimport { Selectable } from './select-table.component';\nimport { Identifiable, IPaginated } from '../../../models/core';\nimport { IPortalMemberDetail } from '../../../models/member';\nimport { ItemQuery } from '../../../models/http';\n\nimport { USER_TABLE_FULL } from '../../api/user/user-table';\nimport { UserService } from '../../../services/user.service';\nimport { ItemService } from '../../../services/item.service';\nimport { TableColumn } from '../table';\n\nexport abstract class SelectionManager<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> {\n\n candidates = signal<Selectable<L>[]>([]);\n selected = signal<L[]>([]);\n columns: TableColumn[] = [];\n\n itemService: ItemService<D, L, C, U>;\n constructor(itemService: ItemService<D, L, C, U>)\n {\n this.itemService = itemService;\n }\n\n fetchCandidates(item: string, id: number)\n {\n const queries = new Map<string, string>([[item, id.toString()]]);\n const query = new ItemQuery({queries : queries});\n this.itemService.get(query).subscribe(items => this.selected.set(items.results));\n this.itemService.get().subscribe(items => this.updateCandidates(items));\n }\n\n protected updateCandidates(items: IPaginated<L>)\n {\n this.candidates.set(items.results.map(item => this.toSelectable(item)));\n }\n\n abstract toSelectable(item: L): Selectable<L>;\n\n onRemoved(id: number): string {\n const url = this.selected().find(m => m.id == id)!.url;\n this.selected.update(items => items.filter(m => m.id != id));\n return url;\n }\n\n onAdded(title: string): string {\n const selected = this.candidates().find(m => m.title == title);\n if (selected) {\n this.selected.update(members => { members.push(selected.item); return members; });\n }\n this.candidates.update(members => members.filter(m => m.title != title));\n return this.selected().find(m => this.hasTitle(m, title))!.url;\n }\n\n abstract hasTitle(item: L, title: string): boolean;\n\n onSearchChanged(searchTerm: string | null)\n {\n if (searchTerm)\n {\n this.itemService.get(new ItemQuery({filter: searchTerm})).subscribe(items => this.updateCandidates(items));\n }\n else\n {\n this.itemService.get().subscribe(items => this.updateCandidates(items));\n }\n }\n}\n\nexport class MemberSelectionManager extends SelectionManager<IPortalMemberDetail>\n{\n override columns = USER_TABLE_FULL;\n\n constructor()\n {\n super(inject(UserService));\n }\n\n override toSelectable(item: IPortalMemberDetail): Selectable<IPortalMemberDetail>\n {\n return {title: item.username, item: item};\n }\n\n override hasTitle(item: IPortalMemberDetail, title: string): boolean\n {\n return item.username == title;\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { Location } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-back-button',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './back-button.component.html',\n styleUrl: './back-button.component.scss'\n})\nexport class BackButtonComponent {\n\n protected location = inject(Location);\n\n protected goBack(): void {\n this.location.back();\n }\n\n}\n","<a mat-icon-button class=\"padded-button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n<mat-icon>arrow_back</mat-icon>\n</a>\n\n","import { Component, input, computed, output } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-detail-header',\n imports: [RouterModule,\n MatButtonModule,\n MatIconModule, MatTooltipModule],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss'\n})\nexport class DetailHeaderComponent {\n id = input<number>(0);\n text = input<string>(\"\");\n route = input<string>(\"\");\n canEdit = input<boolean>(false);\n canDelete = input<boolean>(false);\n deleteClicked = output<void>();\n fullRoute = computed(() => \"/\" + this.route() + \"/edit/\");\n\n deleteClick() {\n this.deleteClicked.emit();\n }\n}\n\n","<div class=\"container\">\n\n <h1 class=\"header\">{{text()}}</h1>\n\n <div class=\"controls\">\n @if(canEdit()){\n <a mat-mini-fab class=\"control-button\" matTooltip=\"Edit the item\" title=\"Click to edit this item\" aria-label=\"Click to edit this item\"\n [routerLink]=\"[fullRoute(), id()]\">\n <mat-icon>edit</mat-icon>\n </a>\n }\n\n @if(canDelete()){\n <button mat-mini-fab class=\"control-button\" (click)=\"deleteClick()\" matTooltip=\"Delete the item\" title=\"Click to delete this item\"\n aria-label=\"Click to delete this item\">\n <mat-icon>delete</mat-icon></button>\n }\n </div>\n\n</div>","import { tap, debounceTime, distinctUntilChanged } from 'rxjs';\n\nimport { AfterViewInit, Component, input, output, signal } from '@angular/core';\n\nimport { TitleCasePipe } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'lib-search-bar',\n imports: [ReactiveFormsModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n TitleCasePipe],\n templateUrl: './search-bar.component.html',\n styleUrl: './search-bar.component.scss'\n})\n\nexport class SearchBarComponent implements AfterViewInit {\n itemType = input(\"\");\n sortFields = input<string[]>([]);\n sortAscending = signal(true);\n searchChanged = output<string>();\n\n searchFilter = new FormControl();\n\n ngAfterViewInit() {\n this.searchFilter.valueChanges.pipe(\n debounceTime(150),\n distinctUntilChanged(),\n tap(() => {\n this.searchEntered();\n\n })\n ).subscribe();\n }\n\n clearSearch() {\n this.searchFilter.setValue(\"\");\n }\n\n searchEntered() {\n this.searchChanged.emit(this.searchFilter.value)\n }\n}\n","<div class=\"container\">\n <mat-form-field class=\"search\" style=\"margin: 10px;width:100%\">\n <mat-label>Search</mat-label>\n <input matInput [formControl]=\"searchFilter\" placeholder=\"Search {{ itemType() | titlecase }}\" />\n\n @if(searchFilter.value){\n <button matSuffix mat-icon-button aria-label=\"Cancel\" (click)=\"clearSearch()\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n @else(){\n <button matSuffix mat-icon-button aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n }\n </mat-form-field>\n\n @if(sortFields().length > 0){\n <mat-form-field style=\"margin: 10px\">\n <mat-label>Sort By</mat-label>\n <mat-select>\n @for(field of sortFields(); track field)\n {\n <mat-option>{{field}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button mat-icon-button aria-label=\"Sort Order\" matTooltip=\"Toggle sort order\">\n <mat-icon>sort</mat-icon>\n </button>\n }\n</div>","import { Component, input } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { FormControl } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IFileRecord } from '../../../models/file-record';\n\n@Component({\n selector: 'lib-file-upload',\n imports: [MatIconModule, MatButtonModule, MatTooltipModule, TitleCasePipe],\n templateUrl: './file-upload.component.html',\n styleUrl: './file-upload.component.scss'\n})\nexport class FileUploadComponent {\n\n control = input.required<FormControl<IFileRecord> >();\n\n protected onFileUpload(event: Event) {\n if (!event.target)\n {\n return;\n }\n \n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n this.onFileUploaded(input_element.files[0]);\n }\n }\n\n protected onFileUploaded(file: File)\n {\n const record = this.control().value;\n record.file = file;\n this.control().setValue(record);\n if (record.file_type == \"image\")\n {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => { if(reader.result){this.onPreviewLoaded(reader.result)}; }; \n }\n } \n\n protected onPreviewLoaded(preview: string | ArrayBuffer)\n {\n const record = this.control().value;\n record.local = preview;\n this.control().setValue(record);\n }\n\n protected onClearLocal()\n {\n const record = this.control().value;\n record.local = \"\";\n this.control().setValue(record);\n }\n}\n","<div class=\"container\">\n @if (control().value.local || control().value.file)\n {\n <div class=\"image_holder\">\n <p>Update {{control().value.display_name | titlecase}}</p>\n <div style=\"display:flex; flex-direction:row; justify-content: center; align-content: center;\">\n\n @if(control().value.local){\n <img alt=\"{{control().value.display_name}}\" src=\"{{control().value.local}}\" style=\"height:120px;\">\n }\n @else {\n <div>{{control().value.file?.name}}</div>\n }\n\n <button mat-mini-fab (click)=\"onClearLocal()\" matTooltip=\"Clear\" type=\"button\" style=\"margin:10px\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n </div>\n }\n @else\n {\n @if (control().value.remote){\n <div class=\"image_holder\">\n <p>Update {{control().value.display_name | titlecase}}</p>\n <img alt=\"{{control().value.display_name}}\" src=\"{{control().value.remote}}\" style=\"height:120px;\">\n </div>\n }\n @else {\n <div>\n <span>Upload a {{control().value.display_name}}</span>\n </div>\n }\n <div class=\"button-row\">\n <button mat-mini-fab (click)=\"fileInput.click()\" matTooltip=\"Attach\" type=\"button\" style=\"margin:10px\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\" #fileInput (change)=\"onFileUpload($event)\" />\n </div>\n }\n</div>","import { Component, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { IFormFieldDetail } from '../../../../models/form';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FileUploadComponent } from '../../file-upload/file-upload.component';\nimport { IFileRecord } from '../../../../models/file-record';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-form-field-detail',\n imports: [ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatCheckboxModule, MatIconModule, FileUploadComponent],\n templateUrl: './form-field-detail.component.html',\n styleUrl: './form-field-detail.component.scss'\n})\nexport class FormFieldDetailComponent {\n\n readonly field = input.required<IFormFieldDetail>();\n form = input.required<FormGroup>();\n\n get isValid(): boolean {\n const control = this.form().get(this.key);\n if (control) {\n return control.valid;\n }\n return false;\n }\n\n get key(): string {\n return this.field().id.toString();\n }\n\n get control(): FormControl<IFileRecord> {\n return this.form().get(this.key) as FormControl<IFileRecord>;\n }\n}\n","<div [formGroup]=\"form()\">\n <h3>{{ field().label }}</h3>\n <p>{{field().description}}</p>\n <div>\n @switch (field().field_type) {\n @case ('TEXT') {\n <mat-form-field class=\"form-field-wide\">\n <mat-label [attr.for]=\"key\">{{ field().label }}</mat-label>\n <textarea matInput\n [placeholder]=\"field().default\"\n type=\"text\"\n style=\"min-height:150px\"\n [formControlName]=\"key\"\n [name]=\"key\"></textarea>\n </mat-form-field>\n }\n @case('BOOLEAN')\n {\n <mat-checkbox\n class=\"form-field\"\n [name]=\"key\"\n [formControlName]=\"key\">\n {{ field().label }}\n </mat-checkbox>\n }\n @case ('INTEGER') {\n <mat-form-field class=\"form-field\">\n <mat-label>{{ field().label }}</mat-label>\n <input matInput\n [placeholder]=\"field().default\"\n type=\"number\"\n max=\"10\" min=\"1\"\n [formControlName]=\"key\"\n name=\"trl_stage\">\n </mat-form-field>\n }\n @case ('CHAR') {\n <mat-form-field class=\"form-field\">\n <mat-label>{{ field().label }}</mat-label>\n <input matInput\n [placeholder]=\"field().default\"\n type=\"text\"\n [formControlName]=\"key\"\n name=\"key\">\n </mat-form-field>\n }\n @case('FILE') {\n <div class=\"form-field\">\n @if(field().template)\n {\n <a href=\"{{field().template}}\" matFab extended aria-label=\"Download template\">\n <mat-icon>download</mat-icon>\n Download Form\n </a>\n }\n <h4>Upload Completed Form</h4>\n <lib-file-upload [control]=\"control\"></lib-file-upload>\n </div>\n } \n }\n </div>\n</div>\n","import { Component, output, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router'\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { FORM_FIELD_CHOICES, getFieldTypeFromKey, FieldType } from '../../../../models/form';\nimport { FileUploadComponent } from '../../file-upload/file-upload.component';\nimport { IFileRecord } from '../../../../models/file-record';\nimport { IFormFieldForm } from './form-field-form';\n\n@Component({\n selector: 'lib-form-field-edit',\n imports: [ReactiveFormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatTableModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n MatTooltipModule,\n MatCheckboxModule,\n FileUploadComponent],\n templateUrl: './form-field-edit.component.html',\n styleUrl: './form-field-edit.component.scss'\n})\nexport class FormFieldEditComponent {\n\n availableTypes = FORM_FIELD_CHOICES;\n readonly FieldType = FieldType;\n\n form = input.required<FormGroup<IFormFieldForm> >();\n editMode = input(false);\n submitted = output();\n cancelled = output();\n\n get templateControl(): FormControl<IFileRecord>\n {\n return this.form().get('template') as FormControl<IFileRecord>;\n }\n\n get fieldType(): FieldType \n {\n const field_type = this.form().value.field_type;\n if (field_type)\n {\n return getFieldTypeFromKey(field_type);\n }\n return FieldType.Undefined;\n }\n\n submit()\n {\n this.submitted.emit();\n }\n\n cancel()\n {\n this.cancelled.emit();\n }\n}\n\n\n","<form class=\"form-card\" id=\"app-field-form\" [formGroup]=\"form()\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field\">\n <mat-label>Label</mat-label>\n <input matInput placeholder=\"Label\" type=\"text\" formControlName=\"label\" required name=\"label\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"Key\" type=\"text\" formControlName=\"key\" required name=\"key\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" style=\"min-height:150px\" type=\"text\" formControlName=\"description\"\n required name=\"description\"></textarea>\n </mat-form-field>\n\n <mat-checkbox class=\"example-margin\" formControlName=\"required\">Required?</mat-checkbox>\n\n <mat-form-field class=\"form-field\">\n <mat-label>Type</mat-label>\n <mat-select formControlName=\"field_type\" name=\"field_type\" required>\n @for(type of availableTypes; track type.value){\n <mat-option [value]=\"type.value\">{{type.display_name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @switch (fieldType) {\n @case(FieldType.Boolean)\n {\n <mat-form-field class=\"form-field\">\n <mat-label>Default</mat-label>\n <mat-select formControlName=\"default\" name=\"default\" required>\n <mat-option [value]=\"'true'\">True</mat-option>\n <mat-option [value]=\"'false'\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case(FieldType.Char)\n {\n <mat-form-field class=\"form-field\">\n <mat-label>Default</mat-label>\n <input matInput placeholder=\"Default\" type=\"text\" formControlName=\"default\" name=\"default\">\n </mat-form-field>\n }\n @case(FieldType.Text || FieldType.RichText)\n {\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Default</mat-label>\n <textarea matInput placeholder=\"Default\" style=\"min-height:150px\" type=\"text\" formControlName=\"default\"\n name=\"default\"></textarea>\n </mat-form-field>\n }\n @case(FieldType.File)\n {\n <lib-file-upload [control]=\"templateControl\"></lib-file-upload>\n }\n}\n <div>\n @if(!editMode()) {\n <button mat-fab class=\"form-action-button\" type=\"submit\" matTooltip=\"Add Field\"\n [disabled]=\"!form().valid\">\n <mat-icon>add</mat-icon>\n </button>\n <button mat-fab class=\"form-action-button\" (click)=\"cancel()\" type=\"button\" matTooltip=\"Cancel\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n </div>\n</form>","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IFormFieldCreate, IFormFieldDetail } from '../../../../models/form';\n\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IFormFieldForm\n{\n label: FormControl<string | null>;\n key: FormControl<string | null>;\n required: FormControl<boolean | null>;\n description: FormControl<string | null>;\n template: FormControl<IFileRecord | null>;\n options: FormControl<string | null>;\n default: FormControl<string | null>;\n field_type: FormControl<string | null>;\n order: FormControl<number | null>;\n id: FormControl<number | null>;\n}\n\nexport class FormFieldForm {\n\n static getBaseTemplate(): IFileRecord\n {\n return {name: \"template\", display_name: \"template\", file_type: \"\", remote: \"\", local: \"\", file: null};\n }\n\n static createForm(fb: FormBuilder): FormGroup<IFormFieldForm>{\n return fb.group<IFormFieldForm>({\n label: fb.control<string>('', Validators.required),\n key: fb.control<string>('', Validators.required),\n required: fb.control<boolean>(false, Validators.required),\n description: fb.control<string>('', Validators.required),\n template: fb.control<IFileRecord>(this.getBaseTemplate()),\n options: fb.control<string | null>(null),\n default: fb.control<string>(''),\n field_type: fb.control<string>(\"BOOLEAN\", Validators.required),\n order: fb.control<number>(0),\n id: fb.control<number>(-1),\n });\n }\n\n static fromItem(item: IFormFieldDetail, builder: FormBuilder): FormGroup<IFormFieldForm>\n {\n const form = this.createForm(builder);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IFormFieldForm>, item: IFormFieldDetail): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n\n const template = this.getBaseTemplate();\n if (item.template)\n {\n template.remote = item.template;\n }\n\n form.setValue({\n label: item.label,\n key: item.key,\n required: item.required,\n description: item.description,\n template: template,\n options: \"\",\n default: item.default,\n field_type: item.field_type,\n order: item.order,\n id: id\n });\n }\n\n static createItem(form: FormGroup<IFormFieldForm>): IFormFieldCreate\n {\n const value = form.value;\n return {\n label: value.label || \"\",\n key: value.key || \"\",\n required: value.required || false,\n description: value.description || \"\",\n options: null,\n default: value.default || \"\", \n field_type: value.field_type || \"BOOLEAN\",\n order: value.order || 0\n };\n }\n\n static updateItem(form: FormGroup<IFormFieldForm>, item: IFormFieldDetail | IFormFieldCreate): IFormFieldDetail | IFormFieldCreate\n {\n const value = form.value;\n item.label = value.label || \"\";\n item.key = value.key || \"\";\n item.required = value.required || false;\n item.description = value.description || \"\";\n item.options = null;\n item.default = value.default || \"\"; \n item.field_type = value.field_type || \"BOOLEAN\";\n item.order = value.order || 0;\n return item;\n }\n\n}\n","import { FormArray, FormBuilder, FormGroup, FormControl } from '@angular/forms';\n\nimport { IFormFieldBase, IFormFieldCreate, IFormFieldDetail, IFormGroupCreate, IFormGroupDetail, IFormGroupUpdate } from '../../../../models/form';\nimport { FormFieldForm, IFormFieldForm } from './form-field-form';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IFormGroupForm\n{\n label: FormControl<string | null>;\n description: FormControl<string | null>;\n order: FormControl<number | null>;\n id: FormControl<number | null>;\n fields: FormArray<FormGroup<IFormFieldForm>>;\n}\n\nexport class FormGroupForm {\n\n static createForm(fb: FormBuilder): FormGroup<IFormGroupForm>{\n return fb.group<IFormGroupForm>({\n label: fb.control<string>(''),\n description: fb.control<string>(''),\n order: fb.control<number>(0),\n fields: fb.array<FormGroup<IFormFieldForm>>([]),\n id: fb.control<number>(-1)\n });\n }\n\n static getFileRecords(form: FormGroup<IFormGroupForm>): IFileRecord[] \n {\n const records: IFileRecord[] = [];\n this.getFields(form).controls.map(f => {const f_typed = f as FormGroup<IFormFieldForm>;\n if (f_typed.value.field_type == \"FILE\" && f_typed.value.template)\n {\n records.push(f_typed.value.template)\n }\n })\n return records;\n }\n\n static createField(form: FormGroup<IFormGroupForm>, field: FormGroup<IFormFieldForm>)\n {\n const fields = this.getFields(form);\n field.patchValue({order : fields.controls.length});\n fields.push(field);\n }\n\n static deleteField(form: FormGroup<IFormGroupForm>, id: number)\n {\n this.getFields(form).removeAt(id);\n } \n\n static reorderField(group: FormGroup<IFormGroupForm>, id: number, newIndex: number)\n {\n const current_field = this.getFields(group).at(id);\n current_field.patchValue({\"order\": newIndex});\n const swap_field = this.getFields(group).at(newIndex);\n swap_field.patchValue({\"order\": id});\n\n this.getFields(group).removeAt(id);\n this.getFields(group).insert(newIndex, current_field);\n }\n \n static fromItem(item: IFormGroupDetail, fb: FormBuilder): FormGroup<IFormGroupForm>\n {\n const form = this.createForm(fb);\n this.setValue(form, item, fb);\n return form;\n }\n\n static getLabel(form: FormGroup<IFormGroupForm>, id: number): string\n {\n if (form.value){\n if(form.value.label)\n {\n return form.value.label;\n }\n else if(form.value.order)\n {\n return \"Group \" + form.value.order.toString();\n }\n }\n return \"Group \" + id.toString();\n }\n\n static setValue(form: FormGroup<IFormGroupForm>, item: IFormGroupDetail, fb: FormBuilder): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n form.patchValue({\n label: item.label,\n description: item.description,\n order: item.order,\n id: id\n });\n const fields = this.getFields(form);\n fields.clear();\n item.fields.map(f => fields.push(FormFieldForm.fromItem(f, fb)))\n }\n\n static getFields(form: FormGroup<IFormGroupForm>): FormArray<FormGroup<IFormFieldForm> >\n {\n return form.get('fields') as FormArray;\n }\n\n static createItem(form: FormGroup<IFormGroupForm>): IFormGroupCreate\n {\n const value = form.value;\n return {\n label: value.label || null,\n description: value.description || null,\n order: value.order || 0,\n fields: Array.from(this.getFields(form).controls.map(f => FormFieldForm.createItem(f as FormGroup<IFormFieldForm>)))\n };\n }\n\n static createOrUpdateField(form: FormGroup<IFormFieldForm>, items: IFormFieldBase[]): IFormFieldCreate | IFormFieldDetail\n {\n if (form.value.id && form.value.id >= 0)\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormFieldForm.updateItem(form, matching_item as IFormFieldDetail);\n }\n return FormFieldForm.createItem(form);\n }\n\n static updateItem(form: FormGroup, item: IFormGroupDetail | IFormGroupCreate): IFormGroupUpdate | IFormGroupCreate\n {\n const value = form.value;\n item.label = value.label || null;\n item.description = value.description || null;\n item.order = value.order || 0;\n item.fields = Array.from(this.getFields(form).controls.map(f => this.createOrUpdateField(f, item.fields)))\n return item;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\n\nimport { IFormCreate, IFormDetail, IFormGroupBase, IFormGroupDetail, IFormGroupCreate, IFormUpdate, IFormGroupUpdate, IFileField, getFileFieldIds } from '../../../../models/form';\nimport { FormGroupForm, IFormGroupForm } from './form-group-form';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IDynamicFormForm\n{\n groups: FormArray<FormGroup<IFormGroupForm>>;\n}\n\nexport class DynamicFormForm {\n\n fb = inject(FormBuilder);\n form: FormGroup<IDynamicFormForm>;\n\n constructor()\n {\n this.form = this.fb.group<IDynamicFormForm>({\n groups: this.fb.array<FormGroup<IFormGroupForm> >([])\n });\n }\n\n get groups(): FormArray<FormGroup<IFormGroupForm>>\n {\n return this.form.get('groups') as FormArray;\n }\n\n getFileFields(form: IFormDetail): IFileField[] \n {\n const ids = getFileFieldIds(form);\n const records: IFileRecord[] = [];\n this.groups.controls.map(g => records.push(...FormGroupForm.getFileRecords(g)));\n const fields: IFileField[] = [];\n for(let i = 0; i< ids.length; i++)\n {\n fields.push({id: ids[i], file: records[i]});\n }\n return fields;\n }\n\n orderUp(id: number)\n {\n this.reorder(id, id-1);\n }\n\n orderDown(id: number)\n {\n this.reorder(id, id+1);\n } \n\n reorder(id: number, newIndex: number)\n {\n const current_group = this.groups.at(id);\n current_group.patchValue({\"order\": newIndex});\n const swap_group = this.groups.at(newIndex);\n swap_group.patchValue({\"order\": id});\n\n this.groups.removeAt(id);\n this.groups.insert(newIndex, current_group);\n }\n\n fieldOrderUp(group_id: number, id: number)\n {\n this.reorderField(group_id, id, id-1);\n }\n\n fieldOrderDown(group_id: number, id: number)\n {\n this.reorderField(group_id, id, id+1);\n } \n\n reorderField(group_id: number, id: number, newIndex: number)\n {\n FormGroupForm.reorderField(this.groups.at(group_id), id, newIndex);\n }\n\n createGroup(group: FormGroup<IFormGroupForm>)\n {\n group.patchValue({order : this.groups.controls.length});\n this.groups.push(group);\n }\n\n deleteGroup(id: number)\n {\n this.groups.removeAt(id);\n }\n\n deleteField(group_id: number, field_id: number)\n {\n FormGroupForm.deleteField(this.groups.at(group_id), field_id);\n }\n\n reset()\n {\n this.form = this.fb.group<IDynamicFormForm>({\n groups: this.fb.array<FormGroup<IFormGroupForm> >([])\n });\n }\n\n setValue(item: IFormDetail): void {\n this.groups.clear();\n item.groups.map(g => this.groups.push(FormGroupForm.fromItem(g, this.fb)));\n }\n\n createItem(): IFormCreate\n {\n return {\n groups: Array.from(this.groups.controls.map(g => FormGroupForm.createItem(g)))\n };\n }\n\n createOrUpdateGroup(form: FormGroup<IFormGroupForm>, items: IFormGroupBase[]): IFormGroupCreate | IFormGroupUpdate\n {\n if (form.value.id && form.value.id >= 0)\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormGroupForm.updateItem(form, matching_item as IFormGroupDetail);\n }\n return FormGroupForm.createItem(form);\n }\n\n updateItem(item: IFormDetail): IFormCreate | IFormUpdate\n {\n const item_update = item as IFormUpdate;\n item_update.groups = Array.from(this.groups.controls.map(f => this.createOrUpdateGroup(f, item.groups)));\n return item_update;\n }\n\n}\n","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IFormFieldValueCreate, IFormFieldValueDetail } from '../../../../models/form';\n\n\nexport interface IFormFieldValueForm\n{\n value: FormControl<string | null>;\n id: FormControl<number | null>;\n field: FormControl<number | null>;\n}\n\nexport class FormFieldValueForm {\n\n static createForm(fb: FormBuilder): FormGroup<IFormFieldValueForm>{\n return fb.group<IFormFieldValueForm>({\n value: fb.control<string>('', Validators.required),\n id: fb.control<number>(-1),\n field: fb.control<number>(-1)\n });\n }\n\n static fromItem(item: IFormFieldValueDetail, builder: FormBuilder): FormGroup<IFormFieldValueForm>\n {\n const form = this.createForm(builder);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IFormFieldValueForm>, item: IFormFieldValueDetail): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n\n form.setValue({\n value: item.value,\n field: item.field.id,\n id: id\n });\n }\n\n static createItem(form: FormGroup<IFormFieldValueForm>): IFormFieldValueCreate\n {\n const value = form.value;\n return {\n value: value.value || \"\",\n field: value.field || -1,\n asset: null\n };\n }\n\n static updateItem(form: FormGroup<IFormFieldValueForm>, item: IFormFieldValueDetail): IFormFieldValueDetail\n {\n const value = form.value;\n item.value = value.value || \"\";\n return item;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\n\nimport { IPopulatedFormCreate, IPopulatedFormDetail, IFormFieldValueBase, IFormFieldValueDetail } from '../../../../models/form';\nimport { FormFieldValueForm, IFormFieldValueForm } from './form-field-value-form';\n\nexport interface IPopulatedFormForm\n{\n values: FormArray<FormGroup<IFormFieldValueForm>>;\n}\n\nexport class PopulatedFormForm {\n\n fb = inject(FormBuilder);\n form: FormGroup;\n\n constructor()\n {\n this.form = this.fb.group<IPopulatedFormForm>({\n values: this.fb.array<FormGroup<IFormFieldValueForm> >([])\n });\n }\n\n get values(): FormArray<FormGroup<IFormFieldValueForm>>\n {\n return this.form.get('values') as FormArray;\n }\n\n reset()\n {\n this.form = this.fb.group({\n groups: this.fb.array([])\n });\n }\n\n setValue(item: IPopulatedFormDetail): void {\n this.values.clear();\n item.values.map(v => this.values.push(FormFieldValueForm.fromItem(v, this.fb)));\n }\n\n createItem(): IPopulatedFormCreate\n {\n return {\n values: Array.from(this.values.controls.map(v => FormFieldValueForm.createItem(v)))\n };\n }\n\n updateValue(form: FormGroup<IFormFieldValueForm>, items: IFormFieldValueBase[]): IFormFieldValueDetail\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormFieldValueForm.updateItem(form, matching_item as IFormFieldValueDetail);\n }\n\n updateItem(item: IPopulatedFormDetail): IPopulatedFormDetail\n {\n item.values = Array.from(this.values.controls.map(f => this.updateValue(f, item.values)));\n return item;\n }\n\n}\n","import {Component, computed, inject, input} from '@angular/core';\nimport {FormGroup, ReactiveFormsModule} from '@angular/forms';\n\nimport { FormFieldDetailComponent } from '../detail/form-field-detail.component';\n\nimport { FormService } from '../../../../services/form.service';\nimport { IFormDetail } from '../../../../models/form';\n\n@Component({\n selector: 'lib-dynamic-form',\n imports: [FormFieldDetailComponent, ReactiveFormsModule, FormFieldDetailComponent],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss'\n})\nexport class DynamicFormComponent {\n\n private readonly formService = inject(FormService);\n readonly inputForm = input.required<IFormDetail>();\n \n readonly form = computed<FormGroup>(() =>\n this.formService.toFormGroup(this.inputForm()),\n );\n\n payLoad = '';\n\n onSubmit() {\n this.payLoad = JSON.stringify(this.form().getRawValue());\n } \n\n}\n","<div>\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form()\">\n\n @for (group of inputForm().groups; track group.order) {\n\n @if(group.label)\n {\n <h3>{{group.label}}</h3>\n }\n\n @if(group.description){\n <p>{{group.description}}</p>\n }\n\n @for (field of group.fields; track field.order) {\n <div class=\"form-row\">\n <lib-form-field-detail [field]=\"field\" [form]=\"form()\" />\n </div>\n }\n }\n </form>\n</div>","import { Component, input, inject, output } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, FormBuilder, FormArray } from '@angular/forms';\n\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { FormGroupForm, IFormGroupForm } from '../edit/form-group-form';\nimport { FormFieldForm, IFormFieldForm } from '../edit/form-field-form';\nimport { FormFieldEditComponent } from '../edit/form-field-edit.component';\n\n@Component({\n selector: 'lib-form-group-edit',\n imports: [MatExpansionModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n FormFieldEditComponent],\n templateUrl: './form-group-edit.component.html',\n styleUrl: './form-group-edit.component.scss'\n})\nexport class FormGroupEditComponent {\n form = input.required<FormGroup<IFormGroupForm>>();\n editMode = input<boolean>(false);\n\n submitted = output();\n cancelled = output();\n deleted = output();\n\n fb = inject(FormBuilder);\n fieldForm: FormGroup<IFormFieldForm> | null = null;\n\n get fields(): FormArray<FormGroup<IFormFieldForm>> {\n return this.form().get('fields') as FormArray<FormGroup<IFormFieldForm>>;\n }\n\n onFieldDelete(id: number) {\n FormGroupForm.deleteField(this.form(), id);\n }\n\n onFieldOrderUp(id: number) {\n FormGroupForm.reorderField(this.form(), id, id + 1)\n }\n\n onFieldOrderDown(id: number) {\n FormGroupForm.reorderField(this.form(), id, id - 1)\n }\n\n addField() {\n this.fieldForm = FormFieldForm.createForm(this.fb);\n }\n\n cancelField() {\n this.fieldForm = null;\n }\n\n submitField() {\n if (this.fieldForm) {\n FormGroupForm.createField(this.form(), this.fieldForm);\n }\n this.fieldForm = null;\n }\n\n onDelete()\n {\n this.deleted.emit();\n }\n\n cancel()\n {\n this.cancelled.emit();\n }\n\n submit()\n {\n this.submitted.emit();\n }\n}\n","<form class=\"form-card\" style=\"width:100%\" [formGroup]=\"form()\" (ngSubmit)=\"submit()\">\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"label\">Label</mat-label>\n <input matInput placeholder=\"\" type=\"text\" formControlName=\"label\"\n name=\"label\"/>\n </mat-form-field> \n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"\" type=\"text\" style=\"min-height:150px\" formControlName=\"description\"\n name=\"description\"></textarea>\n </mat-form-field>\n\n <button matFab type=\"button\" style=\"margin:10px\" color=\"primary\" matTooltip=\"Delete the Group\" aria-label=\"Delete the group\"\n (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n </button>\n\n <h3>Fields</h3>\n @if(fieldForm){\n <lib-form-field-edit style=\"min-width:450px\" [form]=\"fieldForm\" (submitted)=\"submitField()\" (cancelled)=\"cancelField()\"></lib-form-field-edit>\n }\n @else {\n\n <button mat-fab class=\"form-action-button\" (click)=\"addField()\" matTooltip=\"Add a Field\" type=\"button\">\n <mat-icon>add</mat-icon>\n </button>\n\n <mat-accordion style=\"min-width:450px\">\n @for(field of fields.controls; track field; let idx=$index)\n {\n <mat-expansion-panel style=\"width:100%\">\n <mat-expansion-panel-header class=\"expansion-panel\">\n <mat-panel-title>{{field.value.label}}</mat-panel-title>\n <div class=\"expansion-panel-controls\">\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Delete the Field\" aria-label=\"Delete an item\"\n (click)=\"onFieldDelete(idx)\">\n <mat-icon>delete\n </mat-icon>\n </button>\n @if(idx>0){\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Move Order Up\" aria-label=\"Move Order Up\"\n (click)=\"onFieldOrderUp(idx)\">\n <mat-icon>arrow_upward\n </mat-icon>\n </button>\n }\n @if(idx<fields.controls.length -1){\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Move Order Down\" aria-label=\"Move Order Down\"\n (click)=\"onFieldOrderDown(idx)\">\n <mat-icon>arrow_downward\n </mat-icon>\n </button>\n }\n </div>\n </mat-expansion-panel-header>\n <lib-form-field-edit [form]=\"field\" [editMode]=\"true\"></lib-form-field-edit>\n </mat-expansion-panel>\n }\n </mat-accordion>\n }\n\n @if(!editMode()){\n <div>\n <button mat-fab class=\"form-action-button\" \n type=\"submit\" matTooltip=\"Save Group\" [disabled]=\"!form().valid\">\n <mat-icon>save</mat-icon>\n </button>\n <button mat-fab class=\"form-action-button\" \n type=\"button\" matTooltip=\"Cancel\" (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button> \n </div>\n}\n<form>","import { Component, signal, input, inject, output } from '@angular/core';\nimport { FormBuilder, FormGroup, AbstractControl } from '@angular/forms';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatExpansionModule } from '@angular/material/expansion';\n\nimport { DynamicFormForm } from '../edit/dynamic-form-form';\nimport { FormGroupForm, IFormGroupForm } from '../edit/form-group-form';\nimport { FormGroupEditComponent } from \"../group-edit/form-group-edit.component\";\n\n@Component({\n selector: 'lib-dynamic-form-builder',\n imports: [\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatTooltipModule,\n MatExpansionModule,\n FormGroupEditComponent\n],\n templateUrl: './dynamic-form-builder.component.html',\n styleUrl: './dynamic-form-builder.component.scss'\n})\nexport class DynamicFormBuilderComponent {\n\n form = input.required<DynamicFormForm>();\n handleSubmit = input(false);\n submitted = output();\n\n dirty = signal(false);\n\n fb = inject(FormBuilder);\n groupForm: FormGroup<IFormGroupForm> | null = null;\n\n addGroup() {\n this.groupForm = FormGroupForm.createForm(this.fb);\n }\n\n createGroup() {\n if (this.groupForm) {\n this.form().createGroup(this.groupForm);\n }\n this.groupForm = null;\n }\n\n cancelGroup()\n {\n this.groupForm = null;\n }\n\n onSubmit() {\n this.submitted.emit();\n this.dirty.set(false);\n }\n\n deleteGroup(id: number) {\n this.form().deleteGroup(id);\n this.dirty.set(true);\n }\n\n onOrderUp(id: number) {\n this.form().orderUp(id);\n this.dirty.set(true);\n }\n\n onOrderDown(id: number) {\n this.form().orderDown(id);\n this.dirty.set(true);\n } \n\n getLabel(control: AbstractControl): string {\n const form = control as FormGroup;\n if (form.value.label) {\n return form.value.label;\n }\n else {\n return \"Group \" + form.value.order.toString();\n }\n }\n}\n","<h2>Groups</h2>\n\n\n@if(groupForm)\n{\n<lib-form-group-edit [form]=\"groupForm\" (cancelled)=\"cancelGroup()\" (submitted)=\"createGroup()\"></lib-form-group-edit>\n}\n@else{\n<button mat-fab class=\"form-action-button\" (click)=\"addGroup()\" matTooltip=\"Add a Group\" type=\"button\">\n <mat-icon>add</mat-icon>\n</button>\n\n@if (form().groups.length > 0){\n\n<mat-accordion style=\"width:100%\">\n\n @for(group of form().groups.controls; track group; let group_idx=$index)\n {\n <mat-expansion-panel style=\"width:100%\">\n <mat-expansion-panel-header class=\"expansion-panel\">\n <mat-panel-title>{{getLabel(group)}}</mat-panel-title>\n <div class=\"expansion-panel-controls\">\n @if(group_idx>0){\n <button mat-icon-button class=\"control-button\" type=\"button\" color=\"primary\" matTooltip=\"Move Order Up\" aria-label=\"Move Order Up\"\n (click)=\"onOrderUp(group_idx)\">\n <mat-icon>arrow_upward\n </mat-icon>\n </button>\n }\n @if(group_idx < form().groups.controls.length - 1){\n <button mat-icon-button class=\"control-button\" type=\"button\" color=\"primary\" matTooltip=\"Move Order Down\" aria-label=\"Move Order Down\"\n (click)=\"onOrderDown(group_idx)\">\n <mat-icon>arrow_downward\n </mat-icon>\n </button>\n }\n </div>\n </mat-expansion-panel-header>\n <lib-form-group-edit [form]=\"group\" [editMode]=\"true\" (deleted)=\"deleteGroup(group_idx)\"></lib-form-group-edit>\n </mat-expansion-panel>\n }\n</mat-accordion>\n\n}\n\n@if(handleSubmit() && dirty())\n{\n <div>\n <button mat-fab class=\"form-action-button\" \n type=\"button\" matTooltip=\"Save Changes\" (click)=\"onSubmit()\">\n <mat-icon>save</mat-icon>\n </button>\n </div>\n}\n}","import { Component, input } from '@angular/core';\n\nimport { IPopulatedFormDetail } from '../../../../models/form';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-populated-form',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './populated-form.component.html',\n styleUrl: './populated-form.component.scss'\n})\nexport class PopulatedFormComponent {\n form = input.required<IPopulatedFormDetail>();\n}\n","@for(value of form().values; track value.id)\n{\n@if(value.field.field_type === \"TEXT\" || value.field.field_type === \"RICH_TEXT\")\n{\n <div class=\"item-field\">\n <h3 style=\"margin-right: 10px\">{{value.field.label}}</h3>\n <p>{{value.value}}</p>\n </div>\n}\n@else if(value.field.field_type === \"CHAR\")\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n <span>{{value.value}}</span>\n </div>\n}\n@else if(value.field.field_type === \"BOOLEAN\")\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n @if(value.value === \"true\")\n {\n <mat-icon>check</mat-icon>\n }\n @else {\n <mat-icon>close_small</mat-icon>\n }\n </div>\n}\n@else if(value.field.field_type === \"FILE\" && value.asset)\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n <a matFab href=\"value.asset\">\n <mat-icon>download</mat-icon>\n </a>\n </div>\n}\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { merge, tap } from 'rxjs';\n\nimport { Component, AfterViewInit, viewChild, input, computed } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ItemQuery } from '../../../../models/http';\nimport { ListDataSource } from '../list-data-source';\nimport { DatePipe, TitleCasePipe } from '@angular/common';\nimport { TableColumn } from '../../table';\n\n@Component({\n selector: 'lib-list-table-view',\n imports: [MatTableModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatPaginatorModule,\n MatSortModule,\n RouterModule,\n DatePipe,\n TitleCasePipe\n ],\n templateUrl: './list-table-view.component.html',\n styleUrl: './list-table-view.component.scss'\n})\nexport class ListTableViewComponent implements AfterViewInit {\n\n itemType = input(\"\");\n columns = input<TableColumn[]>([]);\n dataSource = input<ListDataSource<any, any, any>>();\n searchFilter = input(\"\");\n pageSizeOptions = [20, 50, 100];\n initialPageSize = 20;\n columnNames = computed(() => this.columns().map(c => c.name));\n\n sort = viewChild(MatSort);\n paginator = viewChild(MatPaginator);\n\n ngAfterViewInit() {\n const paginator = this.paginator();\n const sort = this.sort();\n if (!paginator || !sort) {\n return;\n }\n\n sort.sortChange.subscribe(() => this.reset());\n merge(sort.sortChange, paginator.page)\n .pipe(\n tap(() => this.fetch())\n )\n .subscribe();\n }\n\n reset() {\n const paginator = this.paginator();\n if (!paginator) {\n return;\n }\n paginator.pageIndex = 0;\n }\n\n fetch() {\n const paginator = this.paginator();\n const sort = this.sort();\n const data_source = this.dataSource();\n if (!paginator || !sort || !data_source) {\n return;\n }\n\n data_source.fetch(new ItemQuery({\n page: paginator.pageIndex + 1,\n page_size: paginator.pageSize,\n sort_order: sort.direction,\n sort_field: sort.active,\n filter: this.searchFilter()\n }))\n }\n}\n","@if (dataSource(); as dataSource) {\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n matSortActive=\"name\"\n matSortDisableClear\n matSortDirection=\"desc\"\n class=\"mat-elevation-z8\"\n >\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n\n @if(column.element_type === \"date\")\n {\n {{ element[column.name] | date}}\n }\n @else if(column.element_type === \"enum\")\n {\n {{ element[column.name] | titlecase}}\n }\n @else {\n {{ element[column.name] }}\n }\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: columnNames()\"\n [routerLink]=\"['/' + itemType() + '/detail/', row.id]\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n </table>\n\n <mat-paginator\n [length]=\"dataSource.length()\"\n [pageSize]=\"20\"\n [pageSizeOptions]=\"pageSizeOptions\"\n aria-label=\"Select page\"\n >\n </mat-paginator>\n}\n","// Datasource needs any\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Component, input, signal, output, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { MatListModule } from '@angular/material/list';\n\nimport { ListDataSource } from '../list-data-source';\n\n@Component({\n selector: 'lib-list-scroll-view',\n imports: [MatListModule,\n NgTemplateOutlet,\n ScrollingModule],\n templateUrl: './list-scroll-view.component.html',\n styleUrl: './list-scroll-view.component.scss'\n})\n\nexport class ListScrollViewComponent {\n\n searchTerm = input<string>(\"\");\n pageSize = input(20);\n itemHeight = input<number>(100);\n itemWidth = input<string>(\"300px\");\n dataSource = input<ListDataSource<any, any, any> >();\n listItemTemplate = input<TemplateRef<unknown> | null | undefined>(null);\n routerMode = input<boolean>(false);\n selection = signal<number | null>(null);\n selected = output<number>();\n \n reset()\n {\n const data_source = this.dataSource();\n if(!data_source)\n {\n return;\n }\n// sort_order: this.sort!.direction,\n// sort_field: this.sort!.active, \n data_source.reset(this.searchTerm(), this.pageSize());\n } \n\n onSelected(id: number)\n {\n this.selection.set(id);\n this.selected.emit(id);\n }\n \n}\n","<mat-nav-list style=\"padding: 0px; display:flex; justify-content: center; \">\n <ul style=\"margin: 0px; padding: 0px\">\n <cdk-virtual-scroll-viewport\n itemSize=\"itemHeight()\"\n class=\"scrollable-list\"\n [style.width]=\"itemWidth()\"\n >\n <ng-container *cdkVirtualFor=\"let item of dataSource(); let even = even;\">\n @if(routerMode())\n {\n <li style=\"margin: 0px; padding: 0px\">\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate(); context: { item: item, even: even, selected: item.id === selection()}\" \n >\n </ng-container>\n </li>\n }\n @else \n {\n <li style=\"margin: 0px; padding: 0px\" \n (click)=\"onSelected(item.id)\" \n (keydown)=\"onSelected(item.id)\"\n tabindex=\"0\"\n role=\"button\">\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate(); context: { item: item, even: even, selected: item.id === selection()}\" \n >\n </ng-container>\n </li> \n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </ul>\n</mat-nav-list>\n","import { catchError, of, finalize, BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { signal, computed } from '@angular/core';\n\nimport { DataSource, CollectionViewer, ListRange } from '@angular/cdk/collections';\n\nimport { IItemQuery, ItemQuery } from '../../../models/http';\nimport { IPaginated, Paginated, Identifiable } from '../../../models/core';\n\nimport { ItemService } from '../../../services/item.service';\n\nexport interface IQuery\n{\n key: string;\n value: string;\n}\n\nexport class ListDataSource<D extends Identifiable, L extends Identifiable, C= D, U extends Identifiable = D> extends DataSource<L> {\n \n length = signal(0);\n loading = signal(true);\n searchTerm = signal<string>(\"\"); \n pageSize = signal(20);\n hasFetched = signal(false);\n\n sourceIsEmpty = computed(() => this.length() == 0 && this.hasFetched() && !this.searchTerm());\n\n private consumerType: string;\n private items = new BehaviorSubject<L[]>([]);\n itemService: ItemService<D, L, C, U>;\n private subscription = new Subscription();\n private fetchedPages = new Set<number>();\n private defaultQueries: IQuery[] = [];\n\n constructor(itemService: ItemService<D, L, C, U>, consumerType = \"table\", defaultQueries: IQuery[] = []) {\n super();\n this.itemService = itemService;\n this.consumerType = consumerType;\n this.defaultQueries = defaultQueries;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<L[]>\n {\n if (!this.hasTableConsumer())\n {\n this.subscription.add(collectionViewer.viewChange.subscribe((range) => this.onRange(range))); \n }\n\n return this.items.asObservable();\n }\n\n hasTableConsumer(): boolean\n {\n return this.consumerType === \"table\";\n }\n\n onRange(range: ListRange)\n {\n const start_page = Math.floor(range.start / this.pageSize());\n const end_page = Math.floor(range.end / this.pageSize());\n for (let idx = start_page; idx <= end_page; idx++)\n {\n this.fetchPage(idx);\n }\n }\n\n reset(searchTerm = \"\", pageSize = 20)\n {\n this.fetchedPages = new Set<number>();\n this.length.set(0);\n this.searchTerm.set(searchTerm);\n this.pageSize.set(pageSize);\n this.loading.set(true);\n this.items.next([]);\n this.fetchPage(0);\n }\n\n fetchPage(idx: number)\n {\n if (this.fetchedPages.has(idx))\n {\n return;\n }\n this.fetchedPages.add(idx);\n\n const queries = new Map<string, string>([]);\n this.defaultQueries.forEach(q => queries.set(q.key, q.value));\n\n this.fetch(new ItemQuery({page: idx + 1,\n page_size: this.pageSize(),\n queries: queries,\n filter: this.searchTerm()}));\n }\n\n fetch(query: IItemQuery)\n {\n this.loading.set(true);\n this.itemService.get(query).pipe(\n catchError(() => of(new Paginated<L>())),\n finalize(() => this.loading.set(false))\n ).subscribe(response => this.onResponse(response))\n }\n\n onResponse(response: IPaginated<L>) {\n this.length.set(response.count);\n this.hasFetched.set(true);\n\n if(this.hasTableConsumer())\n {\n this.items.next(response.results);\n }\n else\n {\n this.items.next([...this.items.value, ...response.results]); \n }\n }\n\n disconnect(): void {\n this.items.complete();\n if (this.subscription)\n {\n this.subscription.unsubscribe(); \n }\n\n }\n}\n","import { Component, input, output } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { SearchBarComponent } from '../../search-bar/search-bar.component';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-list-header',\n imports: [TitleCasePipe, \n RouterModule, \n MatIconModule, \n MatButtonModule,\n SearchBarComponent],\n templateUrl: './list-header.component.html',\n styleUrl: './list-header.component.scss',\n})\nexport class ListHeaderComponent {\n\n itemType = input.required<string>();\n canCreate = input.required<boolean>();\n showControls = input.required<boolean>();\n sortFields = input.required<string[]>();\n searchChanged = output<string>();\n\n title(): string\n {\n return this.itemType().replace(\"_\", \" \");\n }\n\n onSearchChange(value: string)\n {\n this.searchChanged.emit(value);\n }\n\n}\n","<div class=\"container\">\n\n <div class=\"title-container\">\n <h1 class=\"title\">{{ title() | titlecase }}</h1>\n\n @if (canCreate()) {\n <div class=\"button-container\">\n <a mat-fab class=\"padded-button\" aria-label=\"Add new item\" matTooltip=\"Add new item\"\n [routerLink]=\"['/' + itemType(), 'create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n }\n </div>\n\n <div class=\"controls\" [hidden]=\"!showControls()\">\n <lib-search-bar style=\"width:70%\" [itemType]=\"title()\" [sortFields]=\"sortFields()\"\n (searchChanged)=\"onSearchChange($event)\"></lib-search-bar>\n </div>\n</div>","import { tap } from 'rxjs';\n\nimport { AfterViewInit, Component, OnInit, input, signal, output, inject, TemplateRef, viewChild, computed } from '@angular/core';\nimport { RouterModule, ActivatedRoute } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatSort } from '@angular/material/sort';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule, MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListTableViewComponent } from '../list-table-view/list-table-view.component';\nimport { TableColumn } from '../../table';\nimport { ListScrollViewComponent } from '../list-scroll-view/list-scroll-view.component';\nimport { BackButtonComponent } from '../../back-button/back-button.component';\nimport { IQuery, ListDataSource } from '../list-data-source';\n\nimport { Identifiable } from '../../../../models/core';\nimport { ItemService } from '../../../../services/item.service';\nimport { ListHeaderComponent } from \"../list-header/list-header.component\";\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'lib-list-view',\n imports: [ListTableViewComponent,\n ListScrollViewComponent,\n BackButtonComponent,\n MatFormFieldModule,\n MatButtonToggleModule,\n MatProgressSpinnerModule,\n MatIconModule,\n ReactiveFormsModule,\n RouterModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n ListHeaderComponent,\n NgTemplateOutlet],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.scss'\n})\nexport class ListViewComponent<D extends Identifiable, L extends Identifiable, C=D, U extends Identifiable = D> implements OnInit, AfterViewInit {\n\n viewType = input(\"table\");\n itemService = input<ItemService<D, L, C, U>>();\n listItemTemplate = input<TemplateRef<unknown> | null>(null);\n itemDetailTemplate = input<TemplateRef<unknown> | null>(null);\n itemHeight = input(100);\n itemWidth = input(300);\n columns = input<TableColumn[]>([]);\n sortFields = input<string[]>([]);\n noSelfItemsMessage = input<string>();\n noItemsCanCreateMessage = input<string>();\n noItemsMessage = input<string>();\n defaultQueries = input<IQuery[]>([]);\n embeddedMode = input<boolean>(false);\n\n selectedViewType = signal(\"table\");\n selected = output<number | null>();\n\n pageSize = 20;\n pageSizeOptions = [20, 50, 100];\n\n protected route = inject(ActivatedRoute);\n dataSource: ListDataSource<D, L, C, U> | undefined = undefined;\n sort = viewChild(MatSort);\n columnNames = computed(() => this.columns().map(c => c.name));\n\n searchTerm = \"\";\n\n get resolvedItemWidth(): string \n {\n if(this.itemDetailTemplate())\n {\n return (this.itemWidth() + 50).toString() + \"px\";\n }\n else \n {\n return \"100%\";\n }\n }\n\n ngOnInit() {\n this.selectedViewType.set(this.viewType());\n this.resetDataSource();\n }\n\n ngAfterViewInit() {\n const sort = this.sort();\n if (sort) {\n sort.sortChange.pipe(tap(() => this.reset())).subscribe();\n }\n }\n\n showControls(): boolean\n {\n return this.dataSource != undefined && !this.dataSource.sourceIsEmpty();\n }\n\n onSearchChange(value: string)\n {\n this.searchTerm = value;\n this.reset();\n }\n\n canCreate(): boolean {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.canCreate();\n }\n return false;\n }\n\n itemType(): string {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.typePlural();\n }\n return \"\";\n }\n\n title(): string\n {\n return this.itemType().replace(\"_\", \" \");\n }\n\n isTableView(): boolean {\n return this.selectedViewType() === \"table\";\n }\n\n resetDataSource() {\n const item_service = this.itemService();\n if (item_service)\n {\n this.dataSource = new ListDataSource<D, L, C, U>(item_service, this.selectedViewType(), this.defaultQueries());\n }\n this.reset();\n }\n\n reset() {\n if (this.dataSource) {\n this.dataSource.reset(this.searchTerm, this.pageSize);\n }\n }\n\n viewChanged(event: MatButtonToggleChange) {\n this.selectedViewType.set(event.value);\n this.resetDataSource();\n }\n\n onSelection(id: number)\n {\n this.selected.emit(id);\n }\n\n protected isSelfList() {\n const url_segments = this.route.snapshot.url;\n if(!url_segments)\n {\n return false;\n }\n return (url_segments.length == 2) && (url_segments[1].path == \"self\")\n }\n}\n","@if(!embeddedMode()){\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n\n<div class=\"container\">\n <lib-list-header style=\"width:100%\"\n [itemType]=\"itemType()\" \n [canCreate]=\"canCreate()\" \n [showControls]=\"showControls()\"\n [sortFields]=\"sortFields()\"\n (searchChanged)=\"onSearchChange($event)\"></lib-list-header>\n\n <div class=\"content_container\" style=\"width:100%\">\n @if(dataSource)\n {\n <div class=\"search_result_container\" [style.width]=\"resolvedItemWidth\">\n\n @if (dataSource.loading()) {\n <div class=\"spinner-container\">\n <mat-spinner></mat-spinner>\n </div>\n }\n\n @if(!embeddedMode()){\n <div [hidden]=\"!dataSource.sourceIsEmpty()\">\n @if(isSelfList())\n {\n @if(noSelfItemsMessage())\n {\n <p>{{noSelfItemsMessage()}}</p>\n }\n @else {\n <p>You do not have any {{itemType()}}.</p>\n }\n }\n @else{\n @if(canCreate()){\n @if(noItemsCanCreateMessage())\n {\n <p>{{noItemsCanCreateMessage()}}</p>\n }\n @else{\n <p>There are currently no {{itemType()}}, click above to add one.</p>\n }\n }\n @else{\n @if(noItemsMessage())\n {\n <p>{{noItemsMessage()}}</p>\n }\n @else\n {\n <p>There are currently no {{itemType()}}.</p>\n }\n }\n }\n </div>\n }\n\n <div style=\"width: 100%\" [hidden]=\"dataSource.sourceIsEmpty()\">\n @if(isTableView()) {\n <lib-list-table-view [itemType]=\"itemType()\" [columns]=\"columns()\" [dataSource]=\"dataSource\">\n </lib-list-table-view>\n }\n @else {\n <h2 style=\"margin-bottom:5px; margin-top: 0px; padding: 0px;\">Results: {{dataSource.length()}}</h2>\n <lib-list-scroll-view [listItemTemplate]=\"listItemTemplate()\" \n [itemHeight]=\"itemHeight()\" \n [itemWidth]=\"itemWidth().toString()\"\n [dataSource]=\"dataSource\" \n (selected)=\"onSelection($event)\"></lib-list-scroll-view>\n }\n </div>\n </div>\n @if(itemDetailTemplate()){\n <div class=\"detail-container\" style=\"width:100%; min-width: 400px;\">\n <ng-container *ngTemplateOutlet=\"itemDetailTemplate()\">\n </ng-container>\n </div>\n }\n }\n </div>\n</div>","import { Component, input, inject, signal} from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { UserService } from '../../services/user.service';\nimport { IPortalMemberDetail, PortalMember } from '../../models/member';\n\n@Component({\n selector: 'lib-top-bar',\n imports: [RouterModule, \n MatToolbarModule, \n MatIconModule, \n MatButtonModule, \n MatMenuModule],\n templateUrl: './top-bar.component.html',\n styleUrl: './top-bar.component.scss'\n})\nexport class TopBarComponent {\n \n readonly title = input<string>();\n readonly logo = input<string>();\n readonly background = input<string>();\n readonly user = signal<IPortalMemberDetail | null>(null);\n readonly loginRoute = input<string>(\"home\");\n private userService = inject(UserService);\n\n constructor()\n {\n this.userService.loggedInUser.subscribe(user => this.user.set(user));\n }\n\n onLogout() {\n this.userService.logout();\n }\n\n onLogin()\n {\n this.userService.login(\"/\" + this.loginRoute)\n }\n\n get initials(): string\n {\n const user = this.user();\n if (user)\n {\n return PortalMember.getInitials(user);\n }\n return \"\"\n }\n\n get backgroundStyle(): string \n {\n if (this.background())\n {\n return \"url(\" + this.background() + \")\";\n }\n else \n {\n return \"none\";\n }\n }\n}\n","<mat-toolbar class=\"toolbar\" [style.background-image]=\"backgroundStyle\">\n\n @if(logo())\n {\n <a aria-label=\"Home\" [routerLink]=\"['home']\">\n <img src=\"{{logo()}}\" class=\"logo\" alt=\"Website logo\"/>\n </a>\n }\n @else {\n <a mat-icon-button aria-label=\"Home\" [routerLink]=\"['home']\">\n <mat-icon class=\"icon\">home</mat-icon>\n </a>\n <span>{{title()}}</span>\n }\n <span class=\"topbar-spacer\"></span>\n @if(user(); as user)\n {\n <span>{{user.username}}</span>\n \n <button mat-icon-button style=\"margin: 5px\" aria-label=\"User Profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon class=\"icon\">person</mat-icon>\n </button>\n\n <mat-menu #profile_menu=\"matMenu\">\n <a mat-menu-item aria-label=\"My Profile\" [routerLink]=\"['/members/detail', user.id]\">\n <mat-icon>manage_accounts</mat-icon>\n <span>My Profile</span>\n </a> \n <a mat-menu-item aria-label=\"Get Support\" [routerLink]=\"['/feedback']\">\n <mat-icon>contact_support</mat-icon>\n <span>Get Support</span>\n </a> \n <button mat-menu-item (click)=\"onLogout()\">\n <mat-icon>logout</mat-icon>\n <span>Log Out</span>\n </button>\n\n </mat-menu>\n }\n @else {\n <span>Log In</span>\n <button matIconButton (click)=\"onLogin()\">\n <mat-icon class=\"icon\">login</mat-icon>\n </button>\n }\n</mat-toolbar>\n","import { Component, inject, viewChild, input, signal } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\n\nimport { MatSidenavModule, MatSidenavContent } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { UserService, LeftNavService } from '../../services';\nimport { IPortalMemberDetail } from '../../models';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.scss'\n})\nexport class LeftNavComponent {\n\n readonly background = input<string>();\n user = signal<IPortalMemberDetail | null>(null);\n protected userService = inject(UserService);\n protected leftNavService: LeftNavService = inject(LeftNavService);\n\n sideNavContent = viewChild(MatSidenavContent);\n\n constructor()\n {\n this.userService.loggedInUser.subscribe(user => this.user.set(user));\n }\n\n getOptions() {\n return this.leftNavService.activeOptions;\n }\n \n get backgroundStyle(): string \n {\n if (this.background())\n {\n return \"url(\" + this.background() + \")\";\n }\n else \n {\n return \"none\";\n }\n }\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" [opened]=\"user() !== null\">\n <mat-nav-list>\n <ul>\n @for (option of leftNavService.activeOptions(); track option) {\n <li>\n <a mat-list-item \n [routerLink]=\"option.route\" \n routerLinkActive #rla=\"routerLinkActive\" \n [activated]=\"rla.isActive\">{{ option.name }}</a>\n </li>\n }\n </ul>\n </mat-nav-list>\n </mat-sidenav>\n <mat-sidenav-content class=\"leftnav-content\" [style.background-image]=\"backgroundStyle\"> \n <router-outlet />\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-feedback',\n imports: [],\n templateUrl: './feedback.component.html',\n styleUrl: './feedback.component.scss'\n})\nexport class FeedbackComponent {\n\n}\n","<p>feedback works!</p>\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-avatar',\n imports: [],\n templateUrl: './avatar.component.html',\n styleUrl: './avatar.component.scss'\n})\nexport class AvatarComponent {\n text = input(\"\");\n}\n","<div class=\"container\"> <span>{{text()}}</span> </div>","import { Component, inject, OnInit, input } from '@angular/core';\n\nimport { IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../../../../models';\nimport { UserService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [BackButtonComponent, DetailHeaderComponent],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n protected override canEdit(): boolean {\n if (!this.userService.loggedInUser)\n {\n return false;\n }\n\n if (this.item()?.id == this.userService.loggedInUser.value?.id)\n {\n return true;\n }\n return super.canEdit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n\n<div class=\"content-container\">\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.username\"\n [id]=\"item.id\"\n [route]=\"itemService.typePlural()\"\n [canEdit]=\"canEdit()\"\n [canDelete]=\"canDelete()\"\n (onDelete)=\"onDelete()\"></lib-detail-header>\n\n @if(item.profile){\n <div class=\"image-holder\">\n <img alt=\"User Profile Image\" src=\"{{item.profile}}\" style=\"height:120px;\">\n </div> \n }\n \n <div class=\"form-card\">\n <div class=\"item-field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item-field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item-field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n </div>\n \n </div>\n }\n</div>\n","import { inject } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\n\nimport { IPortalMemberCreate, IPortalMemberDetail} from '../../../../models/member';\nimport { IForm } from '../../../../models/core';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IUserForm\n{\n username: FormControl<string | null>;\n email: FormControl<string | null>;\n first_name: FormControl<string | null>;\n last_name: FormControl<string | null>;\n phone: FormControl<string | null>;\n profile: FormControl<IFileRecord | null>;\n}\n\nexport class UserForm implements IForm<IPortalMemberCreate, IPortalMemberDetail> {\n private fb = inject(FormBuilder);\n form = this.fb.group<IUserForm>({\n username: this.fb.control<string>('', Validators.required),\n email: this.fb.control<string>('', Validators.required),\n first_name: this.fb.control<string>(''),\n last_name: this.fb.control<string>(''),\n phone: this.fb.control<string>(''),\n profile: this.fb.control<IFileRecord>(UserForm.getDefaultProfile()),\n });\n\n static getDefaultProfile(): IFileRecord\n {\n return {name: \"profile\", display_name: \"Profile Image\", file_type: \"image\", remote: \"\", local: \"\", file: null};\n }\n\n setValue(item: IPortalMemberDetail) {\n\n const profile = UserForm.getDefaultProfile();\n if (item.profile)\n {\n profile.remote = item.profile;\n } \n\n this.form.setValue({\n username: item.username,\n email: item.email,\n first_name: item.first_name,\n last_name: item.last_name,\n phone: item.phone,\n profile: profile\n });\n }\n\n createItem(): IPortalMemberCreate\n {\n const value = this.form.value;\n return {\n username: value.username || \"\",\n email: value.email || \"\",\n first_name: value.first_name || \"\",\n last_name: value.last_name || \"\",\n phone: value.phone || \"\",\n identifiers: []\n };\n }\n\n updateItem(item: IPortalMemberDetail): IPortalMemberDetail\n {\n const value = this.form.value;\n item.username = value.username || \"\";\n item.email = value.email || \"\";\n item.first_name = value.first_name || \"\";\n item.last_name = value.last_name || \"\";\n item.phone = value.phone || \"\";\n return item;\n }\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { TitleCasePipe } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { IFileRecord } from '../../../../models/file-record';\nimport { EditView } from '../../../base/edit-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { FileUploadComponent } from '../../../base/file-upload/file-upload.component';\n\nimport { IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../../../../models/member';\nimport { UserService } from '../../../../services/user.service';\n\nimport { UserForm } from './user-form';\n\n@Component({\n selector: 'lib-user-edit',\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n BackButtonComponent,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n FileUploadComponent,\n TitleCasePipe\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> implements OnInit {\n\n protected override fileKeys: string[] = [\"profile\"];\n\n constructor() {\n super(inject(UserService), new UserForm());\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n get profileControl(): FormControl<IFileRecord>\n {\n return this.form.form.get('profile') as FormControl<IFileRecord>;\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n <div class=\"item-edit-container\">\n\n <h1 class=\"item-edit-header\">{{heading() | titlecase}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form.form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n formControlName=\"username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n formControlName=\"email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n formControlName=\"first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n formControlName=\"last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <lib-file-upload [control]=\"profileControl\"></lib-file-upload>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n type=\"button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div> \n </form>\n </div>\n</div>\n","import { Component, input } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\n\nimport { IPortalMemberDetail } from '../../../../models';\n\n@Component({\n selector: 'lib-user-list-detail',\n imports: [MatIconModule, MatListModule],\n templateUrl: './user-list-detail.component.html',\n styleUrl: './user-list-detail.component.scss'\n})\nexport class UserListDetailComponent {\n item = input.required<IPortalMemberDetail>();\n even = input(true);\n selected = input(false);\n\n get title(): string \n {\n if (this.item().first_name && this.item().last_name)\n {\n return this.item().first_name + \" \" + this.item().last_name;\n }\n else \n {\n return this.item().username;\n }\n }\n}\n","<div mat-list-item class=\"container\" [class.even]=\"even() && !selected()\" [class.selected]=\"selected()\">\n @if(item().profile_thumbnail){\n <div class=\"image-holder\" style=\"width:35px;\">\n <img matListItemAvatar \n alt=\"User Avatar\" \n src=\"{{item().profile_thumbnail}}\" style=\"height:30px\">\n </div> \n }\n @else {\n <div class=\"image-holder\" style=\"width:35px;\">\n <mat-icon matListItemIcon>person</mat-icon>\n </div>\n }\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{title}}</p>\n <p matListItemLine>{{item().email}}</p>\n </div>\n</div>","import { Component, inject, viewChild } from '@angular/core';\n\nimport { UserService } from '../../../../services';\nimport { ListViewComponent } from '../../../base';\n\nimport { UserListDetailComponent } from '../list-detail/user-list-detail.component';\nimport { UserDetailComponent } from \"../detail/user-detail.component\";\n\n@Component({\n selector: 'lib-user',\n imports: [ListViewComponent,\n UserListDetailComponent,\n UserDetailComponent],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent {\n itemService = inject(UserService);\n detailView = viewChild(UserDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n <lib-user-list-detail [item]=\"item\" [even]=\"even\" [selected]=\"selected\"></lib-user-list-detail>\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-user-detail [showBack]='false'></lib-user-detail>\n </ng-template>\n\n</lib-list-view>\n\n","import { Component, inject, input, OnInit } from '@angular/core';\n\nimport { IGroupCreate, IGroupDetail, IGroupList } from '../../../../models';\nimport { GroupService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroupDetail, IGroupList, IGroupCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n\n<div class=\"content-container\">\n @if(item(); as item) {\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [canEdit]=\"itemService.canEdit()\"\n [canDelete]=\"itemService.canDelete()\"\n [route]=\"itemService.typePlural()\"></lib-detail-header>\n \n <div class=\"item-field\">{{item.name}}</div>\n </div>\n }\n</div>\n","import { Component, inject, viewChild } from '@angular/core';\n\nimport { GroupService } from '../../../../services';\nimport { ListViewComponent } from '../../../base';\nimport { GroupDetailComponent } from '../detail/group-detail.component';\nimport { MatListModule } from '@angular/material/list';\n\n@Component({\n selector: 'lib-group',\n imports: [ListViewComponent, GroupDetailComponent, MatListModule],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent {\n itemService = inject(GroupService);\n detailView = viewChild(GroupDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n\n <div mat-list-item class=\"container\" [class.even]=\"even && !selected\" [class.selected]=\"selected\">\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{item.name}}</p>\n </div>\n </div>\n\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-group-detail [showBack]='false'></lib-group-detail>\n </ng-template>\n\n</lib-list-view>\n\n","import { Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ICountry } from '../../../../models/address';\n\n@Component({\n selector: 'lib-address-edit',\n imports: [MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n ReactiveFormsModule\n ],\n templateUrl: './address-edit.component.html',\n styleUrl: './address-edit.component.scss'\n})\nexport class AddressEditComponent {\n countryOptions = input<ICountry[]>([]);\n form = input<FormGroup>();\n}\n","@if(form(); as form){\n<div [formGroup]=\"form\" style=\"display: flex; flex-direction: column; width:100%\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line1\">Line 1</mat-label>\n <input matInput placeholder=\"Address Line 1\" type=\"text\" id=\"line1\" formControlName=\"line1\" name=\"line1\"\n required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line2\">Line 2</mat-label>\n <input matInput placeholder=\"Address Line 2\" type=\"text\" id=\"line2\" formControlName=\"line2\" name=\"line1\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line3\">Line 3</mat-label>\n <input matInput placeholder=\"Address Line 3\" type=\"text\" id=\"line3\" formControlName=\"line3\" name=\"line3\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"city\">City</mat-label>\n <input matInput placeholder=\"City\" type=\"text\" id=\"city\" formControlName=\"city\" name=\"city\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"region\">Region</mat-label>\n <input matInput placeholder=\"Region\" type=\"text\" id=\"region\" formControlName=\"region\" name=\"region\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"line1\">Post Code</mat-label>\n <input matInput placeholder=\"Post Code\" type=\"text\" id=\"postcode\" formControlName=\"postcode\" name=\"postcode\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"country\">Country</mat-label>\n <mat-select formControlName=\"country\" name=\"country\" id=\"country\" required>\n @for(country of countryOptions(); track $index){\n <mat-option [value]=\"country.code\">{{country.name}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n</div>\n}","import { Component, input } from '@angular/core';\n\nimport { IAddressDetail } from '../../../../models/address';\n\n@Component({\n selector: 'lib-address-detail',\n imports: [],\n templateUrl: './address-detail.component.html',\n styleUrl: './address-detail.component.scss'\n})\nexport class AddressDetailComponent {\n address = input<IAddressDetail>();\n}\n","@if(address(); as address){\n<div class=\"item-field\" style=\"display:flex;flex-wrap: wrap;justify-content: center;align-content: center;\">\n <span style=\"margin-left: 3px;\">{{address.line1}}, </span>\n @if(address.line2)\n {\n <span style=\"margin-left: 3px;\">{{address.line2}},</span>\n }\n @if(address.line3){\n <span style=\"margin-left: 3px;\">{{address.line3}},</span>\n }\n @if(address.city){\n <span style=\"margin-left: 3px;\">{{address.city}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.region}},</span>\n @if(address.postcode){ \n <span style=\"margin-left: 3px;\">{{address.postcode}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.country_name}}</span>\n</div>\n}","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IAddressCreate, IAddressDetail } from '../../../../models/address';\n\nexport interface IAddressForm {\n line1: FormControl<string | null>;\n line2: FormControl<string | null>;\n line3: FormControl<string | null>;\n city: FormControl<string | null>;\n region: FormControl<string | null>;\n postcode: FormControl<string | null>;\n country: FormControl<string | null>;\n}\n\nexport class AddressForm {\n\n static createForm(fb: FormBuilder): FormGroup<IAddressForm> {\n return fb.group<IAddressForm>({\n line1: fb.control<string>('', Validators.required),\n line2: fb.control<string>(''),\n line3: fb.control<string>(''),\n city: fb.control<string>(''),\n region: fb.control<string>('', Validators.required),\n postcode: fb.control<string>(''),\n country: fb.control<string>('', Validators.required)\n });\n }\n\n static fromItem(item: IAddressDetail, fb: FormBuilder): FormGroup<IAddressForm>\n {\n const form = this.createForm(fb);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IAddressForm>, item: IAddressDetail) {\n form.setValue({\n line1: item.line1,\n line2: item.line2 || \"\",\n line3: item.line3 || \"\",\n city: item.city || \"\",\n region: item.region,\n postcode: item.postcode || \"\",\n country: item.country\n });\n }\n\n static createItem(form: FormGroup<IAddressForm>): IAddressCreate {\n const value = form.value;\n return {\n line1: value.line1 || \"\",\n line2: value.line2 || null,\n line3: value.line3 || null,\n city: value.city || null,\n region: value.region || \"\",\n postcode: value.postcode || null,\n country: value.country || \"\"\n }\n }\n\n static updateItem(form: FormGroup<IAddressForm>, item: IAddressDetail): IAddressDetail {\n const value = form.value;\n item.line1 = value.line1 || \"\";\n item.line2 = value.line2 || null;\n item.line3 = value.line3 || null;\n item.city = value.city || null;\n item.region = value.region || \"\";\n item.postcode = value.postcode || null;\n item.country = value.country || \"\";\n return item;\n }\n}","import { Component, OnInit, inject, input } from '@angular/core';\n\nimport { IOrganizationCreate, IOrganizationDetail, IOrganizationList } from '../../../../models';\nimport { OrganizationService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\nimport { AddressDetailComponent } from \"../../address/detail/address-detail.component\";\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [BackButtonComponent,\n DetailHeaderComponent, AddressDetailComponent],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganizationDetail, IOrganizationList, IOrganizationCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(OrganizationService));\n }\n\n ngOnInit()\n {\n this.onInit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [canEdit]=\"itemService.canEdit()\"\n [canDelete]=\"itemService.canDelete()\"\n [route]=\"itemService.typePlural()\"\n (deleteClicked)=\"onDeleteClicked()\"></lib-detail-header>\n\n <div class=\"item-field\">\n <p style=\"text-align: justify; text-justify: inter-word; max-width: 600px;\">{{item.description}}</p>\n </div>\n \n <h3>Address</h3>\n <lib-address-detail [address]=\"item.address\"></lib-address-detail>\n\n <h3>Website</h3>\n <div class=\"item-field\">\n <a href=\"{{item.website}}\" target=\"_blank\" rel=\"noopener noreferrer\">{{item.website}}</a>\n </div>\n </div>\n }\n</div>\n","import { Component, inject, viewChild } from '@angular/core';\n\nimport { TableColumn, ListViewComponent } from '../../../base';\nimport { OrganizationService } from '../../../../services';\nimport { OrganizationDetailComponent } from \"../detail/organization-detail.component\";\n\n@Component({\n selector: 'lib-organization',\n imports: [\n ListViewComponent,\n OrganizationDetailComponent\n],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent {\n itemService = inject(OrganizationService);\n columns: TableColumn[] = [{name: 'name', title: 'Name', element_type: 'string'},\n {name: 'website', title: 'Website', element_type: 'url'},\n {name: 'is_partner', title: 'Is Partner', element_type: 'boolean'}];\n\n detailView = viewChild(OrganizationDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n <div mat-list-item class=\"container\" [class.even]=\"even && !selected\" [class.selected]=\"selected\">\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{item.name}}</p>\n </div>\n </div>\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-organization-detail [showBack]='false'></lib-organization-detail>\n </ng-template>\n\n</lib-list-view>\n\n\n\n","import { inject } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\n\nimport { IOrganizationDetail, IOrganizationCreate } from '../../../../models/organization';\nimport { AddressForm, IAddressForm } from '../../address/edit/address-form';\nimport { IForm } from '../../../../models/core';\n\nexport interface IOrganizationForm\n{\n name: FormControl<string | null>;\n acronym: FormControl<string | null>;\n description: FormControl<string | null>;\n website: FormControl<string | null>;\n address: FormGroup<IAddressForm>;\n}\n\nexport class OrganizationForm implements IForm<IOrganizationCreate, IOrganizationDetail> {\n private fb = inject(FormBuilder);\n form: FormGroup<IOrganizationForm>;\n\n constructor()\n {\n this.form = OrganizationForm.createForm(this.fb);\n }\n\n static createForm(fb: FormBuilder)\n {\n return fb.group<IOrganizationForm>({\n name: fb.control<string>('', Validators.required),\n acronym: fb.control<string>(''),\n description: fb.control<string>(''),\n website: fb.control<string>(''),\n address: AddressForm.createForm(fb)\n });\n }\n\n get address(): FormGroup<IAddressForm>\n {\n return this.form.get('address') as FormGroup<IAddressForm>;\n }\n\n setValue(item: IOrganizationDetail) {\n\n this.form.patchValue({\n name: item.name,\n acronym: item.acronym,\n description: item.description,\n website: item.website\n });\n AddressForm.setValue(this.address, item.address);\n }\n\n createItem(): IOrganizationCreate\n {\n const value = this.form.value;\n return {\n name: value.name || \"\",\n acronym: value.acronym || \"\",\n description: value.description || \"\",\n website: value.website || \"\",\n address: AddressForm.createItem(this.address),\n members: []\n };\n } \n\n updateItem(item: IOrganizationDetail): IOrganizationDetail\n {\n item.name = this.form.value.name || \"\";\n item.acronym = this.form.value.acronym || \"\";\n item.description = this.form.value.description || \"\";\n item.website = this.form.value.website || \"\";\n item.address = AddressForm.updateItem(this.address, item.address);\n return item;\n }\n\n}","import { Component, OnInit, inject } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { IPortalMemberDetail, IOrganizationDetail, IOrganizationCreate, IOrganizationList} from '../../../../models';\nimport { OrganizationService, AddressService } from '../../../../services';\n\nimport { EditView, BackButtonComponent, SelectTableComponent, MemberSelectionManager } from '../../../base';\nimport { AddressEditComponent } from \"../../address/edit/address-edit.component\";\n\nimport { OrganizationForm } from './organization-form';\nimport { IAddressForm } from '../../address/edit/address-form';\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule,\n MatExpansionModule,\n BackButtonComponent,\n AddressEditComponent,\n SelectTableComponent,\n MatTabsModule,\n TitleCasePipe\n],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganizationDetail, IOrganizationList, IOrganizationCreate> implements OnInit {\n\n addressService = inject(AddressService);\n\n selectionManager = new MemberSelectionManager();\n\n constructor() {\n super(inject(OrganizationService), new OrganizationForm());\n this.addressService.refreshCountryOptions();\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n addressForm(): FormGroup<IAddressForm>\n {\n return (this.form as OrganizationForm).address;\n }\n\n override createItem(): IOrganizationCreate\n {\n const item = this.form.createItem();\n item.members = this.selectionManager.selected().map(m => m.url);\n return item\n }\n\n protected override updateItem(item: IOrganizationDetail): IOrganizationDetail {\n item = this.form.updateItem(item);\n item.members = this.selectionManager.selected().map(m => m.url);\n return item;\n }\n\n override onItemAndUserAvailable(item: IOrganizationDetail, _: IPortalMemberDetail) {\n this.selectionManager.fetchCandidates(this.itemService.typename, item.id);\n }\n}\n","<lib-back-button style=\"position: absolute;\"></lib-back-button>\n\n<div class=\"content-container\">\n\n <div class=\"item-edit-container\" style=\"width:100%\">\n \n <h1 class=\"item-edit-header\" style=\"padding: 0px; margin-top: 0px; margin-bottom: 5px;\">{{heading() | titlecase}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form.form\" (ngSubmit)=\"submit()\">\n\n <mat-tab-group mat-stretch-tabs=\"true\" mat-align-tabs=\"center\" style=\"width:100%;\">\n\n <mat-tab label=\"Overview\" style=\"width:100%;\">\n <div style=\"padding:10px;\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"name\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n id=\"name\"\n formControlName=\"name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"acronym\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n id=\"acronym\"\n formControlName=\"acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n id=\"description\"\n formControlName=\"description\"\n name=\"description\"\n class=\"medium-textarea\"\n required></textarea>\n </mat-form-field>\n\n <mat-accordion style=\"width:100%\">\n <mat-expansion-panel style=\"width:100%\" [expanded]=\"true\">\n <mat-expansion-panel-header>\n <mat-panel-title>Address</mat-panel-title>\n </mat-expansion-panel-header>\n\n <lib-address-edit \n [countryOptions]=\"addressService.countryOptions()\"\n [form]=\"addressForm()\"\n ></lib-address-edit>\n </mat-expansion-panel>\n </mat-accordion>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Members\" style=\"width:100%;\">\n <div style=\"padding:10px\">\n <lib-select-table style=\"width:100%\" [selected]=\"selectionManager.selected()\"\n [itemType]=\"'Members'\"\n [columns]=\"selectionManager.columns\"\n [itemTemplate]=\"itemTemplate\"\n [options]=\"selectionManager.candidates()\"\n (itemAdded)=\"selectionManager.onAdded($event)\"\n (itemRemoved)=\"selectionManager.onRemoved($event)\"\n (searchChanged)=\"selectionManager.onSearchChanged($event)\">\n </lib-select-table>\n <ng-template #itemTemplate let-item=\"item\">\n <div>\n <p><b>{{item.first_name}} {{item.last_name}} ({{item.username}})</b></p>\n <p>{{item.email}}</p>\n </div>\n </ng-template>\n </div>\n </mat-tab>\n\n </mat-tab-group>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form-action-button\"\n type=\"submit\"\n [disabled]=\"!form.form.valid || !form.form.dirty\">\n <mat-icon>save</mat-icon>\n </button>\n \n <button mat-fab\n type=\"button\"\n class=\"form-action-button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </form>\n </div>\n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/views';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/address/edit/address-edit.component';\nexport * from './lib/views/api/address/detail/address-detail.component';\nexport * from './lib/views/api/address/edit/address-form';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\nexport * from './lib/views/api/organization/edit/organization-edit.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4","i5","i7","i8","i3","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAca,SAAS,CAAA;IAClB,KAAK,GAAG,CAAC;IACT,IAAI,GAAG,IAAI;IACX,QAAQ,GAAG,IAAI;IACf,OAAO,GAAQ,EAAE;AACpB;MAMY,UAAU,CAAA;AACnB,IAAA,OAAO,QAAQ,GAAG,YAAY;AAC9B,IAAA,OAAO,MAAM,GAAG,aAAa;;;MCapB,YAAY,CAAA;AAErB,IAAA,OAAO,QAAQ,GAAG,QAAQ;AAC1B,IAAA,OAAO,MAAM,GAAG,SAAS;IAEzB,OAAO,WAAW,CAAC,MAA2B,EAAA;QAE1C,IAAI,aAAa,GAAG,EAAE;QACtB,IAAI,cAAc,GAAG,EAAE;AACvB,QAAA,IAAI,MAAM,CAAC,UAAU,EACrB;AACI,YAAA,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;;aAGxC;AACI,YAAA,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAEtC,QAAA,IAAI,MAAM,CAAC,UAAU,EACrB;AACI,YAAA,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;;AAExC,QAAA,MAAM,QAAQ,GAAG,aAAa,GAAG,cAAc;AAC/C,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;;;;MChDxB,KAAK,CAAA;AAEd,IAAA,OAAO,QAAQ,GAAG,OAAO;AACzB,IAAA,OAAO,MAAM,GAAG,QAAQ;;;MCMf,YAAY,CAAA;AAErB,IAAA,OAAO,QAAQ,GAAG,cAAc;AAChC,IAAA,OAAO,MAAM,GAAG,eAAe;;;MCCtB,OAAO,CAAA;AAChB,IAAA,OAAO,QAAQ,GAAG,SAAS;AAC3B,IAAA,OAAO,MAAM,GAAG,WAAW;;;MClBlB,SAAS,CAAA;AAElB,IAAA,OAAO,GAAG,IAAI,GAAG,EAAkB;IACnC,IAAI,GAAG,CAAC;IACR,SAAS,GAAG,CAAC;IACb,UAAU,GAAG,EAAE;IACf,UAAU,GAAG,EAAE;IACf,YAAY,GAAG,EAAE;IACjB,MAAM,GAAG,EAAE;AAEX,IAAA,WAAA,CAAY,SAA8B,EAAE,EAAA;AAExC,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;;AAElC;IAEW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,SAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB;AACpB,CAAC,EAFW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;MAIR,QAAQ,CAAA;IACjB,IAAI,GAAc,CAAC;IACnB,IAAI,GAAG,EAAE;AACZ;;IC1BW;AAAZ,CAAA,UAAY,SAAS,EAAA;AAEnB,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ;AACR,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO;AACP,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAS;AACX,CAAC,EAVW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;AAYd,MAAM,kBAAkB,GAAiB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAC;AACtF,IAAA,EAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAC;AAC3C,IAAA,EAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAC;AAC1C,IAAA,EAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAC;AAC/C,IAAA,EAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAC;AAC/C,IAAA,EAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAC;AAC3C,IAAA,EAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;;AAGpC,SAAU,mBAAmB,CAAC,GAAW,EAAA;IAE7C,QAAO,GAAG;AAER,QAAA,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,IAAI;AACvB,QAAA,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,IAAI;AACvB,QAAA,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,QAAQ;AAC3B,QAAA,KAAK,WAAW;YACd,OAAO,SAAS,CAAC,SAAS;AAC5B,QAAA,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC,OAAO;AAC1B,QAAA,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,IAAI;;IAEzB,OAAO,SAAS,CAAC,IAAI;AACvB;AA2DM,SAAU,eAAe,CAAC,IAAiB,EAAA;IAE/C,MAAM,GAAG,GAAa,EAAE;AACxB,IAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;AAAE,QAAA,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,EAAC;AACjE,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;;KACd,CAAC,CAAC;AACJ,IAAA,OAAO,GAAG;AACZ;;MCvGa,UAAU,CAAA;IAEnB,IAAI,GAAG,EAAE;IACT,YAAY,GAAG,EAAE;IACjB,SAAS,GAAG,UAAU;IACtB,IAAI,GAAgB,IAAI;IACxB,MAAM,GAAG,EAAE;IACX,KAAK,GAAyB,EAAE;AAEhC,IAAA,WAAA,CAAY,SAA+B,EAAE,EAAA;AAEzC,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;;AAElC;;MCKY,mBAAmB,GAAG,IAAI,cAAc,CAAoB,6BAA6B;MAEzF,WAAW,CAAA;AAEpB,IAAA,QAAQ,GAAoB,EAAC,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAC;IACxE,IAAI,GAAW,EAAE;AAC1B,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1B,IAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE/C,IAAA,UAAU,CAAC,EAAU,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACrE,GAAG,CAAC,CAAC,IAAG,EAAG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,UAAU,CAAC,IAAyB,EAAE,KAAA,GAAoB,IAAI,SAAS,EAAE,EAAA;AACrE,QAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;AAG1B,IAAA,GAAG,CAAC,KAAA,GAAoB,IAAI,SAAS,EAAE,EAAA;AAEnC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;AAC5B,QAAA,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE;AAChB,YAAA,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAE7C,QAAA,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE;AACrB,YAAA,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;;AAEvD,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AAClB,YAAA,IAAI,UAAU,GAAG,KAAK,CAAC,UAAU;AACjC,YAAA,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,EAAE;AAC7B,gBAAA,UAAU,GAAG,GAAG,GAAG,UAAU;;AAEjC,YAAA,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;;AAEtC,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;YACpB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC;;AAElD,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;YACd,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;;AAEtC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EACzE,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,OAAO,CAAC,EAAU,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACrE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,MAAM,CAAC,GAAW,EAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACjD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,eAAe,CAAC,GAAW,EAAA;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAC7D,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;IAGzC,UAAU,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACzE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,OAAO,CAAC,IAAO,EAAE,YAAY,GAAG,MAAM,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAC5F,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;IAGzC,cAAc,CAAC,EAAU,EAAE,IAAc,EAAA;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7E,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC/B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,QAAQ,CAAC,EAAU,EAAE,KAAa,EAAE,IAAU,EAAA;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,EAC9D,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAC/B,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC/B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,OAAO,CAAC,EAAU,EAAE,KAAa,EAAE,IAAU,EAAA;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,EAC7D,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC5D,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAC/B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;IAGzC,iBAAiB,CAAC,GAAW,EAAE,IAAU,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,EACtE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,SAAS,IAAG,EAAG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EACtC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,SAAS,CAAC,IAAO,EAAE,YAAsB,EAAE,YAAsB,EAAA;;AAE7D,QAAA,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAA;AACrC,YAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,gBAAA,OAAO,SAAS;;iBAEf;AACD,gBAAA,OAAO,KAAK;;;QAGpB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAChD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,QAAQ,IAAI,QAAa,CAAC,EAC9B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGzC,IAAA,QAAQ,CAAC,IAAO,EAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CACjE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGjC,IAAA,UAAU,CAAC,YAAY,GAAG,MAAM,EAAE,IAAI,GAAG,EAAE,EAAA;QAC/C,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,EAAC,QAAQ,EAAE,kBAAkB,EAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE;AACnC,YAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;;aAGxF;AACI,YAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;;QAE7E,IAAI,IAAI,EACR;YACI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,uBAAuB,GAAG,IAAI,CAAC;;AAE3E,aAAA,IAAI,YAAY,KAAK,MAAM,EAChC;YACI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;;aAExD,IAAG,YAAY,EACpB;YACI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC;;AAEvD,QAAA,OAAO,OAAO;;AAGlB,IAAA,IAAc,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG;;AAG/D,IAAA,IAAY,QAAQ,GAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS;;AAGxE,IAAA,cAAc,CAAC,YAAY,GAAG,MAAM,EAAG,MAAA,GAAqB,IAAI,UAAU,EAAE,EAAE,IAAI,GAAG,EAAE,EAAA;QAE7F,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC;AACjD,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,SAAS,GAAG,aAAa;YACpE,MAAM,EAAE,MAAM,EAAC;;AAGvB,IAAA,WAAW,CAAC,KAAwB,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,KAAK,CAAC;;aACxD;AACH,YAAA,OAAO,CAAC,KAAK,CACT,CAAA,sBAAA,EAAyB,KAAK,CAAC,MAAM,CAAA,YAAA,CAAc,EAAE,KAAK,CAAC,KAAK,CAAC;;;AAGzE,QAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;;AAErC;;ACtMK,MAAO,WAAoG,SAAQ,WAAuB,CAAA;IAE5I,cAAc,GAAG,EAAE;IACnB,QAAQ,GAAG,EAAE;IAEb,OAAO,GAAA;AAEH,QAAA,OAAO,KAAK;;IAGhB,SAAS,GAAA;AAEL,QAAA,OAAO,KAAK;;IAGhB,SAAS,GAAA;AAEL,QAAA,OAAO,KAAK;;IAGhB,OAAO,GAAA;AAEH,QAAA,OAAO,KAAK;;IAGhB,UAAU,GAAA;AAEN,QAAA,OAAO,IAAI,CAAC,cAAc,GAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG;;AAE5E;;MCjBY,kBAAkB,CAAA;IAC3B,OAAO,GAAG,KAAK;IACf,MAAM,GAAG,KAAK;IACd,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,KAAK;AACpB;AAKK,MAAO,WAAY,SAAQ,WAAwE,CAAA;AAErG;;AAEE;AACF,IAAA,YAAY,GAAG,IAAI,eAAe,CAA6B,IAAI,CAAC;AAE5D,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjB,IAAA,IAAI,GAAG,YAAY,CAAC,MAAM;AACnC,IAAA,QAAQ,GAAG,YAAY,CAAC,QAAQ;AACjC,IAAA,WAAW,GAAoC,IAAI,GAAG,EAA8B;IAE5F,KAAK,CAAC,IAAI,GAAG,GAAG,EAAA;AAEZ,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAClC,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,CAAC,IAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC;;IAGzF,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;QACZ,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,EAAE;YAClC;;AAGJ,QAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC9B,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAC5B;YACI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG;;QAE3C,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,IAAI,EACR;AACI,YAAA,MAAM,GAAG,QAAQ,GAAG,IAAI;;AAE5B,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC;AACpF,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,GAAG,MAAM,EAAE,EAAE,EAAE;YAClE,OAAO,EAAE,IAAI,WAAW,CAAC;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW;aACpD,CAAC;AACF,YAAA,YAAY,EAAE,MAAM;AACpB,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,SAAS,GAAG;AAAc,SAAA,CAAC,CAAC,IAAI;;QAEvE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAAE,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;;AAE/G,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM;;AAEvD,SAAC,CAAC;;IAGV,OAAO,GAAA;AAEH,QAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAClC,QAAQ,CAAC,CAAC,MAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA,EAAC,CAAC,CAAC;;IAG3D,QAAQ,GAAA;QAEZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,IAAI,CACxD,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAC9B,GAAG,CAAC,IAAI,IAAG,EAAG,OAAO,IAAI,CAAA,EAAE,CAAC,EAC5B,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG9C,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAE7C,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EACvB;AACI,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC;AAClD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;aAGnB;AACI,YAAA,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAC9D,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;;;IAI9B,mBAAmB,GAAA;AAEvB,QAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;;AAG1E,IAAA,SAAS,CAAC,IAAY,EAAA;QAE1B,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAC5B;YACI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG;;AAE3C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,GAAG,IAAI;;AAGrF,IAAA,gBAAgB,CAAC,OAAe,EAAA;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,KAAK;;QAEhB,OAAO,IAAI,CAAC,MAAM;;AAGtB,IAAA,mBAAmB,CAAC,OAAe,EAAA;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,KAAK;;QAEhB,OAAO,IAAI,CAAC,SAAS;;AAGzB,IAAA,iBAAiB,CAAC,OAAe,EAAA;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,KAAK;;QAEhB,OAAO,IAAI,CAAC,OAAO;;AAGvB,IAAA,iBAAiB,CAAC,OAAe,EAAA;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,KAAK;;QAEhB,OAAO,IAAI,CAAC,OAAO;;AAGf,IAAA,MAAM,CAAC,IAAyB,EAAA;QACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE;;AAGrB,IAAA,eAAe,CAAC,CAAS,EAAA;QAE7B,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,MAAM,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACjE,QAAA,OAAO,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,EAAC;;IAGpD,kBAAkB,GAAA;AAEtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK;QACpC,IAAI,CAAC,IAAI,EACT;YACI;;AAGJ,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAC9C,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1C,YAAA,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM,EACpC;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,OAAO,GAAG,IAAI;;AAEvD,iBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,QAAQ,EAC3C;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,SAAS,GAAG,IAAI;;AAEzD,iBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,QAAQ,EAC3C;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,OAAO,GAAG,IAAI;;AAEvD,iBAAA,IAAI,UAAU,CAAC,UAAU,KAAK,KAAK,EACxC;AACI,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,MAAM,GAAG,IAAI;;AAE/D,SAAC,CAAC;;uGAhLG,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFR,MAAM,EAAA,CAAA;;2FAET,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACZK,MAAO,mBAA2G,SAAQ,WAAuB,CAAA;AAEzI,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3C,IAAA,SAAS,GAAyB,IAAI,eAAe,CAAM,EAAE,CAAC;AAE9D,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;IAGlF,SAAS,GAAA;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;IAG1D,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;IAG3D,OAAO,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;IAG3D,SAAS,GAAA;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;;IAG9D,cAAc,GAAA;QAElB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;;IAGzC,YAAY,GAAA;QAER,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EACvC;AACI,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC;;AAE/D,QAAA,OAAO,EAAE,CAAC,IAAI,SAAS,EAAK,CAAC;;AAGvB,IAAA,gBAAgB,CAAC,IAAgC,EAAA;QAEvD,IAAI,IAAI,EACR;YACG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;aAG7E;AACI,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;;;uGAjDtB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA;;2FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACXD;MAmBa,WAAW,CAAA;AAEpB,IAAA,OAAO,eAAe,GAAA;QAElB,OAAO,EAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC;;AAG3G,IAAA,WAAW,CAAC,IAAiB,EAAA;QAC3B,MAAM,QAAQ,GAAQ,EAAE;AAExB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAC/B;AACE,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAChC;AACE,gBAAA,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,WAAW,EAC/F;oBACE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAS,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ;0BAC7G,IAAI,WAAW,CAAS,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;;AAE7C,qBAAA,IAAG,KAAK,CAAC,UAAU,IAAI,SAAS,EACrC;oBACE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAU,KAAK,CAAC,OAAO,IAAI,MAAM,EAAE,UAAU,CAAC,QAAQ;0BAClH,IAAI,WAAW,CAAU,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC;;AAElD,qBAAA,IAAG,KAAK,CAAC,UAAU,IAAI,MAAM,EAClC;oBACE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAc,WAAW,CAAC,eAAe,EAAE,EAAE,UAAU,CAAC,QAAQ;0BAC5H,IAAI,WAAW,CAAc,WAAW,CAAC,eAAe,EAAE,CAAC;;qBAGjE;oBACE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ;0BACrG,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;;;;AAI9C,QAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;;AAGhC,IAAA,gBAAgB,CAAC,GAAW,EAAE,OAAoB,EAAE,KAAkB,EAAA;QAEpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3C,QAAA,IAAI,UAAU,IAAI,MAAM,EACxB;AACE,YAAA,OAAO,EAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE;aACZ;;AAEE,aAAA,IAAI,UAAU,IAAI,SAAS,EAChC;AACE,YAAA,OAAO,EAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;AACtB,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,GAAG;aACrC;;aAGH;AACA,YAAA,OAAO,EAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;AACpB,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,OAAO,CAAC;aACtB;;;IAIH,UAAU,CAAC,IAAe,EAAE,KAAkB,EAAA;AAE5C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAgB,EAAE,KAAK,CAAC,CAAC;QAC1H,OAAO,EAAC,MAAM,EAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC;;IAGtC,UAAU,CAAC,QAAgB,EAAE,SAA+B,EAAA;AAE1D,QAAA,KAAI,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EACnC;YACE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,QAAQ,EAC9B;gBACE,OAAO,KAAK,CAAC,EAAE;;;QAGnB,OAAO,CAAC,CAAC;;AAGX,IAAA,QAAQ,CAAC,IAAe,EAAE,KAAkB,EAAE,SAA+B,EAAA;QAE3E,MAAM,KAAK,GAAiB,EAAE;AAC9B,QAAA,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC3C;YACE,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EACtC;AACE,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAC,CAAC;;;AAG5F,QAAA,OAAO,KAAK;;IAGd,gBAAgB,CAAC,OAAoB,EAAE,IAA2B,EAAA;AAEhE,QAAA,OAAO,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK;AAChC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;YACpB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC;SACb;;IAGH,OAAO,CAAC,GAAW,EAAE,KAAkB,EAAA;AAErC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC9B,QAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAChC;AACE,YAAA,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAChC;AACE,gBAAA,IAAI,KAAK,CAAC,EAAE,IAAI,QAAQ,EACxB;oBACE,OAAO,KAAK,CAAC,UAAU;;;;AAI7B,QAAA,OAAO,EAAE;;IAGX,QAAQ,CAAC,GAAW,EAAE,IAA0B,EAAA;AAE9C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC;AAC3B,QAAA,KAAI,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAC9B;YACE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,EAC3B;AACE,gBAAA,OAAO,KAAK;;;AAGhB,QAAA,OAAO,IAAI;;IAGb,UAAU,CAAC,IAAe,EAAE,IAA0B,EAAA;AAEpD,QAAA,MAAM,OAAO,GAAyB,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAC;AAC/D,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;YACtC,IAAI,KAAK,EACT;AACE,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAgB,EAAE,KAAK,CAAC;AACrF,gBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;;AAEtC,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;uGAjJL,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAHR,MAAM,EAAA,CAAA;;2FAGT,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACTK,MAAO,YAAa,SAAQ,mBAA2D,CAAA;AAEvE,IAAA,IAAI,GAAG,KAAK,CAAC,MAAM;AAC5B,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAElC,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;uGAPvE,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA;;2FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCcY,cAAc,CAAA;AAEvB,IAAA,aAAa,GAAG,MAAM,CAAiB,IAAI,GAAG,EAAa,yDAAC;IACpD,OAAO,GAAe,EAAE;IACxB,eAAe,GAAgB,EAAE;AACjC,IAAA,aAAa,GAAiB,MAAM,CAAC,YAAY,CAAC;AAE1D,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;AAGlF,IAAA,eAAe,CAAC,MAAoB,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEjD,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;YAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAC;AAChE,gBAAA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;YAAE;SAAE,CAAC,CAAC;AAEhD,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGnC,IAAA,iBAAiB,CAAC,OAAoB,EAAA;AAElC,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;;AAGlC,IAAA,SAAS,CAAC,MAAkB,EAAA;AAExB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;;uGA5BhB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAHX,MAAM,EAAA,CAAA;;2FAGT,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACVK,MAAO,cAAe,SAAQ,mBAAiE,CAAA;AAEjF,IAAA,IAAI,GAAG,OAAO,CAAC,MAAM;AAC9B,IAAA,QAAQ,GAAG,OAAO,CAAC,QAAQ;AAEpC,IAAA,cAAc,GAAG,MAAM,CAAa,EAAE,0DAAC;IAEvC,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGvD,IAAA,SAAS,CAAC,OAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB;;AAEF,QAAA,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;;AAIrC,IAAA,aAAa,CAAC,OAAqC,EAAA;QACvD,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;YACpD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;;;AAIjD,IAAA,gBAAgB,CAAC,OAA6B,EAAA;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG,EAAE,OAAO,EAAC,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC;;uGA3BxG,cAAc,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACAK,MAAO,mBAAoB,SAAQ,mBAAgF,CAAA;AACnG,IAAA,IAAI,GAAG,YAAY,CAAC,MAAM;AACnC,IAAA,QAAQ,GAAG,YAAY,CAAC,QAAQ;uGAFhC,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA;;2FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCPY,eAAe,CAAA;IAExB,OAAO,GAAA;AAEH,QAAA,OAAO,KAAK;;IAGhB,SAAS,GAAA;AAEL,QAAA,OAAO,KAAK;;IAGhB,SAAS,GAAA;AAEL,QAAA,OAAO,KAAK;;IAGhB,UAAU,GAAA;AAEN,QAAA,OAAO,cAAc;;AAE5B;;MCOY,qBAAqB,CAAA;AACvB,IAAA,SAAS,GAAG,MAAM,EAAC,YAAmC,EAAC;AACvD,IAAA,IAAI,GAAG,MAAM,CAAa,eAAe,CAAC;IAEnD,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;uGALb,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BlC,gTAOqB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDaT,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,cAAc,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIL,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;+BACE,mBAAmB,EAAA,OAAA,EACpB,CAAC,eAAe;wBACvB,cAAc;wBACd,gBAAgB;wBAChB,gBAAgB;AAChB,wBAAA,cAAc,EAAE,EAAA,QAAA,EAAA,gTAAA,EAAA;;;MEXE,UAAU,CAAA;AAElB,IAAA,IAAI,GAAG,MAAM,CAAW,IAAI,gDAAC;AAC7B,IAAA,KAAK,GAAmB,MAAM,CAAC,cAAc,CAAC;AAC9C,IAAA,WAAW,GAAgB,MAAM,CAAC,WAAW,CAAC;AAC9C,IAAA,WAAW;AACX,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE5B,IAAA,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC;AAEzC,IAAA,WAAA,CAAY,WAAoC,EAAA;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;IAGlC,MAAM,GAAA;AACF,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,EAAE,EACN;AACI,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;;AAIzB,IAAA,WAAW,CAAC,EAAiB,EAAA;QAEzB,IAAI,EAAE,EACN;AACI,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;aAGrB;AACI,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI3B,KAAK,GAAA;AAED,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAC7B;AACI,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAEtD,QAAA,OAAO,EAAE;;AAGb,IAAA,eAAe,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAG,EAAG,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC;SAAG,EAAE,CAAC;;AAG/G,IAAA,sBAAsB,CAAC,KAAQ,EAAE,KAA0B;IAE3D,eAAe,GAAA;QACX,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAClE,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,GAAG;gBACrC,OAAO,EAAE,uCAAuC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG;AAA4B,aAAA;AAAE,SAAA,CAAC;QAEnG,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM,IAAG;AACzC,YAAA,IAAI,MAAM,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,QAAQ,EAAE;;AAEvB,SAAC,CAAC;;IAGF,QAAQ,GAAA;AAEJ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,EACR;YACI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;;;IAI1E,MAAM,GAAA;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;IAGd,OAAO,GAAA;AAEb,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;;IAG3B,SAAS,GAAA;AAEf,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;;AAG/B,IAAA,QAAQ,CAAC,EAAU,EAAA;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC1C,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC9B,SAAC,CAAC;;AAET;;MC7FqB,QAAQ,CAAA;AAE1B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;AAC1B,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK,EAAG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,mDAAC;AAEzG,IAAA,IAAI,GAAG,MAAM,CAAW,IAAI,gDAAC;IAC7B,QAAQ,GAAa,EAAE;AACvB,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;AAClC,IAAA,IAAI;AACJ,IAAA,WAAW;IAEb,aAAa,GAAa,EAAE;IAEpC,WAAA,CAAY,WAAoC,EAAE,IAAoB,EAAA;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;IAGpB,MAAM,GAAA;QACF,IAAI,CAAC,OAAO,EAAE;;AAGlB,IAAA,eAAe,CAAC,IAAO,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAG,EAAG,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC;SAAG,EAAE,CAAC;;IAGhH,sBAAsB,CAAC,KAAQ,EAAE,KAA0B,EAAA;;IAG3D,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;IAGzB,MAAM,GAAA;QACF,IAAI,CAAC,IAAI,EAAE;;IAGf,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,QAAQ,EAAE;;aAEd;AACD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB;gBACI,IAAG,IAAI,EACP;AACI,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;;;;IAMlC,MAAM,GAAA;QACF,IAAI,CAAC,MAAM,EAAE;;IAGjB,QAAQ,GAAA;QAEJ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EACjD;AACI,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAEtD,QAAA,OAAO,EAAE;;IAGH,gBAAgB,GAAA;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGrE,IAAA,mBAAmB,CAAC,KAAW,EAAA;;AAI/B,IAAA,UAAU,CAAC,QAA8B,EAAA;;IAIzC,UAAU,GAAA;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;AAGvB,IAAA,UAAU,CAAC,IAAO,EAAA;QAExB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;;IAG3B,QAAQ,GAAA;QACd,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAG9E,IAAA,OAAO,CAAC,IAAO,EAAA;QAErB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAGjF,IAAA,SAAS,CAAC,IAAO,EAAA;AAEvB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE;QAC7C,IAAI,SAAS,EACb;AACI,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;;aAGlC;AACI,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;;;IAIhC,QAAQ,CAAC,IAAO,EAAE,MAAmB,EAAA;QAEjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,MAAM,CAAC,IAAI,EACf;AACI,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;aAEnG;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;IAI5B,oBAAoB,GAAA;AAEhB,QAAA,KAAI,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAC9B;YACI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EACrC;AACI,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK;;;AAG7C,QAAA,OAAO,IAAI;;IAGP,aAAa,GAAA;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;QACrC,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,KAAK;;AAEhB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAClB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,EAAE;AAC1B,gBAAA,OAAO,IAAI;;;AAGnB,QAAA,OAAO,KAAK;;IAGR,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;aAExB;AACD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACtD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;iBAClC,SAAS,CAAC,IAAI,IAAG;AACd,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC9B,aAAC,CAAC;;;AAIJ,IAAA,aAAa,CAAC,IAAO,EAAA;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE;;AAGP,IAAA,SAAS,CAAC,OAAqB,EAAA;AAErC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EACpB;YACI;;AAGJ,QAAA,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,EAC7B;YACI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;;AAIzC,IAAA,aAAa,CAAC,QAAsC,EAAA;;AAIjE;;MCrKY,oBAAoB,CAAA;AAE7B,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,oDAAC;AACpB,IAAA,QAAQ,GAAG,KAAK,CAAM,EAAE,oDAAC;AACzB,IAAA,OAAO,GAAG,KAAK,CAAkB,EAAE,mDAAC;AAEpC,IAAA,OAAO,GAAG,KAAK,CAAgB,EAAE,mDAAC;IAElC,SAAS,GAAG,MAAM,EAAU;IAC5B,WAAW,GAAG,MAAM,EAAU;IAC9B,aAAa,GAAG,MAAM,EAAiB;AACvC,IAAA,YAAY,GAAG,KAAK,CAA0C,IAAI,wDAAC;AAEnE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,EAAC,uDAAC;AAClH,IAAA,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAEnC,IAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,iDAAC;IAE3B,QAAQ,GAAA;QACJ,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAGtF,IAAA,MAAM,CAAC,EAAU,EAAA;AACb,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE;;IAG9B,GAAG,GAAA;AACC,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAC5B;YACI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;AAEjD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE;;uGAjCrB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAgBX,QAAQ,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnD9B,+hEA6DM,qNDtCQ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,eAAe,mYACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,qBAAqB,2rBACrB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,SAAS;+BACI,kBAAkB,EAAA,OAAA,EACnB,CAAC,cAAc;wBACpB,kBAAkB;wBAClB,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,qBAAqB;wBACrB,mBAAmB;wBACnB,cAAc;AAClB,wBAAA,gBAAgB,CAAC,EAAA,QAAA,EAAA,+hEAAA,EAAA,MAAA,EAAA,CAAA,8JAAA,CAAA,EAAA;4uBAoBC,QAAQ,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEjDvB,MAAM,eAAe,GAAkB;IAC1C,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAC;IACjE,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAC;IAC7D,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAC;IAC7D,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;CAAE;;MCMrC,gBAAgB,CAAA;AAElC,IAAA,UAAU,GAAG,MAAM,CAAkB,EAAE,sDAAC;AACxC,IAAA,QAAQ,GAAG,MAAM,CAAM,EAAE,oDAAC;IAC1B,OAAO,GAAkB,EAAE;AAE3B,IAAA,WAAW;AACX,IAAA,WAAA,CAAY,WAAoC,EAAA;AAE5C,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;IAGlC,eAAe,CAAC,IAAY,EAAE,EAAU,EAAA;AAEpC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,EAAC,OAAO,EAAG,OAAO,EAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;AAGjE,IAAA,gBAAgB,CAAC,KAAoB,EAAA;QAE3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;;AAK3E,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAE,CAAC,GAAG;QACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,QAAA,OAAO,GAAG;;AAGd,IAAA,OAAO,CAAC,KAAa,EAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC;QAC9D,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG,EAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,CAAC;;QAErF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAE,CAAC,GAAG;;AAKlE,IAAA,eAAe,CAAC,UAAyB,EAAA;QAErC,IAAI,UAAU,EACd;AACI,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;aAG9G;AACI,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;AAGlF;AAEK,MAAO,sBAAuB,SAAQ,gBAAqC,CAAA;IAEpE,OAAO,GAAG,eAAe;AAElC,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;AAGrB,IAAA,YAAY,CAAC,IAAyB,EAAA;QAE3C,OAAQ,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAC;;IAGrC,QAAQ,CAAC,IAAyB,EAAE,KAAa,EAAA;AAEtD,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,KAAK;;AAEpC;;MC3EY,mBAAmB,CAAA;AAElB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE3B,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;uGALf,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhC,uLAQA,EAAA,MAAA,EAAA,CAAA,mCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAc,aAAa,qLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI/B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,uLAAA,EAAA,MAAA,EAAA,CAAA,mCAAA,CAAA,EAAA;;;MEOhC,qBAAqB,CAAA;AAC9B,IAAA,EAAE,GAAG,KAAK,CAAS,CAAC,8CAAC;AACrB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AACxB,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,mDAAC;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,qDAAC;IACjC,aAAa,GAAG,MAAM,EAAQ;AAC9B,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,qDAAC;IAEzD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;;uGAVpB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECflC,snBAmBM,EAAA,MAAA,EAAA,CAAA,2NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVQ,YAAY,iRAClB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,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,CAAA,EAAA,CAAA;;2FAI1B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBARjC,SAAS;+BACI,mBAAmB,EAAA,OAAA,EACpB,CAAC,YAAY;wBAClB,eAAe;wBACf,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,snBAAA,EAAA,MAAA,EAAA,CAAA,2NAAA,CAAA,EAAA;;;MEe3B,kBAAkB,CAAA;AAC7B,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,oDAAC;AACpB,IAAA,UAAU,GAAG,KAAK,CAAW,EAAE,sDAAC;AAChC,IAAA,aAAa,GAAG,MAAM,CAAC,IAAI,yDAAC;IAC5B,aAAa,GAAG,MAAM,EAAU;AAEhC,IAAA,YAAY,GAAG,IAAI,WAAW,EAAE;IAEhC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CACjC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,GAAG,CAAC,MAAK;YACP,IAAI,CAAC,aAAa,EAAE;AAEtB,SAAC,CAAC,CACH,CAAC,SAAS,EAAE;;IAGf,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;;IAGhC,aAAa,GAAA;QACX,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;uGAxBvC,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B/B,ilCAgCM,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBM,mBAAmB,+kBAC3B,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,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,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,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,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,iLACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKJ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAb9B,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,mBAAmB;wBAC3B,cAAc;wBACd,gBAAgB;wBAChB,eAAe;wBACf,eAAe;wBACf,aAAa;AACb,wBAAA,aAAa,CAAC,EAAA,QAAA,EAAA,ilCAAA,EAAA,MAAA,EAAA,CAAA,mHAAA,CAAA,EAAA;;;MELL,mBAAmB,CAAA;AAE5B,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAA6B;AAE3C,IAAA,YAAY,CAAC,KAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EACjB;YACI;;AAGJ,QAAA,MAAM,aAAa,GAAI,KAAK,CAAC,MAA2B;AACxD,QAAA,IAAI,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;;AAIzC,IAAA,cAAc,CAAC,IAAU,EAAA;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;AACnC,QAAA,MAAM,CAAC,IAAI,GAAG,IAAI;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/B,QAAA,IAAI,MAAM,CAAC,SAAS,IAAI,OAAO,EAC/B;AACI,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YAC1B,MAAM,CAAC,MAAM,GAAG,MAAK,EAAG,IAAG,MAAM,CAAC,MAAM,EAAC;AAAC,gBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAAA,aAAC,CAAA,CAAC,EAAE;;;AAI/E,IAAA,eAAe,CAAC,OAA6B,EAAA;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;AACnC,QAAA,MAAM,CAAC,KAAK,GAAG,OAAO;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;;IAGzB,YAAY,GAAA;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;AACnC,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE;QACjB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;;uGAxC1B,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBhC,m2CAyCM,EAAA,MAAA,EAAA,CAAA,wHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BQ,aAAa,qLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,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,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAIhE,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAChB,CAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,m2CAAA,EAAA,MAAA,EAAA,CAAA,wHAAA,CAAA,EAAA;;;MEWjE,wBAAwB,CAAA;AAE1B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAoB;AACnD,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAa;AAElC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACzC,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,KAAK;;AAEtB,QAAA,OAAO,KAAK;;AAGd,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;;AAGnC,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAA6B;;uGAlBnD,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBrC,28DA8DA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/CY,mBAAmB,u5CAC3B,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,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,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sLAAE,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI5C,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;+BACE,uBAAuB,EAAA,OAAA,EACxB,CAAC,mBAAmB;wBAC3B,kBAAkB;wBAClB,cAAc;wBACd,eAAe;AACf,wBAAA,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,28DAAA,EAAA;;;MEiB7C,sBAAsB,CAAA;IAE/B,cAAc,GAAG,kBAAkB;IAC1B,SAAS,GAAG,SAAS;AAE9B,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAA8B;AACnD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;IACvB,SAAS,GAAG,MAAM,EAAE;IACpB,SAAS,GAAG,MAAM,EAAE;AAEpB,IAAA,IAAI,eAAe,GAAA;QAEjB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAA6B;;AAGhE,IAAA,IAAI,SAAS,GAAA;QAEX,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU;QAC/C,IAAI,UAAU,EACd;AACE,YAAA,OAAO,mBAAmB,CAAC,UAAU,CAAC;;QAExC,OAAO,SAAS,CAAC,SAAS;;IAG5B,MAAM,GAAA;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;IAGvB,MAAM,GAAA;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;uGAhCd,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCnC,2yFAuEO,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlDK,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC3B,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,8BACd,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,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,EACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,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,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,UAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIR,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAjBlC,SAAS;+BACE,qBAAqB,EAAA,OAAA,EACtB,CAAC,mBAAmB;wBAC3B,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,kBAAkB;wBAClB,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;AACnB,wBAAA,mBAAmB,CAAC,EAAA,QAAA,EAAA,2yFAAA,EAAA;;;MEZT,aAAa,CAAA;AAEtB,IAAA,OAAO,eAAe,GAAA;QAElB,OAAO,EAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC;;IAGzG,OAAO,UAAU,CAAC,EAAe,EAAA;QAC7B,OAAO,EAAE,CAAC,KAAK,CAAiB;YAC5B,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YAClD,GAAG,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YAChD,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAU,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;YACzD,WAAW,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;YACxD,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAc,IAAI,CAAC,eAAe,EAAE,CAAC;AACzD,YAAA,OAAO,EAAE,EAAE,CAAC,OAAO,CAAgB,IAAI,CAAC;AACxC,YAAA,OAAO,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;YAC/B,UAAU,EAAE,EAAE,CAAC,OAAO,CAAS,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC9D,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC;AAC5B,YAAA,EAAE,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC,CAAC;AAC7B,SAAA,CAAC;;AAGN,IAAA,OAAO,QAAQ,CAAC,IAAsB,EAAE,OAAoB,EAAA;QAExD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,QAAA,OAAO,IAAI;;AAGf,IAAA,OAAO,QAAQ,CAAC,IAA+B,EAAE,IAAsB,EAAA;AAEnE,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,IAAI,IAAI,IAAI,EAChB;AACI,YAAA,EAAE,GAAG,IAAI,CAAC,EAAE;;AAGhB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EACjB;AACI,YAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ;;QAGnC,IAAI,CAAC,QAAQ,CAAC;YACV,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,EAAE,EAAE;AACP,SAAA,CAAC;;IAGN,OAAO,UAAU,CAAC,IAA+B,EAAA;AAE7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO;AACC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE;AACpB,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;AACjC,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;AACpC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5B,YAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,SAAS;AACzC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI;SAC7B;;AAGL,IAAA,OAAO,UAAU,CAAC,IAA+B,EAAE,IAAyC,EAAA;AAExF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE;QAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS;QAC/C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;AAC7B,QAAA,OAAO,IAAI;;AAGlB;;MC3FY,aAAa,CAAA;IAEtB,OAAO,UAAU,CAAC,EAAe,EAAA;QAC7B,OAAO,EAAE,CAAC,KAAK,CAAiB;AAC5B,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AAC7B,YAAA,WAAW,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AACnC,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC;AAC5B,YAAA,MAAM,EAAE,EAAE,CAAC,KAAK,CAA4B,EAAE,CAAC;AAC/C,YAAA,EAAE,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC;AAC5B,SAAA,CAAC;;IAGN,OAAO,cAAc,CAAC,IAA+B,EAAA;QAEjD,MAAM,OAAO,GAAkB,EAAE;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAG;YAAE,MAAM,OAAO,GAAG,CAA8B;AAClF,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAChE;gBACI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;;AAE5C,SAAC,CAAC;AACF,QAAA,OAAO,OAAO;;AAGlB,IAAA,OAAO,WAAW,CAAC,IAA+B,EAAE,KAAgC,EAAA;QAEhF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACnC,QAAA,KAAK,CAAC,UAAU,CAAC,EAAC,KAAK,EAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC;AAClD,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGtB,IAAA,OAAO,WAAW,CAAC,IAA+B,EAAE,EAAU,EAAA;QAE1D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAGrC,IAAA,OAAO,YAAY,CAAC,KAAgC,EAAE,EAAU,EAAE,QAAgB,EAAA;AAE9E,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,aAAa,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QACrD,UAAU,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,EAAE,EAAC,CAAC;QAEpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;;AAGzD,IAAA,OAAO,QAAQ,CAAC,IAAsB,EAAE,EAAe,EAAA;QAEnD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AAC7B,QAAA,OAAO,IAAI;;AAGf,IAAA,OAAO,QAAQ,CAAC,IAA+B,EAAE,EAAU,EAAA;AAEvD,QAAA,IAAI,IAAI,CAAC,KAAK,EAAC;AACX,YAAA,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EACnB;AACI,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;;AAEtB,iBAAA,IAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EACxB;gBACI,OAAO,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;;;AAGrD,QAAA,OAAO,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE;;AAGnC,IAAA,OAAO,QAAQ,CAAC,IAA+B,EAAE,IAAsB,EAAE,EAAe,EAAA;AAEpF,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,IAAI,IAAI,IAAI,EAChB;AACI,YAAA,EAAE,GAAG,IAAI,CAAC,EAAE;;QAEhB,IAAI,CAAC,UAAU,CAAC;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,EAAE,EAAE;AACP,SAAA,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACnC,MAAM,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;IAGpE,OAAO,SAAS,CAAC,IAA+B,EAAA;AAE5C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc;;IAG1C,OAAO,UAAU,CAAC,IAA+B,EAAA;AAE7C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO;AACC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AAC1B,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;AACtC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;YACvB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAA8B,CAAC,CAAC;SAC1H;;AAGL,IAAA,OAAO,mBAAmB,CAAC,IAA+B,EAAE,KAAuB,EAAA;AAE/E,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EACvC;YACI,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE;YACnF,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,aAAiC,CAAC;;AAE5E,QAAA,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;;AAGzC,IAAA,OAAO,UAAU,CAAC,IAAe,EAAE,IAAyC,EAAA;AAExE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;QAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,IAAI;QAC5C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1G,QAAA,OAAO,IAAI;;AAGlB;;MC9HY,eAAe,CAAA;AAExB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,IAAI;AAEJ,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAmB;YACxC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAA6B,EAAE;AACvD,SAAA,CAAC;;AAGN,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc;;AAG/C,IAAA,aAAa,CAAC,IAAiB,EAAA;AAE3B,QAAA,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC;QACjC,MAAM,OAAO,GAAkB,EAAE;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAiB,EAAE;AAC/B,QAAA,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACjC;AACI,YAAA,MAAM,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAC,CAAC;;AAE/C,QAAA,OAAO,MAAM;;AAGjB,IAAA,OAAO,CAAC,EAAU,EAAA;QAEd,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAC,CAAC,CAAC;;AAG1B,IAAA,SAAS,CAAC,EAAU,EAAA;QAEhB,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAC,CAAC,CAAC;;IAG1B,OAAO,CAAC,EAAU,EAAE,QAAgB,EAAA;QAEhC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,aAAa,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,QAAQ,EAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC3C,UAAU,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,EAAE,EAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;;IAG/C,YAAY,CAAC,QAAgB,EAAE,EAAU,EAAA;QAErC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAC,CAAC,CAAC;;IAGzC,cAAc,CAAC,QAAgB,EAAE,EAAU,EAAA;QAEvC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAC,CAAC,CAAC;;AAGzC,IAAA,YAAY,CAAC,QAAgB,EAAE,EAAU,EAAE,QAAgB,EAAA;AAEvD,QAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC;;AAGtE,IAAA,WAAW,CAAC,KAAgC,EAAA;AAExC,QAAA,KAAK,CAAC,UAAU,CAAC,EAAC,KAAK,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAC,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG3B,IAAA,WAAW,CAAC,EAAU,EAAA;AAElB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;;IAG5B,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAA;AAE1C,QAAA,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;;IAGjE,KAAK,GAAA;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAmB;YACxC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAA6B,EAAE;AACvD,SAAA,CAAC;;AAGN,IAAA,QAAQ,CAAC,IAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;IAG9E,UAAU,GAAA;QAEN,OAAO;YACC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACpF;;IAGL,mBAAmB,CAAC,IAA+B,EAAE,KAAuB,EAAA;AAExE,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EACvC;YACI,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE;YACnF,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,aAAiC,CAAC;;AAE5E,QAAA,OAAO,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;;AAGzC,IAAA,UAAU,CAAC,IAAiB,EAAA;QAExB,MAAM,WAAW,GAAG,IAAmB;AACvC,QAAA,WAAW,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxG,QAAA,OAAO,WAAW;;AAGzB;;MCtHY,kBAAkB,CAAA;IAE3B,OAAO,UAAU,CAAC,EAAe,EAAA;QAC7B,OAAO,EAAE,CAAC,KAAK,CAAsB;YACjC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAClD,YAAA,EAAE,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,CAAC,CAAC;AAC/B,SAAA,CAAC;;AAGN,IAAA,OAAO,QAAQ,CAAC,IAA2B,EAAE,OAAoB,EAAA;QAE7D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,QAAA,OAAO,IAAI;;AAGf,IAAA,OAAO,QAAQ,CAAC,IAAoC,EAAE,IAA2B,EAAA;AAE7E,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,IAAI,IAAI,IAAI,EAChB;AACI,YAAA,EAAE,GAAG,IAAI,CAAC,EAAE;;QAGhB,IAAI,CAAC,QAAQ,CAAC;YACV,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACpB,YAAA,EAAE,EAAE;AACP,SAAA,CAAC;;IAGN,OAAO,UAAU,CAAC,IAAoC,EAAA;AAElD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO;AACC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACxB,YAAA,KAAK,EAAE;SACd;;AAGL,IAAA,OAAO,UAAU,CAAC,IAAoC,EAAE,IAA2B,EAAA;AAE/E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;AAC9B,QAAA,OAAO,IAAI;;AAGlB;;MClDY,iBAAiB,CAAA;AAE1B,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,IAAI;AAEJ,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAqB;YAC1C,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAkC,EAAE;AAC5D,SAAA,CAAC;;AAGN,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAc;;IAG/C,KAAK,GAAA;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;AAC3B,SAAA,CAAC;;AAGN,IAAA,QAAQ,CAAC,IAA0B,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;IAGnF,UAAU,GAAA;QAEN,OAAO;YACC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACzF;;IAGL,WAAW,CAAC,IAAoC,EAAE,KAA4B,EAAA;QAE1E,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE;QACnF,OAAO,kBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,aAAsC,CAAC;;AAGtF,IAAA,UAAU,CAAC,IAA0B,EAAA;AAEjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzF,QAAA,OAAO,IAAI;;AAGlB;;MC7CY,oBAAoB,CAAA;AAEZ,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAe;AAEzC,IAAA,IAAI,GAAG,QAAQ,CAAY,MAChC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,gDACjD;IAED,OAAO,GAAG,EAAE;IAEZ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;;uGAZjD,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdjC,kfAqBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDXM,wBAAwB,4FAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI5C,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,CAAC,wBAAwB,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,EAAA,QAAA,EAAA,kfAAA,EAAA;;;MEiBvE,sBAAsB,CAAA;AACjC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAA6B;AAClD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;IAEhC,SAAS,GAAG,MAAM,EAAE;IACpB,SAAS,GAAG,MAAM,EAAE;IACpB,OAAO,GAAG,MAAM,EAAE;AAElB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IACxB,SAAS,GAAqC,IAAI;AAElD,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAyC;;AAG1E,IAAA,aAAa,CAAC,EAAU,EAAA;QACtB,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;;AAG5C,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;;AAGrD,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;;IAGrD,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGpD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;IAGvB,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;;AAExD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;IAGvB,QAAQ,GAAA;AAEN,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;IAGrB,MAAM,GAAA;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;IAGvB,MAAM,GAAA;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;;uGAtDZ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,iaC3BnC,kpGA2EM,EAAA,MAAA,EAAA,CAAA,4IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3DM,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAC1B,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAAK,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,8TAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,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,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,kYACd,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIb,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;+BACE,qBAAqB,EAAA,OAAA,EACtB,CAAC,kBAAkB;wBAC1B,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;AACd,wBAAA,sBAAsB,CAAC,EAAA,QAAA,EAAA,kpGAAA,EAAA,MAAA,EAAA,CAAA,4IAAA,CAAA,EAAA;;;MEOd,2BAA2B,CAAA;AAEpC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAmB;AACxC,IAAA,YAAY,GAAG,KAAK,CAAC,KAAK,wDAAC;IAC3B,SAAS,GAAG,MAAM,EAAE;AAEpB,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,iDAAC;AAErB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;IACxB,SAAS,GAAqC,IAAI;IAElD,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGtD,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE3C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;IAGzB,WAAW,GAAA;AAEP,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;;IAGzB,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGzB,IAAA,WAAW,CAAC,EAAU,EAAA;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGxB,IAAA,SAAS,CAAC,EAAU,EAAA;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGxB,IAAA,WAAW,CAAC,EAAU,EAAA;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGxB,IAAA,QAAQ,CAAC,OAAwB,EAAA;QAC7B,MAAM,IAAI,GAAG,OAAoB;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;;aAEtB;YACD,OAAO,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;;;uGArD5C,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,sYC9BxC,qyDAsDC,EAAA,MAAA,EAAA,CAAA,4IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpCG,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,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,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,8BACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,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,UAAA,EAAA,IAAA,EAChB,kBAAkB,goBAClB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKb,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B;wBACT,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB;AACH,qBAAA,EAAA,QAAA,EAAA,qyDAAA,EAAA,MAAA,EAAA,CAAA,4IAAA,CAAA,EAAA;;;MEdY,sBAAsB,CAAA;AACjC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAwB;uGADlC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZnC,goCAsCC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9BW,aAAa,qLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI7B,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,OAAA,EACrB,CAAC,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,goCAAA,EAAA;;;AER3C;MAoCa,sBAAsB,CAAA;AAE/B,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,oDAAC;AACpB,IAAA,OAAO,GAAG,KAAK,CAAgB,EAAE,mDAAC;IAClC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAiC;AACnD,IAAA,YAAY,GAAG,KAAK,CAAC,EAAE,wDAAC;IACxB,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAC/B,eAAe,GAAG,EAAE;IACpB,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE7D,IAAA,IAAI,GAAG,SAAS,CAAC,OAAO,gDAAC;AACzB,IAAA,SAAS,GAAG,SAAS,CAAC,YAAY,qDAAC;IAEnC,eAAe,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE;YACrB;;AAGJ,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI;aAChC,IAAI,CACD,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AAE1B,aAAA,SAAS,EAAE;;IAGpB,KAAK,GAAA;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,CAAC,SAAS,EAAE;YACZ;;AAEJ,QAAA,SAAS,CAAC,SAAS,GAAG,CAAC;;IAG3B,KAAK,GAAA;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE;QACrC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YACrC;;AAGJ,QAAA,WAAW,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;AAC5B,YAAA,IAAI,EAAE,SAAS,CAAC,SAAS,GAAG,CAAC;YAC7B,SAAS,EAAE,SAAS,CAAC,QAAQ;YAC7B,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,UAAU,EAAE,IAAI,CAAC,MAAM;AACvB,YAAA,MAAM,EAAE,IAAI,CAAC,YAAY;AAC5B,SAAA,CAAC,CAAC;;uGAlDE,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAUd,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACF,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CtC,qzCAiDA,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3Bc,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,8BACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACR,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKR,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAhBlC,SAAS;+BACI,qBAAqB,EAAA,OAAA,EACtB,CAAC,cAAc;wBACpB,mBAAmB;wBACnB,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,aAAa;wBACb,YAAY;wBACZ,QAAQ;wBACR;AACH,qBAAA,EAAA,QAAA,EAAA,qzCAAA,EAAA,MAAA,EAAA,CAAA,yMAAA,CAAA,EAAA;AAcgB,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,OAAO,wFACF,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE/CtC;AACA;MAoBa,uBAAuB,CAAA;AAEhC,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,sDAAC;AAC9B,IAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,oDAAC;AACpB,IAAA,UAAU,GAAG,KAAK,CAAS,GAAG,sDAAC;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAS,OAAO,qDAAC;IAClC,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAkC;AACpD,IAAA,gBAAgB,GAAG,KAAK,CAA0C,IAAI,4DAAC;AACvE,IAAA,UAAU,GAAG,KAAK,CAAU,KAAK,sDAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,qDAAC;IACvC,QAAQ,GAAG,MAAM,EAAU;IAE3B,KAAK,GAAA;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE;QACrC,IAAG,CAAC,WAAW,EACf;YACI;;;;AAIJ,QAAA,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAGzD,IAAA,UAAU,CAAC,EAAU,EAAA;AAEjB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;;uGA3BjB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,yjCCrBpC,qlCAkCA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBc,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,gBAAgB,mJAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;+BACI,sBAAsB,EAAA,OAAA,EACvB,CAAC,aAAa;wBACb,gBAAgB;AAChB,wBAAA,eAAe,CAAC,EAAA,QAAA,EAAA,qlCAAA,EAAA,MAAA,EAAA,CAAA,4EAAA,CAAA,EAAA;;;AECxB,MAAO,cAAiG,SAAQ,UAAa,CAAA;AAE/H,IAAA,MAAM,GAAG,MAAM,CAAC,CAAC,kDAAC;AAClB,IAAA,OAAO,GAAG,MAAM,CAAC,IAAI,mDAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAS,EAAE,sDAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,sDAAC;IAE1B,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAErF,IAAA,YAAY;AACZ,IAAA,KAAK,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,IAAA,WAAW;AACH,IAAA,YAAY,GAAG,IAAI,YAAY,EAAE;AACjC,IAAA,YAAY,GAAG,IAAI,GAAG,EAAU;IAChC,cAAc,GAAa,EAAE;AAErC,IAAA,WAAA,CAAY,WAAoC,EAAE,YAAY,GAAG,OAAO,EAAE,iBAA2B,EAAE,EAAA;AACnG,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;;AAGxC,IAAA,OAAO,CAAC,gBAAkC,EAAA;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAC5B;YACI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;;AAGhG,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;;IAGpC,gBAAgB,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,YAAY,KAAK,OAAO;;AAGxC,IAAA,OAAO,CAAC,KAAgB,EAAA;AAEpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxD,QAAA,KAAK,IAAI,GAAG,GAAG,UAAU,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,EAAE,EACjD;AACI,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;;AAI3B,IAAA,KAAK,CAAC,UAAU,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAA;AAEhC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAU;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGrB,IAAA,SAAS,CAAC,GAAW,EAAA;QAEjB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAC9B;YACI;;AAEJ,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAE1B,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAE7D,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,EAAC,IAAI,EAAE,GAAG,GAAG,CAAC;AACb,YAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1B,YAAA,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,EAAC,CAAC,CAAC;;AAG1D,IAAA,KAAK,CAAC,KAAiB,EAAA;AAEnB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAC5B,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAK,CAAC,CAAC,EACxC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAC1C,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;;AAGtD,IAAA,UAAU,CAAC,QAAuB,EAAA;QAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAEzB,QAAA,IAAG,IAAI,CAAC,gBAAgB,EAAE,EAC1B;YACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;;aAGrC;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;;;IAInE,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,YAAY,EACrB;AACI,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;;AAI1C;;MC1GY,mBAAmB,CAAA;AAE5B,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AACnC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAW;AACrC,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAW;AACxC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAY;IACvC,aAAa,GAAG,MAAM,EAAU;IAEhC,KAAK,GAAA;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;AAG5C,IAAA,cAAc,CAAC,KAAa,EAAA;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;;uGAfvB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBhC,qoBAkBM,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,EAAAK,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAJV,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAQZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACE,iBAAiB,EAAA,OAAA,EAClB,CAAC,aAAa;wBACrB,YAAY;wBACZ,aAAa;wBACb,eAAe;AACf,wBAAA,kBAAkB,CAAC,EAAA,QAAA,EAAA,qoBAAA,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA;;;ME8BV,iBAAiB,CAAA;AAE1B,IAAA,QAAQ,GAAG,KAAK,CAAC,OAAO,oDAAC;IACzB,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2B;AAC9C,IAAA,gBAAgB,GAAG,KAAK,CAA8B,IAAI,4DAAC;AAC3D,IAAA,kBAAkB,GAAG,KAAK,CAA8B,IAAI,8DAAC;AAC7D,IAAA,UAAU,GAAG,KAAK,CAAC,GAAG,sDAAC;AACvB,IAAA,SAAS,GAAG,KAAK,CAAC,GAAG,qDAAC;AACtB,IAAA,OAAO,GAAG,KAAK,CAAgB,EAAE,mDAAC;AAClC,IAAA,UAAU,GAAG,KAAK,CAAW,EAAE,sDAAC;IAChC,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACpC,uBAAuB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACzC,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAChC,IAAA,cAAc,GAAG,KAAK,CAAW,EAAE,0DAAC;AACpC,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,wDAAC;AAEpC,IAAA,gBAAgB,GAAG,MAAM,CAAC,OAAO,4DAAC;IAClC,QAAQ,GAAG,MAAM,EAAiB;IAElC,QAAQ,GAAG,EAAE;IACb,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAErB,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;IACxC,UAAU,GAA2C,SAAS;AAC9D,IAAA,IAAI,GAAG,SAAS,CAAC,OAAO,gDAAC;IACzB,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAE7D,UAAU,GAAG,EAAE;AAEf,IAAA,IAAI,iBAAiB,GAAA;AAEjB,QAAA,IAAG,IAAI,CAAC,kBAAkB,EAAE,EAC5B;AACI,YAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI;;aAGpD;AACI,YAAA,OAAO,MAAM;;;IAIrB,QAAQ,GAAA;QACJ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,CAAC,eAAe,EAAE;;IAG1B,eAAe,GAAA;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE;;;IAIjE,YAAY,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;;AAG3E,IAAA,cAAc,CAAC,KAAa,EAAA;AAExB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;QACvB,IAAI,CAAC,KAAK,EAAE;;IAGhB,SAAS,GAAA;AACL,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,IAAI,YAAY,EAChB;AACI,YAAA,OAAO,YAAY,CAAC,SAAS,EAAE;;AAEnC,QAAA,OAAO,KAAK;;IAGhB,QAAQ,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,IAAI,YAAY,EAChB;AACI,YAAA,OAAO,YAAY,CAAC,UAAU,EAAE;;AAEpC,QAAA,OAAO,EAAE;;IAGb,KAAK,GAAA;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;IAG5C,WAAW,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,KAAK,OAAO;;IAG9C,eAAe,GAAA;AACX,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE;QACvC,IAAI,YAAY,EAChB;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAa,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;;QAElH,IAAI,CAAC,KAAK,EAAE;;IAGhB,KAAK,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;;;AAI7D,IAAA,WAAW,CAAC,KAA4B,EAAA;QACpC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,eAAe,EAAE;;AAG1B,IAAA,WAAW,CAAC,EAAU,EAAA;AAElB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGhB,UAAU,GAAA;QAChB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG;QAC5C,IAAG,CAAC,YAAY,EAChB;AACI,YAAA,OAAO,KAAK;;AAEhB,QAAA,OAAO,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;;uGA1HhE,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,uBAAA,EAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBT,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrE5B,63EAkFM,EAAA,MAAA,EAAA,CAAA,ySAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtDQ,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChC,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,kBAAkB,8BAClB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,yJACnB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnB7B,SAAS;+BACI,eAAe,EAAA,OAAA,EAChB,CAAC,sBAAsB;wBAChC,uBAAuB;wBACvB,mBAAmB;wBACnB,kBAAkB;wBAClB,qBAAqB;wBACrB,wBAAwB;wBACxB,aAAa;wBACb,mBAAmB;wBACnB,YAAY;wBACZ,cAAc;wBACd,gBAAgB;wBAChB,eAAe;wBACf,mBAAmB;AACnB,wBAAA,gBAAgB,CAAC,EAAA,QAAA,EAAA,63EAAA,EAAA,MAAA,EAAA,CAAA,ySAAA,CAAA,EAAA;++CA4BA,OAAO,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEhDf,eAAe,CAAA;IAEf,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACvB,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACtB,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAC5B,IAAA,IAAI,GAAG,MAAM,CAA6B,IAAI,gDAAC;AAC/C,IAAA,UAAU,GAAG,KAAK,CAAS,MAAM,sDAAC;AACnC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;IAGxE,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;;IAG7B,OAAO,GAAA;QAEH,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;;AAGjD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,IAAI,EACR;AACI,YAAA,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC;;AAEzC,QAAA,OAAO,EAAE;;AAGb,IAAA,IAAI,eAAe,GAAA;AAEf,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EACrB;YACI,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;;aAG3C;AACI,YAAA,OAAO,MAAM;;;uGAzCZ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrB5B,m/CA8CA,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjCc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,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,EAAAJ,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIR,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,SAAS;+BACI,aAAa,EAAA,OAAA,EACd,CAAC,YAAY;wBAClB,gBAAgB;wBAChB,aAAa;wBACb,eAAe;AACf,wBAAA,aAAa,CAAC,EAAA,QAAA,EAAA,m/CAAA,EAAA,MAAA,EAAA,CAAA,kRAAA,CAAA,EAAA;;;MEFT,gBAAgB,CAAA;IAEhB,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AACrC,IAAA,IAAI,GAAG,MAAM,CAA6B,IAAI,gDAAC;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,cAAc,GAAmB,MAAM,CAAC,cAAc,CAAC;AAEjE,IAAA,cAAc,GAAG,SAAS,CAAC,iBAAiB,0DAAC;AAE7C,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;IAGxE,UAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa;;AAG5C,IAAA,IAAI,eAAe,GAAA;AAEf,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EACrB;YACI,OAAO,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;;aAG3C;AACI,YAAA,OAAO,MAAM;;;uGA1BZ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOE,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBhD,qvBAmBA,EAAA,MAAA,EAAA,CAAA,6RAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRc,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,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,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI5D,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACI,cAAc,EAAA,OAAA,EACf,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,qvBAAA,EAAA,MAAA,EAAA,CAAA,6RAAA,CAAA,EAAA;8NAW3C,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEdnC,iBAAiB,CAAA;uGAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,wECR9B,0BACA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDOa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,WACf,EAAE,EAAA,QAAA,EAAA,0BAAA,EAAA;;;MEIA,eAAe,CAAA;AACxB,IAAA,IAAI,GAAG,KAAK,CAAC,EAAE,gDAAC;uGADP,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,uMCR5B,0DAAsD,EAAA,MAAA,EAAA,CAAA,2LAAA,CAAA,EAAA,CAAA;;2FDQzC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,2LAAA,CAAA,EAAA;;;AEQP,MAAO,mBAAoB,SAAQ,UAAuE,CAAA;AAE5G,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;AAE/B,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;IAG9B,QAAQ,GAAA;QACJ,IAAI,CAAC,MAAM,EAAE;;IAGE,OAAO,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAClC;AACI,YAAA,OAAO,KAAK;;AAGhB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAC9D;AACI,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK,CAAC,OAAO,EAAE;;uGAtBjB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhC,ggCA2CA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnCc,mBAAmB,4DAAE,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAI3C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,EAAA,QAAA,EAAA,ggCAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;;;MES5C,QAAQ,CAAA;AACT,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAY;AAC5B,QAAA,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC1D,QAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;QACvD,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;QACvC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;QACtC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAc,QAAQ,CAAC,iBAAiB,EAAE,CAAC;AACtE,KAAA,CAAC;AAEF,IAAA,OAAO,iBAAiB,GAAA;QAEpB,OAAO,EAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC;;AAGlH,IAAA,QAAQ,CAAC,IAAyB,EAAA;AAE9B,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,EAChB;AACI,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;;AAGjC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,OAAO,EAAE;AACZ,SAAA,CAAC;;IAGN,UAAU,GAAA;AAEN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QAC7B,OAAO;AACH,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;AAC1B,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;AAClC,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;AAChC,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,WAAW,EAAE;SACpB;;AAGL,IAAA,UAAU,CAAC,IAAyB,EAAA;AAEhC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;AAC9B,QAAA,OAAO,IAAI;;AAElB;;ACxCK,MAAO,iBAAkB,SAAQ,QAAqE,CAAA;AAErF,IAAA,QAAQ,GAAa,CAAC,SAAS,CAAC;AAEnD,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;;IAG9C,QAAQ,GAAA;QACJ,IAAI,CAAC,MAAM,EAAE;;AAGjB,IAAA,IAAI,cAAc,GAAA;QAEd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAA6B;;uGAd3D,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,gGClC9B,ohEA+DA,EAAA,MAAA,EAAA,CAAA,qUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzCQ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,cAAc,6oBACd,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,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,WAAA,EAAA,IAAA,EACb,mBAAmB,4EACnB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAKR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB;wBACL,mBAAmB;wBACnB,eAAe;wBACf,mBAAmB;wBACnB,cAAc;wBACd,kBAAkB;wBAClB,aAAa;wBACb,mBAAmB;wBACnB;AACH,qBAAA,EAAA,QAAA,EAAA,ohEAAA,EAAA,MAAA,EAAA,CAAA,qUAAA,CAAA,EAAA;;;MEjBQ,uBAAuB,CAAA;AAChC,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAuB;AAC5C,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,gDAAC;AAClB,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AAEvB,IAAA,IAAI,KAAK,GAAA;AAEP,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EACnD;AACE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS;;aAG7D;AACE,YAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ;;;uGAbtB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbpC,srBAiBM,EAAA,MAAA,EAAA,CAAA,sZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDRQ,aAAa,qLAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,CAAA;;2FAI7B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EACrB,CAAC,aAAa,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,srBAAA,EAAA,MAAA,EAAA,CAAA,sZAAA,CAAA,EAAA;;;MEQ9B,aAAa,CAAA;AACtB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,UAAU,GAAG,SAAS,CAAC,mBAAmB,sDAAC;AAE3C,IAAA,UAAU,CAAC,EAAiB,EAAA;QAExB,IAAG,EAAE,EACL;YACI,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;;;uGARjC,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEC,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB9C,glBAkBA,8EDRc,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKd,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,SAAS;+BACI,UAAU,EAAA,OAAA,EACX,CAAC,iBAAiB;wBACvB,uBAAuB;AACvB,wBAAA,mBAAmB,CAAC,EAAA,QAAA,EAAA,glBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;4FAOD,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AENxC,MAAO,oBAAqB,SAAQ,UAAkD,CAAA;AAExF,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;AAE/B,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;IAG/B,QAAQ,GAAA;QACJ,IAAI,CAAC,MAAM,EAAE;;uGATR,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECbjC,6fAoBA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZc,mBAAmB,4DACzB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIhB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACI,kBAAkB,EAAA,OAAA,EACnB,CAAC,mBAAmB;AACzB,wBAAA,qBAAqB,CAAC,EAAA,QAAA,EAAA,6fAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;;;MEKjB,cAAc,CAAA;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC;AAClC,IAAA,UAAU,GAAG,SAAS,CAAC,oBAAoB,sDAAC;AAE5C,IAAA,UAAU,CAAC,EAAiB,EAAA;QAExB,IAAG,EAAE,EACL;YACI,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;;;uGARjC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEA,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB/C,ovBAwBA,8cDfc,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,CAAA;;2FAKvD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,ovBAAA,EAAA,MAAA,EAAA,CAAA,sZAAA,CAAA,EAAA;4FAO1C,oBAAoB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MEGlC,oBAAoB,CAAA;AAC/B,IAAA,cAAc,GAAG,KAAK,CAAa,EAAE,0DAAC;IACtC,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAa;uGAFd,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBjC,w+DA0CC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BW,kBAAkB,0SAC1B,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;+BACE,kBAAkB,EAAA,OAAA,EACnB,CAAC,kBAAkB;wBAC1B,eAAe;wBACf,cAAc;wBACd;AACD,qBAAA,EAAA,QAAA,EAAA,w+DAAA,EAAA;;;MELU,sBAAsB,CAAA;IACjC,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAkB;uGADtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,wNCVnC,uvBAmBC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDTY,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,WACrB,EAAE,EAAA,QAAA,EAAA,uvBAAA,EAAA;;;MEQA,WAAW,CAAA;IAEpB,OAAO,UAAU,CAAC,EAAe,EAAA;QAC7B,OAAO,EAAE,CAAC,KAAK,CAAe;YAC1B,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AAClD,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AAC7B,YAAA,KAAK,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AAC7B,YAAA,IAAI,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;YAC5B,MAAM,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnD,YAAA,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;YAChC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ;AACtD,SAAA,CAAC;;AAGN,IAAA,OAAO,QAAQ,CAAC,IAAoB,EAAE,EAAe,EAAA;QAEjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,QAAA,OAAO,IAAI;;AAGf,IAAA,OAAO,QAAQ,CAAC,IAA6B,EAAE,IAAoB,EAAA;QAC/D,IAAI,CAAC,QAAQ,CAAC;YACV,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AACvB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,OAAO,EAAE,IAAI,CAAC;AACjB,SAAA,CAAC;;IAGN,OAAO,UAAU,CAAC,IAA6B,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO;AACH,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACxB,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AAC1B,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AAC1B,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;AACxB,YAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;AAC1B,YAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;AAChC,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI;SAC7B;;AAGL,IAAA,OAAO,UAAU,CAAC,IAA6B,EAAE,IAAoB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;QAChC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE;QAChC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI;QACtC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE;AAClC,QAAA,OAAO,IAAI;;AAElB;;ACzDK,MAAO,2BAA4B,SAAQ,UAAuE,CAAA;AAEpH,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;AAE/B,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;;IAGtC,QAAQ,GAAA;QAEJ,IAAI,CAAC,MAAM,EAAE;;uGAVR,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,uPCdxC,65BA+BA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtBc,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,qBAAqB,mJAAE,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIpC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;+BACI,yBAAyB,EAAA,OAAA,EAC1B,CAAC,mBAAmB;wBAC7B,qBAAqB,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,65BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,CAAA,EAAA;;;MEMrC,qBAAqB,CAAA;AAC9B,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACzC,IAAA,OAAO,GAAkB,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAC;QACrD,EAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAC;AACxD,QAAA,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAC,CAAC;AAE7F,IAAA,UAAU,GAAG,SAAS,CAAC,2BAA2B,sDAAC;AAEnD,IAAA,UAAU,CAAC,EAAiB,EAAA;QAExB,IAAG,EAAE,EACL;YACI,IAAI,CAAC,UAAU,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;;;uGAZjC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wHAMP,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBtD,kwBAwBA,EAAA,MAAA,EAAA,CAAA,sZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDfI,iBAAiB,yTACjB,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAMlB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACT,iBAAiB;wBACjB;AACH,qBAAA,EAAA,QAAA,EAAA,kwBAAA,EAAA,MAAA,EAAA,CAAA,sZAAA,CAAA,EAAA;4FAW0B,2BAA2B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MENzC,gBAAgB,CAAA;AACjB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AAChC,IAAA,IAAI;AAEJ,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;;IAGpD,OAAO,UAAU,CAAC,EAAe,EAAA;QAE7B,OAAO,EAAE,CAAC,KAAK,CAAoB;YAC3B,IAAI,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACjD,YAAA,OAAO,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AAC/B,YAAA,WAAW,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AACnC,YAAA,OAAO,EAAE,EAAE,CAAC,OAAO,CAAS,EAAE,CAAC;AAC/B,YAAA,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE;AACzC,SAAA,CAAC;;AAGN,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAA4B;;AAG9D,IAAA,QAAQ,CAAC,IAAyB,EAAA;AAE9B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC;AACjB,SAAA,CAAC;QACF,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;;IAGpD,UAAU,GAAA;AAEN,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;QAC7B,OAAO;AACC,YAAA,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5B,YAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;AACpC,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;YAC5B,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,YAAA,OAAO,EAAE;SAChB;;AAGL,IAAA,UAAU,CAAC,IAAyB,EAAA;AAEhC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE;AACpD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5C,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;AACjE,QAAA,OAAO,IAAI;;AAGlB;;AChCK,MAAO,yBAA0B,SAAQ,QAAqE,CAAA;AAEhH,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAEvC,IAAA,gBAAgB,GAAG,IAAI,sBAAsB,EAAE;AAE/C,IAAA,WAAA,GAAA;QACI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,IAAI,gBAAgB,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE;;IAG/C,QAAQ,GAAA;QACJ,IAAI,CAAC,MAAM,EAAE;;IAGjB,WAAW,GAAA;AAEP,QAAA,OAAQ,IAAI,CAAC,IAAyB,CAAC,OAAO;;IAGzC,UAAU,GAAA;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/D,QAAA,OAAO,IAAI;;AAGI,IAAA,UAAU,CAAC,IAAyB,EAAA;QACnD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;AAC/D,QAAA,OAAO,IAAI;;IAGN,sBAAsB,CAAC,IAAyB,EAAE,CAAsB,EAAA;AAC7E,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;;uGAlCpE,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CtC,muHAmGA,EAAA,MAAA,EAAA,CAAA,gIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1EI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,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,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,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,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAMJ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBArBrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACT,mBAAmB;wBACnB,eAAe;wBACf,cAAc;wBACd,eAAe;wBACf,kBAAkB;wBAClB,aAAa;wBACb,iBAAiB;wBACjB,kBAAkB;wBAClB,mBAAmB;wBACnB,oBAAoB;wBACpB,oBAAoB;wBACpB,aAAa;wBACb;AACH,qBAAA,EAAA,QAAA,EAAA,muHAAA,EAAA,MAAA,EAAA,CAAA,gIAAA,CAAA,EAAA;;;AEtCD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"ichec-angular-core.mjs","sources":["../../../projects/ichec-angular-core/src/lib/models/core.ts","../../../projects/ichec-angular-core/src/lib/models/member.ts","../../../projects/ichec-angular-core/src/lib/models/group.ts","../../../projects/ichec-angular-core/src/lib/models/organization.ts","../../../projects/ichec-angular-core/src/lib/models/address.ts","../../../projects/ichec-angular-core/src/lib/models/http.ts","../../../projects/ichec-angular-core/src/lib/models/form.ts","../../../projects/ichec-angular-core/src/lib/models/file-record.ts","../../../projects/ichec-angular-core/src/lib/services/rest.service.ts","../../../projects/ichec-angular-core/src/lib/services/item.service.ts","../../../projects/ichec-angular-core/src/lib/services/user.service.ts","../../../projects/ichec-angular-core/src/lib/services/item-with-user.service.ts","../../../projects/ichec-angular-core/src/lib/services/form.service.ts","../../../projects/ichec-angular-core/src/lib/services/group.service.ts","../../../projects/ichec-angular-core/src/lib/services/left-nav.service.ts","../../../projects/ichec-angular-core/src/lib/services/api/address.service.ts","../../../projects/ichec-angular-core/src/lib/services/api/organization.service.ts","../../../projects/ichec-angular-core/src/lib/services/mocks.ts","../../../projects/ichec-angular-core/src/lib/views/base/delete-dialog/delete-dialog.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/delete-dialog/delete-dialog.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/edit-view.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/select-table.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/select-table.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/user-table.ts","../../../projects/ichec-angular-core/src/lib/views/base/select-table/selection-manager.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/back-button/back-button.component.html","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/detail-header/detail-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/search-bar/search-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/file-upload/file-upload.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/detail/form-field-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/detail/form-field-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-group-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/dynamic-form-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/form-field-value-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/edit/populated-form-form.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/view/dynamic-form.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/view/dynamic-form.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/group-edit/form-group-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/group-edit/form-group-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/builder/dynamic-form-builder.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/builder/dynamic-form-builder.component.html","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/populated-form/populated-form.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/dynamic-form/populated-form/populated-form.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-table-view/list-table-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-table-view/list-table-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-scroll-view/list-scroll-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-scroll-view/list-scroll-view.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-data-source.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-header/list-header.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-header/list-header.component.html","../../../projects/ichec-angular-core/src/lib/views/base/list/list-view/list-view.component.ts","../../../projects/ichec-angular-core/src/lib/views/base/list/list-view/list-view.component.html","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.ts","../../../projects/ichec-angular-core/src/lib/views/top-bar/top-bar.component.html","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.ts","../../../projects/ichec-angular-core/src/lib/views/left-nav/left-nav.component.html","../../../projects/ichec-angular-core/src/lib/views/feedback/feedback.component.ts","../../../projects/ichec-angular-core/src/lib/views/feedback/feedback.component.html","../../../projects/ichec-angular-core/src/lib/views/avatar/avatar.component.ts","../../../projects/ichec-angular-core/src/lib/views/avatar/avatar.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/detail/user-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/edit/user-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list-detail/user-list-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list-detail/user-list-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/user/list/user.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/detail/group-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/group/list/group.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-edit.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/address/detail/address-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/address/edit/address-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/detail/organization-detail.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/list/organization.component.html","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-form.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.ts","../../../projects/ichec-angular-core/src/lib/views/api/organization/edit/organization-edit.component.html","../../../projects/ichec-angular-core/src/public-api.ts","../../../projects/ichec-angular-core/src/ichec-angular-core.ts"],"sourcesContent":["import { FormGroup } from \"@angular/forms\";\n\nexport interface Identifiable{\n id: number;\n url: string;\n}\n\nexport interface IPaginated<T extends Identifiable>{\n count: number;\n next: string | null;\n previous: string | null;\n results: T[];\n}\n\nexport class Paginated<T extends Identifiable> implements IPaginated<T>{\n count = 0;\n next = null;\n previous = null;\n results: T[] = [];\n}\n\nexport interface IPermission extends Identifiable{\n codename: string;\n}\n\nexport class Permission {\n static typename = \"permission\";\n static plural = \"permissions\";\n}\n\nexport interface IForm<C, D, U = D>\n{\n form: FormGroup;\n\n setValue(item: D): void;\n \n createItem(): C;\n \n updateItem(item: D): U;\n}\n\n","import { Identifiable } from \"./core\";\n\nexport interface IMemberIdentifierBase\n{\n id_type: string;\n value: string;\n}\n\nexport type IMemberIdentifierCreate = IMemberIdentifierBase;\n\nexport interface IMemberIdentifierDetail extends IMemberIdentifierBase\n{\n id: number;\n}\n\nexport interface IPortalMemberBase\n{\n username: string;\n email: string;\n first_name: string;\n last_name: string;\n phone: string;\n}\n\nexport interface IPortalMemberCreate extends IPortalMemberBase\n{\n identifiers: IMemberIdentifierCreate[];\n}\n\nexport interface IPortalMemberList extends IPortalMemberBase, Identifiable\n{\n organization: string;\n profile: string | null;\n profile_thumbnail: string | null;\n permissions: string[];\n identifiers: IMemberIdentifierDetail[]; \n}\n\nexport type IPortalMemberDetail = IPortalMemberList;\n\nexport class PortalMember {\n\n static typename = \"member\";\n static plural = \"members\";\n \n static getInitials(member: IPortalMemberDetail): string\n {\n let first_initial = \"\";\n let second_initial = \"\";\n if (member.first_name)\n {\n first_initial = member.first_name[0];\n }\n else \n {\n first_initial = member.username[0];\n }\n if (member.first_name)\n {\n second_initial = member.last_name[0];\n }\n const combined = first_initial + second_initial;\n return combined.toUpperCase();\n }\n}","import { Identifiable } from \"./core\";\n\nexport interface IGroupBase\n{\n name: string;\n}\n\nexport type IGroupCreate = IGroupBase;\n\nexport interface IGroupList extends IGroupBase, Identifiable {\n}\n\nexport type IGroupDetail = IGroupList;\n\nexport class Group {\n\n static typename = \"group\";\n static plural = \"groups\";\n}","import { Identifiable } from \"./core\";\nimport { IAddressCreate, IAddressDetail } from \"./address\";\n\nexport interface IOrganizationBase {\n name: string;\n acronym: string;\n description: string;\n website: string;\n members: string[];\n}\n\nexport interface IOrganizationCreate extends IOrganizationBase {\n address: IAddressCreate;\n}\n\nexport interface IOrganizationList extends IOrganizationBase, Identifiable{\n address: string;\n}\n\nexport interface IOrganizationDetail extends IOrganizationBase, Identifiable {\n address: IAddressDetail;\n}\n\nexport class Organization {\n\n static typename = \"organization\";\n static plural = \"organizations\";\n}","import { Identifiable } from \"./core\";\n\nexport interface ICountry {\n name: string \n code: string \n flag: string\n}\n\nexport interface IAddressBase {\n line1: string;\n line2: string | null;\n line3: string | null;\n city: string | null;\n region: string;\n postcode: string | null;\n country: string;\n}\n\nexport type IAddressCreate = IAddressBase;\n\nexport interface IAddressList extends IAddressBase, Identifiable {\n country_name: string;\n country_flag: string;\n}\n\nexport type IAddressDetail = IAddressList;\n\nexport class Address {\n static typename = \"address\";\n static plural = \"addresses\";\n}","export interface IItemQuery\n{\n queries: Map<string, string>;\n page: number;\n page_size: number;\n sort_field: string;\n sort_order: string;\n filter_field: string;\n filter: string;\n}\n\nexport class ItemQuery\n{\n queries = new Map<string, string>();\n page = 0;\n page_size = 0;\n sort_field = \"\";\n sort_order = \"\";\n filter_field = \"\";\n filter = \"\";\n\n constructor(params: Partial<IItemQuery> = {})\n {\n Object.assign(this, params);\n }\n}\n\nexport enum ErrorCode {\n UnknownError = 1\n}\n\nexport class ApiError {\n code: ErrorCode = 1;\n text = \"\";\n}\n\nexport interface OptionActionChoice {\n value: string;\n display_name: string;\n}\n\nexport interface OptionAction {\n label: string;\n type: string;\n required: boolean;\n read_only: boolean;\n max_length?: number;\n choices?: OptionActionChoice[];\n}\n\nexport interface IRestOptions {\n name: string;\n description: string;\n renders: string[];\n parses: string[];\n actions?: Record<string, Record<string, OptionAction>>;\n}\n\n","import { IFileRecord } from \"./file-record\";\n\nexport interface TypeChoice\n{\n value: string;\n display_name: string;\n}\n\nexport enum FieldType \n{\n Boolean,\n Char,\n Text,\n RichText,\n Selection,\n Integer,\n File,\n Undefined\n}\n\nexport const FORM_FIELD_CHOICES: TypeChoice[] = [{value: \"BOOLEAN\", display_name: \"Boolean\"},\n {value: \"CHAR\", display_name: \"Short Text\"},\n {value: \"TEXT\", display_name: \"Long Text\"},\n {value: \"RICH_TEXT\", display_name: \"Rich Text\"},\n {value: \"SELECTION\", display_name: \"Selection\"},\n {value: \"INTEGER\", display_name: \"Integer\"},\n {value: \"FILE\", display_name: \"File\"}\n ];\n\nexport function getFieldTypeFromKey(key: string): FieldType\n{\n switch(key)\n {\n case \"CHAR\":\n return FieldType.Char;\n case \"TEXT\":\n return FieldType.Text;\n case \"RICH_TEXT\":\n return FieldType.RichText; \n case \"SELECTION\":\n return FieldType.Selection; \n case \"INTEGER\":\n return FieldType.Integer;\n case \"FILE\":\n return FieldType.File; \n }\n return FieldType.Char;\n}\n\nexport interface IFormFieldBase{\n label: string;\n key: string;\n required: boolean;\n order: number;\n field_type: string;\n description: string;\n default: string;\n options: {key: string, value: string}[] | null;\n}\n\nexport type IFormFieldCreate = IFormFieldBase;\n\nexport interface IFormFieldDetail extends IFormFieldBase{\n id: number;\n template: string | null;\n}\n\nexport interface IFormGroupBase{\n label: string | null;\n description: string | null;\n order: number;\n}\n\nexport interface IFormGroupCreate extends IFormGroupBase{\n fields: IFormFieldCreate[];\n}\n\nexport interface IFormGroupDetail extends IFormGroupBase{\n id: number;\n fields: IFormFieldDetail[];\n}\n\nexport interface IFormGroupUpdate extends IFormGroupBase{\n id: number;\n fields: IFormFieldBase[];\n}\n\nexport interface IFormCreate {\n groups: IFormGroupCreate[];\n}\n\nexport interface IFormDetail {\n id: number;\n groups: IFormGroupDetail[];\n}\n\nexport interface IFormUpdate {\n id: number;\n groups: IFormGroupBase[];\n}\n\nexport interface IFileField {\n id: number;\n file: IFileRecord;\n}\n\nexport function getFileFieldIds(form: IFormDetail): number[]\n{\n const ids: number[] = [];\n form.groups.map(g => g.fields.map(f => {if (f.field_type == \"FILE\"){\n ids.push(f.id)\n }}));\n return ids;\n}\n\nexport interface IFormFieldValueBase {\n value: string;\n asset: string | null;\n}\n\nexport interface IFormFieldValueCreate extends IFormFieldValueBase\n{\n field: number\n}\n\nexport interface IFormFieldValueUpdate extends IFormFieldValueBase\n{\n id: number;\n field: number\n}\n\nexport interface IFormFieldValueDetail extends IFormFieldValueBase\n{\n id: number;\n field: IFormFieldDetail\n}\n\nexport interface IPopulatedFormCreate \n{\n values: IFormFieldValueCreate[];\n}\n\nexport interface IPopulatedFormDetail\n{\n id: number;\n values: IFormFieldValueDetail[];\n}\n\nexport interface IPopulatedFormUpdate\n{\n id: number;\n values: IFormFieldValueUpdate[];\n}\n\n\n\n\n\n","export interface IFileRecord\n{\n name: string;\n display_name: string;\n file_type: string;\n file: File | null;\n remote: string;\n local: string | ArrayBuffer;\n}\n\nexport class FileRecord\n{\n name = \"\";\n display_name = \"\";\n file_type = \"standard\";\n file: File | null = null;\n remote = \"\";\n local: string | ArrayBuffer = \"\";\n\n constructor(params: Partial<IFileRecord> = {})\n {\n Object.assign(this, params);\n } \n}\n","import { Observable, catchError, map, mergeMap, throwError, BehaviorSubject } from 'rxjs';\nimport { HttpClient, HttpErrorResponse, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { InjectionToken, inject } from '@angular/core';\n\nimport { CookieService } from 'ngx-cookie-service';\n\nimport { Identifiable, IPaginated } from '../models/core';\nimport { IPortalMemberDetail } from '../models/member';\nimport { IRestOptions, IItemQuery, ItemQuery } from '../models/http';\n\nexport interface RestServiceConfig {\n endpoint_url: string,\n self_url: string,\n auth_type: string\n}\n\ninterface IRequestBase {\n headers: HttpHeaders;\n credentials: RequestCredentials;\n params: HttpParams;\n}\n\nexport interface IServerManifest{\n login_url: string;\n logout_url: string;\n supports_cors: boolean;\n}\n\nexport const REST_SERVICE_CONFIG = new InjectionToken<RestServiceConfig>(\"Config for the rest service\");\n\nexport class RestService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> {\n\n manifest = new BehaviorSubject<IServerManifest | null>(null);\n readonly _url: string = \"\";\n config = inject(REST_SERVICE_CONFIG);\n protected _http = inject(HttpClient);\n protected cookieService = inject(CookieService);\n\n deleteItem(id: number): Observable<void> {\n return this._http.delete(this.baseUrl + id + \"/\", this.getRequestBase()).pipe(\n map(_ => { return void (0); }),\n catchError(this.handleError));\n }\n\n getForUser(user: IPortalMemberDetail, query: IItemQuery = new ItemQuery()): Observable<IPaginated<L>> {\n query.queries.set('user', user.id.toString());\n return this.get(query);\n }\n\n protected _getServiceManifest(): Observable<IServerManifest>\n {\n console.log(\"Fetching service manifest\")\n return this._http.get<IServerManifest>(this.config.endpoint_url + \"/manifest\")\n }\n\n get(query: IItemQuery = new ItemQuery()): Observable<IPaginated<L>> {\n if(!this.manifest.value)\n {\n this._getServiceManifest().subscribe(m => {this.manifest.next(m); this.get(query);});\n }\n\n const params = query.queries;\n if (query.page > 0) {\n params.set('page', query.page.toString());\n }\n if (query.page_size > 0) {\n params.set('page_size', query.page_size.toString());\n }\n if (query.sort_field) {\n let sort_field = query.sort_field;\n if (query.sort_order === \"desc\") {\n sort_field = \"-\" + sort_field;\n }\n params.set('ordering', sort_field);\n }\n if (query.filter_field) {\n params.set('search_field', query.filter_field);\n }\n if (query.filter) {\n params.set('search', query.filter);\n }\n return this._http.get<IPaginated<L>>(this.baseUrl, this.getRequestBase(\"json\",\n new HttpParams({ fromObject: Object.fromEntries(params) }))).pipe(\n catchError(this.handleError));\n }\n\n getItem(id: number): Observable<D> {\n return this._http.get<D>(this.baseUrl + id + \"/\", this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getUrl(url: string): Observable<D> {\n return this._http.get<D>(url, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getPaginatedUrl(url: string): Observable<IPaginated<L>> {\n return this._http.get<IPaginated<L>>(url, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n getOptions(): Observable<IRestOptions> {\n return this._http.options<IRestOptions>(this.baseUrl, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n putItem(item: U, content_type = \"json\"): Observable<D> {\n return this._http.put<D>(this.baseUrl + item.id + \"/\", item, this.getRequestBase(content_type)).pipe(\n catchError(this.handleError));\n }\n\n patchItemMedia(id: number, form: FormData): Observable<D> {\n return this._http.patch(this.mediaUrl + id + \"/\", form, this.getRequestBase(\"\")).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n postFile(id: number, field: string, file: File): Observable<D> {\n const form = new FormData();\n form.append(\"file\", file);\n return this._http.post(this.baseUrl + id + \"/\" + field + \"/upload\",\n form, this.getRequestBase(\"\")).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n putFile(id: number, field: string, file: File): Observable<D> {\n return this._http.put(this.baseUrl + id + \"/\" + field + \"/upload\",\n file, this.getRequestBase(\"\", new HttpParams(), file.name)).pipe(\n mergeMap(_ => this.getItem(id)),\n catchError(this.handleError));\n }\n\n putFileStandalone(url: string, file: File): Observable<void> {\n return this._http.put(this.config.endpoint_url + \"/api/\" + url + \"/upload\",\n file, this.getRequestBase(\"\", new HttpParams(), file.name)).pipe(\n map(_response => { return void (0); }),\n catchError(this.handleError));\n }\n\n patchItem(item: U, include_keys: string[], exclude_keys: string[]): Observable<D> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function replacer(key: string, value: any) {\n if (exclude_keys.includes(key)) {\n return undefined;\n }\n else {\n return value;\n }\n }\n return this._http.patch(this.baseUrl + item.id + \"/\",\n JSON.stringify(item, replacer), this.getRequestBase()).pipe(\n map(response => response as D),\n catchError(this.handleError));\n }\n\n postItem(item: C): Observable<D> {\n return this._http.post<D>(this.baseUrl, item, this.getRequestBase()).pipe(\n catchError(this.handleError));\n }\n\n private getHeaders(content_type = \"json\", file = \"\"): HttpHeaders {\n let headers = new HttpHeaders({'Accept': 'application/json'});\n if (this.config.auth_type === \"token\") {\n headers = headers.set('Authorization', \"Token \" + localStorage.getItem(\"api_token\"));\n }\n else \n {\n headers = headers.set('X-CSRFToken', this.cookieService.get(\"csrftoken\"));\n }\n if (file)\n {\n headers = headers.set('Content-Disposition', 'attachment; filename=' + file);\n }\n else if (content_type === \"json\")\n {\n headers = headers.set('Content-Type', 'application/json');\n }\n else if(content_type)\n {\n headers = headers.set('Content-Type', content_type);\n }\n return headers;\n }\n\n protected get baseUrl(): string {\n return this.config.endpoint_url + \"/api/\" + this._url + \"/\";\n }\n\n private get mediaUrl(): string {\n return this.config.endpoint_url + \"/api/\" + this._url.slice(0, -1) + \"_media/\";\n }\n\n protected getRequestBase(content_type = \"json\", params: HttpParams = new HttpParams(), file = \"\"): IRequestBase \n {\n let supports_cors = \"same-origin\";\n if (this.manifest.value && this.manifest.value.supports_cors)\n {\n supports_cors = 'include';\n }\n return { headers: this.getHeaders(content_type, file),\n credentials: supports_cors ? 'include' : 'same-origin',\n params: params}\n }\n\n handleError(error: HttpErrorResponse) {\n if (error.status === 0) {\n // A client-side or network error occurred. Handle it accordingly.\n console.error('Client side or network error:', error.error);\n } else {\n console.error(\n `Backend returned code ${error.status}, body was: `, error.error);\n }\n // Return an observable with a user-facing error message.\n return throwError(() => error);\n }\n}\n","import { Identifiable} from '../models/core';\nimport { RestService } from './rest.service';\n\nexport class ItemService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> extends RestService<D, L, C, U>{\n\n typenamePlural = \"\";\n typename = \"\";\n\n canEdit(): boolean\n {\n return false;\n }\n\n canCreate(): boolean\n {\n return false;\n }\n\n canDelete(): boolean\n {\n return false;\n }\n\n canView(): boolean\n {\n return false;\n }\n\n typePlural(): string \n {\n return this.typenamePlural? this.typenamePlural : this.typename + \"s\";\n }\n}\n","import { Observable, BehaviorSubject, tap, map, catchError, throwError, of, mergeMap } from 'rxjs';\n\nimport { Injectable, inject, DOCUMENT } from '@angular/core';\nimport { HttpErrorResponse, HttpHeaders } from '@angular/common/http';\n\nimport { ItemService } from './item.service';\nimport { PortalMember, IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../models/member';\n\ninterface IPermission{\n feature: string;\n capability: string;\n}\n\nexport class ResolvedPermission{\n canEdit = false;\n canAdd = false;\n canView = false;\n canDelete = false;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService extends ItemService<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> {\n\n /**\n Service to handle IPortalMember via REST and also handle logins.\n */\n loggedInUser = new BehaviorSubject<IPortalMemberDetail | null>(null);\n\n private document = inject(DOCUMENT);\n override readonly _url = PortalMember.plural;\n override typename = PortalMember.typename;\n private permissions: Map<string, ResolvedPermission> = new Map<string, ResolvedPermission>();\n \n login(next = \"/\")\n {\n console.log(\"Starting login flow\");\n if(this.manifest.value)\n {\n this._do_login(next);\n }\n else \n {\n this._getServiceManifest().subscribe(m => {this.manifest.next(m); this._do_login(next);});\n }\n }\n\n logout(next = \"\") {\n if (this.loggedInUser.value === null) {\n return;\n }\n\n console.log(\"Session Log Out\");\n let prefix = \"\";\n if (this.config.endpoint_url)\n {\n prefix = this.config.endpoint_url + \"/\";\n } \n let suffix = \"\";\n if (next)\n {\n suffix = \"?next=\" + next\n }\n console.log(\"posting logout to: \", prefix + this.manifest.value!.logout_url + \"/\" + suffix)\n this._http.post(prefix + this.manifest.value!.logout_url + \"/\" + suffix, \"\", {\n headers: new HttpHeaders({\n 'X-CSRFToken': this.cookieService.get(\"csrftoken\")\n }), \n responseType: 'text',\n credentials: this.manifest.value!.supports_cors ? 'include' : 'same-origin'}).pipe(\n // The backend can return an error as it tries to redirect to a non-existing url.\n catchError(_ => this.document.location.href = prefix + \"/\" + suffix)).subscribe(_ => {console.log(\"Logged Out\"); \n // Force a page reload\n this.document.location.href = prefix + \"/\" + suffix;\n //this.login(next)\n });\n }\n\n getSelf(): Observable<IPortalMemberDetail | null> \n {\n console.log(\"Attempting to fetch self profile\");\n return this._getServiceManifest().pipe(\n mergeMap(m => {this.manifest.next(m); return this._getSelf()}));\n }\n\n private _getSelf(): Observable<IPortalMemberDetail | null> \n {\n return this.getUrl(this.config.endpoint_url + \"/api/self/\").pipe(\n tap(user => this.onSelf(user)),\n map(user => { return user }),\n catchError(e => this._selfFetchFailed(e)));\n }\n\n private _selfFetchFailed(error: HttpErrorResponse): Observable<null> \n {\n if (error.status == 401)\n {\n console.log(\"No valid user session found:\", error);\n return of(null);\n }\n else \n {\n console.log(\"Unexpected error fetching user session: \", error);\n return throwError(() => error)\n }\n }\n\n private _do_login(next: string)\n {\n let prefix = \"\";\n if (this.config.endpoint_url)\n {\n prefix = this.config.endpoint_url + \"/\";\n }\n this.document.location.href = prefix + this.manifest.value!.login_url + \"/?next=\" + next;\n }\n\n hasAddPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canAdd;\n }\n\n hasDeletePermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canDelete;\n } \n\n hasEditPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canEdit;\n } \n\n hasViewPermission(feature: string): boolean\n {\n const perm = this.permissions.get(feature);\n if (!perm)\n {\n return false;\n }\n return perm.canView;\n } \n\n private onSelf(user: IPortalMemberDetail) {\n console.log(\"Fetched self user: \" + user.username);\n this.loggedInUser.next(user);\n this.processPermissions();\n }\n\n private parsePermission(p: string) : IPermission\n {\n const split_module = p.split(\".\");\n const split_cap = split_module[split_module.length -1].split(\"_\");\n return {feature: split_cap[1], capability: split_cap[0]};\n }\n\n private processPermissions()\n {\n const user = this.loggedInUser.value;\n if (!user)\n {\n return;\n }\n\n user.permissions.forEach(p => this.permissions.set(\n this.parsePermission(p).feature, new ResolvedPermission()));\n\n user.permissions.forEach(p => {\n const permission = this.parsePermission(p);\n if (permission.capability === \"view\")\n {\n this.permissions.get(permission.feature)!.canView = true;\n }\n else if (permission.capability === \"delete\")\n {\n this.permissions.get(permission.feature)!.canDelete = true;\n }\n else if (permission.capability === \"change\")\n {\n this.permissions.get(permission.feature)!.canEdit = true;\n }\n else if (permission.capability === \"add\")\n {\n this.permissions.get(permission.feature)!.canAdd = true;\n }\n });\n }\n}\n","import { BehaviorSubject, Observable, of } from 'rxjs';\n\nimport { Injectable, inject } from '@angular/core';\n\nimport { Identifiable, IPaginated, Paginated } from '../models/core';\nimport { IPortalMemberDetail } from '../models/member';\nimport { ItemService } from './item.service'\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ItemWithUserService<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> extends ItemService<D, L, C, U> {\n\n protected userService = inject(UserService);\n userItems: BehaviorSubject<L[]> = new BehaviorSubject<L[]>([]);\n\n constructor()\n {\n super();\n this.userService.loggedInUser.subscribe(_ => this.manifest = this.userService.manifest);\n }\n\n override canCreate(): boolean {\n return this.userService.hasAddPermission(this.permissionName());\n }\n\n override canView(): boolean {\n return this.userService.hasViewPermission(this.permissionName());\n }\n\n override canEdit(): boolean {\n return this.userService.hasEditPermission(this.permissionName());\n }\n\n override canDelete(): boolean {\n return this.userService.hasDeletePermission(this.permissionName());\n }\n\n private permissionName(): string \n {\n return this.typename.replace(\"_\", \"\");\n }\n\n getUserItems(): Observable<IPaginated<L> >\n {\n if (this.userService.loggedInUser.value)\n {\n return this.getForUser(this.userService.loggedInUser.value);\n }\n return of(new Paginated<L>());\n }\n\n protected refreshUserItems(user: IPortalMemberDetail | null)\n {\n if (user)\n {\n this.getUserItems().subscribe(items => this.userItems.next(items.results)); \n }\n else\n {\n this.userItems.next([]);\n }\n } \n}","/* eslint-disable @typescript-eslint/no-explicit-any */ \n\nimport {Injectable} from '@angular/core';\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\n\nimport { IFormDetail, IFormFieldValueCreate, IFormFieldValueDetail, IFormFieldValueUpdate, IPopulatedFormCreate, IPopulatedFormDetail, IPopulatedFormUpdate } from '../models/form';\nimport { IFileRecord } from '../../public-api';\n\n\nexport interface IFieldFile\n{\n id: number;\n asset: IFileRecord;\n}\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class FormService {\n\n static getBaseTemplate(): IFileRecord\n {\n return {name: \"template\", display_name: \"template\", file_type: \"\", remote: \"\", local: \"\", file: null};\n } \n\n toFormGroup(form: IFormDetail) {\n const controls: any = {};\n \n for (const group of form.groups)\n {\n for (const field of group.fields)\n {\n if (field.field_type == \"CHAR\" || field.field_type == \"TEXT\" || field.field_type == \"RICH_TEXT\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<string>(field.default || '', Validators.required)\n : new FormControl<string>(field.default || '');\n }\n else if(field.field_type == \"BOOLEAN\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<boolean>(field.default == \"true\", Validators.required)\n : new FormControl<boolean>(field.default == \"true\");\n }\n else if(field.field_type == \"FILE\")\n {\n controls[field.id.toString()] = field.required ? new FormControl<IFileRecord>(FormService.getBaseTemplate(), Validators.required)\n : new FormControl<IFileRecord>(FormService.getBaseTemplate());\n }\n else \n {\n controls[field.id.toString()] = field.required ? new FormControl(field.default || '', Validators.required)\n : new FormControl(field.default || ''); \n } \n }\n }\n return new FormGroup(controls);\n }\n\n createFieldValue(key: string, control: FormControl, input: IFormDetail) : IFormFieldValueCreate\n {\n const field_type = this.getType(key, input);\n if (field_type == \"FILE\")\n {\n return {field: parseInt(key),\n asset: null,\n value: \"\"\n }\n }\n else if (field_type == \"BOOLEAN\")\n {\n return {field: parseInt(key),\n asset: null,\n value: control.value ? \"true\" : \"false\"\n }\n }\n else \n {\n return {field: parseInt(key),\n asset: null,\n value: control.value\n }\n }\n }\n\n createItem(form: FormGroup, input: IFormDetail) : IPopulatedFormCreate\n {\n const values = Object.keys(form.controls).map(key => this.createFieldValue(key, form.controls[key] as FormControl, input));\n return {values : Array.from(values)};\n }\n\n getValueId(field_id: number, populated: IPopulatedFormDetail): number\n {\n for(const value of populated.values)\n {\n if (value.field.id == field_id)\n {\n return value.id;\n }\n }\n return -1;\n }\n\n getFiles(form: FormGroup, input: IFormDetail, populated: IPopulatedFormDetail): IFieldFile[]\n {\n const files: IFieldFile[] = [];\n for(const key of Object.keys(form.controls))\n {\n if (this.getType(key, input) == \"FILE\")\n {\n files.push({id: this.getValueId(parseInt(key), populated), asset: form.get(key)?.value});\n }\n }\n return files;\n }\n\n updateFieldValue(control: FormControl, item: IFormFieldValueDetail) : IFormFieldValueUpdate\n {\n return {value: control.value.value,\n field: item.field.id,\n id: item.id,\n asset: item.asset\n }\n }\n\n getType(key: string, input: IFormDetail): string\n {\n const field_id = parseInt(key);\n for (const group of input.groups)\n {\n for (const field of group.fields)\n {\n if (field.id == field_id)\n {\n return field.field_type;\n }\n }\n }\n return \"\"; \n }\n\n getValue(key: string, item: IPopulatedFormDetail) : IFormFieldValueDetail | null\n {\n const field = parseInt(key);\n for(const value of item.values)\n {\n if (value.field.id == field)\n {\n return value;\n }\n }\n return null;\n }\n\n updateItem(form: FormGroup, item: IPopulatedFormDetail): IPopulatedFormUpdate\n {\n const updated: IPopulatedFormUpdate = {id: item.id, values: []};\n Object.keys(form.controls).forEach(key => {\n const value = this.getValue(key, item);\n if (value)\n {\n const updated_value = this.updateFieldValue(form.controls[key] as FormControl, value);\n updated.values.push(updated_value);\n }\n });\n return updated;\n }\n \n}\n","import { Injectable } from '@angular/core';\n\nimport { ItemWithUserService } from './item-with-user.service';\nimport { Group, IGroupCreate, IGroupDetail, IGroupList } from '../models/group';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupService extends ItemWithUserService<IGroupDetail, IGroupList, IGroupCreate> {\n\n override readonly _url = Group.plural;\n override typename = Group.typename;\n \n constructor() {\n super();\n this.userService.loggedInUser.subscribe(user => this.refreshUserItems(user));\n } \n}\n","import { Injectable, inject, signal } from '@angular/core';\n\nimport { GroupService } from './group.service'\nimport { IGroupList } from '../models/group';\n\n\nexport interface NavOption {\n name: string;\n route: string;\n icon: string;\n}\n\nexport interface NavGrouping {\n name: string;\n options: NavOption[];\n}\n\nexport interface NavGroup\n{\n name: string;\n groupings: NavGrouping[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\n\nexport class LeftNavService {\n\n activeGroupings = signal<Set<NavGrouping>>(new Set<NavGrouping>());\n wide = signal(true);\n\n private _defaultGroupings: NavGrouping[] = [];\n \n private _groups: NavGroup[] = [];\n private _groupService = inject(GroupService);\n\n constructor() {\n this._groupService.userItems.subscribe(groups => this.onGroupsUpdated(groups));\n }\n\n onGroupsUpdated(groups: IGroupList[]) {\n const groupings = new Set<NavGrouping>();\n this._defaultGroupings.forEach(e => groupings.add(e));\n\n groups.forEach(g => this._groups.forEach(n => {if (n.name == g.name){\n n.groupings.forEach(g => groupings.add(g));};}));\n\n this.activeGroupings.set(groupings);\n }\n\n setDefaultGroupings(groupings: NavGrouping[])\n {\n this._defaultGroupings = groupings;\n }\n\n setGroups(groups: NavGroup[])\n {\n this._groups = groups;\n }\n\n toggle()\n {\n if(this.wide())\n {\n this.wide.set(false);\n }\n else \n {\n this.wide.set(true);\n }\n }\n}\n","import { Injectable, signal } from '@angular/core';\n\nimport { IRestOptions, OptionAction, OptionActionChoice, \n IAddressDetail, IAddressCreate, IAddressList, Address, ICountry } from '../../models';\nimport { ItemWithUserService } from '../item-with-user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddressService extends ItemWithUserService<IAddressDetail, IAddressList, IAddressCreate> {\n\n override readonly _url = Address.plural;\n override typename = Address.typename;\n\n countryOptions = signal<ICountry[]>([]);\n\n refreshCountryOptions() {\n this.getOptions().subscribe(options => this.onOptions(options));\n }\n\n protected onOptions(options: IRestOptions) {\n if (!options.actions) {\n return;\n }\n if ('POST' in options.actions) {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(actions: Record<string, OptionAction>) {\n if ('country' in actions && actions['country'].choices) {\n this.onCountryChoices(actions['country'].choices);\n }\n }\n\n protected onCountryChoices(choices: OptionActionChoice[]) {\n this.countryOptions.update(() => choices.map(c => {return {name: c.display_name, code: c.value, flag: \"\"};}));\n }\n\n}\n","import { Injectable } from '@angular/core';\n\nimport { Organization, IOrganizationCreate, IOrganizationDetail, IOrganizationList } from '../../models'\nimport { ItemWithUserService } from '../item-with-user.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrganizationService extends ItemWithUserService<IOrganizationDetail, IOrganizationList, IOrganizationCreate> {\n override readonly _url = Organization.plural;\n override typename = Organization.typename; \n}\n","export class MockItemService {\n \n canEdit()\n {\n return false;\n }\n\n canDelete()\n {\n return false;\n }\n\n canCreate()\n {\n return false;\n } \n\n typePlural(): string \n {\n return \"mock_plurals\";\n }\n}","import { Component, inject } from '@angular/core';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\n\nexport interface DialogData\n{\n message: string;\n title: string;\n}\n\n@Component({\n selector: 'lib-delete-dialog',\n imports: [MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './delete-dialog.component.html',\n styleUrl: './delete-dialog.component.scss'\n})\nexport class DeleteDialogComponent {\n readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}\n","<h2 mat-dialog-title>{{data.title}}</h2>\n<mat-dialog-content>\n <p>{{data.message}}</p>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button matButton (click)=\"onNoClick()\">No Thanks</button>\n <button matButton [mat-dialog-close]=\"true\" cdkFocusInitial>Delete</button>\n</mat-dialog-actions>","import { signal, inject } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router'\n\nimport { MatDialog } from '@angular/material/dialog';\n\nimport { Identifiable } from '../../models/core';\nimport { IPortalMemberDetail } from '../../models/member';\nimport { ItemService } from '../../services/item.service';\nimport { UserService } from '../../services/user.service';\n\nimport { DeleteDialogComponent } from './delete-dialog/delete-dialog.component';\n\nexport abstract class DetailView<D extends Identifiable, L extends Identifiable, C = D, U extends Identifiable = D> {\n\n protected item = signal<D | null>(null);\n protected route: ActivatedRoute = inject(ActivatedRoute);\n protected userService: UserService = inject(UserService);\n protected itemService: ItemService<D, L, C, U>;\n protected location = inject(Location);\n\n readonly deleteDialog = inject(MatDialog);\n\n constructor(itemService: ItemService<D, L, C, U>) {\n this.itemService = itemService;\n }\n \n onInit(): void {\n const id = Number(this.route.snapshot.paramMap.get('id'));\n if (id)\n {\n this._getItem(id);\n }\n }\n\n onSelection(id: number | null)\n {\n if (id)\n {\n this._getItem(id);\n }\n else \n {\n this.item.set(null);\n }\n }\n\n title(): string\n {\n if (this.itemService.typename)\n {\n return this.itemService.typename.replace(\"_\", \" \");\n }\n return \"\";\n }\n\n onItemAvailable(item: D) {\n this.item.set(item);\n this.userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(item, user); } });\n }\n\n onItemAndUserAvailable(_item: D, _user: IPortalMemberDetail) {}\n\n onDeleteClicked(): void {\n const dialogRef = this.deleteDialog.open(DeleteDialogComponent, {\n data: {\n title: \"Delete \" + this.title() + \"?\", \n message: \"Are you sure you want to delete this \" + this.title() + \"?. This cannot be undone.\"},});\n\n dialogRef.afterClosed().subscribe(result => {\n if (result !== undefined) {\n this.onDelete();\n }\n });\n }\n\n onDelete(): void\n {\n const item = this.item();\n if (item)\n {\n this.itemService.deleteItem(item.id).subscribe(_ => this.goBack());\n }\n }\n\n goBack()\n {\n this.location.back();\n }\n\n protected canEdit(): boolean\n {\n return this.itemService.canEdit();\n }\n\n protected canDelete(): boolean\n {\n return this.itemService.canDelete();\n }\n\n private _getItem(id: number): void {\n this.itemService.getItem(id).subscribe(item => {\n this.onItemAvailable(item);\n });\n }\n}\n","import { signal, inject, computed } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Location } from '@angular/common';\n\nimport { Identifiable, IForm } from '../../models/core';\nimport { IPortalMemberDetail } from '../../models/member';\nimport { IRestOptions, OptionAction } from '../../models/http'; \nimport { ItemService } from '../../services/item.service';\nimport { UserService } from '../../services/user.service';\n\nimport { IFileRecord } from '../../models/file-record';\n\nexport abstract class EditView<D extends Identifiable, L extends Identifiable, C = D, U extends Identifiable = D> {\n\n createMode = signal(false);\n heading = computed(() => { const prefix = this.createMode() ? \"New \" : \"Edit \"; return prefix + this.getTitle(); });\n \n protected item = signal<D | null>(null);\n protected fileKeys: string[] = [];\n protected _route = inject(ActivatedRoute);\n protected _location = inject(Location);\n protected _userService = inject(UserService);\n protected form: IForm<C, D, U>;\n protected itemService: ItemService<D, L, C, U>;\n\n private uploadedFiles: string[] = [];\n\n constructor(itemService: ItemService<D, L, C, U>, form: IForm<C, D, U>) {\n this.itemService = itemService;\n this.form = form;\n }\n\n onInit(): void {\n this.getItem();\n }\n\n onItemAvailable(item: D) {\n this.form.setValue(item);\n this._userService.loggedInUser.subscribe(user => { if (user) { this.onItemAndUserAvailable(item, user); } });\n }\n\n onItemAndUserAvailable(_item: D, _user: IPortalMemberDetail) {\n }\n\n goBack(): void {\n this._location.back();\n }\n\n submit() {\n this.save();\n } \n\n save() {\n if (this.createMode()) {\n this.postItem();\n }\n else {\n const item = this.item();\n {\n if(item)\n {\n this.putItem(item);\n }\n }\n }\n }\n\n cancel() {\n this.goBack();\n }\n\n getTitle(): string \n {\n if (this.itemService && this.itemService.typename)\n {\n return this.itemService.typename.replace(\"_\", \" \");\n }\n return \"\";\n }\n\n protected fetchRestOptions()\n {\n this.itemService.getOptions().subscribe(options => this.onOptions(options)); \n } \n\n protected onUploadedFileReady(_file: File)\n {\n }\n\n protected onFileRead(_content: string | ArrayBuffer)\n {\n }\n\n protected createItem(): C\n {\n return this.form.createItem();\n }\n\n protected updateItem(item: D): U\n {\n return this.form.updateItem(item);\n }\n\n protected postItem() {\n this.itemService.postItem(this.createItem()).subscribe(item => this.saveFiles(item));\n }\n\n protected putItem(item: D)\n {\n this.itemService.putItem(this.updateItem(item)).subscribe(item => this.saveFiles(item));\n }\n\n protected saveFiles(item: D)\n {\n const next_file = this.getNextFileForUpload();\n if (next_file)\n {\n this.saveFile(item, next_file);\n }\n else \n {\n this.onItemUpdated(item);\n }\n }\n\n saveFile(item: D, record: IFileRecord)\n {\n this.uploadedFiles.push(record.name);\n if (record.file)\n {\n this.itemService.putFile(item.id, record.name, record.file).subscribe(item => this.saveFiles(item));\n }\n else{\n this.saveFiles(item);\n }\n }\n\n getNextFileForUpload(): IFileRecord | null\n {\n for(const key of this.fileKeys)\n {\n if (!this.uploadedFiles.includes(key))\n {\n return this.form.form.get(key)?.value;\n }\n }\n return null;\n } \n\n private isCreateRoute(): boolean {\n const urls = this._route.snapshot.url;\n if (!urls)\n {\n return false;\n }\n if (urls.length >= 2) {\n if (urls[1].path == \"create\") {\n return true;\n }\n }\n return false;\n }\n\n private getItem(): void {\n if (this.isCreateRoute()) {\n this.createMode.set(true);\n }\n else {\n const id_str = this._route.snapshot.paramMap.get('id');\n this.itemService.getItem(Number(id_str))\n .subscribe(item => {\n this.item.set(item);\n this.onItemAvailable(item)\n });\n }\n }\n\n protected onItemUpdated(item: D) {\n this.uploadedFiles = [];\n this.item.set(item);\n this.goBack();\n }\n\n protected onOptions(options: IRestOptions)\n {\n if (!options.actions)\n {\n return;\n }\n\n if ('POST' in options.actions)\n {\n this.onPostActions(options.actions['POST']);\n }\n }\n\n protected onPostActions(_actions: Record<string, OptionAction>)\n {\n\n }\n}\n","import { Component, viewChild, input, output, computed, OnInit, TemplateRef } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { MatTable, MatTableModule } from '@angular/material/table';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { Identifiable } from '../../../models/core';\nimport { TableColumn } from '../table';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatInputModule } from '@angular/material/input';\n\nexport interface Selectable<T extends Identifiable>\n{\n title: string;\n item: T;\n}\n\n@Component({\n selector: 'lib-select-table',\n imports: [MatTableModule,\n MatFormFieldModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n MatAutocompleteModule,\n ReactiveFormsModule,\n MatInputModule,\n NgTemplateOutlet],\n templateUrl: './select-table.component.html',\n styleUrl: './select-table.component.css'\n})\nexport class SelectTableComponent<T extends Identifiable> implements OnInit{\n\n itemType = input(\"\");\n selected = input<T[]>([]);\n options = input<Selectable<T>[]>([]);\n\n columns = input<TableColumn[]>([]);\n\n itemAdded = output<string>();\n itemRemoved = output<number>();\n searchChanged = output<string | null>();\n itemTemplate = input<TemplateRef<unknown> | null | undefined>(null);\n\n columnNames = computed(() => {const names = this.columns().map(c => c.name); names.push(\"remove\"); return names;});\n searchControl = new FormControl('');\n\n table = viewChild(MatTable);\n\n ngOnInit(): void {\n this.searchControl.valueChanges.subscribe(value => this.searchChanged.emit(value));\n }\n\n remove(id: number) {\n this.itemRemoved.emit(id);\n this.table()?.renderRows();\n }\n\n add() {\n if (this.searchControl.value)\n {\n this.itemAdded.emit(this.searchControl.value);\n }\n this.searchControl.reset();\n this.table()?.renderRows();\n }\n\n\n}\n","<div class='select-container' style=\"width:100%\">\n <div style=\"width:100%; display:flex; flex-direction: row;\">\n <mat-form-field style=\"width:100%\">\n <mat-label>Add {{itemType()}}</mat-label>\n <input \n type=\"text\"\n aria-label=\"Selected item\"\n matInput\n [formControl]=\"searchControl\" \n placeholder=\"Search\"\n [matAutocomplete]=\"auto\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" style=\"width:100%\">\n @for(item of options(); track item.item.id){\n <mat-option [value]=\"item.title\" style=\"width:100%\">\n <ng-container\n *ngTemplateOutlet=\"itemTemplate(); context: { item: item.item }\">\n </ng-container>\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n\n <button mat-mini-fab type=\"button\" \n class=\"form_action_button\" \n (click)=\"add()\">\n <mat-icon>add</mat-icon>\n </button>\n </div>\n\n @if(selected().length > 0){\n <table mat-table [dataSource]=\"selected()\" class=\"mat-elevation-z8\">\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element[column.name] }}</td>\n </ng-container>\n }\n\n <ng-container matColumnDef=\"remove\">\n <th mat-header-cell *matHeaderCellDef>Remove\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <button mat-icon-button\n color=\"primary\"\n aria-label=\"Remove an item\"\n (click)=\"remove(element.id)\">\n <mat-icon>remove\n </mat-icon>\n </button>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\">\n </tr>\n <tr mat-row *matRowDef=\"let row; columns: columnNames();\">\n </tr>\n </table>\n }\n</div>","import { TableColumn } from \"../../base\";\n\nexport const USER_TABLE_FULL: TableColumn[] = [\n {name: 'first_name', title: 'First Name', element_type: 'string'},\n {name: 'last_name', title: 'Surname', element_type: 'string'},\n {name: 'username', title: 'Username', element_type: 'string'},\n {name: 'email', title: 'Email', element_type: 'email'}]; ","import { inject, signal } from '@angular/core';\n\nimport { Selectable } from './select-table.component';\nimport { Identifiable, IPaginated } from '../../../models/core';\nimport { IPortalMemberDetail } from '../../../models/member';\nimport { ItemQuery } from '../../../models/http';\n\nimport { USER_TABLE_FULL } from '../../api/user/user-table';\nimport { UserService } from '../../../services/user.service';\nimport { ItemService } from '../../../services/item.service';\nimport { TableColumn } from '../table';\n\nexport abstract class SelectionManager<D extends Identifiable, L extends Identifiable = D, C = D, U extends Identifiable = D> {\n\n candidates = signal<Selectable<L>[]>([]);\n selected = signal<L[]>([]);\n columns: TableColumn[] = [];\n\n itemService: ItemService<D, L, C, U>;\n constructor(itemService: ItemService<D, L, C, U>)\n {\n this.itemService = itemService;\n }\n\n fetchCandidates(item: string, id: number)\n {\n const queries = new Map<string, string>([[item, id.toString()]]);\n const query = new ItemQuery({queries : queries});\n this.itemService.get(query).subscribe(items => this.selected.set(items.results));\n this.itemService.get().subscribe(items => this.updateCandidates(items));\n }\n\n protected updateCandidates(items: IPaginated<L>)\n {\n this.candidates.set(items.results.map(item => this.toSelectable(item)));\n }\n\n abstract toSelectable(item: L): Selectable<L>;\n\n onRemoved(id: number): string {\n const url = this.selected().find(m => m.id == id)!.url;\n this.selected.update(items => items.filter(m => m.id != id));\n return url;\n }\n\n onAdded(title: string): string {\n const selected = this.candidates().find(m => m.title == title);\n if (selected) {\n this.selected.update(members => { members.push(selected.item); return members; });\n }\n this.candidates.update(members => members.filter(m => m.title != title));\n return this.selected().find(m => this.hasTitle(m, title))!.url;\n }\n\n abstract hasTitle(item: L, title: string): boolean;\n\n onSearchChanged(searchTerm: string | null)\n {\n if (searchTerm)\n {\n this.itemService.get(new ItemQuery({filter: searchTerm})).subscribe(items => this.updateCandidates(items));\n }\n else\n {\n this.itemService.get().subscribe(items => this.updateCandidates(items));\n }\n }\n}\n\nexport class MemberSelectionManager extends SelectionManager<IPortalMemberDetail>\n{\n override columns = USER_TABLE_FULL;\n\n constructor()\n {\n super(inject(UserService));\n }\n\n override toSelectable(item: IPortalMemberDetail): Selectable<IPortalMemberDetail>\n {\n return {title: item.username, item: item};\n }\n\n override hasTitle(item: IPortalMemberDetail, title: string): boolean\n {\n return item.username == title;\n }\n}\n","import { Component, inject } from '@angular/core';\nimport { Location } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-back-button',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './back-button.component.html',\n styleUrl: './back-button.component.scss'\n})\nexport class BackButtonComponent {\n\n protected location = inject(Location);\n\n protected goBack(): void {\n this.location.back();\n }\n\n}\n","<a mat-icon-button class=\"padded-button\"\n (click)=\"goBack()\"\n (keydown)=\"goBack()\"\n tabindex=\"0\"\n role=\"button\">\n<mat-icon>arrow_back</mat-icon>\n</a>\n\n","import { Component, input, computed, output } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-detail-header',\n imports: [RouterModule,\n MatButtonModule,\n MatIconModule, MatTooltipModule],\n templateUrl: './detail-header.component.html',\n styleUrl: './detail-header.component.scss'\n})\nexport class DetailHeaderComponent {\n id = input<number>(0);\n text = input<string>(\"\");\n route = input<string>(\"\");\n canEdit = input<boolean>(false);\n canDelete = input<boolean>(false);\n deleteClicked = output<void>();\n fullRoute = computed(() => \"/\" + this.route() + \"/edit/\");\n\n deleteClick() {\n this.deleteClicked.emit();\n }\n}\n\n","<div class=\"container\">\n\n <h1 class=\"header\">{{text()}}</h1>\n\n <div class=\"controls\">\n @if(canEdit()){\n <a mat-mini-fab class=\"control-button\" matTooltip=\"Edit the item\" title=\"Click to edit this item\" aria-label=\"Click to edit this item\"\n [routerLink]=\"[fullRoute(), id()]\">\n <mat-icon>edit</mat-icon>\n </a>\n }\n\n @if(canDelete()){\n <button mat-mini-fab class=\"control-button\" (click)=\"deleteClick()\" matTooltip=\"Delete the item\" title=\"Click to delete this item\"\n aria-label=\"Click to delete this item\">\n <mat-icon>delete</mat-icon></button>\n }\n </div>\n\n</div>","import { tap, debounceTime, distinctUntilChanged } from 'rxjs';\n\nimport { AfterViewInit, Component, input, output, signal } from '@angular/core';\n\nimport { TitleCasePipe } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatSelectModule } from '@angular/material/select';\n\n@Component({\n selector: 'lib-search-bar',\n imports: [ReactiveFormsModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n MatSelectModule,\n MatIconModule,\n TitleCasePipe],\n templateUrl: './search-bar.component.html',\n styleUrl: './search-bar.component.scss'\n})\n\nexport class SearchBarComponent implements AfterViewInit {\n itemType = input(\"\");\n sortFields = input<string[]>([]);\n sortAscending = signal(true);\n searchChanged = output<string>();\n\n searchFilter = new FormControl();\n\n ngAfterViewInit() {\n this.searchFilter.valueChanges.pipe(\n debounceTime(150),\n distinctUntilChanged(),\n tap(() => {\n this.searchEntered();\n\n })\n ).subscribe();\n }\n\n clearSearch() {\n this.searchFilter.setValue(\"\");\n }\n\n searchEntered() {\n this.searchChanged.emit(this.searchFilter.value)\n }\n}\n","<div class=\"container\">\n <mat-form-field class=\"search\" style=\"margin: 10px;width:100%\">\n <mat-label>Search</mat-label>\n <input matInput [formControl]=\"searchFilter\" placeholder=\"Search {{ itemType() | titlecase }}\" />\n\n @if(searchFilter.value){\n <button matSuffix mat-icon-button aria-label=\"Cancel\" (click)=\"clearSearch()\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n @else(){\n <button matSuffix mat-icon-button aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n }\n </mat-form-field>\n\n @if(sortFields().length > 0){\n <mat-form-field style=\"margin: 10px\">\n <mat-label>Sort By</mat-label>\n <mat-select>\n @for(field of sortFields(); track field)\n {\n <mat-option>{{field}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button mat-icon-button aria-label=\"Sort Order\" matTooltip=\"Toggle sort order\">\n <mat-icon>sort</mat-icon>\n </button>\n }\n</div>","import { Component, input } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { FormControl } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { IFileRecord } from '../../../models/file-record';\n\n@Component({\n selector: 'lib-file-upload',\n imports: [MatIconModule, MatButtonModule, MatTooltipModule, TitleCasePipe],\n templateUrl: './file-upload.component.html',\n styleUrl: './file-upload.component.scss'\n})\nexport class FileUploadComponent {\n\n control = input.required<FormControl<IFileRecord> >();\n\n protected onFileUpload(event: Event) {\n if (!event.target)\n {\n return;\n }\n \n const input_element = (event.target as HTMLInputElement);\n if (input_element.files && input_element.files.length > 0) {\n this.onFileUploaded(input_element.files[0]);\n }\n }\n\n protected onFileUploaded(file: File)\n {\n const record = this.control().value;\n record.file = file;\n this.control().setValue(record);\n if (record.file_type == \"image\")\n {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => { if(reader.result){this.onPreviewLoaded(reader.result)}; }; \n }\n } \n\n protected onPreviewLoaded(preview: string | ArrayBuffer)\n {\n const record = this.control().value;\n record.local = preview;\n this.control().setValue(record);\n }\n\n protected onClearLocal()\n {\n const record = this.control().value;\n record.local = \"\";\n this.control().setValue(record);\n }\n}\n","<div class=\"container\">\n @if (control().value.local || control().value.file)\n {\n <div class=\"image_holder\">\n <p>Update {{control().value.display_name | titlecase}}</p>\n <div style=\"display:flex; flex-direction:row; justify-content: center; align-content: center;\">\n\n @if(control().value.local){\n <img alt=\"{{control().value.display_name}}\" src=\"{{control().value.local}}\" style=\"height:120px;\">\n }\n @else {\n <div>{{control().value.file?.name}}</div>\n }\n\n <button mat-mini-fab (click)=\"onClearLocal()\" matTooltip=\"Clear\" type=\"button\" style=\"margin:10px\">\n <mat-icon>clear</mat-icon>\n </button>\n </div>\n\n </div>\n }\n @else\n {\n @if (control().value.remote){\n <div class=\"image_holder\">\n <p>Update {{control().value.display_name | titlecase}}</p>\n <img alt=\"{{control().value.display_name}}\" src=\"{{control().value.remote}}\" style=\"height:120px;\">\n </div>\n }\n @else {\n <div>\n <span>Upload a {{control().value.display_name}}</span>\n </div>\n }\n <div class=\"button-row\">\n <button mat-mini-fab (click)=\"fileInput.click()\" matTooltip=\"Attach\" type=\"button\" style=\"margin:10px\">\n <mat-icon>attachment</mat-icon>\n </button>\n <input hidden type=\"file\" #fileInput (change)=\"onFileUpload($event)\" />\n </div>\n }\n</div>","import { Component, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { IFormFieldDetail } from '../../../../models/form';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FileUploadComponent } from '../../file-upload/file-upload.component';\nimport { IFileRecord } from '../../../../models/file-record';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-form-field-detail',\n imports: [ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatCheckboxModule, MatIconModule, FileUploadComponent],\n templateUrl: './form-field-detail.component.html',\n styleUrl: './form-field-detail.component.scss'\n})\nexport class FormFieldDetailComponent {\n\n readonly field = input.required<IFormFieldDetail>();\n form = input.required<FormGroup>();\n\n get isValid(): boolean {\n const control = this.form().get(this.key);\n if (control) {\n return control.valid;\n }\n return false;\n }\n\n get key(): string {\n return this.field().id.toString();\n }\n\n get control(): FormControl<IFileRecord> {\n return this.form().get(this.key) as FormControl<IFileRecord>;\n }\n}\n","<div [formGroup]=\"form()\">\n <h3>{{ field().label }}</h3>\n <p>{{field().description}}</p>\n <div>\n @switch (field().field_type) {\n @case ('TEXT') {\n <mat-form-field class=\"form-field-wide\">\n <mat-label [attr.for]=\"key\">{{ field().label }}</mat-label>\n <textarea matInput\n [placeholder]=\"field().default\"\n type=\"text\"\n style=\"min-height:150px\"\n [formControlName]=\"key\"\n [name]=\"key\"></textarea>\n </mat-form-field>\n }\n @case('BOOLEAN')\n {\n <mat-checkbox\n class=\"form-field\"\n [name]=\"key\"\n [formControlName]=\"key\">\n {{ field().label }}\n </mat-checkbox>\n }\n @case ('INTEGER') {\n <mat-form-field class=\"form-field\">\n <mat-label>{{ field().label }}</mat-label>\n <input matInput\n [placeholder]=\"field().default\"\n type=\"number\"\n max=\"10\" min=\"1\"\n [formControlName]=\"key\"\n name=\"trl_stage\">\n </mat-form-field>\n }\n @case ('CHAR') {\n <mat-form-field class=\"form-field\">\n <mat-label>{{ field().label }}</mat-label>\n <input matInput\n [placeholder]=\"field().default\"\n type=\"text\"\n [formControlName]=\"key\"\n name=\"key\">\n </mat-form-field>\n }\n @case('FILE') {\n <div class=\"form-field\">\n @if(field().template)\n {\n <a href=\"{{field().template}}\" matFab extended aria-label=\"Download template\">\n <mat-icon>download</mat-icon>\n Download Form\n </a>\n }\n <h4>Upload Completed Form</h4>\n <lib-file-upload [control]=\"control\"></lib-file-upload>\n </div>\n } \n }\n </div>\n</div>\n","import { Component, output, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router'\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { FORM_FIELD_CHOICES, getFieldTypeFromKey, FieldType } from '../../../../models/form';\nimport { FileUploadComponent } from '../../file-upload/file-upload.component';\nimport { IFileRecord } from '../../../../models/file-record';\nimport { IFormFieldForm } from './form-field-form';\n\n@Component({\n selector: 'lib-form-field-edit',\n imports: [ReactiveFormsModule,\n RouterModule,\n MatButtonModule,\n MatCardModule,\n MatTableModule,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n MatTooltipModule,\n MatCheckboxModule,\n FileUploadComponent],\n templateUrl: './form-field-edit.component.html',\n styleUrl: './form-field-edit.component.scss'\n})\nexport class FormFieldEditComponent {\n\n availableTypes = FORM_FIELD_CHOICES;\n readonly FieldType = FieldType;\n\n form = input.required<FormGroup<IFormFieldForm> >();\n editMode = input(false);\n submitted = output();\n cancelled = output();\n\n get templateControl(): FormControl<IFileRecord>\n {\n return this.form().get('template') as FormControl<IFileRecord>;\n }\n\n get fieldType(): FieldType \n {\n const field_type = this.form().value.field_type;\n if (field_type)\n {\n return getFieldTypeFromKey(field_type);\n }\n return FieldType.Undefined;\n }\n\n submit()\n {\n this.submitted.emit();\n }\n\n cancel()\n {\n this.cancelled.emit();\n }\n}\n\n\n","<form class=\"form-card\" id=\"app-field-form\" [formGroup]=\"form()\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field\">\n <mat-label>Label</mat-label>\n <input matInput placeholder=\"Label\" type=\"text\" formControlName=\"label\" required name=\"label\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"Key\" type=\"text\" formControlName=\"key\" required name=\"key\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Description</mat-label>\n <textarea matInput placeholder=\"Description\" style=\"min-height:150px\" type=\"text\" formControlName=\"description\"\n required name=\"description\"></textarea>\n </mat-form-field>\n\n <mat-checkbox class=\"example-margin\" formControlName=\"required\">Required?</mat-checkbox>\n\n <mat-form-field class=\"form-field\">\n <mat-label>Type</mat-label>\n <mat-select formControlName=\"field_type\" name=\"field_type\" required>\n @for(type of availableTypes; track type.value){\n <mat-option [value]=\"type.value\">{{type.display_name}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n @switch (fieldType) {\n @case(FieldType.Boolean)\n {\n <mat-form-field class=\"form-field\">\n <mat-label>Default</mat-label>\n <mat-select formControlName=\"default\" name=\"default\" required>\n <mat-option [value]=\"'true'\">True</mat-option>\n <mat-option [value]=\"'false'\">False</mat-option>\n </mat-select>\n </mat-form-field>\n }\n @case(FieldType.Char)\n {\n <mat-form-field class=\"form-field\">\n <mat-label>Default</mat-label>\n <input matInput placeholder=\"Default\" type=\"text\" formControlName=\"default\" name=\"default\">\n </mat-form-field>\n }\n @case(FieldType.Text || FieldType.RichText)\n {\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Default</mat-label>\n <textarea matInput placeholder=\"Default\" style=\"min-height:150px\" type=\"text\" formControlName=\"default\"\n name=\"default\"></textarea>\n </mat-form-field>\n }\n @case(FieldType.File)\n {\n <lib-file-upload [control]=\"templateControl\"></lib-file-upload>\n }\n}\n <div>\n @if(!editMode()) {\n <button mat-fab class=\"form-action-button\" type=\"submit\" matTooltip=\"Add Field\"\n [disabled]=\"!form().valid\">\n <mat-icon>add</mat-icon>\n </button>\n <button mat-fab class=\"form-action-button\" (click)=\"cancel()\" type=\"button\" matTooltip=\"Cancel\">\n <mat-icon>cancel</mat-icon>\n </button>\n }\n </div>\n</form>","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IFormFieldCreate, IFormFieldDetail } from '../../../../models/form';\n\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IFormFieldForm\n{\n label: FormControl<string | null>;\n key: FormControl<string | null>;\n required: FormControl<boolean | null>;\n description: FormControl<string | null>;\n template: FormControl<IFileRecord | null>;\n options: FormControl<string | null>;\n default: FormControl<string | null>;\n field_type: FormControl<string | null>;\n order: FormControl<number | null>;\n id: FormControl<number | null>;\n}\n\nexport class FormFieldForm {\n\n static getBaseTemplate(): IFileRecord\n {\n return {name: \"template\", display_name: \"template\", file_type: \"\", remote: \"\", local: \"\", file: null};\n }\n\n static createForm(fb: FormBuilder): FormGroup<IFormFieldForm>{\n return fb.group<IFormFieldForm>({\n label: fb.control<string>('', Validators.required),\n key: fb.control<string>('', Validators.required),\n required: fb.control<boolean>(false, Validators.required),\n description: fb.control<string>('', Validators.required),\n template: fb.control<IFileRecord>(this.getBaseTemplate()),\n options: fb.control<string | null>(null),\n default: fb.control<string>(''),\n field_type: fb.control<string>(\"BOOLEAN\", Validators.required),\n order: fb.control<number>(0),\n id: fb.control<number>(-1),\n });\n }\n\n static fromItem(item: IFormFieldDetail, builder: FormBuilder): FormGroup<IFormFieldForm>\n {\n const form = this.createForm(builder);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IFormFieldForm>, item: IFormFieldDetail): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n\n const template = this.getBaseTemplate();\n if (item.template)\n {\n template.remote = item.template;\n }\n\n form.setValue({\n label: item.label,\n key: item.key,\n required: item.required,\n description: item.description,\n template: template,\n options: \"\",\n default: item.default,\n field_type: item.field_type,\n order: item.order,\n id: id\n });\n }\n\n static createItem(form: FormGroup<IFormFieldForm>): IFormFieldCreate\n {\n const value = form.value;\n return {\n label: value.label || \"\",\n key: value.key || \"\",\n required: value.required || false,\n description: value.description || \"\",\n options: null,\n default: value.default || \"\", \n field_type: value.field_type || \"BOOLEAN\",\n order: value.order || 0\n };\n }\n\n static updateItem(form: FormGroup<IFormFieldForm>, item: IFormFieldDetail | IFormFieldCreate): IFormFieldDetail | IFormFieldCreate\n {\n const value = form.value;\n item.label = value.label || \"\";\n item.key = value.key || \"\";\n item.required = value.required || false;\n item.description = value.description || \"\";\n item.options = null;\n item.default = value.default || \"\"; \n item.field_type = value.field_type || \"BOOLEAN\";\n item.order = value.order || 0;\n return item;\n }\n\n}\n","import { FormArray, FormBuilder, FormGroup, FormControl } from '@angular/forms';\n\nimport { IFormFieldBase, IFormFieldCreate, IFormFieldDetail, IFormGroupCreate, IFormGroupDetail, IFormGroupUpdate } from '../../../../models/form';\nimport { FormFieldForm, IFormFieldForm } from './form-field-form';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IFormGroupForm\n{\n label: FormControl<string | null>;\n description: FormControl<string | null>;\n order: FormControl<number | null>;\n id: FormControl<number | null>;\n fields: FormArray<FormGroup<IFormFieldForm>>;\n}\n\nexport class FormGroupForm {\n\n static createForm(fb: FormBuilder): FormGroup<IFormGroupForm>{\n return fb.group<IFormGroupForm>({\n label: fb.control<string>(''),\n description: fb.control<string>(''),\n order: fb.control<number>(0),\n fields: fb.array<FormGroup<IFormFieldForm>>([]),\n id: fb.control<number>(-1)\n });\n }\n\n static getFileRecords(form: FormGroup<IFormGroupForm>): IFileRecord[] \n {\n const records: IFileRecord[] = [];\n this.getFields(form).controls.map(f => {const f_typed = f as FormGroup<IFormFieldForm>;\n if (f_typed.value.field_type == \"FILE\" && f_typed.value.template)\n {\n records.push(f_typed.value.template)\n }\n })\n return records;\n }\n\n static createField(form: FormGroup<IFormGroupForm>, field: FormGroup<IFormFieldForm>)\n {\n const fields = this.getFields(form);\n field.patchValue({order : fields.controls.length});\n fields.push(field);\n }\n\n static deleteField(form: FormGroup<IFormGroupForm>, id: number)\n {\n this.getFields(form).removeAt(id);\n } \n\n static reorderField(group: FormGroup<IFormGroupForm>, id: number, newIndex: number)\n {\n const current_field = this.getFields(group).at(id);\n current_field.patchValue({\"order\": newIndex});\n const swap_field = this.getFields(group).at(newIndex);\n swap_field.patchValue({\"order\": id});\n\n this.getFields(group).removeAt(id);\n this.getFields(group).insert(newIndex, current_field);\n }\n \n static fromItem(item: IFormGroupDetail, fb: FormBuilder): FormGroup<IFormGroupForm>\n {\n const form = this.createForm(fb);\n this.setValue(form, item, fb);\n return form;\n }\n\n static getLabel(form: FormGroup<IFormGroupForm>, id: number): string\n {\n if (form.value){\n if(form.value.label)\n {\n return form.value.label;\n }\n else if(form.value.order)\n {\n return \"Group \" + form.value.order.toString();\n }\n }\n return \"Group \" + id.toString();\n }\n\n static setValue(form: FormGroup<IFormGroupForm>, item: IFormGroupDetail, fb: FormBuilder): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n form.patchValue({\n label: item.label,\n description: item.description,\n order: item.order,\n id: id\n });\n const fields = this.getFields(form);\n fields.clear();\n item.fields.map(f => fields.push(FormFieldForm.fromItem(f, fb)))\n }\n\n static getFields(form: FormGroup<IFormGroupForm>): FormArray<FormGroup<IFormFieldForm> >\n {\n return form.get('fields') as FormArray;\n }\n\n static createItem(form: FormGroup<IFormGroupForm>): IFormGroupCreate\n {\n const value = form.value;\n return {\n label: value.label || null,\n description: value.description || null,\n order: value.order || 0,\n fields: Array.from(this.getFields(form).controls.map(f => FormFieldForm.createItem(f as FormGroup<IFormFieldForm>)))\n };\n }\n\n static createOrUpdateField(form: FormGroup<IFormFieldForm>, items: IFormFieldBase[]): IFormFieldCreate | IFormFieldDetail\n {\n if (form.value.id && form.value.id >= 0)\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormFieldForm.updateItem(form, matching_item as IFormFieldDetail);\n }\n return FormFieldForm.createItem(form);\n }\n\n static updateItem(form: FormGroup, item: IFormGroupDetail | IFormGroupCreate): IFormGroupUpdate | IFormGroupCreate\n {\n const value = form.value;\n item.label = value.label || null;\n item.description = value.description || null;\n item.order = value.order || 0;\n item.fields = Array.from(this.getFields(form).controls.map(f => this.createOrUpdateField(f, item.fields)))\n return item;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\n\nimport { IFormCreate, IFormDetail, IFormGroupBase, IFormGroupDetail, IFormGroupCreate, IFormUpdate, IFormGroupUpdate, IFileField, getFileFieldIds } from '../../../../models/form';\nimport { FormGroupForm, IFormGroupForm } from './form-group-form';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IDynamicFormForm\n{\n groups: FormArray<FormGroup<IFormGroupForm>>;\n}\n\nexport class DynamicFormForm {\n\n fb = inject(FormBuilder);\n form: FormGroup<IDynamicFormForm>;\n\n constructor()\n {\n this.form = this.fb.group<IDynamicFormForm>({\n groups: this.fb.array<FormGroup<IFormGroupForm> >([])\n });\n }\n\n get groups(): FormArray<FormGroup<IFormGroupForm>>\n {\n return this.form.get('groups') as FormArray;\n }\n\n getFileFields(form: IFormDetail): IFileField[] \n {\n const ids = getFileFieldIds(form);\n const records: IFileRecord[] = [];\n this.groups.controls.map(g => records.push(...FormGroupForm.getFileRecords(g)));\n const fields: IFileField[] = [];\n for(let i = 0; i< ids.length; i++)\n {\n fields.push({id: ids[i], file: records[i]});\n }\n return fields;\n }\n\n orderUp(id: number)\n {\n this.reorder(id, id-1);\n }\n\n orderDown(id: number)\n {\n this.reorder(id, id+1);\n } \n\n reorder(id: number, newIndex: number)\n {\n const current_group = this.groups.at(id);\n current_group.patchValue({\"order\": newIndex});\n const swap_group = this.groups.at(newIndex);\n swap_group.patchValue({\"order\": id});\n\n this.groups.removeAt(id);\n this.groups.insert(newIndex, current_group);\n }\n\n fieldOrderUp(group_id: number, id: number)\n {\n this.reorderField(group_id, id, id-1);\n }\n\n fieldOrderDown(group_id: number, id: number)\n {\n this.reorderField(group_id, id, id+1);\n } \n\n reorderField(group_id: number, id: number, newIndex: number)\n {\n FormGroupForm.reorderField(this.groups.at(group_id), id, newIndex);\n }\n\n createGroup(group: FormGroup<IFormGroupForm>)\n {\n group.patchValue({order : this.groups.controls.length});\n this.groups.push(group);\n }\n\n deleteGroup(id: number)\n {\n this.groups.removeAt(id);\n }\n\n deleteField(group_id: number, field_id: number)\n {\n FormGroupForm.deleteField(this.groups.at(group_id), field_id);\n }\n\n reset()\n {\n this.form = this.fb.group<IDynamicFormForm>({\n groups: this.fb.array<FormGroup<IFormGroupForm> >([])\n });\n }\n\n setValue(item: IFormDetail): void {\n this.groups.clear();\n item.groups.map(g => this.groups.push(FormGroupForm.fromItem(g, this.fb)));\n }\n\n createItem(): IFormCreate\n {\n return {\n groups: Array.from(this.groups.controls.map(g => FormGroupForm.createItem(g)))\n };\n }\n\n createOrUpdateGroup(form: FormGroup<IFormGroupForm>, items: IFormGroupBase[]): IFormGroupCreate | IFormGroupUpdate\n {\n if (form.value.id && form.value.id >= 0)\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormGroupForm.updateItem(form, matching_item as IFormGroupDetail);\n }\n return FormGroupForm.createItem(form);\n }\n\n updateItem(item: IFormDetail): IFormCreate | IFormUpdate\n {\n const item_update = item as IFormUpdate;\n item_update.groups = Array.from(this.groups.controls.map(f => this.createOrUpdateGroup(f, item.groups)));\n return item_update;\n }\n\n}\n","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IFormFieldValueCreate, IFormFieldValueDetail } from '../../../../models/form';\n\n\nexport interface IFormFieldValueForm\n{\n value: FormControl<string | null>;\n id: FormControl<number | null>;\n field: FormControl<number | null>;\n}\n\nexport class FormFieldValueForm {\n\n static createForm(fb: FormBuilder): FormGroup<IFormFieldValueForm>{\n return fb.group<IFormFieldValueForm>({\n value: fb.control<string>('', Validators.required),\n id: fb.control<number>(-1),\n field: fb.control<number>(-1)\n });\n }\n\n static fromItem(item: IFormFieldValueDetail, builder: FormBuilder): FormGroup<IFormFieldValueForm>\n {\n const form = this.createForm(builder);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IFormFieldValueForm>, item: IFormFieldValueDetail): void {\n\n let id = -1;\n if ('id' in item)\n {\n id = item.id;\n }\n\n form.setValue({\n value: item.value,\n field: item.field.id,\n id: id\n });\n }\n\n static createItem(form: FormGroup<IFormFieldValueForm>): IFormFieldValueCreate\n {\n const value = form.value;\n return {\n value: value.value || \"\",\n field: value.field || -1,\n asset: null\n };\n }\n\n static updateItem(form: FormGroup<IFormFieldValueForm>, item: IFormFieldValueDetail): IFormFieldValueDetail\n {\n const value = form.value;\n item.value = value.value || \"\";\n return item;\n }\n\n}\n","import { inject } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\n\nimport { IPopulatedFormCreate, IPopulatedFormDetail, IFormFieldValueBase, IFormFieldValueDetail } from '../../../../models/form';\nimport { FormFieldValueForm, IFormFieldValueForm } from './form-field-value-form';\n\nexport interface IPopulatedFormForm\n{\n values: FormArray<FormGroup<IFormFieldValueForm>>;\n}\n\nexport class PopulatedFormForm {\n\n fb = inject(FormBuilder);\n form: FormGroup;\n\n constructor()\n {\n this.form = this.fb.group<IPopulatedFormForm>({\n values: this.fb.array<FormGroup<IFormFieldValueForm> >([])\n });\n }\n\n get values(): FormArray<FormGroup<IFormFieldValueForm>>\n {\n return this.form.get('values') as FormArray;\n }\n\n reset()\n {\n this.form = this.fb.group({\n groups: this.fb.array([])\n });\n }\n\n setValue(item: IPopulatedFormDetail): void {\n this.values.clear();\n item.values.map(v => this.values.push(FormFieldValueForm.fromItem(v, this.fb)));\n }\n\n createItem(): IPopulatedFormCreate\n {\n return {\n values: Array.from(this.values.controls.map(v => FormFieldValueForm.createItem(v)))\n };\n }\n\n updateValue(form: FormGroup<IFormFieldValueForm>, items: IFormFieldValueBase[]): IFormFieldValueDetail\n {\n const matching_item = items.find(item => \"id\" in item && item.id == form.value.id)!;\n return FormFieldValueForm.updateItem(form, matching_item as IFormFieldValueDetail);\n }\n\n updateItem(item: IPopulatedFormDetail): IPopulatedFormDetail\n {\n item.values = Array.from(this.values.controls.map(f => this.updateValue(f, item.values)));\n return item;\n }\n\n}\n","import {Component, computed, inject, input} from '@angular/core';\nimport {FormGroup, ReactiveFormsModule} from '@angular/forms';\n\nimport { FormFieldDetailComponent } from '../detail/form-field-detail.component';\n\nimport { FormService } from '../../../../services/form.service';\nimport { IFormDetail } from '../../../../models/form';\n\n@Component({\n selector: 'lib-dynamic-form',\n imports: [FormFieldDetailComponent, ReactiveFormsModule, FormFieldDetailComponent],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.scss'\n})\nexport class DynamicFormComponent {\n\n private readonly formService = inject(FormService);\n readonly inputForm = input.required<IFormDetail>();\n \n readonly form = computed<FormGroup>(() =>\n this.formService.toFormGroup(this.inputForm()),\n );\n\n payLoad = '';\n\n onSubmit() {\n this.payLoad = JSON.stringify(this.form().getRawValue());\n } \n\n}\n","<div>\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form()\">\n\n @for (group of inputForm().groups; track group.order) {\n\n @if(group.label)\n {\n <h3>{{group.label}}</h3>\n }\n\n @if(group.description){\n <p>{{group.description}}</p>\n }\n\n @for (field of group.fields; track field.order) {\n <div class=\"form-row\">\n <lib-form-field-detail [field]=\"field\" [form]=\"form()\" />\n </div>\n }\n }\n </form>\n</div>","import { Component, input, inject, output } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule, FormBuilder, FormArray } from '@angular/forms';\n\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { FormGroupForm, IFormGroupForm } from '../edit/form-group-form';\nimport { FormFieldForm, IFormFieldForm } from '../edit/form-field-form';\nimport { FormFieldEditComponent } from '../edit/form-field-edit.component';\n\n@Component({\n selector: 'lib-form-group-edit',\n imports: [MatExpansionModule,\n MatIconModule,\n MatButtonModule,\n MatTooltipModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n FormFieldEditComponent],\n templateUrl: './form-group-edit.component.html',\n styleUrl: './form-group-edit.component.scss'\n})\nexport class FormGroupEditComponent {\n form = input.required<FormGroup<IFormGroupForm>>();\n editMode = input<boolean>(false);\n\n submitted = output();\n cancelled = output();\n deleted = output();\n\n fb = inject(FormBuilder);\n fieldForm: FormGroup<IFormFieldForm> | null = null;\n\n get fields(): FormArray<FormGroup<IFormFieldForm>> {\n return this.form().get('fields') as FormArray<FormGroup<IFormFieldForm>>;\n }\n\n onFieldDelete(id: number) {\n FormGroupForm.deleteField(this.form(), id);\n }\n\n onFieldOrderUp(id: number) {\n FormGroupForm.reorderField(this.form(), id, id + 1)\n }\n\n onFieldOrderDown(id: number) {\n FormGroupForm.reorderField(this.form(), id, id - 1)\n }\n\n addField() {\n this.fieldForm = FormFieldForm.createForm(this.fb);\n }\n\n cancelField() {\n this.fieldForm = null;\n }\n\n submitField() {\n if (this.fieldForm) {\n FormGroupForm.createField(this.form(), this.fieldForm);\n }\n this.fieldForm = null;\n }\n\n onDelete()\n {\n this.deleted.emit();\n }\n\n cancel()\n {\n this.cancelled.emit();\n }\n\n submit()\n {\n this.submitted.emit();\n }\n}\n","<form class=\"form-card\" style=\"width:100%\" [formGroup]=\"form()\" (ngSubmit)=\"submit()\">\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"label\">Label</mat-label>\n <input matInput placeholder=\"\" type=\"text\" formControlName=\"label\"\n name=\"label\"/>\n </mat-form-field> \n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"\" type=\"text\" style=\"min-height:150px\" formControlName=\"description\"\n name=\"description\"></textarea>\n </mat-form-field>\n\n <button matFab type=\"button\" style=\"margin:10px\" color=\"primary\" matTooltip=\"Delete the Group\" aria-label=\"Delete the group\"\n (click)=\"onDelete()\">\n <mat-icon>delete</mat-icon>\n </button>\n\n <h3>Fields</h3>\n @if(fieldForm){\n <lib-form-field-edit style=\"min-width:450px\" [form]=\"fieldForm\" (submitted)=\"submitField()\" (cancelled)=\"cancelField()\"></lib-form-field-edit>\n }\n @else {\n\n <button mat-fab class=\"form-action-button\" (click)=\"addField()\" matTooltip=\"Add a Field\" type=\"button\">\n <mat-icon>add</mat-icon>\n </button>\n\n <mat-accordion style=\"min-width:450px\">\n @for(field of fields.controls; track field; let idx=$index)\n {\n <mat-expansion-panel style=\"width:100%\">\n <mat-expansion-panel-header class=\"expansion-panel\">\n <mat-panel-title>{{field.value.label}}</mat-panel-title>\n <div class=\"expansion-panel-controls\">\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Delete the Field\" aria-label=\"Delete an item\"\n (click)=\"onFieldDelete(idx)\">\n <mat-icon>delete\n </mat-icon>\n </button>\n @if(idx>0){\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Move Order Up\" aria-label=\"Move Order Up\"\n (click)=\"onFieldOrderUp(idx)\">\n <mat-icon>arrow_upward\n </mat-icon>\n </button>\n }\n @if(idx<fields.controls.length -1){\n <button mat-icon-button type=\"button\" class=\"control-button\" color=\"primary\" matTooltip=\"Move Order Down\" aria-label=\"Move Order Down\"\n (click)=\"onFieldOrderDown(idx)\">\n <mat-icon>arrow_downward\n </mat-icon>\n </button>\n }\n </div>\n </mat-expansion-panel-header>\n <lib-form-field-edit [form]=\"field\" [editMode]=\"true\"></lib-form-field-edit>\n </mat-expansion-panel>\n }\n </mat-accordion>\n }\n\n @if(!editMode()){\n <div>\n <button mat-fab class=\"form-action-button\" \n type=\"submit\" matTooltip=\"Save Group\" [disabled]=\"!form().valid\">\n <mat-icon>save</mat-icon>\n </button>\n <button mat-fab class=\"form-action-button\" \n type=\"button\" matTooltip=\"Cancel\" (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button> \n </div>\n}\n<form>","import { Component, signal, input, inject, output } from '@angular/core';\nimport { FormBuilder, FormGroup, AbstractControl } from '@angular/forms';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatExpansionModule } from '@angular/material/expansion';\n\nimport { DynamicFormForm } from '../edit/dynamic-form-form';\nimport { FormGroupForm, IFormGroupForm } from '../edit/form-group-form';\nimport { FormGroupEditComponent } from \"../group-edit/form-group-edit.component\";\n\n@Component({\n selector: 'lib-dynamic-form-builder',\n imports: [\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatTooltipModule,\n MatExpansionModule,\n FormGroupEditComponent\n],\n templateUrl: './dynamic-form-builder.component.html',\n styleUrl: './dynamic-form-builder.component.scss'\n})\nexport class DynamicFormBuilderComponent {\n\n form = input.required<DynamicFormForm>();\n handleSubmit = input(false);\n submitted = output();\n\n dirty = signal(false);\n\n fb = inject(FormBuilder);\n groupForm: FormGroup<IFormGroupForm> | null = null;\n\n addGroup() {\n this.groupForm = FormGroupForm.createForm(this.fb);\n }\n\n createGroup() {\n if (this.groupForm) {\n this.form().createGroup(this.groupForm);\n }\n this.groupForm = null;\n }\n\n cancelGroup()\n {\n this.groupForm = null;\n }\n\n onSubmit() {\n this.submitted.emit();\n this.dirty.set(false);\n }\n\n deleteGroup(id: number) {\n this.form().deleteGroup(id);\n this.dirty.set(true);\n }\n\n onOrderUp(id: number) {\n this.form().orderUp(id);\n this.dirty.set(true);\n }\n\n onOrderDown(id: number) {\n this.form().orderDown(id);\n this.dirty.set(true);\n } \n\n getLabel(control: AbstractControl): string {\n const form = control as FormGroup;\n if (form.value.label) {\n return form.value.label;\n }\n else {\n return \"Group \" + form.value.order.toString();\n }\n }\n}\n","<h2>Groups</h2>\n\n\n@if(groupForm)\n{\n<lib-form-group-edit [form]=\"groupForm\" (cancelled)=\"cancelGroup()\" (submitted)=\"createGroup()\"></lib-form-group-edit>\n}\n@else{\n<button mat-fab class=\"form-action-button\" (click)=\"addGroup()\" matTooltip=\"Add a Group\" type=\"button\">\n <mat-icon>add</mat-icon>\n</button>\n\n@if (form().groups.length > 0){\n\n<mat-accordion style=\"width:100%\">\n\n @for(group of form().groups.controls; track group; let group_idx=$index)\n {\n <mat-expansion-panel style=\"width:100%\">\n <mat-expansion-panel-header class=\"expansion-panel\">\n <mat-panel-title>{{getLabel(group)}}</mat-panel-title>\n <div class=\"expansion-panel-controls\">\n @if(group_idx>0){\n <button mat-icon-button class=\"control-button\" type=\"button\" color=\"primary\" matTooltip=\"Move Order Up\" aria-label=\"Move Order Up\"\n (click)=\"onOrderUp(group_idx)\">\n <mat-icon>arrow_upward\n </mat-icon>\n </button>\n }\n @if(group_idx < form().groups.controls.length - 1){\n <button mat-icon-button class=\"control-button\" type=\"button\" color=\"primary\" matTooltip=\"Move Order Down\" aria-label=\"Move Order Down\"\n (click)=\"onOrderDown(group_idx)\">\n <mat-icon>arrow_downward\n </mat-icon>\n </button>\n }\n </div>\n </mat-expansion-panel-header>\n <lib-form-group-edit [form]=\"group\" [editMode]=\"true\" (deleted)=\"deleteGroup(group_idx)\"></lib-form-group-edit>\n </mat-expansion-panel>\n }\n</mat-accordion>\n\n}\n\n@if(handleSubmit() && dirty())\n{\n <div>\n <button mat-fab class=\"form-action-button\" \n type=\"button\" matTooltip=\"Save Changes\" (click)=\"onSubmit()\">\n <mat-icon>save</mat-icon>\n </button>\n </div>\n}\n}","import { Component, input } from '@angular/core';\n\nimport { IPopulatedFormDetail } from '../../../../models/form';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-populated-form',\n imports: [MatIconModule, MatButtonModule],\n templateUrl: './populated-form.component.html',\n styleUrl: './populated-form.component.scss'\n})\nexport class PopulatedFormComponent {\n form = input.required<IPopulatedFormDetail>();\n}\n","@for(value of form().values; track value.id)\n{\n@if(value.field.field_type === \"TEXT\" || value.field.field_type === \"RICH_TEXT\")\n{\n <div class=\"item-field\">\n <h3 style=\"margin-right: 10px\">{{value.field.label}}</h3>\n <p>{{value.value}}</p>\n </div>\n}\n@else if(value.field.field_type === \"CHAR\")\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n <span>{{value.value}}</span>\n </div>\n}\n@else if(value.field.field_type === \"BOOLEAN\")\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n @if(value.value === \"true\")\n {\n <mat-icon>check</mat-icon>\n }\n @else {\n <mat-icon>close_small</mat-icon>\n }\n </div>\n}\n@else if(value.field.field_type === \"FILE\" && value.asset)\n{\n <div class=\"item-field\">\n <span style=\"margin-right: 10px\"><b>{{value.field.label}}:</b></span>\n <a matFab href=\"value.asset\">\n <mat-icon>download</mat-icon>\n </a>\n </div>\n}\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { merge, tap } from 'rxjs';\n\nimport { Component, AfterViewInit, viewChild, input, computed } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSort, MatSortModule } from '@angular/material/sort';\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { ItemQuery } from '../../../../models/http';\nimport { ListDataSource } from '../list-data-source';\nimport { DatePipe, TitleCasePipe } from '@angular/common';\nimport { TableColumn } from '../../table';\n\n@Component({\n selector: 'lib-list-table-view',\n imports: [MatTableModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatIconModule,\n MatPaginatorModule,\n MatSortModule,\n RouterModule,\n DatePipe,\n TitleCasePipe\n ],\n templateUrl: './list-table-view.component.html',\n styleUrl: './list-table-view.component.scss'\n})\nexport class ListTableViewComponent implements AfterViewInit {\n\n itemType = input(\"\");\n columns = input<TableColumn[]>([]);\n dataSource = input<ListDataSource<any, any, any>>();\n searchFilter = input(\"\");\n pageSizeOptions = [20, 50, 100];\n initialPageSize = 20;\n columnNames = computed(() => this.columns().map(c => c.name));\n\n sort = viewChild(MatSort);\n paginator = viewChild(MatPaginator);\n\n ngAfterViewInit() {\n const paginator = this.paginator();\n const sort = this.sort();\n if (!paginator || !sort) {\n return;\n }\n\n sort.sortChange.subscribe(() => this.reset());\n merge(sort.sortChange, paginator.page)\n .pipe(\n tap(() => this.fetch())\n )\n .subscribe();\n }\n\n reset() {\n const paginator = this.paginator();\n if (!paginator) {\n return;\n }\n paginator.pageIndex = 0;\n }\n\n fetch() {\n const paginator = this.paginator();\n const sort = this.sort();\n const data_source = this.dataSource();\n if (!paginator || !sort || !data_source) {\n return;\n }\n\n data_source.fetch(new ItemQuery({\n page: paginator.pageIndex + 1,\n page_size: paginator.pageSize,\n sort_order: sort.direction,\n sort_field: sort.active,\n filter: this.searchFilter()\n }))\n }\n}\n","@if (dataSource(); as dataSource) {\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n matSortActive=\"name\"\n matSortDisableClear\n matSortDirection=\"desc\"\n class=\"mat-elevation-z8\"\n >\n @for (column of columns(); track column.name) {\n <ng-container matColumnDef=\"{{ column.name }}\">\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\n {{ column.title }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n\n @if(column.element_type === \"date\")\n {\n {{ element[column.name] | date}}\n }\n @else if(column.element_type === \"enum\")\n {\n {{ element[column.name] | titlecase}}\n }\n @else {\n {{ element[column.name] }}\n }\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"columnNames()\"></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: columnNames()\"\n [routerLink]=\"['/' + itemType() + '/detail/', row.id]\"\n [routerLinkActive]=\"['is-active']\"\n ></tr>\n </table>\n\n <mat-paginator\n [length]=\"dataSource.length()\"\n [pageSize]=\"20\"\n [pageSizeOptions]=\"pageSizeOptions\"\n aria-label=\"Select page\"\n >\n </mat-paginator>\n}\n","// Datasource needs any\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { Component, input, signal, output, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { ScrollingModule } from '@angular/cdk/scrolling';\n\nimport { MatListModule } from '@angular/material/list';\n\nimport { ListDataSource } from '../list-data-source';\n\n@Component({\n selector: 'lib-list-scroll-view',\n imports: [MatListModule,\n NgTemplateOutlet,\n ScrollingModule],\n templateUrl: './list-scroll-view.component.html',\n styleUrl: './list-scroll-view.component.scss'\n})\n\nexport class ListScrollViewComponent {\n\n searchTerm = input<string>(\"\");\n pageSize = input(20);\n itemHeight = input<number>(100);\n itemWidth = input<string>(\"200\");\n dataSource = input<ListDataSource<any, any, any> >();\n listItemTemplate = input<TemplateRef<unknown> | null | undefined>(null);\n routerMode = input<boolean>(false);\n selection = signal<number | null>(null);\n selected = output<number>();\n\n reset()\n {\n const data_source = this.dataSource();\n if(!data_source)\n {\n return;\n }\n// sort_order: this.sort!.direction,\n// sort_field: this.sort!.active, \n data_source.reset(this.searchTerm(), this.pageSize());\n } \n\n onSelected(id: number)\n {\n this.selection.set(id);\n this.selected.emit(id);\n }\n \n}\n","<mat-nav-list style=\"padding: 0px; display:flex; justify-content: center; \">\n <cdk-virtual-scroll-viewport\n itemSize=\"itemHeight()\"\n class=\"scrollable-list\"\n style=\"width:100%\"\n >\n <ng-container *cdkVirtualFor=\"let item of dataSource(); let even = even;\">\n @if(routerMode())\n {\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate(); context: { item: item, even: even, selected: item.id === selection()}\" \n >\n </ng-container>\n }\n @else \n {\n <li\n (click)=\"onSelected(item.id)\" \n (keydown)=\"onSelected(item.id)\"\n tabindex=\"0\"\n role=\"button\">\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate(); context: { item: item, even: even, selected: item.id === selection()}\" \n >\n </ng-container> \n }\n </ng-container>\n </cdk-virtual-scroll-viewport>\n</mat-nav-list>\n","import { catchError, of, finalize, BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { signal, computed } from '@angular/core';\n\nimport { DataSource, CollectionViewer, ListRange } from '@angular/cdk/collections';\n\nimport { IItemQuery, ItemQuery } from '../../../models/http';\nimport { IPaginated, Paginated, Identifiable } from '../../../models/core';\n\nimport { ItemService } from '../../../services/item.service';\n\nexport interface IQuery\n{\n key: string;\n value: string;\n}\n\nexport class ListDataSource<D extends Identifiable, L extends Identifiable, C= D, U extends Identifiable = D> extends DataSource<L> {\n \n length = signal(0);\n loading = signal(true);\n searchTerm = signal<string>(\"\"); \n pageSize = signal(20);\n hasFetched = signal(false);\n\n sourceIsEmpty = computed(() => this.length() == 0 && this.hasFetched() && !this.searchTerm());\n\n private consumerType: string;\n private items = new BehaviorSubject<L[]>([]);\n itemService: ItemService<D, L, C, U>;\n private subscription = new Subscription();\n private fetchedPages = new Set<number>();\n private defaultQueries: IQuery[] = [];\n\n constructor(itemService: ItemService<D, L, C, U>, consumerType = \"table\", defaultQueries: IQuery[] = []) {\n super();\n this.itemService = itemService;\n this.consumerType = consumerType;\n this.defaultQueries = defaultQueries;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<L[]>\n {\n if (!this.hasTableConsumer())\n {\n this.subscription.add(collectionViewer.viewChange.subscribe((range) => this.onRange(range))); \n }\n\n return this.items.asObservable();\n }\n\n hasTableConsumer(): boolean\n {\n return this.consumerType === \"table\";\n }\n\n onRange(range: ListRange)\n {\n const start_page = Math.floor(range.start / this.pageSize());\n const end_page = Math.floor(range.end / this.pageSize());\n for (let idx = start_page; idx <= end_page; idx++)\n {\n this.fetchPage(idx);\n }\n }\n\n reset(searchTerm = \"\", pageSize = 20)\n {\n this.fetchedPages = new Set<number>();\n this.length.set(0);\n this.searchTerm.set(searchTerm);\n this.pageSize.set(pageSize);\n this.loading.set(true);\n this.items.next([]);\n this.fetchPage(0);\n }\n\n fetchPage(idx: number)\n {\n if (this.fetchedPages.has(idx))\n {\n return;\n }\n this.fetchedPages.add(idx);\n\n const queries = new Map<string, string>([]);\n this.defaultQueries.forEach(q => queries.set(q.key, q.value));\n\n this.fetch(new ItemQuery({page: idx + 1,\n page_size: this.pageSize(),\n queries: queries,\n filter: this.searchTerm()}));\n }\n\n fetch(query: IItemQuery)\n {\n this.loading.set(true);\n this.itemService.get(query).pipe(\n catchError(() => of(new Paginated<L>())),\n finalize(() => this.loading.set(false))\n ).subscribe(response => this.onResponse(response))\n }\n\n onResponse(response: IPaginated<L>) {\n this.length.set(response.count);\n this.hasFetched.set(true);\n\n if(this.hasTableConsumer())\n {\n this.items.next(response.results);\n }\n else\n {\n this.items.next([...this.items.value, ...response.results]); \n }\n }\n\n disconnect(): void {\n this.items.complete();\n if (this.subscription)\n {\n this.subscription.unsubscribe(); \n }\n\n }\n}\n","import { Component, input, output } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { RouterModule } from '@angular/router';\n\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { SearchBarComponent } from '../../search-bar/search-bar.component';\nimport { MatButtonModule } from '@angular/material/button';\n\n@Component({\n selector: 'lib-list-header',\n imports: [TitleCasePipe, \n RouterModule, \n MatIconModule, \n MatButtonModule,\n SearchBarComponent],\n templateUrl: './list-header.component.html',\n styleUrl: './list-header.component.scss',\n})\nexport class ListHeaderComponent {\n\n itemType = input.required<string>();\n canCreate = input.required<boolean>();\n showControls = input.required<boolean>();\n sortFields = input.required<string[]>();\n searchChanged = output<string>();\n\n title(): string\n {\n return this.itemType().replace(\"_\", \" \");\n }\n\n onSearchChange(value: string)\n {\n this.searchChanged.emit(value);\n }\n\n}\n","<div class=\"container\">\n\n <div class=\"title-container\">\n <h1 class=\"title\">{{ title() | titlecase }}</h1>\n\n @if (canCreate()) {\n <div class=\"button-container\">\n <a mat-fab class=\"padded-button\" aria-label=\"Add new item\" matTooltip=\"Add new item\"\n [routerLink]=\"['/' + itemType(), 'create']\">\n <mat-icon>add</mat-icon></a>\n </div>\n }\n </div>\n\n <div class=\"controls\" [hidden]=\"!showControls()\">\n <lib-search-bar style=\"width:70%\" [itemType]=\"title()\" [sortFields]=\"sortFields()\"\n (searchChanged)=\"onSearchChange($event)\"></lib-search-bar>\n </div>\n</div>","import { tap } from 'rxjs';\n\nimport { AfterViewInit, Component, OnInit, input, signal, output, inject, TemplateRef, viewChild, computed } from '@angular/core';\nimport { RouterModule, ActivatedRoute } from '@angular/router';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatSort } from '@angular/material/sort';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule, MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ListTableViewComponent } from '../list-table-view/list-table-view.component';\nimport { TableColumn } from '../../table';\nimport { ListScrollViewComponent } from '../list-scroll-view/list-scroll-view.component';\nimport { BackButtonComponent } from '../../back-button/back-button.component';\nimport { IQuery, ListDataSource } from '../list-data-source';\n\nimport { Identifiable } from '../../../../models/core';\nimport { ItemService } from '../../../../services/item.service';\nimport { ListHeaderComponent } from \"../list-header/list-header.component\";\nimport { NgTemplateOutlet } from '@angular/common';\n\n@Component({\n selector: 'lib-list-view',\n imports: [ListTableViewComponent,\n ListScrollViewComponent,\n BackButtonComponent,\n MatFormFieldModule,\n MatButtonToggleModule,\n MatProgressSpinnerModule,\n MatIconModule,\n ReactiveFormsModule,\n RouterModule,\n MatInputModule,\n MatTooltipModule,\n MatButtonModule,\n ListHeaderComponent,\n NgTemplateOutlet],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.scss'\n})\nexport class ListViewComponent<D extends Identifiable, L extends Identifiable, C=D, U extends Identifiable = D> implements OnInit, AfterViewInit {\n\n viewType = input(\"table\");\n itemService = input<ItemService<D, L, C, U>>();\n listItemTemplate = input<TemplateRef<unknown> | null>(null);\n itemDetailTemplate = input<TemplateRef<unknown> | null>(null);\n itemHeight = input(100);\n itemWidth = input(300);\n columns = input<TableColumn[]>([]);\n sortFields = input<string[]>([]);\n noSelfItemsMessage = input<string>();\n noItemsCanCreateMessage = input<string>();\n noItemsMessage = input<string>();\n defaultQueries = input<IQuery[]>([]);\n embeddedMode = input<boolean>(false);\n\n selectedViewType = signal(\"table\");\n selected = output<number | null>();\n\n pageSize = 20;\n pageSizeOptions = [20, 50, 100];\n\n protected route = inject(ActivatedRoute);\n dataSource: ListDataSource<D, L, C, U> | undefined = undefined;\n sort = viewChild(MatSort);\n columnNames = computed(() => this.columns().map(c => c.name));\n\n searchTerm = \"\";\n\n get resolvedItemWidth(): string \n {\n if(this.itemDetailTemplate())\n {\n return (this.itemWidth() + 50).toString() + \"px\";\n }\n else \n {\n return \"100%\";\n }\n }\n\n ngOnInit() {\n this.selectedViewType.set(this.viewType());\n this.resetDataSource();\n }\n\n ngAfterViewInit() {\n const sort = this.sort();\n if (sort) {\n sort.sortChange.pipe(tap(() => this.reset())).subscribe();\n }\n }\n\n showControls(): boolean\n {\n return this.dataSource != undefined && !this.dataSource.sourceIsEmpty();\n }\n\n onSearchChange(value: string)\n {\n this.searchTerm = value;\n this.reset();\n }\n\n canCreate(): boolean {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.canCreate();\n }\n return false;\n }\n\n itemType(): string {\n const item_service = this.itemService();\n if (item_service)\n {\n return item_service.typePlural();\n }\n return \"\";\n }\n\n title(): string\n {\n return this.itemType().replace(\"_\", \" \");\n }\n\n isTableView(): boolean {\n return this.selectedViewType() === \"table\";\n }\n\n resetDataSource() {\n const item_service = this.itemService();\n if (item_service)\n {\n this.dataSource = new ListDataSource<D, L, C, U>(item_service, this.selectedViewType(), this.defaultQueries());\n }\n this.reset();\n }\n\n reset() {\n if (this.dataSource) {\n this.dataSource.reset(this.searchTerm, this.pageSize);\n }\n }\n\n viewChanged(event: MatButtonToggleChange) {\n this.selectedViewType.set(event.value);\n this.resetDataSource();\n }\n\n onSelection(id: number)\n {\n this.selected.emit(id);\n }\n\n protected isSelfList() {\n const url_segments = this.route.snapshot.url;\n if(!url_segments)\n {\n return false;\n }\n return (url_segments.length == 2) && (url_segments[1].path == \"self\")\n }\n}\n","@if(!embeddedMode()){\n<lib-back-button></lib-back-button>\n}\n\n<div class=\"container\">\n <lib-list-header style=\"width:100%\"\n [itemType]=\"itemType()\" \n [canCreate]=\"canCreate()\" \n [showControls]=\"showControls()\"\n [sortFields]=\"sortFields()\"\n (searchChanged)=\"onSearchChange($event)\"></lib-list-header>\n\n <div class=\"content_container\" style=\"width:100%\">\n @if(dataSource)\n {\n <div class=\"search_result_container\" [style.width]=\"resolvedItemWidth\">\n\n @if (dataSource.loading()) {\n <div class=\"spinner-container\">\n <mat-spinner></mat-spinner>\n </div>\n }\n\n @if(!embeddedMode()){\n <div [hidden]=\"!dataSource.sourceIsEmpty()\">\n @if(isSelfList())\n {\n @if(noSelfItemsMessage())\n {\n <p>{{noSelfItemsMessage()}}</p>\n }\n @else {\n <p>You do not have any {{itemType()}}.</p>\n }\n }\n @else{\n @if(canCreate()){\n @if(noItemsCanCreateMessage())\n {\n <p>{{noItemsCanCreateMessage()}}</p>\n }\n @else{\n <p>There are currently no {{itemType()}}, click above to add one.</p>\n }\n }\n @else{\n @if(noItemsMessage())\n {\n <p>{{noItemsMessage()}}</p>\n }\n @else\n {\n <p>There are currently no {{itemType()}}.</p>\n }\n }\n }\n </div>\n }\n\n <div style=\"width: 100%\" [hidden]=\"dataSource.sourceIsEmpty()\">\n @if(isTableView()) {\n <lib-list-table-view [itemType]=\"itemType()\" [columns]=\"columns()\" [dataSource]=\"dataSource\">\n </lib-list-table-view>\n }\n @else {\n <h2 style=\"margin-bottom:5px; margin-top: 0px; padding: 0px;\">Results: {{dataSource.length()}}</h2>\n <lib-list-scroll-view [listItemTemplate]=\"listItemTemplate()\" \n [itemHeight]=\"itemHeight()\" \n [itemWidth]=\"itemWidth().toString()\"\n [dataSource]=\"dataSource\" \n (selected)=\"onSelection($event)\"></lib-list-scroll-view>\n }\n </div>\n </div>\n @if(itemDetailTemplate()){\n <div class=\"detail-container\" style=\"width:100%; min-width: 400px;\">\n <ng-container *ngTemplateOutlet=\"itemDetailTemplate()\">\n </ng-container>\n </div>\n }\n }\n </div>\n</div>","import { Component, input, inject, signal} from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { UserService } from '../../services/user.service';\nimport { IPortalMemberDetail, PortalMember } from '../../models/member';\nimport { LeftNavService } from '../../services';\n\n@Component({\n selector: 'lib-top-bar',\n imports: [RouterModule, \n MatToolbarModule, \n MatIconModule, \n MatButtonModule, \n MatMenuModule],\n templateUrl: './top-bar.component.html',\n styleUrl: './top-bar.component.scss'\n})\nexport class TopBarComponent {\n \n readonly title = input<string>();\n readonly logo = input<string>();\n readonly background = input<string>();\n readonly user = signal<IPortalMemberDetail | null>(null);\n readonly loginRoute = input<string>(\"home\");\n private userService = inject(UserService);\n protected leftNavService = inject(LeftNavService);\n\n constructor()\n {\n this.userService.loggedInUser.subscribe(user => this.user.set(user));\n }\n\n onLogout() {\n this.userService.logout();\n }\n\n onLogin()\n {\n this.userService.login(\"/\" + this.loginRoute)\n }\n\n get initials(): string\n {\n const user = this.user();\n if (user)\n {\n return PortalMember.getInitials(user);\n }\n return \"\"\n }\n\n get backgroundStyle(): string \n {\n if (this.background())\n {\n return \"url(\" + this.background() + \")\";\n }\n else \n {\n return \"none\";\n }\n }\n}\n","<mat-toolbar class=\"toolbar\" [style.background-image]=\"backgroundStyle\">\n\n @if(logo())\n {\n <a aria-label=\"Home\" [routerLink]=\"['home']\">\n <img src=\"{{logo()}}\" class=\"logo\" alt=\"Website logo\"/>\n </a>\n }\n @else {\n <a mat-icon-button aria-label=\"Home\" [routerLink]=\"['home']\">\n <mat-icon class=\"icon\">home</mat-icon>\n </a>\n <span>{{title()}}</span>\n }\n <button mat-icon-button style=\"margin: 5px\" aria-label=\"Toggle Nav Bar\">\n <mat-icon class=\"icon\" (click)=\"leftNavService.toggle()\">\n @if(leftNavService.wide()){\n menu\n }\n @else {\n menu_open\n }\n </mat-icon>\n </button>\n\n <span class=\"topbar-spacer\"></span>\n @if(user(); as user)\n {\n <span>{{user.username}}</span>\n \n <button mat-icon-button style=\"margin: 5px\" aria-label=\"User Profile\" [matMenuTriggerFor]=\"profile_menu\">\n <mat-icon class=\"icon\">person</mat-icon>\n </button>\n\n <mat-menu #profile_menu=\"matMenu\">\n <a mat-menu-item aria-label=\"My Profile\" [routerLink]=\"['/members/detail', user.id]\">\n <mat-icon>manage_accounts</mat-icon>\n <span>My Profile</span>\n </a> \n <a mat-menu-item aria-label=\"Get Support\" [routerLink]=\"['/feedback']\">\n <mat-icon>contact_support</mat-icon>\n <span>Get Support</span>\n </a> \n <button mat-menu-item (click)=\"onLogout()\">\n <mat-icon>logout</mat-icon>\n <span>Log Out</span>\n </button>\n\n </mat-menu>\n }\n @else {\n <span>Log In</span>\n <button matIconButton (click)=\"onLogin()\">\n <mat-icon class=\"icon\">login</mat-icon>\n </button>\n }\n</mat-toolbar>\n","import { Component, inject, viewChild, input, signal, computed } from '@angular/core';\nimport { RouterOutlet, RouterModule } from '@angular/router';\nimport { NgStyle } from '@angular/common';\n\nimport { MatSidenavModule, MatSidenavContent } from '@angular/material/sidenav';\nimport { MatListModule } from '@angular/material/list';\n\nimport { UserService, LeftNavService } from '../../services';\nimport { IPortalMemberDetail } from '../../models';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'lib-left-nav',\n imports: [MatSidenavModule, MatListModule, RouterOutlet, RouterModule, MatIconModule, MatTooltipModule, NgStyle],\n templateUrl: './left-nav.component.html',\n styleUrl: './left-nav.component.scss'\n})\nexport class LeftNavComponent {\n\n readonly background = input<string>();\n user = signal<IPortalMemberDetail | null>(null);\n width = computed(() => this.leftNavService.wide() ? \"200px\" : \"100px\");\n\n protected userService = inject(UserService);\n protected leftNavService = inject(LeftNavService);\n\n sideNavContent = viewChild(MatSidenavContent);\n\n constructor()\n {\n this.userService.loggedInUser.subscribe(user => this.user.set(user));\n }\n\n getGroupings() {\n return this.leftNavService.activeGroupings;\n }\n\n get backgroundStyle(): string \n {\n if (this.background())\n {\n return \"url(\" + this.background() + \")\";\n }\n else \n {\n return \"none\";\n }\n }\n}\n","<mat-sidenav-container class=\"leftnav-container\">\n @if(leftNavService.wide()){\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" [opened]=\"user()!== null\" style=\"width:200px; padding-top:0px\">\n <mat-nav-list>\n @for (grouping of leftNavService.activeGroupings(); track grouping) { \n <ul>\n @if(grouping.name)\n {\n <span>{{grouping.name}}</span>\n }\n @for (option of grouping.options; track option) {\n <li>\n <a mat-list-item \n [routerLink]=\"option.route\" \n routerLinkActive #rla=\"routerLinkActive\" \n [activated]=\"rla.isActive\">\n <div style=\"display:flex; vertical-align:middle;\">\n <mat-icon style=\"margin-right: 5px;\">{{option.icon}}</mat-icon><span>{{ option.name }}</span>\n </div>\n </a>\n </li>\n }\n </ul>\n }\n </mat-nav-list>\n </mat-sidenav>\n }\n @else{\n <mat-sidenav mode=\"side\" class=\"leftnav-side\" [opened]=\"user()!== null\" style=\"width: 64px;\">\n <mat-nav-list>\n @for (grouping of leftNavService.activeGroupings(); track grouping) { \n <ul>\n @if(grouping.name)\n {\n <span>{{grouping.name}}</span>\n }\n @for (option of grouping.options; track option) {\n <li>\n <a mat-list-item \n [routerLink]=\"option.route\" \n routerLinkActive #rla=\"routerLinkActive\" \n [activated]=\"rla.isActive\" matTooltip=\"{{option.name}}\">\n <div style=\"display:flex; vertical-align:middle;\">\n <mat-icon>{{option.icon}}</mat-icon>\n </div>\n </a>\n </li>\n }\n </ul>\n }\n </mat-nav-list>\n </mat-sidenav>\n }\n\n <mat-sidenav-content class=\"leftnav-content\" [style.background-image]=\"backgroundStyle\"> \n <router-outlet />\n </mat-sidenav-content>\n</mat-sidenav-container>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'lib-feedback',\n imports: [],\n templateUrl: './feedback.component.html',\n styleUrl: './feedback.component.scss'\n})\nexport class FeedbackComponent {\n\n}\n","<p>feedback works!</p>\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'lib-avatar',\n imports: [],\n templateUrl: './avatar.component.html',\n styleUrl: './avatar.component.scss'\n})\nexport class AvatarComponent {\n text = input(\"\");\n}\n","<div class=\"container\"> <span>{{text()}}</span> </div>","import { Component, inject, OnInit, input } from '@angular/core';\n\nimport { IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../../../../models';\nimport { UserService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\n\n@Component({\n selector: 'lib-user-detail',\n imports: [BackButtonComponent, DetailHeaderComponent],\n templateUrl: './user-detail.component.html',\n styleUrl: './user-detail.component.css'\n})\nexport class UserDetailComponent extends DetailView<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(UserService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n protected override canEdit(): boolean {\n if (!this.userService.loggedInUser)\n {\n return false;\n }\n\n if (this.item()?.id == this.userService.loggedInUser.value?.id)\n {\n return true;\n }\n return super.canEdit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n\n<div class=\"content-container\">\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.username\"\n [id]=\"item.id\"\n [route]=\"itemService.typePlural()\"\n [canEdit]=\"canEdit()\"\n [canDelete]=\"canDelete()\"\n (onDelete)=\"onDelete()\"></lib-detail-header>\n\n @if(item.profile){\n <div class=\"image-holder\">\n <img alt=\"User Profile Image\" src=\"{{item.profile}}\" style=\"height:120px;\">\n </div> \n }\n \n <div class=\"form-card\">\n <div class=\"item-field\">\n <span><b>Email: </b></span>\n {{item.email}}\n </div>\n \n <div class=\"item-field\">\n <span><b>First Name: </b></span>\n {{item.first_name}}\n </div>\n \n <div class=\"item-field\">\n <span><b>Last Name: </b></span>\n {{item.last_name}}\n </div>\n </div>\n \n </div>\n }\n</div>\n","import { inject } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\n\nimport { IPortalMemberCreate, IPortalMemberDetail} from '../../../../models/member';\nimport { IForm } from '../../../../models/core';\nimport { IFileRecord } from '../../../../models/file-record';\n\nexport interface IUserForm\n{\n username: FormControl<string | null>;\n email: FormControl<string | null>;\n first_name: FormControl<string | null>;\n last_name: FormControl<string | null>;\n phone: FormControl<string | null>;\n profile: FormControl<IFileRecord | null>;\n}\n\nexport class UserForm implements IForm<IPortalMemberCreate, IPortalMemberDetail> {\n private fb = inject(FormBuilder);\n form = this.fb.group<IUserForm>({\n username: this.fb.control<string>('', Validators.required),\n email: this.fb.control<string>('', Validators.required),\n first_name: this.fb.control<string>(''),\n last_name: this.fb.control<string>(''),\n phone: this.fb.control<string>(''),\n profile: this.fb.control<IFileRecord>(UserForm.getDefaultProfile()),\n });\n\n static getDefaultProfile(): IFileRecord\n {\n return {name: \"profile\", display_name: \"Profile Image\", file_type: \"image\", remote: \"\", local: \"\", file: null};\n }\n\n setValue(item: IPortalMemberDetail) {\n\n const profile = UserForm.getDefaultProfile();\n if (item.profile)\n {\n profile.remote = item.profile;\n } \n\n this.form.setValue({\n username: item.username,\n email: item.email,\n first_name: item.first_name,\n last_name: item.last_name,\n phone: item.phone,\n profile: profile\n });\n }\n\n createItem(): IPortalMemberCreate\n {\n const value = this.form.value;\n return {\n username: value.username || \"\",\n email: value.email || \"\",\n first_name: value.first_name || \"\",\n last_name: value.last_name || \"\",\n phone: value.phone || \"\",\n identifiers: []\n };\n }\n\n updateItem(item: IPortalMemberDetail): IPortalMemberDetail\n {\n const value = this.form.value;\n item.username = value.username || \"\";\n item.email = value.email || \"\";\n item.first_name = value.first_name || \"\";\n item.last_name = value.last_name || \"\";\n item.phone = value.phone || \"\";\n return item;\n }\n}","import { Component, inject, OnInit } from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { TitleCasePipe } from '@angular/common';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { IFileRecord } from '../../../../models/file-record';\nimport { EditView } from '../../../base/edit-view';\nimport { BackButtonComponent } from '../../../base/back-button/back-button.component';\nimport { FileUploadComponent } from '../../../base/file-upload/file-upload.component';\n\nimport { IPortalMemberDetail, IPortalMemberCreate, IPortalMemberList } from '../../../../models/member';\nimport { UserService } from '../../../../services/user.service';\n\nimport { UserForm } from './user-form';\n\n@Component({\n selector: 'lib-user-edit',\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n BackButtonComponent,\n MatInputModule,\n MatFormFieldModule,\n MatIconModule,\n FileUploadComponent,\n TitleCasePipe\n ],\n templateUrl: './user-edit.component.html',\n styleUrl: './user-edit.component.css'\n})\nexport class UserEditComponent extends EditView<IPortalMemberDetail, IPortalMemberList, IPortalMemberCreate> implements OnInit {\n\n protected override fileKeys: string[] = [\"profile\"];\n\n constructor() {\n super(inject(UserService), new UserForm());\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n get profileControl(): FormControl<IFileRecord>\n {\n return this.form.form.get('profile') as FormControl<IFileRecord>;\n }\n}\n","<lib-back-button></lib-back-button>\n\n<div class=\"content-container\">\n\n <div class=\"item-edit-container\">\n\n <h1 class=\"item-edit-header\">{{heading() | titlecase}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form.form\" (ngSubmit)=\"submit()\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label>Username</mat-label>\n <input matInput\n placeholder=\"Username\"\n type=\"text\"\n formControlName=\"username\"\n name=\"username\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label>Email</mat-label>\n <input matInput\n placeholder=\"Email\"\n type=\"text\"\n formControlName=\"email\"\n name=\"email\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label>First Name</mat-label>\n <input matInput\n placeholder=\"First Name\"\n type=\"text\"\n formControlName=\"first_name\"\n name=\"first_name\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field\">\n <mat-label>Last Name</mat-label>\n <input matInput\n placeholder=\"Last Name\"\n type=\"text\"\n formControlName=\"last_name\"\n name=\"last_name\">\n </mat-form-field>\n\n <lib-file-upload [control]=\"profileControl\"></lib-file-upload>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form_action_button\"\n type=\"submit\"\n [disabled]=\"!form.form.valid\">\n <mat-icon>save</mat-icon></button>\n \n <button mat-fab\n class=\"form_action_button\"\n type=\"button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon></button>\n </div> \n </form>\n </div>\n</div>\n","import { Component, input } from '@angular/core';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\n\nimport { IPortalMemberDetail } from '../../../../models';\n\n@Component({\n selector: 'lib-user-list-detail',\n imports: [MatIconModule, MatListModule],\n templateUrl: './user-list-detail.component.html',\n styleUrl: './user-list-detail.component.scss'\n})\nexport class UserListDetailComponent {\n item = input.required<IPortalMemberDetail>();\n even = input(true);\n selected = input(false);\n\n get title(): string \n {\n if (this.item().first_name && this.item().last_name)\n {\n return this.item().first_name + \" \" + this.item().last_name;\n }\n else \n {\n return this.item().username;\n }\n }\n}\n","<div mat-list-item class=\"container\" [class.even]=\"even() && !selected()\" [class.selected]=\"selected()\">\n @if(item().profile_thumbnail){\n <div class=\"image-holder\" style=\"width:35px;\">\n <img matListItemAvatar \n alt=\"User Avatar\" \n src=\"{{item().profile_thumbnail}}\" style=\"height:30px\">\n </div> \n }\n @else {\n <div class=\"image-holder\" style=\"width:35px;\">\n <mat-icon matListItemIcon>person</mat-icon>\n </div>\n }\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{title}}</p>\n <p matListItemLine>{{item().email}}</p>\n </div>\n</div>","import { Component, inject, viewChild } from '@angular/core';\n\nimport { UserService } from '../../../../services';\nimport { ListViewComponent } from '../../../base';\n\nimport { UserListDetailComponent } from '../list-detail/user-list-detail.component';\nimport { UserDetailComponent } from \"../detail/user-detail.component\";\n\n@Component({\n selector: 'lib-user',\n imports: [ListViewComponent,\n UserListDetailComponent,\n UserDetailComponent],\n templateUrl: './user.component.html',\n styleUrl: './user.component.css'\n})\n\nexport class UserComponent {\n itemService = inject(UserService);\n detailView = viewChild(UserDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n [itemWidth]=\"300\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n <lib-user-list-detail [item]=\"item\" [even]=\"even\" [selected]=\"selected\"></lib-user-list-detail>\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-user-detail [showBack]='false'></lib-user-detail>\n </ng-template>\n\n</lib-list-view>\n\n","import { Component, inject, input, OnInit } from '@angular/core';\n\nimport { IGroupCreate, IGroupDetail, IGroupList } from '../../../../models';\nimport { GroupService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\n\n@Component({\n selector: 'lib-group-detail',\n imports: [BackButtonComponent,\n DetailHeaderComponent],\n templateUrl: './group-detail.component.html',\n styleUrl: './group-detail.component.css'\n})\nexport class GroupDetailComponent extends DetailView<IGroupDetail, IGroupList, IGroupCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(GroupService));\n }\n\n ngOnInit() {\n this.onInit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n\n<div class=\"content-container\">\n @if(item(); as item) {\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [canEdit]=\"itemService.canEdit()\"\n [canDelete]=\"itemService.canDelete()\"\n [route]=\"itemService.typePlural()\"></lib-detail-header>\n \n <div class=\"item-field\">{{item.name}}</div>\n </div>\n }\n</div>\n","import { Component, inject, viewChild } from '@angular/core';\n\nimport { GroupService } from '../../../../services';\nimport { ListViewComponent } from '../../../base';\nimport { GroupDetailComponent } from '../detail/group-detail.component';\nimport { MatListModule } from '@angular/material/list';\n\n@Component({\n selector: 'lib-group',\n imports: [ListViewComponent, GroupDetailComponent, MatListModule],\n templateUrl: './group.component.html',\n styleUrl: './group.component.css'\n})\n\nexport class GroupComponent {\n itemService = inject(GroupService);\n detailView = viewChild(GroupDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n\n <div mat-list-item class=\"container\" [class.even]=\"even && !selected\" [class.selected]=\"selected\">\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{item.name}}</p>\n </div>\n </div>\n\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-group-detail [showBack]='false'></lib-group-detail>\n </ng-template>\n\n</lib-list-view>\n\n","import { Component, input } from '@angular/core';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { ICountry } from '../../../../models/address';\n\n@Component({\n selector: 'lib-address-edit',\n imports: [MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n ReactiveFormsModule\n ],\n templateUrl: './address-edit.component.html',\n styleUrl: './address-edit.component.scss'\n})\nexport class AddressEditComponent {\n countryOptions = input<ICountry[]>([]);\n form = input<FormGroup>();\n}\n","@if(form(); as form){\n<div [formGroup]=\"form\" style=\"display: flex; flex-direction: column; width:100%\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line1\">Line 1</mat-label>\n <input matInput placeholder=\"Address Line 1\" type=\"text\" id=\"line1\" formControlName=\"line1\" name=\"line1\"\n required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line2\">Line 2</mat-label>\n <input matInput placeholder=\"Address Line 2\" type=\"text\" id=\"line2\" formControlName=\"line2\" name=\"line1\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"line3\">Line 3</mat-label>\n <input matInput placeholder=\"Address Line 3\" type=\"text\" id=\"line3\" formControlName=\"line3\" name=\"line3\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"city\">City</mat-label>\n <input matInput placeholder=\"City\" type=\"text\" id=\"city\" formControlName=\"city\" name=\"city\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"region\">Region</mat-label>\n <input matInput placeholder=\"Region\" type=\"text\" id=\"region\" formControlName=\"region\" name=\"region\" required>\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"line1\">Post Code</mat-label>\n <input matInput placeholder=\"Post Code\" type=\"text\" id=\"postcode\" formControlName=\"postcode\" name=\"postcode\">\n </mat-form-field>\n\n <mat-form-field class=\"form-field\">\n <mat-label for=\"country\">Country</mat-label>\n <mat-select formControlName=\"country\" name=\"country\" id=\"country\" required>\n @for(country of countryOptions(); track $index){\n <mat-option [value]=\"country.code\">{{country.name}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n</div>\n}","import { Component, input } from '@angular/core';\n\nimport { IAddressDetail } from '../../../../models/address';\n\n@Component({\n selector: 'lib-address-detail',\n imports: [],\n templateUrl: './address-detail.component.html',\n styleUrl: './address-detail.component.scss'\n})\nexport class AddressDetailComponent {\n address = input<IAddressDetail>();\n}\n","@if(address(); as address){\n<div class=\"item-field\" style=\"display:flex;flex-wrap: wrap;justify-content: center;align-content: center;\">\n <span style=\"margin-left: 3px;\">{{address.line1}}, </span>\n @if(address.line2)\n {\n <span style=\"margin-left: 3px;\">{{address.line2}},</span>\n }\n @if(address.line3){\n <span style=\"margin-left: 3px;\">{{address.line3}},</span>\n }\n @if(address.city){\n <span style=\"margin-left: 3px;\">{{address.city}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.region}},</span>\n @if(address.postcode){ \n <span style=\"margin-left: 3px;\">{{address.postcode}},</span>\n }\n <span style=\"margin-left: 3px;\">{{address.country_name}}</span>\n</div>\n}","import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\n\nimport { IAddressCreate, IAddressDetail } from '../../../../models/address';\n\nexport interface IAddressForm {\n line1: FormControl<string | null>;\n line2: FormControl<string | null>;\n line3: FormControl<string | null>;\n city: FormControl<string | null>;\n region: FormControl<string | null>;\n postcode: FormControl<string | null>;\n country: FormControl<string | null>;\n}\n\nexport class AddressForm {\n\n static createForm(fb: FormBuilder): FormGroup<IAddressForm> {\n return fb.group<IAddressForm>({\n line1: fb.control<string>('', Validators.required),\n line2: fb.control<string>(''),\n line3: fb.control<string>(''),\n city: fb.control<string>(''),\n region: fb.control<string>('', Validators.required),\n postcode: fb.control<string>(''),\n country: fb.control<string>('', Validators.required)\n });\n }\n\n static fromItem(item: IAddressDetail, fb: FormBuilder): FormGroup<IAddressForm>\n {\n const form = this.createForm(fb);\n this.setValue(form, item);\n return form;\n }\n\n static setValue(form: FormGroup<IAddressForm>, item: IAddressDetail) {\n form.setValue({\n line1: item.line1,\n line2: item.line2 || \"\",\n line3: item.line3 || \"\",\n city: item.city || \"\",\n region: item.region,\n postcode: item.postcode || \"\",\n country: item.country\n });\n }\n\n static createItem(form: FormGroup<IAddressForm>): IAddressCreate {\n const value = form.value;\n return {\n line1: value.line1 || \"\",\n line2: value.line2 || null,\n line3: value.line3 || null,\n city: value.city || null,\n region: value.region || \"\",\n postcode: value.postcode || null,\n country: value.country || \"\"\n }\n }\n\n static updateItem(form: FormGroup<IAddressForm>, item: IAddressDetail): IAddressDetail {\n const value = form.value;\n item.line1 = value.line1 || \"\";\n item.line2 = value.line2 || null;\n item.line3 = value.line3 || null;\n item.city = value.city || null;\n item.region = value.region || \"\";\n item.postcode = value.postcode || null;\n item.country = value.country || \"\";\n return item;\n }\n}","import { Component, OnInit, inject, input } from '@angular/core';\n\nimport { IOrganizationCreate, IOrganizationDetail, IOrganizationList } from '../../../../models';\nimport { OrganizationService } from '../../../../services';\nimport { DetailView, BackButtonComponent, DetailHeaderComponent } from '../../../base';\nimport { AddressDetailComponent } from \"../../address/detail/address-detail.component\";\n\n@Component({\n selector: 'lib-organization-detail',\n imports: [BackButtonComponent,\n DetailHeaderComponent, AddressDetailComponent],\n templateUrl: './organization-detail.component.html',\n styleUrl: './organization-detail.component.css'\n})\nexport class OrganizationDetailComponent extends DetailView<IOrganizationDetail, IOrganizationList, IOrganizationCreate> implements OnInit {\n\n showBack = input<boolean>(true);\n\n constructor() {\n super(inject(OrganizationService));\n }\n\n ngOnInit()\n {\n this.onInit();\n }\n}\n","@if(showBack())\n{\n<lib-back-button style=\"position: absolute;\"></lib-back-button>\n}\n<div class=\"content-container\">\n\n @if(item(); as item){\n <div class=\"item-detail-container\">\n\n <lib-detail-header\n [text]=\"item.name\"\n [id]=\"item.id\"\n [canEdit]=\"itemService.canEdit()\"\n [canDelete]=\"itemService.canDelete()\"\n [route]=\"itemService.typePlural()\"\n (deleteClicked)=\"onDeleteClicked()\"></lib-detail-header>\n\n <div class=\"item-field\">\n <p style=\"text-align: justify; text-justify: inter-word; max-width: 600px;\">{{item.description}}</p>\n </div>\n \n <h3>Address</h3>\n <lib-address-detail [address]=\"item.address\"></lib-address-detail>\n\n <h3>Website</h3>\n <div class=\"item-field\">\n <a href=\"{{item.website}}\" target=\"_blank\" rel=\"noopener noreferrer\">{{item.website}}</a>\n </div>\n </div>\n }\n</div>\n","import { Component, inject, viewChild } from '@angular/core';\n\nimport { TableColumn, ListViewComponent } from '../../../base';\nimport { OrganizationService } from '../../../../services';\nimport { OrganizationDetailComponent } from \"../detail/organization-detail.component\";\n\n@Component({\n selector: 'lib-organization',\n imports: [\n ListViewComponent,\n OrganizationDetailComponent\n],\n styleUrl: './organization.component.css',\n templateUrl: './organization.component.html'\n})\n\nexport class OrganizationComponent {\n itemService = inject(OrganizationService);\n columns: TableColumn[] = [{name: 'name', title: 'Name', element_type: 'string'},\n {name: 'website', title: 'Website', element_type: 'url'},\n {name: 'is_partner', title: 'Is Partner', element_type: 'boolean'}];\n\n detailView = viewChild(OrganizationDetailComponent);\n\n onSelected(id: number | null)\n {\n if(id)\n {\n this.detailView()?.onSelection(id);\n }\n }\n}\n","<lib-list-view\n [itemService]=\"itemService\"\n [listItemTemplate]=\"listItemTemplate\"\n [itemDetailTemplate]=\"itemDetailTemplate\"\n [viewType]=\"'list'\"\n [itemHeight]=\"60\"\n (selected)=\"onSelected($event)\"\n >\n <ng-template #listItemTemplate let-item=\"item\" let-even=\"even\" let-selected=\"selected\">\n <div mat-list-item class=\"container\" [class.even]=\"even && !selected\" [class.selected]=\"selected\">\n <div class=\"text-container\">\n <p matListItemTitle style=\"margin-bottom: 0px; margin-top: 0px\">{{item.name}}</p>\n </div>\n </div>\n </ng-template>\n\n <ng-template #itemDetailTemplate>\n <lib-organization-detail [showBack]='false'></lib-organization-detail>\n </ng-template>\n\n</lib-list-view>\n\n\n\n","import { inject } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\n\nimport { IOrganizationDetail, IOrganizationCreate } from '../../../../models/organization';\nimport { AddressForm, IAddressForm } from '../../address/edit/address-form';\nimport { IForm } from '../../../../models/core';\n\nexport interface IOrganizationForm\n{\n name: FormControl<string | null>;\n acronym: FormControl<string | null>;\n description: FormControl<string | null>;\n website: FormControl<string | null>;\n address: FormGroup<IAddressForm>;\n}\n\nexport class OrganizationForm implements IForm<IOrganizationCreate, IOrganizationDetail> {\n private fb = inject(FormBuilder);\n form: FormGroup<IOrganizationForm>;\n\n constructor()\n {\n this.form = OrganizationForm.createForm(this.fb);\n }\n\n static createForm(fb: FormBuilder)\n {\n return fb.group<IOrganizationForm>({\n name: fb.control<string>('', Validators.required),\n acronym: fb.control<string>(''),\n description: fb.control<string>(''),\n website: fb.control<string>(''),\n address: AddressForm.createForm(fb)\n });\n }\n\n get address(): FormGroup<IAddressForm>\n {\n return this.form.get('address') as FormGroup<IAddressForm>;\n }\n\n setValue(item: IOrganizationDetail) {\n\n this.form.patchValue({\n name: item.name,\n acronym: item.acronym,\n description: item.description,\n website: item.website\n });\n AddressForm.setValue(this.address, item.address);\n }\n\n createItem(): IOrganizationCreate\n {\n const value = this.form.value;\n return {\n name: value.name || \"\",\n acronym: value.acronym || \"\",\n description: value.description || \"\",\n website: value.website || \"\",\n address: AddressForm.createItem(this.address),\n members: []\n };\n } \n\n updateItem(item: IOrganizationDetail): IOrganizationDetail\n {\n item.name = this.form.value.name || \"\";\n item.acronym = this.form.value.acronym || \"\";\n item.description = this.form.value.description || \"\";\n item.website = this.form.value.website || \"\";\n item.address = AddressForm.updateItem(this.address, item.address);\n return item;\n }\n\n}","import { Component, OnInit, inject } from '@angular/core';\nimport { TitleCasePipe } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatTabsModule } from '@angular/material/tabs';\n\nimport { IPortalMemberDetail, IOrganizationDetail, IOrganizationCreate, IOrganizationList} from '../../../../models';\nimport { OrganizationService, AddressService } from '../../../../services';\n\nimport { EditView, BackButtonComponent, SelectTableComponent, MemberSelectionManager } from '../../../base';\nimport { AddressEditComponent } from \"../../address/edit/address-edit.component\";\n\nimport { OrganizationForm } from './organization-form';\nimport { IAddressForm } from '../../address/edit/address-form';\n\n@Component({\n selector: 'lib-organization-edit',\n imports: [\n ReactiveFormsModule,\n MatButtonModule,\n MatInputModule,\n MatSelectModule,\n MatFormFieldModule,\n MatIconModule,\n MatCheckboxModule,\n MatExpansionModule,\n BackButtonComponent,\n AddressEditComponent,\n SelectTableComponent,\n MatTabsModule,\n TitleCasePipe\n],\n templateUrl: './organization-edit.component.html',\n styleUrl: './organization-edit.component.css'\n})\n\nexport class OrganizationEditComponent extends EditView<IOrganizationDetail, IOrganizationList, IOrganizationCreate> implements OnInit {\n\n addressService = inject(AddressService);\n\n selectionManager = new MemberSelectionManager();\n\n constructor() {\n super(inject(OrganizationService), new OrganizationForm());\n this.addressService.refreshCountryOptions();\n }\n\n ngOnInit() {\n this.onInit();\n }\n\n addressForm(): FormGroup<IAddressForm>\n {\n return (this.form as OrganizationForm).address;\n }\n\n override createItem(): IOrganizationCreate\n {\n const item = this.form.createItem();\n item.members = this.selectionManager.selected().map(m => m.url);\n return item\n }\n\n protected override updateItem(item: IOrganizationDetail): IOrganizationDetail {\n item = this.form.updateItem(item);\n item.members = this.selectionManager.selected().map(m => m.url);\n return item;\n }\n\n override onItemAndUserAvailable(item: IOrganizationDetail, _: IPortalMemberDetail) {\n this.selectionManager.fetchCandidates(this.itemService.typename, item.id);\n }\n}\n","<lib-back-button style=\"position: absolute;\"></lib-back-button>\n\n<div class=\"content-container\">\n\n <div class=\"item-edit-container\" style=\"width:100%\">\n \n <h1 class=\"item-edit-header\" style=\"padding: 0px; margin-top: 0px; margin-bottom: 5px;\">{{heading() | titlecase}}</h1>\n\n <form class=\"form-card\" [formGroup]=\"form.form\" (ngSubmit)=\"submit()\">\n\n <mat-tab-group mat-stretch-tabs=\"true\" mat-align-tabs=\"center\" style=\"width:100%;\">\n\n <mat-tab label=\"Overview\" style=\"width:100%;\">\n <div style=\"padding:10px;\">\n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"name\">Name</mat-label>\n <input matInput placeholder=\"Name\"\n type=\"text\"\n id=\"name\"\n formControlName=\"name\"\n name=\"name\"\n required>\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"acronym\">Acronym</mat-label> \n <input matInput placeholder=\"Acronym\"\n type=\"text\"\n id=\"acronym\"\n formControlName=\"acronym\"\n name=\"acronym\">\n </mat-form-field>\n \n <mat-form-field class=\"form-field-wide\">\n <mat-label for=\"description\">Description</mat-label>\n <textarea matInput placeholder=\"Description\"\n type=\"text\"\n id=\"description\"\n formControlName=\"description\"\n name=\"description\"\n class=\"medium-textarea\"\n required></textarea>\n </mat-form-field>\n\n <mat-accordion style=\"width:100%\">\n <mat-expansion-panel style=\"width:100%\" [expanded]=\"true\">\n <mat-expansion-panel-header>\n <mat-panel-title>Address</mat-panel-title>\n </mat-expansion-panel-header>\n\n <lib-address-edit \n [countryOptions]=\"addressService.countryOptions()\"\n [form]=\"addressForm()\"\n ></lib-address-edit>\n </mat-expansion-panel>\n </mat-accordion>\n </div>\n </mat-tab>\n\n <mat-tab label=\"Members\" style=\"width:100%;\">\n <div style=\"padding:10px\">\n <lib-select-table style=\"width:100%\" [selected]=\"selectionManager.selected()\"\n [itemType]=\"'Members'\"\n [columns]=\"selectionManager.columns\"\n [itemTemplate]=\"itemTemplate\"\n [options]=\"selectionManager.candidates()\"\n (itemAdded)=\"selectionManager.onAdded($event)\"\n (itemRemoved)=\"selectionManager.onRemoved($event)\"\n (searchChanged)=\"selectionManager.onSearchChanged($event)\">\n </lib-select-table>\n <ng-template #itemTemplate let-item=\"item\">\n <div>\n <p><b>{{item.first_name}} {{item.last_name}} ({{item.username}})</b></p>\n <p>{{item.email}}</p>\n </div>\n </ng-template>\n </div>\n </mat-tab>\n\n </mat-tab-group>\n\n <div class=\"button_group\">\n <button mat-fab\n class=\"form-action-button\"\n type=\"submit\"\n [disabled]=\"!form.form.valid || !form.form.dirty\">\n <mat-icon>save</mat-icon>\n </button>\n \n <button mat-fab\n type=\"button\"\n class=\"form-action-button\"\n (click)=\"cancel()\">\n <mat-icon>cancel</mat-icon>\n </button>\n </div>\n </form>\n </div>\n</div>\n","/*\n * Public API Surface of ichec-angular-core\n */\n\nexport * from './lib/models';\nexport * from './lib/services';\nexport * from './lib/views';\n\nexport * from './lib/views/api/user/detail/user-detail.component';\nexport * from './lib/views/api/user/edit/user-edit.component';\nexport * from './lib/views/api/user/list/user.component';\nexport * from './lib/views/api/group/detail/group-detail.component';\nexport * from './lib/views/api/group/list/group.component';\nexport * from './lib/views/api/address/edit/address-edit.component';\nexport * from './lib/views/api/address/detail/address-detail.component';\nexport * from './lib/views/api/address/edit/address-form';\nexport * from './lib/views/api/organization/list/organization.component';\nexport * from './lib/views/api/organization/detail/organization-detail.component';\nexport * from './lib/views/api/organization/edit/organization-edit.component';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4","i5","i7","i8","i3","i6"],"mappings":"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"}