@wertzui/ngx-restworld-client 17.1.1 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"wertzui-ngx-restworld-client.mjs","sources":["../../../projects/ngx-restworld-client/src/lib/constants/link-names.ts","../../../projects/ngx-restworld-client/src/lib/services/avatar-generator.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-avatar/restworld-avatar.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-avatar/restworld-avatar.component.html","../../../projects/ngx-restworld-client/src/lib/models/special-properties.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-label/restworld-label.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-label/restworld-label.component.html","../../../projects/ngx-restworld-client/src/lib/pipes/clr-format.pipe.ts","../../../projects/ngx-restworld-client/src/lib/pipes/property-type-format.pipe.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.ts","../../../projects/ngx-restworld-client/src/lib/services/problem.service.ts","../../../projects/ngx-restworld-client/src/lib/services/restworld-client.ts","../../../projects/ngx-restworld-client/src/lib/services/restworld-client-collection.ts","../../../projects/ngx-restworld-client/src/lib/services/options.service.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-displays.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-collection/restworld-display-collection.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display/restworld-display.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-dropdown/restworld-display-dropdown.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-element/restworld-display-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-object/restworld-display-object.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-simple/restworld-display-simple.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-template/restworld-display-template.component.html","../../../projects/ngx-restworld-client/src/lib/pipes/safe-url.pipe.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-file/restworld-file.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-file/restworld-file.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-validation-errors/restworld-validation-errors.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-validation-errors/restworld-validation-errors.component.html","../../../projects/ngx-restworld-client/src/lib/util/debounce.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-image/restworld-image.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-image/restworld-image.component.html","../../../projects/ngx-restworld-client/src/lib/directives/property.directives.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-inputs.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-form-element/restworld-form-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-collection/restworld-input-collection.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input/restworld-input.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-dropdown/restworld-input-dropdown.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-object/restworld-input-object.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-simple/restworld-input-simple.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-template/restworld-input-template.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-form/restworld-form.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-form/restworld-form.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-id-navigation/restworld-id-navigation.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-id-navigation/restworld-id-navigation.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-menu-button/restworld-menu-button.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-menu-button/restworld-menu-button.component.html","../../../projects/ngx-restworld-client/src/lib/services/odata-visitor.ts","../../../projects/ngx-restworld-client/src/lib/services/odata-filter-parser.ts","../../../projects/ngx-restworld-client/src/lib/services/odata.service.ts","../../../projects/ngx-restworld-client/src/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.ts","../../../projects/ngx-restworld-client/src/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-table/restworld-table.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-table/restworld-table.component.html","../../../projects/ngx-restworld-client/src/lib/models/restworld-options.ts","../../../projects/ngx-restworld-client/src/lib/pipes/as.pipe.ts","../../../projects/ngx-restworld-client/src/lib/services/settings.service.ts","../../../projects/ngx-restworld-client/src/lib/services/opentelemetry.service.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-edit-view/restworld-edit-view.component.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-edit-view/restworld-edit-view.component.html","../../../projects/ngx-restworld-client/src/lib/views/restworld-list-view/restworld-list-view.component.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-list-view/restworld-list-view.component.html","../../../projects/ngx-restworld-client/src/lib/services/openTelemetryHttpInterceptor.ts","../../../projects/ngx-restworld-client/src/lib/provide-restworld.ts","../../../projects/ngx-restworld-client/src/public-api.ts","../../../projects/ngx-restworld-client/src/wertzui-ngx-restworld-client.ts"],"sourcesContent":["/**\r\n * Well known link names.\r\n */\r\nexport enum LinkNames {\r\n get = \"Get\",\r\n getList = \"GetList\",\r\n post = \"Post\",\r\n put = \"Put\",\r\n delete = \"Delete\",\r\n new = \"New\"\r\n}\r\n","import { Injectable, Input } from '@angular/core';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * A class that generates avatars based on a given name or email.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AvatarGenerator {\r\n private static _imageCache: Map<string, SafeUrl> = new Map<string, SafeUrl>();\r\n private static _nonWordRegex = new RegExp('\\\\W');\r\n\r\n /**\r\n * Override this method to provide a custom implementation for retrieving the image for a user.\r\n * If this method is not overridden, the image will always be empty, resulting in the avatar always be shown as label.\r\n * @param nameOrEmail The name or email of the user whose image should be retrieved.\r\n * @returns A Promise that resolves with a SafeUrl object representing the user's image, or an empty string if no image is available.\r\n */\r\n public getImageAsyncOverride: (nameOrEmail: string) => Promise<SafeUrl> = () => Promise.resolve('');\r\n\r\n // from https://stackoverflow.com/a/66494926/1378307\r\n private static getBackgroundColor(\r\n text: string,\r\n minLightness = 40,\r\n maxLightness = 80,\r\n minSaturation = 30,\r\n maxSaturation = 100,\r\n ): string {\r\n if (!text) return '#aaa';\r\n\r\n const hash = [...text].reduce((acc, char) => {\r\n return char.charCodeAt(0) + ((acc << 5) - acc);\r\n }, 0);\r\n\r\n return (\r\n 'hsl(' +\r\n (hash % 360) +\r\n ', ' +\r\n ((hash % (maxSaturation - minSaturation)) + minSaturation) +\r\n '%, ' +\r\n ((hash % (maxLightness - minLightness)) + minLightness) +\r\n '%)'\r\n );\r\n }\r\n\r\n private static getLocalPartOfEmailAddress(email: string): string {\r\n const indexOfAt = email.indexOf('@');\r\n if (indexOfAt < 2) {\r\n if (indexOfAt >= 0) {\r\n if (indexOfAt === email.length - 1)\r\n return email.substring(0, indexOfAt);\r\n return email.substring(indexOfAt + 1);\r\n }\r\n } else {\r\n return email.substring(0, indexOfAt);\r\n }\r\n\r\n return email;\r\n }\r\n\r\n private static getTwoUppercaseLettersFromName(name: string): string {\r\n // Too short to do anything besides just returning the name\r\n if (name.length <= 2) {\r\n return name.toUpperCase();\r\n }\r\n\r\n // Try to split by non word characters\r\n const splittedByNonWord = name.split(AvatarGenerator._nonWordRegex);\r\n if (splittedByNonWord.length > 1) {\r\n return (splittedByNonWord[0][0] + splittedByNonWord[1][0]).toUpperCase();\r\n }\r\n\r\n // Try to split by upper case letters\r\n const upperCaseLetters = [...name]\r\n .filter((c) => c.toUpperCase() === c && !AvatarGenerator._nonWordRegex.test(c))\r\n .join();\r\n if (upperCaseLetters.length > 1) {\r\n return upperCaseLetters.substring(0, 2);\r\n }\r\n\r\n // Just return the first 2 letters\r\n return name.substring(0, 2).toUpperCase();\r\n }\r\n\r\n /**\r\n * Retrieves the image for the given name or email address from the cache if it exists,\r\n * otherwise retrieves it from the server and caches it for future use.\r\n * @param nameOrEmail The name or email address of the user to retrieve the image for.\r\n * @returns A Promise that resolves to a SafeUrl representing the retrieved image.\r\n */\r\n public async getImageAsync(nameOrEmail: string): Promise<SafeUrl> {\r\n let promise = AvatarGenerator._imageCache.get(nameOrEmail);\r\n\r\n if (promise === undefined) {\r\n promise = this.getImageAsyncOverride(nameOrEmail);\r\n AvatarGenerator._imageCache.set(nameOrEmail, promise);\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Gets the label for the avatar based on the given name or email.\r\n * If an image is available for the given name or email, an empty string is returned.\r\n * Otherwise, the label is generated from the name or email.\r\n * The label always consists of 2 uppercase letters.\r\n * @param nameOrEmail The name or email to generate the label from.\r\n * @returns The label for the avatar.\r\n */\r\n public async getLabelAsync(nameOrEmail: string): Promise<string> {\r\n if (!nameOrEmail)\r\n return '';\r\n\r\n if (await this.getImageAsync(nameOrEmail))\r\n return '';\r\n\r\n const name = AvatarGenerator.getLocalPartOfEmailAddress(nameOrEmail);\r\n const initials = AvatarGenerator.getTwoUppercaseLettersFromName(name);\r\n\r\n return initials;\r\n }\r\n\r\n /**\r\n * Gets the style object for the avatar based on the given name or email.\r\n * @param nameOrEmail - The name or email of the user.\r\n * @returns A Promise that resolves to the style object containing the background color and foreground color of the avatar.\r\n * If the image for the user is found, returns undefined.\r\n */\r\n public async getStyleAsync(nameOrEmail: string,): Promise<{ 'background-color': string; 'color': string } | undefined> {\r\n if (await this.getImageAsync(nameOrEmail))\r\n return undefined;\r\n\r\n const foregroundColor = '#ffffff';\r\n const backgroundColor = AvatarGenerator.getBackgroundColor(nameOrEmail);\r\n\r\n const style = {\r\n 'background-color': backgroundColor,\r\n 'color': foregroundColor,\r\n };\r\n\r\n return style;\r\n }\r\n}\r\n","import { Component, computed, input } from '@angular/core';\nimport { AvatarGenerator } from '../../services/avatar-generator';\nimport { AvatarModule } from \"primeng/avatar\";\nimport { TooltipModule } from \"primeng/tooltip\";\nimport { AsyncPipe } from \"@angular/common\";\n\n/**\n * This component displays an avatar for a given user.\n * The avatar consists of an image or a 2 character label in a circle, based on what the `AvatarGenerator` returns for that user.\n * If you have not overridden the `AvatarGenerator`'s `getImageAsyncOverride` method, the image will always be empty and the label will be generated from the user's name or email.\n * @example\n * <rw-avatar [user]=\"'John Doe'\"></rw-avatar>\n */\n@Component({\n selector: 'rw-avatar',\n templateUrl: './restworld-avatar.component.html',\n styleUrls: ['./restworld-avatar.component.css'],\n standalone: true,\n imports: [AvatarModule, TooltipModule, AsyncPipe]\n})\nexport class RestWorldAvatarComponent {\n /**\n * The username of the user to display an avatar for.\n */\n public readonly user = input.required<string>();\n public readonly image = computed(async () => await this._generator.getImageAsync(this.user()));\n public readonly label = computed(async () => await this._generator.getLabelAsync(this.user()));\n public readonly style = computed(async () => await this._generator.getStyleAsync(this.user()));\n public readonly tooltip = computed(() => this.user() ?? '');\n\n constructor(\n private readonly _generator: AvatarGenerator\n ) {\n }\n}\n","<p-avatar \n [pTooltip]=\"tooltip()\" \n tooltipPosition=\"top\" \n [image]=\"$any(image() | async)\" \n [label]=\"$any(label() | async)\" \n [style]=\"style() | async\"\n shape=\"circle\">\n</p-avatar>","import { Property, Options, SimpleValue } from '@wertzui/ngx-hal-client'\r\nimport { RestWorldImage } from './restworld-image';\r\n\r\n/**\r\n * A property that represents an image.\r\n */\r\nexport class PropertyWithImage extends Property<string, never, never> { \r\n restWorldImage!: RestWorldImage \r\n}\r\n\r\n/**\r\n * A property that represents a dropdown.\r\n */\r\nexport class PropertyWithOptions<TValue extends SimpleValue = SimpleValue, OptionsPromptField extends string = \"prompt\", OptionsValueField extends string = \"value\"> extends Property<TValue, OptionsPromptField, OptionsValueField> { \r\n declare options: Options<TValue, OptionsPromptField, OptionsValueField> \r\n};\r\n","import { Component, input } from '@angular/core';\nimport { ControlContainer, FormGroupDirective } from '@angular/forms';\nimport { Property, PropertyType, SimpleValue } from '@wertzui/ngx-hal-client';\n\n/**\n * A label that is generated from the given property.\n * If you also want an input element, you can either use {@link RestWorldFormElement} `<rw-form-element>` to have a label and an input rendered,\n * or use {@link RestWorldInput} `<rw-input>` which will just render the input element, so you can freely place this label.\n * @example\n * <rw-label [property]=\"property\"></rw-label>\n */\n@Component({\n selector: 'rw-label',\n templateUrl: './restworld-label.component.html',\n styleUrls: ['./restworld-label.component.css'],\n standalone: true,\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }]\n})\nexport class RestWorldLabelComponent<TProperty extends Property<SimpleValue, string, string>> {\n /**\n * The property to be displayed.\n * @required\n **/\n readonly property = input.required<TProperty>();\n\n public get PropertyType() {\n return PropertyType;\n }\n}\n","@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n// @ts-ignore\r\nimport * as clrFormat from 'clr-format';\r\n\r\n@Pipe({\r\n name: 'clrFormat',\r\n standalone: true\r\n})\r\n/**\r\n * A pipe that formats a value using a specified format string.\r\n * Have a look at https://learn.microsoft.com/en-us/dotnet/standard/base-types/formatting-types to see what is supported.\r\n * @example\r\n * <div>{{ value | clrFormat: 'yyyy-MM-dd' }}</div>\r\n */\r\nexport class ClrFormatPipe implements PipeTransform {\r\n private static readonly formatFunction = ClrFormatPipe.getFormatFunction();\r\n\r\n private static getFormatFunction(): (format: string, value: any) => string {\r\n // Depending if this is bundled with webpack or not, the default export will be different\r\n return clrFormat.default ?? clrFormat;\r\n }\r\n\r\n public transform(value: any, format?: string): string {\r\n if (format === undefined)\r\n return value;\r\n\r\n return format.includes(\"{0\") ? ClrFormatPipe.formatFunction(format, value) : ClrFormatPipe.formatFunction(\"{0:\" + format + \"}\", value);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ClrFormatPipe } from './clr-format.pipe';\r\nimport { PropertyType } from '@wertzui/ngx-hal-client';\r\n\r\n@Pipe({\r\n name: 'propertyTypeFormat',\r\n standalone: true\r\n})\r\n/**\r\n * A pipe that formats the value of a {@link Property} based on its {@link PropertyType}.\r\n * @example\r\n * <div>{{ value | propertyTypeFormat: property.type }}</div>\r\n */\r\nexport class PropertyTypeFormatPipe implements PipeTransform {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yyyy\")\r\n .replace(\"33\", \"yy\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n private static readonly _typeToFormatMap = new Map<PropertyType, string>([\r\n [PropertyType.Hidden, \"\"],\r\n [PropertyType.Text, \"{0}\"],\r\n [PropertyType.Textarea, \"{0}\"],\r\n [PropertyType.Search, \"{0}\"],\r\n [PropertyType.Tel, \"{0}\"],\r\n [PropertyType.Url, \"{0}\"],\r\n [PropertyType.Email, \"{0}\"],\r\n [PropertyType.Password, \"{0}\"],\r\n [PropertyType.Date, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \"}\"],\r\n [PropertyType.Month, \"{0}\"],\r\n [PropertyType.Week, \"{0}\"],\r\n [PropertyType.Time, \"{0:\" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.DatetimeLocal, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \" \" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.Number, \"{0}\"],\r\n [PropertyType.Range, \"{0}\"],\r\n [PropertyType.Color, \"{0}\"],\r\n [PropertyType.Bool, \"{0}\"],\r\n [PropertyType.DatetimeOffset, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \" \" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.Duration, \"{0}\"],\r\n [PropertyType.Image, \"{0}\"],\r\n [PropertyType.File, \"{0}\"],\r\n [PropertyType.Collection, \"{0}\"],\r\n [PropertyType.Object, \"{0}\"],\r\n [PropertyType.Percent, \"{0:P}\"],\r\n [PropertyType.Currency, \"{0:N}\"],\r\n ]);\r\n\r\n public constructor(private readonly _clrFormatPipe: ClrFormatPipe) {\r\n }\r\n\r\n public transform(value: any, type?: PropertyType): string {\r\n const format = type === undefined ? \"{0}\" : (PropertyTypeFormatPipe._typeToFormatMap.get(type) ?? \"{0}\");\r\n return this._clrFormatPipe.transform(value, format);\r\n }\r\n}\r\n","/*\r\n# PRIMENG LICENSES\r\n\r\n## PRIMENG COMMUNITY VERSIONS LICENSE\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2016-2025 PrimeTek\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n forwardRef,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n TemplateRef,\r\n viewChild,\r\n ViewEncapsulation,\r\n contentChild,\r\n model,\r\n contentChildren,\r\n computed\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\r\nimport { BaseComponent } from 'primeng/basecomponent';\r\nimport { CheckboxChangeEvent, CheckboxStyle } from 'primeng/checkbox';\r\n\r\nexport const TRI_STATE_CHECKBOX_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TriStateCheckbox),\r\n multi: true,\r\n};\r\n/**\r\n * Checkbox is an extension to standard checkbox element with theming.\r\n * @group Components\r\n */\r\n@Component({\r\n selector: 'p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box',\r\n standalone: true,\r\n imports: [CommonModule, SharedModule],\r\n template: `\r\n <div [style]=\"style()\" [class]=\"styleClass()\" [ngClass]=\"containerClass()\" [attr.data-p-highlight]=\"model() === true\" [attr.data-p-checked]=\"model() === true\" [attr.data-p-disabled]=\"disabled()\" [title]=\"model()\">\r\n <input\r\n #input\r\n [attr.id]=\"inputId()\"\r\n type=\"checkbox\"\r\n [value]=\"model()\"\r\n [attr.name]=\"name()\"\r\n [checked]=\"model()\"\r\n [attr.tabindex]=\"tabindex()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.required]=\"required()\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [style]=\"inputStyle()\"\r\n [class]=\"inputClass()\"\r\n [ngClass]=\"{ 'p-checkbox-input': true }\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (change)=\"handleChange($event)\"\r\n />\r\n <div class=\"p-checkbox-box\">\r\n @if (!checkboxIconTemplate() && !_checkboxIconTemplate) {\r\n @if (model() === true) {\r\n @if (checkboxIcon()) {\r\n <span class=\"p-checkbox-icon\" [ngClass]=\"checkboxIcon()\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n @else {\r\n <span class=\"p-checkbox-icon pi pi-check\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n }\r\n @else if (model() === null) {\r\n <span class=\"p-checkbox-icon pi pi-minus\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n }\r\n <ng-template *ngTemplateOutlet=\"checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }\"></ng-template>\r\n </div>\r\n </div>\r\n `,\r\n providers: [TRI_STATE_CHECKBOX_VALUE_ACCESSOR, CheckboxStyle],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TriStateCheckbox\r\n extends BaseComponent\r\n implements AfterContentInit, ControlValueAccessor {\r\n /**\r\n * Value of the checkbox.\r\n * @group Props\r\n */\r\n readonly value = input<any>();\r\n /**\r\n * Name of the checkbox group.\r\n * @group Props\r\n */\r\n readonly name = input<string>();\r\n /**\r\n * When present, it specifies that the element should be disabled.\r\n * @group Props\r\n */\r\n readonly disabled = model<boolean | undefined>(undefined);\r\n /**\r\n * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\r\n * @group Props\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n /**\r\n * Used to define a string that labels the input element.\r\n * @group Props\r\n */\r\n readonly ariaLabel = input<string>();\r\n /**\r\n * Index of the element in tabbing order.\r\n * @group Props\r\n */\r\n readonly tabindex = input<number, unknown>(undefined, { transform: numberAttribute });\r\n /**\r\n * Identifier of the focus input to match a label defined for the component.\r\n * @group Props\r\n */\r\n readonly inputId = input<string>();\r\n /**\r\n * Inline style of the component.\r\n * @group Props\r\n */\r\n readonly style = input<{\r\n [klass: string]: any;\r\n } | null>();\r\n /**\r\n * Inline style of the input element.\r\n * @group Props\r\n */\r\n readonly inputStyle = input<{\r\n [klass: string]: any;\r\n } | null>();\r\n /**\r\n * Style class of the component.\r\n * @group Props\r\n */\r\n readonly styleClass = input<string>(\"\");\r\n /**\r\n * Style class of the input element.\r\n * @group Props\r\n */\r\n readonly inputClass = input<string>(\"\");\r\n /**\r\n * Defines the size of the component.\r\n * @group Props\r\n */\r\n readonly size = input<'large' | 'small'>();\r\n /**\r\n * Form control value.\r\n * @group Props\r\n */\r\n readonly formControl = input<FormControl>();\r\n /**\r\n * Icon class of the checkbox icon.\r\n * @group Props\r\n */\r\n readonly checkboxIcon = input<string | undefined>();\r\n /**\r\n * When present, it specifies that the component cannot be edited.\r\n * @group Props\r\n */\r\n readonly readonly = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n /**\r\n * When present, it specifies that checkbox must be checked before submitting the form.\r\n * @group Props\r\n */\r\n readonly required = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n /**\r\n * When present, it specifies that the component should automatically get focus on load.\r\n * @group Props\r\n */\r\n readonly autofocus = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n\r\n readonly model = model<boolean | null>(null);\r\n /**\r\n * Specifies the input variant of the component.\r\n * @group Props\r\n */\r\n variant = input<'filled' | 'outlined'>('outlined');\r\n /**\r\n * Callback to invoke on value change.\r\n * @param {CheckboxChangeEvent} event - Custom value change event.\r\n * @group Emits\r\n */\r\n onChange = output<CheckboxChangeEvent>();\r\n /**\r\n * Callback to invoke when the receives focus.\r\n * @param {Event} event - Browser event.\r\n * @group Emits\r\n */\r\n onFocus = output<Event>();\r\n /**\r\n * Callback to invoke when the loses focus.\r\n * @param {Event} event - Browser event.\r\n * @group Emits\r\n */\r\n onBlur = output<Event>();\r\n\r\n inputViewChild = viewChild.required<HTMLInputElement>('input');\r\n\r\n readonly containerClass = computed(() => ({\r\n 'p-checkbox p-component': true,\r\n 'p-checkbox-checked p-highlight': this.model(),\r\n 'p-disabled': this.disabled(),\r\n 'p-variant-filled':\r\n this.variant() === 'filled' ||\r\n this.config.inputStyle() === 'filled' ||\r\n this.config.inputVariant() === 'filled',\r\n 'p-checkbox-sm p-inputfield-sm': this.size() === 'small',\r\n 'p-checkbox-lg p-inputfield-lg': this.size() === 'large',\r\n }));\r\n\r\n /**\r\n * The template of the checkbox icon.\r\n * @group Templates\r\n */\r\n readonly checkboxIconTemplate = contentChild<TemplateRef<any>>('checkboxicon', { descendants: false });\r\n\r\n readonly templates = contentChildren(PrimeTemplate);\r\n\r\n _checkboxIconTemplate: TemplateRef<any> | undefined;\r\n\r\n onModelChange: Function = () => { };\r\n\r\n onModelTouched: Function = () => { };\r\n\r\n focused: boolean = false;\r\n\r\n _componentStyle = inject(CheckboxStyle);\r\n\r\n ngAfterContentInit() {\r\n this.templates().forEach((item) => {\r\n switch (item.getType()) {\r\n case 'icon':\r\n this._checkboxIconTemplate = item.template;\r\n break;\r\n case 'checkboxicon':\r\n this._checkboxIconTemplate = item.template;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n updateModel(event: Event) {\r\n let newModelValue;\r\n\r\n /*\r\n * When `formControlName` or `formControl` is used - `writeValue` is not called after control changes.\r\n * Otherwise it is causing multiple references to the actual value: there is one array reference inside the component and another one in the control value.\r\n * `selfControl` is the source of truth of references, it is made to avoid reference loss.\r\n * */\r\n const selfControl = this.injector.get<NgControl | null>(NgControl, null, {\r\n optional: true,\r\n self: true,\r\n });\r\n\r\n const currentModelValue =\r\n selfControl && !this.formControl() ? selfControl.value : this.model;\r\n\r\n newModelValue = this.getNextValue(this.model());\r\n this.model.set(newModelValue);\r\n this.onModelChange(newModelValue);\r\n\r\n this.onChange.emit({ checked: newModelValue, originalEvent: event });\r\n }\r\n\r\n private getNextValue(currentValue: boolean | null): boolean | null {\r\n switch (currentValue) {\r\n case true:\r\n return false;\r\n case false:\r\n return this.required() ? true : null;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n handleChange(event: Event) {\r\n if (!this.readonly()) {\r\n this.updateModel(event);\r\n }\r\n }\r\n\r\n onInputFocus(event: Event) {\r\n this.focused = true;\r\n this.onFocus.emit(event);\r\n }\r\n\r\n onInputBlur(event: Event) {\r\n this.focused = false;\r\n this.onBlur.emit(event);\r\n this.onModelTouched();\r\n }\r\n\r\n focus() {\r\n this.inputViewChild().focus();\r\n }\r\n\r\n writeValue(model: any): void {\r\n this.model.set(model);\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: Function): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: Function): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n setDisabledState(val: boolean): void {\r\n setTimeout(() => {\r\n this.disabled.set(val);\r\n this.cd.markForCheck();\r\n });\r\n }\r\n}\r\n","import type { HttpResponse } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { UntypedFormArray, UntypedFormGroup, type AbstractControl, type FormGroup } from \"@angular/forms\";\r\nimport { ProblemDetails } from \"@wertzui/ngx-hal-client\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\n/**\r\n * This service is responsible for displaying problems to the user.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ProblemService {\r\n constructor(private readonly _messageService: MessageService) {\r\n }\r\n\r\n /**\r\n * Scrolls to the first validation error.\r\n * @param nativeElement Any parent element of the <rw-validation-errors>. If not provided, the document will be used.\r\n */\r\n public static scrollToFirstValidationError(nativeElement?: HTMLElement): void {\r\n const enclosingElement = nativeElement ?? document;\r\n setTimeout(() => {\r\n const validationErrorElements = enclosingElement.querySelectorAll('rw-validation-errors>val-errors>div');\r\n if (validationErrorElements.length === 0)\r\n return;\r\n\r\n const firstError = validationErrorElements[0];\r\n firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n },\r\n 100);\r\n }\r\n\r\n private static getSubControl(control: AbstractControl | undefined, pathElement: string): AbstractControl | undefined {\r\n if (pathElement === \"\")\r\n return control;\r\n\r\n if (control instanceof UntypedFormGroup)\r\n return control.controls[pathElement];\r\n\r\n if (control instanceof UntypedFormArray) {\r\n const index = Number.parseInt(pathElement);\r\n if (Number.isInteger(index))\r\n return control.controls[index];\r\n }\r\n\r\n return control;\r\n }\r\n\r\n /**\r\n * Adds errors to a control's existing errors.\r\n * @param control The control to add errors to.\r\n * @param newErrors The new errors to add.\r\n */\r\n public addErrors(control: AbstractControl, newErrors: unknown): void {\r\n if (!newErrors)\r\n return;\r\n\r\n // Get existing remote errors or initialize an empty array\r\n const existingErrors = control.errors?.remote;\r\n\r\n // Combine the errors\r\n let combinedErrors;\r\n if (!existingErrors) {\r\n // No existing errors, just use the new ones\r\n combinedErrors = [newErrors];\r\n } else if (Array.isArray(existingErrors)) {\r\n // Existing errors are already an array, add to it\r\n combinedErrors = [...existingErrors, newErrors];\r\n } else {\r\n // Existing errors are not an array, combine with new errors\r\n combinedErrors = [existingErrors, newErrors];\r\n }\r\n\r\n // Set the combined errors\r\n control.setErrors({ ...control.errors, remote: combinedErrors });\r\n }\r\n\r\n /**\r\n * Checks the response and displays errors if necessary.\r\n * @param response The response to check.\r\n * @param formGroup The form group to display validation errors in.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n * @returns True if the response is ok, false otherwise.\r\n */\r\n public checkResponseAndDisplayErrors<T>(response: HttpResponse<T | ProblemDetails>, formGroup?: FormGroup, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): response is HttpResponse<T> & { body: T} {\r\n if (response.ok)\r\n return true;\r\n\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n if (formGroup)\r\n this.displayValidationErrors(response.body, formGroup);\r\n\r\n this.displayToast(response.body, defaultDetail, defaultTitle);\r\n }\r\n else {\r\n this._messageService.add({ severity: \"error\", summary: defaultTitle, detail: defaultDetail, sticky: true });\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks the response and displays errors if necessary.\r\n * Throws an error if the response is not ok.\r\n * @param response The response to check.\r\n * @param formGroup The form group to display validation errors in.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n * @returns True if the response is ok, false otherwise.\r\n */\r\n public checkResponseDisplayErrorsAndThrow<T>(response: HttpResponse<T | ProblemDetails>, formGroup?: FormGroup, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): asserts response is HttpResponse<T> & { body: T} {\r\n if (response.ok)\r\n return;\r\n\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n if (formGroup)\r\n this.displayValidationErrors(response.body, formGroup);\r\n\r\n this.displayToastAndThrow(response.body, defaultDetail, defaultTitle);\r\n }\r\n else {\r\n this.displayToastAndThrow(undefined, defaultDetail, defaultTitle);\r\n }\r\n }\r\n\r\n /**\r\n * Displays a toast message with the given problem details.\r\n * @param problemDetails The problem details to display.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n */\r\n public displayToast(problemDetails: ProblemDetails, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): void {\r\n const summary = problemDetails.title ?? defaultTitle;\r\n const detail = problemDetails.detail ?? defaultDetail;\r\n\r\n this._messageService.add({ severity: \"error\", summary: summary, detail: detail, sticky: true });\r\n }\r\n\r\n /**\r\n * Displays a toast message with the given problem details and throws an error.\r\n * @param problemDetails The problem details to display.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n */\r\n public displayToastAndThrow(problemDetails?: ProblemDetails, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): never {\r\n const summary = problemDetails?.title ?? defaultTitle;\r\n const detail = problemDetails?.detail ?? defaultDetail;\r\n\r\n this._messageService.add({ severity: \"error\", summary: summary, detail: detail, sticky: true });\r\n throw new Error(`${summary}: ${detail}`);\r\n }\r\n\r\n /**\r\n * Displays validation errors in the form.\r\n * @param problemDetails The problem details containing the validation errors.\r\n * @param formGroup The form group to display the errors in.\r\n * @param nativeElement Any parent element of the <rw-validation-errors>. If not provided, the document will be used.\r\n */\r\n public displayValidationErrors(problemDetails: ProblemDetails, formGroup: FormGroup, nativeElement?: HTMLElement): void {\r\n // display validation errors\r\n if (problemDetails[\"errors\"] as {}) {\r\n // Add the problem detail to the form group errors\r\n this.addErrors(formGroup, problemDetails.detail);\r\n\r\n for (const [key, errorsForKey] of Object.entries(problemDetails[\"errors\"] as {})) {\r\n const path = key.split(/\\.|\\[/).map(e => e.replace(\"]\", \"\"));\r\n // The path might start with a $, indicating the root.\r\n if (path.length > 0 && path[0] === \"$\")\r\n path.shift();\r\n const formControl = path.reduce<AbstractControl | undefined>(ProblemService.getSubControl, formGroup);\r\n\r\n if (formControl) {\r\n // Add the errors to the form control\r\n this.addErrors(formControl, errorsForKey);\r\n formControl.markAsTouched();\r\n }\r\n\r\n // Add the field-specific errors to the form group as well\r\n this.addErrors(formGroup, errorsForKey);\r\n }\r\n\r\n formGroup.markAsTouched();\r\n }\r\n\r\n ProblemService.scrollToFirstValidationError(nativeElement);\r\n }\r\n}\r\n","import { HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { FormsResource, HalClient, Link, PagedListResource, PagedListResourceDto, ProblemDetails, Resource, ResourceDto, ResourceFactory, Template, Templates } from \"@wertzui/ngx-hal-client\";\r\nimport { LinkNames } from \"../constants/link-names\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { lastValueFrom } from 'rxjs';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * A client that can interact with a RESTworld API.\r\n * It leverages the {@link HalClient} to perform HTTP operations and manage resources.\r\n */\r\nexport class RestWorldClient {\r\n private _defaultCurie?: string;\r\n private _homeResource?: Resource;\r\n\r\n constructor(\r\n private _halClient: HalClient,\r\n private _options: RestWorldOptions\r\n ) { }\r\n\r\n /**\r\n * Gets the underlying {@link HalClient} that is used by this {@link RestWorldClient}.\r\n */\r\n public get halClient() {\r\n return this._halClient;\r\n }\r\n\r\n private static combineHeaders(originalHeaders: HttpHeaders | undefined, headersToAdd: HttpHeaders | undefined, overwriteExisting: boolean) {\r\n if (!headersToAdd)\r\n return originalHeaders;\r\n if (!originalHeaders)\r\n return headersToAdd;\r\n\r\n let combinedHeaders = originalHeaders;\r\n\r\n for (const key of headersToAdd.keys()) {\r\n if (!combinedHeaders.has(key) || overwriteExisting) {\r\n const headerValuesToAdd = headersToAdd.getAll(key);\r\n if (headerValuesToAdd)\r\n combinedHeaders = combinedHeaders.set(key, headerValuesToAdd);\r\n }\r\n }\r\n\r\n return combinedHeaders;\r\n }\r\n\r\n private static createHeadersWithBody(\r\n version?: number,\r\n accept?: string,\r\n contentType?: string)\r\n : HttpHeaders {\r\n if (version)\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}; v=${version}`,\r\n 'Content-Type': `${contentType ?? 'application/json'}; v=${version}`\r\n });\r\n\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}`,\r\n 'Content-Type': `${contentType ?? 'application/json'}`\r\n });\r\n }\r\n\r\n private static createHeadersWithoutBody(\r\n version?: number,\r\n accept?: string)\r\n : HttpHeaders {\r\n if (version)\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}; v=${version}`,\r\n 'Content-Type': `v=${version}`\r\n });\r\n\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}`,\r\n });\r\n }\r\n\r\n /**\r\n * Deletes the specified resource.\r\n *\r\n * @param resource - The resource to be deleted.\r\n * @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.\r\n * @throws An error if the resource does not have a delete link.\r\n */\r\n public async delete(resource: Resource & { timestamp?: string }): Promise<HttpResponse<void | ProblemDetails>> {\r\n const deleteLink = resource.findLink('delete');\r\n if (!deleteLink) {\r\n const selfLink = resource.findLink('self');\r\n const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';\r\n throw new Error(`The resource does not have a delete link. ${resourceInfo}`);\r\n }\r\n const url = deleteLink.href;\r\n\r\n return this.deleteByUrl(url, resource.timestamp);\r\n }\r\n\r\n /**\r\n * Deletes a resource identified by the given template and timestamp supplied by the given form group.\r\n *\r\n * @param template - The template containing the target URL for the resource to be deleted.\r\n * @param formGroup - The form group containing the timestamp.\r\n * @returns A promise that resolves to an HttpResponse which can either be void or contain ProblemDetails.\r\n * @throws Error if the target URL in the template is undefined.\r\n */\r\n public async deleteByTemplateAndForm(template: Template, formGroup: FormGroup<{ timestamp: AbstractControl<string> }>): Promise<HttpResponse<void | ProblemDetails>> {\r\n const url = template.target;\r\n if (url === undefined)\r\n throw new Error(\"The target of the given template cannot be undefined.\");\r\n\r\n const timestamp = formGroup.value.timestamp\r\n\r\n return this.deleteByUrl(url, timestamp);\r\n }\r\n\r\n /**\r\n * Deletes a resource at the specified URL.\r\n *\r\n * @param url - The URL of the resource to delete.\r\n * @param timestamp - An optional If-Match value to include in the request headers.\r\n * @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.\r\n */\r\n public async deleteByUrl(url: string, timestamp?: string): Promise<HttpResponse<void | ProblemDetails>> {\r\n let header = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n\r\n if (timestamp !== undefined)\r\n header = header.append(\"If-Match\", timestamp);\r\n\r\n const response = await this.halClient.delete(url, header);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Ensures that the home resource is set. If the home resource is not already set,\r\n * it attempts to fetch it using the `getHomeForced` method. If the response contains\r\n * a problem detail or is empty, an error is thrown. Otherwise, the home resource is\r\n * set and the default CURIE is configured.\r\n *\r\n * @remarks You should never need to call this in your application, as the home resource\r\n * is automatically set when the client is created in the {@link RestWorldClientCollection}.\r\n * @throws {Error} If the home resource cannot be fetched or the response is empty.\r\n * @returns {Promise<void>} A promise that resolves when the home resource is set.\r\n */\r\n public async ensureHomeResourceIsSet(): Promise<void> {\r\n if (!this._homeResource) {\r\n const response = await this.getHomeForced();\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was: ${response}`);\r\n }\r\n if (!response.body)\r\n throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was empty.`);\r\n this._homeResource = response.body;\r\n this.setDefaultCurie();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves all forms associated with the given resource.\r\n *\r\n * @param resource - The resource from which to retrieve form links.\r\n * @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.\r\n */\r\n public async getAllForms(resource: Resource): Promise<HttpResponse<FormsResource | ProblemDetails>[]> {\r\n const urls = resource.getFormLinkHrefs();\r\n const formsPromises = urls.map(url => this.getForm(url));\r\n const formsAndProblems = await Promise.all(formsPromises);\r\n return formsAndProblems;\r\n }\r\n\r\n /**\r\n * Retrieves all links from the home resource.\r\n *\r\n * @returns An object where the keys are relation types (rel) and the values are arrays of {@link Link} objects or undefined.\r\n * @throws An error if the home resource is not set. Ensure to call {@link ensureHomeResourceIsSet} first.\r\n */\r\n public getAllLinksFromHome(): { [rel: string]: Link[] | undefined; } {\r\n if (!this._homeResource)\r\n throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');\r\n\r\n return this._homeResource._links;\r\n }\r\n\r\n /**\r\n * Retrieves all pages from a list resource.\r\n *\r\n * @template TListDto - The type of the list resource DTO, extending {@link ResourceDto}.\r\n * @param {string} rel - The relation name to identify the link.\r\n * @param {Object} parameters - The parameters to be sent with the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to be sent with the request.\r\n * @param {string} [curie] - Optional CURIE to resolve the link.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list resource or problem details.\r\n */\r\n public async getAllPagesFromList<TListDto extends ResourceDto>(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href;\r\n\r\n const response = await this.getAllPagesFromListByUri<TListDto>(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves all pages from a paginated list by the given URI and combines them into a single response.\r\n *\r\n * @template TListDto - The type of the list DTO, which extends {@link ResourceDto}.\r\n * @param {string} uri - The URI to fetch the list from.\r\n * @param {{}} parameters - The parameters to include in the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a combined paginated list resource or problem details.\r\n *\r\n * @remarks\r\n * This method will continue to fetch the next pages as long as there are more pages available, combining all items into a single list.\r\n * If any request fails or returns a problem detail, the method will return the response immediately.\r\n */\r\n public async getAllPagesFromListByUri<TListDto extends ResourceDto>(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const response = await this.getListByUri<TListDto>(uri, parameters, headers);\r\n\r\n if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body?._embedded?.items)\r\n return response;\r\n\r\n const items = response.body._embedded.items;\r\n let lastResponse = response;\r\n\r\n while ((lastResponse?.body?._links?.next?.length ?? 0) > 0) {\r\n // Get the next response\r\n const nextLinks = lastResponse.body?._links.next;\r\n const nextLink = nextLinks ? nextLinks[0] : undefined;\r\n const nextHref = nextLink?.href;\r\n if (nextHref) {\r\n lastResponse = await this.getListByUri<TListDto>(nextHref, parameters, headers);\r\n\r\n if (!lastResponse.ok || ProblemDetails.isProblemDetails(lastResponse.body) || !lastResponse.body)\r\n return lastResponse;\r\n\r\n // Combine the embedded items\r\n lastResponse.body?._embedded?.items?.forEach(r => items.push(r));\r\n }\r\n }\r\n\r\n // We combined everything, so there is just one big page\r\n response.body.totalPages = 1;\r\n response.body._links.next = undefined;\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves all templates associated with a given resource.\r\n *\r\n * This method fetches all forms related to the provided {@link Resource} and extracts the templates from the responses.\r\n * If any of the form responses indicate a failure, it creates a combined ProblemDetails object with information from all failures.\r\n *\r\n * @param resource - The {@link Resource} for which to retrieve templates.\r\n * @returns A promise that resolves to the {@link Templates} associated with the resource or ProblemDetails if there's an error.\r\n */\r\n public async getAllTemplates(resource: Resource): Promise<Templates | ProblemDetails> {\r\n const formResponses = await this.getAllForms(resource);\r\n\r\n const failedResponses = formResponses.filter(response => !response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body);\r\n if (failedResponses.length !== 0) {\r\n // If we have multiple failed responses, create a combined problem details\r\n if (failedResponses.length > 1) {\r\n const failureDetails = failedResponses.map(response => {\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n return response.body.detail || `Problem details from ${response.url}`;\r\n }\r\n return `Error ${response.status} (${response.statusText}) from ${response.url}`;\r\n }).join('; ');\r\n\r\n // Check if all failed responses have the same status code\r\n const allStatuses = failedResponses.map(response => {\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n return response.body.status;\r\n }\r\n return response.status;\r\n });\r\n\r\n // Use the common status code if all are the same, otherwise use 500\r\n const uniqueStatuses = new Set(allStatuses);\r\n const status = uniqueStatuses.size === 1 ? allStatuses[0] : 500;\r\n\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: resource.findLink('self')?.href || \"\" }] },\r\n detail: `Multiple errors occurred while loading form responses: ${failureDetails}`,\r\n status: status,\r\n title: \"Multiple Form Loading Errors\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n // Single failure case\r\n const firstFailedResponse = failedResponses[0];\r\n if (ProblemDetails.isProblemDetails(firstFailedResponse.body)) {\r\n return firstFailedResponse.body;\r\n }\r\n\r\n // If we don't have a ProblemDetails object but the response failed,\r\n // create a new ProblemDetails object with the error information\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: firstFailedResponse.url || \"\" }] },\r\n detail: `Error while loading the response from ${firstFailedResponse.url}`,\r\n status: firstFailedResponse.status,\r\n title: firstFailedResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.1\"\r\n };\r\n\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n const formTemplates = Object.assign({}, ...formResponses.map(response => (response.body as FormsResource)._templates)) as Templates;\r\n\r\n return formTemplates;\r\n }\r\n\r\n /**\r\n * Fetches a form resource from the specified URL.\r\n *\r\n * @param {string} url - The URL of the form resource to fetch.\r\n * @returns A promise that resolves to an HttpResponse containing either a FormsResource or a ProblemDetails object.\r\n */\r\n public async getForm(url: string): Promise<HttpResponse<FormsResource | ProblemDetails>> {\r\n const header = RestWorldClient.createHeadersWithoutBody(this._options.Version, 'application/prs.hal-forms+json');\r\n return this._halClient.get(url, ResourceFactory.createFormResource, header);\r\n }\r\n\r\n /**\r\n * Retrieves a specific link from the home resource based on the provided relation type, name, and curie.\r\n *\r\n * @param rel - The relation type of the link to retrieve.\r\n * @param name - (Optional) The name of the link to retrieve. If not provided, the first link with the specified relation type is returned.\r\n * @param curie - (Optional) The CURIE (Compact URI) to use for the relation type.\r\n * @returns The {@link Link} that matches the specified criteria.\r\n * @throws {Error} If no link matches the specified criteria.\r\n */\r\n public getLinkFromHome(rel: string, name?: string, curie?: string): Link {\r\n const links = this.getLinksFromHome(rel, curie);\r\n\r\n const link = name ? links.find(l => l.name === name) : links[0];\r\n\r\n if (!link)\r\n throw new Error(`The home resource does not have a link with the rel '${this.getFullRel(rel, curie)}' and the name '${name}'.`);\r\n\r\n return link;\r\n }\r\n\r\n /**\r\n * Retrieves links from the home resource based on the provided relation type.\r\n *\r\n * @param rel - The relation type to look for in the home resource.\r\n * @param curie - An optional CURIE (Compact URI) to expand the relation type.\r\n * @returns An array of {@link Link} objects that match the specified relation type.\r\n * @throws Will throw an error if the home resource is not set or if no links are found for the specified relation type.\r\n */\r\n public getLinksFromHome(rel: string, curie?: string): Link[] {\r\n if (!this._homeResource)\r\n throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');\r\n\r\n const fullRel = this.getFullRel(rel, curie);\r\n const links = this._homeResource._links[fullRel];\r\n if (!links || links.length === 0)\r\n throw Error(`The home resource does not have a link with the rel '${fullRel}'.`);\r\n\r\n return links;\r\n }\r\n\r\n /**\r\n * Retrieves a list of resources from the REST API.\r\n *\r\n * @template TListDto - The type of the resource DTO.\r\n * @param {string} rel - The relation name to identify the link.\r\n * @param {Object} parameters - The query parameters to include in the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @param {string} [curie] - Optional CURIE to resolve the link.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list of resources or problem details.\r\n */\r\n public async getList<TListDto extends ResourceDto>(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href\r\n\r\n const response = await this.getListByUri<TListDto>(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list as a CSV file from the RESTworld API.\r\n *\r\n * @param rel - The relation name to identify the link.\r\n * @param parameters - The parameters to include in the request.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @param curie - Optional CURIE (Compact URI) to resolve the link.\r\n * @returns A promise that resolves to an HttpResponse containing a Blob of the CSV data, or undefined if the request fails.\r\n */\r\n public async getListAsCsv(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<Blob> | undefined> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href;\r\n\r\n const response = await this.getListByUriAsCsv(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list of resources from the specified URI.\r\n *\r\n * @template TListDto - The type of the resource DTO.\r\n * @param {string} uri - The URI to fetch the list from.\r\n * @param {Object} parameters - The parameters to fill the URI template.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list of resources or problem details.\r\n */\r\n public async getListByUri<TListDto extends ResourceDto>(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await this.halClient.get<PagedListResourceDto<TListDto>, PagedListResource<TListDto>>(filledUri, ResourceFactory.createPagedListResource<TListDto, ResourceDto>, combinedHeaders);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list from the given URI and returns it as a CSV file.\r\n *\r\n * @param uri - The URI to fetch the list from.\r\n * @param parameters - The parameters to fill the URI template.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to an HTTP response containing the CSV file as a Blob, or undefined if the request fails.\r\n */\r\n public async getListByUriAsCsv(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<Blob> | undefined> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version, 'text/csv');\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await lastValueFrom(this.halClient.httpClient.get(filledUri, { headers: combinedHeaders, responseType: 'blob', observe: 'response' }));\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves a single resource or problem details based on the provided relationship and ID.\r\n *\r\n * @param rel - The relationship name to identify the resource.\r\n * @param id - The ID of the resource to retrieve. Must be an integer.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @param curie - Optional CURIE (Compact URI) to resolve the relationship.\r\n * @returns A promise that resolves to an HTTP response containing either the resource or problem details.\r\n * @throws An error if the provided ID is not an integer.\r\n */\r\n public async getSingle(rel: string, id: number, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n if (!Number.isInteger(id))\r\n throw new Error('When supplying a rel, an ID must be supplied too.');\r\n\r\n const link = this.getLinkFromHome(rel, LinkNames.get, curie);\r\n const uri = link.fillTemplate({ id: id.toString() });\r\n\r\n const response = this.getSingleByUri(uri, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a single resource by its URI.\r\n *\r\n * @template TState - The type of the state object.\r\n * @param {string} uri - The URI of the resource to fetch.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<Resource | ProblemDetails>>} - A promise that resolves to the HTTP response containing the resource or problem details.\r\n */\r\n public async getSingleByUri<TState>(uri: string, headers?: HttpHeaders): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n const response = await this.halClient.get<TState & ResourceDto, Resource & TState>(uri, ResourceFactory.createResource, combinedHeaders);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Sends a POST request to the specified URI with the given parameters and body, expecting a CSV response.\r\n *\r\n * @param uri - The URI to send the POST request to.\r\n * @param parameters - The parameters to fill the URI template.\r\n * @param body - The body of the POST request (optional).\r\n * @param headers - Additional headers to include in the request (optional).\r\n * @returns A promise that resolves to an HttpResponse containing a Blob of the CSV data, or undefined if the request fails.\r\n */\r\n public async postListByUriAsCsv(uri: string, parameters: {}, body?: any, headers?: HttpHeaders): Promise<HttpResponse<Blob> | undefined> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithBody(this._options.Version, 'text/csv');\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await lastValueFrom(this.halClient.httpClient.post(filledUri, body, { headers: combinedHeaders, responseType: 'blob', observe: 'response' }));\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Saves the given resource using the appropriate HTTP method (PUT or POST) based on the name of the save link.\r\n *\r\n * @template TState - The type of the state to be saved.\r\n * @param {Resource & TState} resource - The resource to be saved, which must contain a save link.\r\n * @returns {Promise<HttpResponse<Resource & TState | ProblemDetails>>} - A promise that resolves to the HTTP response,\r\n * which can be either the saved resource or a ProblemDetails object in case of an error.\r\n * @throws {Error} - Throws an error if the resource does not have a save link or if the save link does not have a name.\r\n */\r\n public async save<TState>(resource: Resource & TState): Promise<HttpResponse<Resource & TState | ProblemDetails>> {\r\n const saveLink = resource.findLink('save');\r\n if (!saveLink) {\r\n const selfLink = resource.findLink('self');\r\n const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';\r\n throw new Error(`The resource does not have a save link. ${resourceInfo}`);\r\n }\r\n if (!saveLink.name) {\r\n throw new Error(`The save link with href '${saveLink.href}' does not have a save name.`);\r\n }\r\n\r\n const uri = saveLink.href;\r\n const method = saveLink.name.toLowerCase();\r\n const header = RestWorldClient.createHeadersWithBody(this._options.Version);\r\n\r\n let response;\r\n switch (method) {\r\n case 'put':\r\n response = await this.halClient.put<TState, Resource & TState>(uri, resource, ResourceFactory.createResource<TState>, header);\r\n break;\r\n case 'post':\r\n response = await this.halClient.post<TState, Resource & TState>(uri, resource, ResourceFactory.createResource<TState>, header);\r\n break;\r\n default:\r\n throw new Error(`'${method}' is not allowed as link name for the save link. Only 'POST' and 'PUT' are allowed.`);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Submits the form values to the specified template target URI using the appropriate HTTP method.\r\n *\r\n * @param template - The template containing the target URI and HTTP method.\r\n * @param formValues - The form values to be submitted.\r\n * @returns A promise that resolves to an {@link HttpResponse} containing either a {@link FormsResource} or {@link ProblemDetails}.\r\n */\r\n public async submit(template: Template, formValues: {}): Promise<HttpResponse<FormsResource | ProblemDetails>> {\r\n const uri = template.target || '';\r\n const method = template.method?.toLowerCase();\r\n const header = RestWorldClient.createHeadersWithBody(this._options.Version, 'application/prs.hal-forms+json');\r\n\r\n let response;\r\n switch (method) {\r\n case 'put':\r\n response = await this.halClient.put<void, FormsResource>(uri, formValues, ResourceFactory.createFormResource, header);\r\n break;\r\n case 'post':\r\n response = await this.halClient.post<void, FormsResource>(uri, formValues, ResourceFactory.createFormResource, header);\r\n break;\r\n default:\r\n response = await this.halClient.get<void, FormsResource>(uri, ResourceFactory.createFormResource, header);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n private getFullRel(rel: string, curie?: string): string {\r\n // rel already includes a curie => just return it\r\n if (rel.includes(':'))\r\n return rel;\r\n\r\n // No curie given => use default curie.\r\n if (!curie)\r\n curie = this._defaultCurie;\r\n\r\n // Combine curie and rel\r\n const fullRel = `${curie}:${rel}`;\r\n\r\n return fullRel;\r\n }\r\n\r\n private async getHomeForced(): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n const header = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const response = await this.halClient.get(this._options.BaseUrl, ResourceFactory.createResource, header);\r\n return response;\r\n }\r\n\r\n private setDefaultCurie(): void {\r\n const curies = this._homeResource?._links?.curies;\r\n if (!curies || curies.length === 0 || !curies[0])\r\n this._defaultCurie = undefined;\r\n else\r\n this._defaultCurie = curies[0].name;\r\n }\r\n\r\n /**\r\n * Retrieves all forms associated with a resource fetched by its URI.\r\n *\r\n * This method first fetches the resource from the given URI and then retrieves all forms for that resource.\r\n * If the resource response contains a problem detail, it returns an array with a single HTTP response containing that problem detail.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.\r\n */\r\n public async getAllFormsByUri(uri: string, headers?: HttpHeaders): Promise<HttpResponse<FormsResource | ProblemDetails>[]> {\r\n const resourceResponse = await this.getSingleByUri(uri, headers);\r\n\r\n if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n // Return the problem details as is, wrapped in an array\r\n if (ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n return [resourceResponse as HttpResponse<ProblemDetails>];\r\n }\r\n\r\n // If no body or problem details, create a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Error while loading the resource from ${uri}`,\r\n status: resourceResponse.status,\r\n title: resourceResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n\r\n const problemDetails = new ProblemDetails(problemDetailsDto);\r\n\r\n // Modify the response body to include our problem details\r\n const errorResponse = { ...resourceResponse, body: problemDetails } as HttpResponse<ProblemDetails>;\r\n return [errorResponse];\r\n }\r\n\r\n if (!resourceResponse.body) {\r\n // Handle empty response with a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Resource from ${uri} was empty`,\r\n status: 404,\r\n title: \"Resource Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n\r\n const problemDetails = new ProblemDetails(problemDetailsDto);\r\n\r\n const errorResponse = { ...resourceResponse, body: problemDetails } as HttpResponse<ProblemDetails>;\r\n return [errorResponse];\r\n }\r\n\r\n return this.getAllForms(resourceResponse.body);\r\n }\r\n\r\n /**\r\n * Retrieves all templates associated with a resource fetched by its URI.\r\n *\r\n * This method first fetches the resource from the given URI and then retrieves all templates for that resource.\r\n * It combines functionality from {@link getSingleByUri} and {@link getAllTemplates}.\r\n * If the resource response contains a problem detail or if any form responses fail,\r\n * the method returns the problem detail rather than throwing an error.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to the {@link Templates} associated with the resource or a ProblemDetails object if there was an error.\r\n */\r\n public async getAllTemplatesByUri(uri: string, headers?: HttpHeaders): Promise<Templates | ProblemDetails> {\r\n const resourceResponse = await this.getSingleByUri(uri, headers);\r\n\r\n if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n if (ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n return resourceResponse.body;\r\n }\r\n\r\n // If no problem details in body but response not OK, create a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Error while loading the resource from ${uri}`,\r\n status: resourceResponse.status,\r\n title: resourceResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n if (!resourceResponse.body) {\r\n // Handle empty response with a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Resource from ${uri} was empty`,\r\n status: 404,\r\n title: \"Resource Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n return this.getAllTemplates(resourceResponse.body);\r\n }\r\n\r\n /**\r\n * Retrieves a specific template by title from a resource fetched by its URI.\r\n *\r\n * This method first fetches all templates from the resource at the given URI and then\r\n * returns the template with the specified title. If the resource cannot be fetched,\r\n * if it contains a problem detail, or if any form responses fail, this method returns\r\n * the problem detail rather than throwing an error.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param templateTitle - The title of the template to retrieve.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to the {@link Template} with the specified title or a ProblemDetails object if there was an error.\r\n */\r\n public async getTemplateByUri(uri: string, templateTitle: string, headers?: HttpHeaders): Promise<Template | ProblemDetails> {\r\n const templatesOrProblemDetails = await this.getAllTemplatesByUri(uri, headers);\r\n\r\n // If we got ProblemDetails instead of Templates, return it\r\n if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {\r\n return templatesOrProblemDetails;\r\n }\r\n\r\n const templates = templatesOrProblemDetails as Templates;\r\n const template = templates[templateTitle];\r\n\r\n if (template === undefined) {\r\n const templateTitles = Object.keys(templates);\r\n // Instead of throwing an error, return a properly constructed ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `No template with title '${templateTitle}' found. Available templates are: ${templateTitles.join(', ')}`,\r\n status: 404,\r\n title: \"Template Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n return template;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HalClient } from \"@wertzui/ngx-hal-client\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { RestWorldClient } from \"./restworld-client\";\r\n\r\n/**\r\n * Represents a collection of RestWorld clients accessible by their API name.\r\n * This is the main class that you want to inject into all your components that are making calls to your backend APIs.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RestWorldClientCollection {\r\n private readonly _clients: {\r\n [name: string]: RestWorldClient;\r\n };\r\n\r\n /**\r\n * Creates an instance of RestworldClientCollection.\r\n * @param _halClient The HalClient instance to use for making requests.\r\n */\r\n constructor(private _halClient: HalClient) {\r\n this._clients = {};\r\n }\r\n\r\n /**\r\n * Determines whether the collection contains a client with the specified name.\r\n * @param name The name of the client to search for.\r\n * @returns True if the collection contains a client with the specified name; otherwise, false.\r\n */\r\n public containsClient(name: string): boolean {\r\n return Object.keys(this._clients).includes(name);\r\n }\r\n\r\n /**\r\n * Adds a new RestWorldClient to the collection with the given name and options, or returns an existing client with the same name.\r\n * @param name - The name of the client to add or retrieve.\r\n * @param options - The options to use when creating a new client.\r\n * @returns A Promise that resolves to the newly added or existing RestWorldClient.\r\n */\r\n public async addOrGetExistingClient(name: string, options: RestWorldOptions): Promise<RestWorldClient> {\r\n if (Object.keys(this._clients).includes(name))\r\n return this.getClient(name);\r\n\r\n const client = new RestWorldClient(this._halClient, options);\r\n await client.ensureHomeResourceIsSet();\r\n this._clients[name] = client;\r\n return client;\r\n }\r\n\r\n /**\r\n * Returns the RestWorldClient instance with the specified name.\r\n * This is the main method of this class that you want to use in your components.\r\n * @param name The API name of the RestWorldClient instance to retrieve.\r\n * @returns The RestWorldClient instance with the specified name.\r\n * @throws An error if no client with the specified name exists.\r\n */\r\n public getClient(name: string): RestWorldClient {\r\n const client = this._clients[name];\r\n if (!client)\r\n throw new Error(`No client with the name '${name}' exists.`);\r\n\r\n return client;\r\n }\r\n\r\n public get all(): { [name: string]: RestWorldClient } {\r\n return this._clients;\r\n }\r\n}\r\n","import { computed, effect, Injectable, linkedSignal, signal, type Signal } from \"@angular/core\";\r\nimport { RestWorldClientCollection } from \"./restworld-client-collection\";\r\nimport { ProblemDetails, type ExtractGenericOptionsItemType, type ExtractGenericOptionsSelectedValuesType, type Options, type Property, type ResourceOfDto, type SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { NgHttpCachingHeaders } from \"ng-http-caching\";\r\nimport { ProblemService } from \"./problem.service\";\r\n\r\n/**\r\n * This manager can be used to load the options for a property and to manage the selected values.\r\n * It is normally instantiated by the OptionsService.\r\n * This manager is normally used in combination with <p-select> and <p-multiSelect> components.\r\n * It is used internally by the <rw-dropdown> component.\r\n */\r\nexport class OptionsManager<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> {\r\n public readonly getLabel = computed(() => this._getLabel() ?? ((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => this.getDefaultLabel(itemOrValue)));\r\n public readonly getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => this.getDefaultTooltip(itemOrValue)));\r\n public readonly items = linkedSignal(() => this.options()?.inline as TOptionsItem[] ?? []);\r\n public readonly loading = signal(false);\r\n public readonly options = computed(() => this.property().options);\r\n public readonly promptField = computed(() => this.options()?.promptField ?? \"prompt\");\r\n public readonly valueField = computed(() => this.options()?.valueField ?? \"value\");\r\n\r\n private readonly _client = computed(() => this._clients.getClient(this.apiName()));\r\n public readonly selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items(), value as ExtractGenericOptionsSelectedValuesType<TProperty>) ?? []));\r\n\r\n constructor(\r\n private readonly _problemService: ProblemService,\r\n private readonly _clients: RestWorldClientCollection,\r\n public readonly apiName: Signal<string>,\r\n public readonly property: Signal<TProperty>,\r\n public readonly selectedValues: Signal<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | undefined>,\r\n private readonly _getLabel: Signal<((item: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>,\r\n private readonly _getTooltip: Signal<((item: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>) {\r\n }\r\n\r\n private static jsonStringifyWithElipsis(value: unknown) {\r\n const maxLength = 200;\r\n const end = 10;\r\n const start = maxLength - end - 2;\r\n const json = JSON.stringify(value);\r\n const shortened = json.length > maxLength ? json.substring(0, start) + '…' + json.substring(json.length - end) : json;\r\n\r\n return shortened;\r\n }\r\n\r\n private getItemByValue(items: TOptionsItem[], value: ExtractGenericOptionsSelectedValuesType<TProperty>): TOptionsItem | undefined {\r\n const foundItem = items.find(item => this.getValue(item) === value);\r\n if (foundItem)\r\n return foundItem;\r\n\r\n if (value === null || value === undefined)\r\n return undefined;\r\n\r\n return { [this.valueField()]: value, [this.promptField()]: \"\" } as TOptionsItem;\r\n }\r\n\r\n /**\r\n * Returns the prompt of the item or value.\r\n * @param itemOrValue The item or value to get the prompt for.\r\n * @returns The prompt of the item or value.\r\n */\r\n public getPrompt(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n const promptField = this.promptField();\r\n let item = itemOrValue as TOptionsItem | undefined;\r\n\r\n if (itemOrValue === undefined || itemOrValue === null || !itemOrValue.hasOwnProperty(promptField)) {\r\n const value = itemOrValue as unknown as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n item = this.getItemByValue(this.items(), value);\r\n }\r\n\r\n if (item === undefined || item === null || !item.hasOwnProperty(promptField))\r\n return \"\";\r\n\r\n return item[promptField as keyof TOptionsItem] as string ?? \"\";\r\n }\r\n\r\n /**\r\n * Returns the value of the item or value.\r\n * @param itemOrValue The item or value to get the value for.\r\n * @returns The value of the item or value.\r\n */\r\n public getValue(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): ExtractGenericOptionsSelectedValuesType<TProperty> {\r\n const valueField = this.valueField();\r\n if (itemOrValue === undefined || itemOrValue === null || !itemOrValue.hasOwnProperty(valueField)) {\r\n const value = itemOrValue as unknown as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n return value;\r\n }\r\n\r\n const item = itemOrValue as TOptionsItem;\r\n return item[valueField as keyof TOptionsItem] as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n }\r\n\r\n /**\r\n * Initializes the options manager.\r\n * This will load the initial options for the property.\r\n * Call it once in the ngOnInit method of your component.\r\n */\r\n public async initialize(): Promise<void> {\r\n const options = this.options();\r\n if (!options.link?.href)\r\n return;\r\n\r\n const selectedValues = this.selectedValues() ?? options.selectedValues;\r\n\r\n const filter = selectedValues === null || selectedValues === undefined ?\r\n undefined :\r\n `${options.valueField} in (${selectedValues})`;\r\n\r\n await this.updateItemsFromFilter(filter);\r\n }\r\n\r\n /**\r\n * Updates the items based on the given filter.\r\n * @param filter The filter to use when getting the items.\r\n */\r\n public async updateItemsFromFilter(filter: string | undefined): Promise<void> {\r\n this.loading.set(true);\r\n try {\r\n const options = this.options();\r\n const templatedUri = options.link?.href;\r\n if (!templatedUri)\r\n this._problemService.displayToastAndThrow(undefined, `The property ${this.property().name} does not have options with a link href.`);\r\n\r\n const headersWithCaching = new HttpHeaders({[NgHttpCachingHeaders.ALLOW_CACHE]: \"1\", [NgHttpCachingHeaders.LIFETIME]: \"3000\"});\r\n const response = await this._client().getListByUri<TOptionsItem>(templatedUri, { $filter: filter, $top: 10 }, headersWithCaching);\r\n this._problemService.checkResponseDisplayErrorsAndThrow(response, undefined, `An error occurred while getting the selected items for the property ${this.property().name}.`);\r\n\r\n const items = response.body._embedded.items;\r\n const newItems = this.combineCurrentItemsWithSelected(items);\r\n this.items.set(newItems);\r\n }\r\n finally {\r\n this.loading.set(false);\r\n }\r\n }\r\n\r\n private combineCurrentItemsWithSelected(items: TOptionsItem[]): TOptionsItem[] {\r\n const oldInline = this.items();\r\n if (!oldInline)\r\n return items;\r\n\r\n const selectedValues = this.selectedValues();\r\n const selectedValuesAsArray = (Array.isArray(selectedValues) ? selectedValues : [selectedValues]) as ExtractGenericOptionsSelectedValuesType<TProperty>[];\r\n const itemsToKeep = oldInline.filter(i => selectedValuesAsArray.includes(this.getValue(i)));\r\n const newValues = items.map(i => this.getValue(i));\r\n const newItems = items.concat(itemsToKeep.filter(i => !newValues.includes(this.getValue(i))));\r\n\r\n return newItems;\r\n }\r\n\r\n private getDefaultLabel(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n if (itemOrValue === undefined || itemOrValue === null)\r\n return \"\";\r\n\r\n let label = this.getPrompt(itemOrValue);\r\n const property = this.property();\r\n if (property.cols === undefined || property.cols > 1) {\r\n const value = this.getValue(itemOrValue);\r\n if (value?.toString().toUpperCase() !== label.toUpperCase())\r\n label += ` (${value})`;\r\n }\r\n\r\n return label;\r\n }\r\n\r\n private getDefaultTooltip(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n if (itemOrValue === undefined || itemOrValue === null || typeof itemOrValue !== \"object\")\r\n return \"\";\r\n\r\n const promptField = this.promptField();\r\n const valueField = this.valueField();\r\n\r\n const tooltip = Object.entries(itemOrValue)\r\n .filter(([key]) => !(key.startsWith('_') || ['createdAt', 'createdBy', 'lastChangedAt', 'lastChangedBy', 'timestamp', promptField, valueField].includes(key)))\r\n .reduce((prev, [key, value], index) => `${prev}${index === 0 ? '' : '\\n'}${key}: ${OptionsManager.jsonStringifyWithElipsis(value)}`, '');\r\n\r\n return tooltip;\r\n }\r\n}\r\n\r\n/**\r\n * This service provides a manager for properties with options.\r\n * The manager can be used to load the options for a property and to manage the selected values.\r\n * The manager is normally used in combination with <p-select> and <p-multiSelect> components.\r\n * It is used internally by the <rw-dropdown> component.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OptionsService {\r\n constructor(\r\n private readonly _problemService: ProblemService,\r\n private readonly _clients: RestWorldClientCollection) {\r\n }\r\n\r\n public getManager<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>>(\r\n apiName: Signal<string>,\r\n property: Signal<TProperty>,\r\n selectValues: Signal<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | undefined>,\r\n getLabel: Signal<((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>,\r\n getTooltip: Signal<((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>): OptionsManager<TProperty, TOptionsItem> {\r\n return new OptionsManager(this._problemService, this._clients, apiName, property, selectValues, getLabel, getTooltip);\r\n }\r\n}\r\n","import { Component, computed, forwardRef, input, OnInit } from '@angular/core';\r\nimport { Property, SimpleValue, PropertyType, Template, NumberTemplate, TemplateDto, Options, ExtractGenericOptionsItemType, ExtractValueType, ExtractGenericOptionsSelectedValuesType } from '@wertzui/ngx-hal-client';\r\nimport { PropertyWithOptions, PropertyWithImage } from '../../models/special-properties'\r\nimport { RestWorldLabelComponent } from \"../restworld-label/restworld-label.component\";\r\nimport { Tooltip } from \"primeng/tooltip\";\r\nimport { RestWorldAvatarComponent } from \"../restworld-avatar/restworld-avatar.component\";\r\nimport { PropertyTypeFormatPipe } from \"../../pipes/property-type-format.pipe\";\r\nimport { CheckboxModule } from \"primeng/checkbox\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { OptionsManager, OptionsService } from \"../../services/options.service\";\r\nimport { TriStateCheckbox } from \"../restworld-tri-state-checkbox/restworld-tri-state-checkbox.component\";\r\n\r\n/**\r\n * Displays the value of a collection that is automatically created from the given property.\r\n * The elements and can also be nested.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-collection [property]=\"property\" [apiName]=\"apiName\" [values]=\"values\"></rw-display-collection>\r\n */\r\n@Component({\r\n selector: 'rw-display-collection',\r\n templateUrl: './restworld-display-collection/restworld-display-collection.component.html',\r\n styleUrl: './restworld-display-collection/restworld-display-collection.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayTemplateComponent)]\r\n})\r\nexport class RestWorldDisplayCollectionComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<Property & { _templates: { default: Template } }>();\r\n public readonly templates = computed(() => {\r\n const values = this.values();\r\n const property = this.property();\r\n\r\n return values ?\r\n Array.from(RestWorldDisplayCollectionComponent.map(RestWorldDisplayCollectionComponent.toArray(values)!.entries(), (entry: [string | number, any]) => (new NumberTemplate({ ...(property._templates.default as TemplateDto), title: entry[0].toString() })))) :\r\n RestWorldDisplayCollectionComponent.getCollectionEntryTemplates(property);\r\n });\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly values = input<any[] | Partial<Record<string, any> | undefined>>();\r\n\r\n private static getCollectionEntryTemplates(property?: Property): NumberTemplate[] {\r\n if (!property)\r\n return [];\r\n\r\n return Object.entries(property._templates)\r\n .filter(([key, value]) => Number.isInteger(Number.parseInt(key)) && Number.isInteger(Number.parseInt(value?.title ?? \"\")))\r\n .map(([, value]) => new NumberTemplate(value as TemplateDto));\r\n }\r\n\r\n private static * map<T1, T2>(iterable: IterableIterator<T1>, callback: (value: T1) => T2) {\r\n for (let x of iterable) {\r\n yield callback(x);\r\n }\r\n }\r\n\r\n private static toArray<T>(arrayOrDictionary: T[] | Partial<Record<string, T>> | undefined): T[] | { key: string, value: T }[] | undefined {\r\n if (!arrayOrDictionary)\r\n return undefined;\r\n\r\n if (Array.isArray(arrayOrDictionary))\r\n return arrayOrDictionary;\r\n\r\n return Object.entries(arrayOrDictionary).map(([key, value]) => ({ key, value: value! }));\r\n }\r\n}\r\n\r\n/**\r\n * Displays a value that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you also want a label, use {@link RestWorldDisplayElementComponent} `<rw-display-element>`.\r\n * You can also use one of the different RestWorldDisplay... `<rw-display-...>` elements to render a specific property type,\r\n * but it is advised to control the rendered element through the passed in property.\r\n * @example\r\n * <rw-display [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display>\r\n */\r\n@Component({\r\n selector: 'rw-display',\r\n templateUrl: './restworld-display/restworld-display.component.html',\r\n styleUrl: './restworld-display/restworld-display.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayDropdownComponent), forwardRef(() => RestWorldDisplayObjectComponent), forwardRef(() => RestWorldDisplaySimpleComponent), RestWorldDisplayCollectionComponent]\r\n})\r\nexport class RestWorldDisplayComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value as ExtractValueType<TProperty>);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly value = input<ExtractValueType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | ExtractGenericOptionsSelectedValuesType<TProperty> | Record<string, SimpleValue> | Map<number, Record<string, SimpleValue>>>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithOptions() {\r\n return PropertyWithOptions<SimpleValue, string, string>;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the value of a dropdown that is automatically created from the given property.\r\n * If set the dropdown will use the `inline` property of the options to render the `selectedValues` Otherwise it will just render the values, but no prompt for them.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-dropdown [property]=\"property\" [apiName]=\"apiName\" [selectedValues]=\"selectedValues\"></rw-display-dropdown>\r\n */\r\n@Component({\r\n selector: 'rw-display-dropdown',\r\n templateUrl: './restworld-display-dropdown/restworld-display-dropdown.component.html',\r\n styleUrl: './restworld-display-dropdown/restworld-display-dropdown.component.css',\r\n standalone: true,\r\n imports: [Tooltip]\r\n})\r\nexport class RestWorldDisplayDropdownComponent<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> implements OnInit {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * A function that returns the label for the given item.\r\n * The default returns the prompt and optionally the value in brackets.\r\n * The value in brackets will only be displayed if the `cols` field of the property is undefined or greater than 1.\r\n * Overwrite this function to change the label.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getLabel = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n /**\r\n * A function that returns the tooltip for the given item.\r\n * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.\r\n * The default properties to exclude are: createdAt, createdBy, lastChangedAt, lastChangedBy, timestamp, promptField, valueField.\r\n * Overwrite this function to change the tooltip.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getTooltip = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n public readonly options = computed(() => this.property().options!);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n public readonly selectedValues = input([] as ExtractGenericOptionsSelectedValuesType<TProperty>[], { transform: (value: ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[]) => (Array.isArray(value) ? value : [value]) as ExtractGenericOptionsSelectedValuesType<TProperty>[] });\r\n\r\n public readonly optionsManager: OptionsManager<TProperty, TOptionsItem>;\r\n\r\n constructor(\r\n optionsService: OptionsService\r\n ) {\r\n this.optionsManager = optionsService.getManager(this.apiName, this.property, this.selectedValues, this.getLabel, this.getTooltip);\r\n }\r\n\r\n public async ngOnInit(): Promise<void> {\r\n await this.optionsManager.initialize();\r\n }\r\n}\r\n\r\n/**\r\n * Display the value of a form element with a label that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested display elements may be rendered.\r\n * If you want to display just the value without a label, use {@link RestWorldDisplayComponent} `<rw-display>`.\r\n * @example\r\n * <rw-display-element [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-element>\r\n */\r\n@Component({\r\n selector: 'rw-display-element',\r\n templateUrl: './restworld-display-element/restworld-display-element.component.html',\r\n styleUrl: './restworld-display-element/restworld-display-element.component.css',\r\n standalone: true,\r\n imports: [RestWorldLabelComponent, RestWorldDisplayComponent]\r\n})\r\nexport class RestWorldDisplayElementComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value as ExtractValueType<TProperty>);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public value = input<ExtractValueType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | ExtractGenericOptionsSelectedValuesType<TProperty> | Record<string, SimpleValue> | Map<number, Record<string, SimpleValue>>>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the value of a complex object with multiple properties that is automatically created from the given property.\r\n * The object can also be nested.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-object [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-object>\r\n */\r\n@Component({\r\n selector: 'rw-display-object',\r\n templateUrl: './restworld-display-object/restworld-display-object.component.html',\r\n styleUrl: './restworld-display-object/restworld-display-object.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayTemplateComponent)]\r\n})\r\nexport class RestWorldDisplayObjectComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<Property<null, never, never> & {\r\n _templates: {\r\n default: Template;\r\n };\r\n }>();\r\n /**\r\n * The value to display. If not set, the value of the template properties will be used.\r\n */\r\n public readonly value = input<Record<string, SimpleValue>>();\r\n}\r\n\r\n/**\r\n * Displays the value of a simple element, like a string, a number or a Date that is automatically created from the given property.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-simple [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-simple>\r\n */\r\n@Component({\r\n selector: 'rw-display-simple',\r\n templateUrl: './restworld-display-simple/restworld-display-simple.component.html',\r\n styleUrl: './restworld-display-simple/restworld-display-simple.component.css',\r\n standalone: true,\r\n imports: [RestWorldAvatarComponent, PropertyTypeFormatPipe, TriStateCheckbox, FormsModule, TriStateCheckbox]\r\n})\r\nexport class RestWorldDisplaySimpleComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yyyy\")\r\n .replace(\"33\", \"yy\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue());\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly value = input<SimpleValue>();\r\n\r\n private readonly _defaultValue = computed(() => {\r\n const property = this.property();\r\n if (!property.required || property.options?.minItems === 0)\r\n return undefined;\r\n\r\n if (property.type === PropertyType.Number)\r\n return 0;\r\n\r\n return undefined;\r\n });\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithImage() {\r\n return PropertyWithImage;\r\n }\r\n\r\n public get dateFormat(): string {\r\n return RestWorldDisplaySimpleComponent._dateFormat;\r\n }\r\n\r\n public get timeFormat() {\r\n return RestWorldDisplaySimpleComponent._timeFormat;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the values of a collection of `<rw-display>` elements automatically created from a template.\r\n * @example\r\n * <rw-display-template [template]=\"template\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-template>\r\n */\r\n@Component({\r\n selector: 'rw-display-template',\r\n templateUrl: './restworld-display-template/restworld-display-template.component.html',\r\n styleUrl: './restworld-display-template/restworld-display-template.component.css',\r\n standalone: true,\r\n imports: [RestWorldDisplayElementComponent]\r\n})\r\nexport class RestWorldDisplayTemplateComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The template to display.\r\n * @required\r\n * @remarks This is the template that defines the properties to display.\r\n */\r\n public readonly template = input.required<Template>();\r\n /**\r\n * The value to display. If not set, the values of the template properties will be used.\r\n */\r\n public readonly value = input<Record<string, any>>();\r\n}\r\n","<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n","@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n","@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n","<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>","@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n","@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * A pipe that sanitizes a URL and returns a `SafeUrl` object.\r\n * @example\r\n * <img [src]=\"url | safeUrl\"></img>\r\n */\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n constructor(private _domSanitizer: DomSanitizer) {\r\n }\r\n\r\n /**\r\n * Sanitizes the given URL and returns a `SafeUrl` object.\r\n * @param url The URL to sanitize.\r\n * @returns A `SafeUrl` object representing the sanitized URL.\r\n * @throws An error if the given URL is not a string.\r\n */\r\n public transform(url: unknown): SafeUrl {\r\n if (typeof url !== 'string')\r\n throw new Error(`The given url '${url}' is not a string.`)\r\n\r\n return this._domSanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Component, forwardRef, QueryList, ViewChildren, input, signal } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FileUpload, FileUploadModule } from 'primeng/fileupload';\r\nimport { SafeUrlPipe } from \"../../pipes/safe-url.pipe\";\r\n\r\n/**\r\n * Represents a component for uploading files in the RESTworld Angular client.\r\n * Implements the ControlValueAccessor interface to enable two-way data binding.\r\n * @example\r\n * <rw-file\r\n * [(ngModel)]=\"base64EncodedFileUri\"\r\n * accept=\"file/text\">\r\n * </rw-file>\r\n */\r\n@Component({\r\n selector: 'rw-file',\r\n templateUrl: './restworld-file.component.html',\r\n styleUrls: ['./restworld-file.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldFileComponent),\r\n multi: true\r\n }],\r\n imports: [ButtonModule, FileUploadModule, SafeUrlPipe]\r\n})\r\nexport class RestWorldFileComponent implements ControlValueAccessor {\r\n private onChange?: Function;\r\n /**\r\n * The file types that the component should accept.\r\n * This is a comma-separated list of MIME types or file extensions.\r\n * If not specified, all file types are accepted.\r\n */\r\n public readonly accept = input(\"\", { transform: (v: string) => v ?? \"\" });\r\n\r\n /**\r\n * The name of the file to be uploaded.\r\n */\r\n public readonly fileName = input(\"download\", { transform: (v: string) => v ?? \"download\" });\r\n\r\n public readonly disabled = signal(false);\r\n /**\r\n * The URI of the file.\r\n */\r\n public uri = signal<string | undefined>(undefined);\r\n\r\n writeValue(obj?: string): void {\r\n this.uri.set(obj);\r\n }\r\n registerOnChange(fn?: Function): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(): void {\r\n // not needed for this component, but needed to implement the interface\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n public fileChanged(event: { files: File[] }): void {\r\n const file = event.files[0];\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uri.set(reader.result as string);\r\n this.onChange?.(this.uri());\r\n };\r\n\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n public deleteFile() {\r\n this.uri.set(undefined);\r\n this.onChange?.(this.uri());\r\n }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n","import { Component, ElementRef, ViewChildren, computed, input } from '@angular/core';\nimport { AbstractControl, ControlContainer, FormGroup, FormGroupDirective } from '@angular/forms';\nimport { Property, PropertyType, SimpleValue } from '@wertzui/ngx-hal-client';\nimport { ValidationErrorDirective, ValidationErrorsComponent } from 'ngx-valdemort';\nimport { MessageModule } from 'primeng/message';\n\n/**\n * Displays validation errors either for one property or for a whole form.\n * If a property is given, only the validation errors for this property will be displayed.\n * If a form is given, all validation errors for all properties will be displayed.\n * @example\n * <rw-validation-errors [property]=\"property\"></rw-validation-errors>\n * <rw-validation-errors [form]=\"form\"></rw-validation-errors>\n */\n@Component({\n selector: 'rw-validation-errors',\n templateUrl: './restworld-validation-errors.component.html',\n styleUrls: ['./restworld-validation-errors.component.css'],\n standalone: true,\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\n imports: [ValidationErrorsComponent, ValidationErrorDirective, MessageModule]\n})\nexport class RestWorldValidationErrorsComponent<T extends { [K in keyof T]: AbstractControl<any, any>; }> {\n /**\n * The form to display the validation errors for.\n * Either set this or the property input.\n */\n public readonly form = input<FormGroup<T>>();\n public readonly name = computed(() => this.property()?.name ?? null);\n public readonly prompt = computed(() => this.property()?.prompt ?? this.name() ?? null);\n /**\n * The property to display the validation errors for.\n * Either set this or the form input.\n */\n public readonly property = input<Property<SimpleValue, string, string>>();\n\n public get PropertyType() {\n return PropertyType;\n }\n}\n","@if (property() && property()?.type !== PropertyType.Hidden) {\n <val-errors [controlName]=\"name()\">\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n@if (form()) {\n <val-errors [control]=\"form()!\">\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\n </val-errors>\n}\n","/**\r\n * Creates a debounced function that delays invoking the provided function until after the specified delay in milliseconds has elapsed since the last time the debounced function was invoked.\r\n *\r\n * @param fn - The function to debounce.\r\n * @param delayMilliseconds - The number of milliseconds to delay. Defaults to 300 milliseconds.\r\n * @returns A new debounced function.\r\n */\r\nexport const debounce = (fn: Function, delayMilliseconds = 300) => {\r\n let timeoutId: number | undefined;\r\n return function (this: any, ...args: any[]) {\r\n window.clearTimeout(timeoutId);\r\n timeoutId = window.setTimeout(() => fn.apply(this, args), delayMilliseconds);\r\n };\r\n};\r\n","import { AfterViewInit, Component, forwardRef, OnInit, QueryList, ViewChildren, input, viewChildren, signal, computed, model, effect } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\r\nimport { FileUpload, FileUploadModule } from 'primeng/fileupload';\r\nimport { Dialog, DialogModule } from 'primeng/dialog'\r\nimport { Property } from '@wertzui/ngx-hal-client';\r\nimport { RestWorldImage } from '../../models/restworld-image'\r\nimport { SafeUrlPipe } from '../../pipes/safe-url.pipe';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { ColorPickerModule } from \"primeng/colorpicker\";\r\n\r\n/**\r\n * A component for displaying and editing images with various options such as cropping, resizing, and aspect ratio.\r\n * Implements ControlValueAccessor to work with Angular forms.\r\n */\r\n@Component({\r\n selector: 'rw-image',\r\n templateUrl: './restworld-image.component.html',\r\n styleUrls: ['./restworld-image.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldImageComponent),\r\n multi: true\r\n }],\r\n imports: [SafeUrlPipe, ButtonModule, ImageCropperComponent, FileUploadModule, DialogModule, ColorPickerModule, FormsModule]\r\n})\r\nexport class RestWorldImageComponent implements ControlValueAccessor {\r\n public readonly property = input.required<Property & {\r\n restWorldImage: RestWorldImage;\r\n }>();\r\n public readonly accept = computed(() => {\r\n const property = this.property();\r\n return property.restWorldImage.accept ?? typeof property.placeholder === \"string\" ? property.placeholder as string : \"image/*\"\r\n });\r\n public readonly alignImage = computed(() => this.property().restWorldImage.alignImage ?? \"center\");\r\n public readonly alt = computed(() => {\r\n const property = this.property();\r\n return property.prompt ?? property.name;\r\n });\r\n public readonly aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1);\r\n // If no background color is set, we set it to white.\r\n // Otherwise the color picker would show red, the input would be empty and the image cropper would show transparent.\r\n public readonly backgroundColor = model(\"#ffffff\");\r\n public readonly canvasRotation = computed(() => this.property().restWorldImage.canvasRotation);\r\n public readonly containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio);\r\n public readonly cropper = computed(() => this.property().restWorldImage.cropper);\r\n public readonly cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight);\r\n public readonly cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth);\r\n public readonly cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight);\r\n public readonly cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth);\r\n public readonly cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight);\r\n public readonly cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth);\r\n public readonly dialogs = viewChildren(Dialog);\r\n public readonly disabled = signal(false);\r\n public readonly fileUploads = viewChildren(FileUpload);\r\n public readonly filename = computed(() => this.property().name + \".\" + (this.property().restWorldImage.format ?? \".png\"));\r\n public readonly format = computed(() => this.property().restWorldImage.format);\r\n public readonly imageCroppers = viewChildren(ImageCropperComponent);\r\n public readonly imageQuality = computed(() => this.property().restWorldImage.imageQuality);\r\n public readonly initialStepSize = computed(() => this.property().restWorldImage.initialStepSize);\r\n public readonly maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio);\r\n public readonly onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown);\r\n public readonly resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight);\r\n public readonly resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth);\r\n public readonly roundCropper = computed(() => this.property().restWorldImage.roundCropper);\r\n\r\n public displayCropDialog = model(false);\r\n private tempCroppedUri?: string;\r\n public readonly tempImageFile = signal<File | undefined>(undefined);\r\n public readonly uri = signal<string | undefined>(undefined);\r\n\r\n private onChange?: Function;\r\n\r\n constructor() {\r\n effect(() => this.property().restWorldImage.backgroundColor = this.backgroundColor());\r\n effect(() => this.backgroundColor.set(this.property().restWorldImage.backgroundColor ?? \"#ffffff\"));\r\n\r\n // We need to trigger imageLoadedInView each time, after the opening animation of the dialog has been completed.\r\n // Otherwise the image cropper initially (and after every window resize) thinks that the image size is 0x0,\r\n // because the opening animation hast just begun when the image cropper is first shown.\r\n effect(() => this.dialogs()?.map(d => d.onShow.subscribe(() =>\r\n this.imageCroppers()?.forEach(i => { i.imageLoadedInView(); })\r\n )));\r\n }\r\n\r\n public acceptCroppedImage(): void {\r\n this.uri.set(this.tempCroppedUri);\r\n this.onChange?.(this.uri());\r\n this.closeCropDialog();\r\n }\r\n\r\n public closeCropDialog(): void {\r\n this.fileUploads()?.forEach(f => f.clear());\r\n this.displayCropDialog.set(false);\r\n }\r\n\r\n public croppedImageChanged(event: ImageCroppedEvent): void {\r\n this.tempCroppedUri = event.base64 ?? undefined;\r\n }\r\n\r\n public deleteImage() {\r\n this.uri.set(undefined);\r\n this.onChange?.(this.uri());\r\n }\r\n\r\n public imageChanged(event: { files: File[] }): void {\r\n this.tempImageFile.set(event.files[0]);\r\n this.showCropDialog();\r\n }\r\n\r\n public registerOnChange(fn?: Function): void {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(): void {\r\n // not needed for this component, but needed to implement the interface\r\n }\r\n\r\n public setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n public showCropDialog(): void {\r\n this.displayCropDialog.set(true);\r\n }\r\n\r\n public writeValue(obj?: string): void {\r\n this.uri.set(obj);\r\n }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color:&nbsp;</span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n","import { Directive, Host, Inject, input, Optional, Self, SkipSelf, ElementRef, type OnChanges, Renderer2, type SimpleChanges, effect, forwardRef, NgModule, type InputSignal, type InputSignalWithTransform } from \"@angular/core\";\r\nimport { FormControlName, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, type AsyncValidator, type AsyncValidatorFn, ControlContainer, type ControlValueAccessor, type Validator, type ValidatorFn, DefaultValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, RangeValueAccessor, NumberValueAccessor, NgControl, NgControlStatus, ReactiveFormsModule } from \"@angular/forms\";\r\nimport type { Property, SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { InputNumber } from \"primeng/inputnumber\";\r\nimport { MultiSelect } from \"primeng/multiselect\";\r\nimport { Select } from \"primeng/select\";\r\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\r\n\r\nexport function setValueOfInputSignal<T, TransformT>(signal: InputSignal<T> | InputSignalWithTransform<T, TransformT>, value: T) {\r\n const node = signal[SIGNAL];\r\n signalSetFn(node, value);\r\n // There is node.applyValueToInputSignal(node, value); too but it does not accept InputSignalWithTransform<T, TransformT>\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of a p-inputNumber element based on the property.\r\n * It sets the mode, minFractionDigits and maxFractionDigits attributes.\r\n * Thses are based on the properties step value.\r\n */\r\n@Directive({\r\n selector: \"p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]\",\r\n})\r\nexport class PropertyInputNumberAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n @Self() inputNumber: InputNumber,\r\n ) {\r\n // We need to set it to the maximum value in the constructor, because for some reason lowering it in the effect works, but raising it does not.\r\n inputNumber.maxFractionDigits = 100;\r\n\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n console.error(\"Cannot create an instance of the PropertyInputNumberAttributes directive without a property.\");\r\n return;\r\n }\r\n\r\n const element = inputNumber;\r\n if (!element) {\r\n console.error(`Cannot create an instance of the PropertyInputNumberAttributes directive for the property \"${property.name}\" without a p-inputNumber element.`);\r\n return;\r\n }\r\n\r\n element.showButtons = !property.readOnly;\r\n element.minFractionDigits = 0;\r\n if (property.step)\r\n setValueOfInputSignal(element.step, property.step);\r\n if (!property.step || property.step < 0) {\r\n element.mode = \"decimal\";\r\n }\r\n else if (property.step && property.step >= 1) {\r\n element.maxFractionDigits = PropertyInputNumberAttributes.countFractionalDigits(property.value);\r\n }\r\n });\r\n }\r\n\r\n private static countFractionalDigits(value: unknown): number {\r\n if (value === null || value === undefined || typeof value !== \"number\")\r\n return 0;\r\n\r\n let count = 0;\r\n while (!Number.isInteger(value) && count < 100) { // Prevent infinite loop due to precision issues\r\n value *= 10;\r\n count++;\r\n }\r\n\r\n return count;\r\n }\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of a p-select or p-multiSelect element based on the property.\r\n * It sets the optionLabel, optionValue, readonly, filterBy, filter, showClear, required, filterPlaceholder, appendTo, display, selectionLimit, showToggleAll attributes.\r\n * You need to set either the property or the propertyAttributes input.\r\n * If both are set, the property input will be used.\r\n * The propertyAttributes can be used if you want to set the attributes of an input element based on a property without binding the property to a form control using the propertyFormControl directive.\r\n * @example\r\n * <p-select [formControlProperty]=\"property\" />\r\n * <p-select [propertyAttributes]=\"property\" />\r\n * <p-multiSelect [formControlProperty]=\"property\" />\r\n * <p-multiSelect [propertyAttributes]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]\",\r\n})\r\nexport class PropertySelectAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The property to display.\r\n */\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n @Self() @Optional() select?: Select,\r\n @Self() @Optional() multiSelect?: MultiSelect,\r\n ) {\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n console.error(\"Cannot create an instance of the PropertySelectControl directive without a property.\");\r\n return;\r\n }\r\n\r\n const options = property.options;\r\n if (!options) {\r\n console.error(`Cannot create an instance of the PropertySelectControl directive for the property \"${property.name}\" without options.`);\r\n return;\r\n }\r\n\r\n const element = select ?? multiSelect;\r\n if (!element) {\r\n console.error(`Cannot create an instance of the PropertySelectControl directive for the property \"${property.name}\" without a p-select or p-multiSelect element.`);\r\n return;\r\n }\r\n\r\n const promptField = options.promptField ?? \"prompt\";\r\n const valueField = options.valueField ?? \"value\";\r\n element.optionLabel = promptField;\r\n element.optionValue = valueField;\r\n element.readonly = property.readOnly;\r\n element.filterBy = promptField + \",\" + valueField;\r\n element.filter = true;\r\n element.showClear = !property.required || (options.minItems ?? 0) <= 0;\r\n // element.appendTo = \"body\";\r\n setValueOfInputSignal(element.appendTo, \"body\");\r\n\r\n if (element instanceof Select) {\r\n // element.required = property.required || (options.minItems ?? 0) > 0;\r\n setValueOfInputSignal(element.required, property.required || (options.minItems ?? 0) > 0);\r\n element.filterPlaceholder = options.link?.href ? \"search for more results\" : \"\"\r\n }\r\n else if (element instanceof MultiSelect) {\r\n // It is missspelled in the primeng component using an uppercase H\r\n element.filterPlaceHolder = options.link?.href ? \"search for more results\" : \"\"\r\n element.display = \"chip\";\r\n element.selectionLimit = options.maxItems;\r\n element.showToggleAll = true;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of an input element based on the property.\r\n * It sets the id, name, placeholder, type, max, min, step, required, readOnly, cols, rows, maxLength, minLength attributes.\r\n * It also adds the p-disabled class if the property is readOnly.\r\n * You need to set either the property or the propertyAttributes input.\r\n * If both are set, the property input will be used.\r\n * The propertyAttributes can be used if you want to set the attributes of an input element based on a property without binding the property to a form control using the propertyFormControl directive.\r\n * @example\r\n * <input [formControlProperty]=\"property\" />\r\n * <input [propertyAttributes]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"[formControlProperty],[propertyAttributes]\",\r\n})\r\nexport class PropertyAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef,\r\n private readonly renderer: Renderer2\r\n ) {\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n return;\r\n }\r\n\r\n const nativeElement = this.elementRef.nativeElement;\r\n if (!(nativeElement instanceof HTMLElement))\r\n return;\r\n\r\n this.renderer.setAttribute(nativeElement, \"id\", property.name);\r\n this.renderer.setAttribute(nativeElement, \"name\", property.name);\r\n if (property.placeholder)\r\n this.renderer.setAttribute(nativeElement, \"placeholder\", property.placeholder as string);\r\n if (property.type)\r\n this.renderer.setAttribute(nativeElement, \"type\", property.type);\r\n if (property.max)\r\n this.renderer.setAttribute(nativeElement, \"max\", property.max.toString());\r\n if (property.min)\r\n this.renderer.setAttribute(nativeElement, \"min\", property.min.toString());\r\n if (property.step)\r\n this.renderer.setAttribute(nativeElement, \"step\", property.step.toString());\r\n if (property.required)\r\n this.renderer.setAttribute(nativeElement, \"required\", \"true\");\r\n if (property.readOnly) {\r\n // If the element is a textarea, we set the disabled property, otherwise we add the p-disabled class.\r\n // This is because the p-disabled class prevents scrolling and resizing of the textarea, which is not desired.\r\n if (nativeElement instanceof HTMLTextAreaElement)\r\n this.renderer.setAttribute(nativeElement, \"disabled\", \"disabled\");\r\n else\r\n this.renderer.addClass(nativeElement, \"p-disabled\");\r\n }\r\n if (property.cols)\r\n this.renderer.setAttribute(nativeElement, \"cols\", property.cols.toString());\r\n if (property.rows)\r\n this.renderer.setAttribute(nativeElement, \"rows\", property.rows.toString());\r\n if (property.maxLength)\r\n this.renderer.setAttribute(nativeElement, \"maxlength\", property.maxLength.toString());\r\n if (property.minLength)\r\n this.renderer.setAttribute(nativeElement, \"minlength\", property.minLength.toString());\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * This directive binds a property to a form control.\r\n * It sets the name of the form control to the name of the property and acts just like [formControlName]=\"myProperty().name\".\r\n * @example\r\n * <input [formControlProperty]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"[formControlProperty]:not([useTemplateDrivenForms=true])\",\r\n providers: [\r\n {\r\n provide: NgControl,\r\n useExisting: forwardRef(() => FormControlProperty),\r\n },\r\n ],\r\n})\r\nexport class FormControlProperty<TProperty extends Property<SimpleValue, string, string>> extends FormControlName implements OnChanges {\r\n public readonly formControlProperty = input.required<TProperty>();\r\n\r\n private _propertyAdded = false;\r\n\r\n constructor(\r\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\r\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: (Validator | ValidatorFn)[],\r\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: (AsyncValidator | AsyncValidatorFn)[],\r\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\r\n ) {\r\n super(parent, validators, asyncValidators, valueAccessors, null);\r\n\r\n effect(() => {\r\n const property = this.formControlProperty();\r\n if (!property) {\r\n return;\r\n }\r\n\r\n this.name = property.name;\r\n });\r\n }\r\n\r\n public override ngOnChanges(changes: SimpleChanges): void {\r\n // We cannot purely rely on the effect, because FormControlName used ngOnChanges which runs before any effects.\r\n // FormControlName reads this.name in ngOnChanges, so we need to set it here to make sure it is set before FormControlName reads it.\r\n if (!this._propertyAdded) {\r\n this.name = this.formControlProperty().name;\r\n this._propertyAdded = true;\r\n }\r\n\r\n super.ngOnChanges(changes);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DefaultPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DefaultPropertyValueAccessor extends DefaultValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=checkbox][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"select:not([multiple])[formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SelectPropertyValueAccessor extends SelectControlValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=range][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RangePropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RangePropertyValueAccessor extends RangeValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=number][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NumberPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NumberPropertyValueAccessor extends NumberValueAccessor {\r\n}\r\n\r\nexport const ngControlStatusHost = {\r\n \"[class.ng-untouched]\": \"isUntouched\",\r\n \"[class.ng-touched]\": \"isTouched\",\r\n \"[class.ng-pristine]\": \"isPristine\",\r\n \"[class.ng-dirty]\": \"isDirty\",\r\n \"[class.ng-valid]\": \"isValid\",\r\n \"[class.ng-invalid]\": \"isInvalid\",\r\n \"[class.ng-pending]\": \"isPending\",\r\n};\r\n\r\n@Directive({\r\n selector: \"[formControlProperty]\",\r\n host: ngControlStatusHost\r\n})\r\nexport class PropertyControlStatus extends NgControlStatus {\r\n constructor(@Self() cd: NgControl) {\r\n super(cd);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],\r\n exports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],\r\n})\r\nexport class HalFormsModule { }\r\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { ChangeDetectorRef, Component, ContentChild, Directive, ElementRef, OnInit, TemplateRef, computed, contentChild, effect, forwardRef, input, linkedSignal, model, output, signal, untracked, viewChild } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, FormArray, FormControl, FormGroup, FormGroupDirective, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule, type ControlValueAccessor } from '@angular/forms';\r\nimport { FormService, NumberTemplate, Options, OptionsItemDto, ProblemDetails, Property, PropertyType, ResourceOfDto, SimpleValue, Template, TemplateDto } from '@wertzui/ngx-hal-client';\r\nimport { MessageService } from 'primeng/api';\r\nimport { DropdownChangeEvent } from '../../models/events';\r\nimport { PropertyTemplateContext } from '../../models/templating';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { PropertyWithOptions, PropertyWithImage } from '../../models/special-properties'\r\nimport { debounce } from '../../util/debounce';\r\nimport { MultiSelect } from 'primeng/multiselect';\r\nimport { RestWorldLabelComponent } from \"../restworld-label/restworld-label.component\";\r\nimport { ButtonDirective } from \"primeng/button\";\r\nimport { RestWorldValidationErrorsComponent } from \"../restworld-validation-errors/restworld-validation-errors.component\";\r\nimport { Select } from \"primeng/select\";\r\nimport { Tooltip } from \"primeng/tooltip\";\r\nimport { Chip } from 'primeng/chip';\r\nimport { DatePicker } from \"primeng/datepicker\";\r\nimport { InputNumber } from \"primeng/inputnumber\";\r\nimport { Checkbox } from \"primeng/checkbox\";\r\nimport { RestWorldImageComponent } from \"../restworld-image/restworld-image.component\";\r\nimport { RestWorldFileComponent } from \"../restworld-file/restworld-file.component\";\r\nimport { InputText } from \"primeng/inputtext\";\r\nimport { JsonPipe, NgTemplateOutlet } from \"@angular/common\";\r\nimport { HalFormsModule } from \"../../directives/property.directives\";\r\nimport { OptionsManager, OptionsService } from \"../../services/options.service\";\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { map, merge, mergeMap } from \"rxjs\";\r\nimport { TriStateCheckbox } from '../restworld-tri-state-checkbox/restworld-tri-state-checkbox.component';\r\n\r\n/**\r\n * This helper type converts a Property<X, Y, Z> to an OptionsItemDto<X, Y, Z> and preserves the generic parameters.\r\n */\r\nexport type ExtractGenericOptionsItemType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? OptionsItemDto<X, Y, Z> : never\r\nexport type ExtractGenericOptionsSelectedValuesType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? Options<X, Y, Z>[\"selectedValues\"] : never\r\nexport type ExtractValueType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? X : never\r\n\r\n/**\r\n * A base class for all input components..\r\n */\r\n@Directive()\r\nexport abstract class RestWorldInputBaseComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> {\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = model.required<TProperty>();\r\n\r\n /**\r\n * Set this to true if the input should use template driven forms instead of the default reactive forms.\r\n */\r\n public readonly useTemplateDrivenForms = input(false);\r\n\r\n public readonly model = model<ExtractValueType<TProperty>>();\r\n}\r\n\r\n/**\r\n * A base class for all input components which also feature lazy loading, like dropdowns.\r\n */\r\n@Directive()\r\nexport abstract class RestWorldInputLazyLoadBaseComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputBaseComponent<TProperty> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n}\r\n\r\n/**\r\n * A form element with a label that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you want a form element without a label, use {@link RestWorldFormInput} `<rw-input>`.\r\n * @example\r\n * <rw-form-element [property]=\"property\" [apiName]=\"apiName\"></rw-form-element>\r\n */\r\n@Component({\r\n selector: 'rw-form-element',\r\n templateUrl: './restworld-form-element/restworld-form-element.component.html',\r\n styleUrls: ['./restworld-form-element/restworld-form-element.component.css'],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputComponent), RestWorldLabelComponent]\r\n})\r\nexport class RestWorldFormElementComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n}\r\n\r\n/**\r\n * A collection that is automatically created from the given property.\r\n * The collection supports drag & drop to re order the elements and can also be nested.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-collection [property]=\"property\" [apiName]=\"apiName\"></rw-input-collection>\r\n */\r\n@Component({\r\n selector: 'rw-input-collection',\r\n templateUrl: './restworld-input-collection/restworld-input-collection.component.html',\r\n styleUrls: ['./restworld-input-collection/restworld-input-collection.component.css'],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputTemplateComponent), DragDropModule, ButtonDirective, ReactiveFormsModule]\r\n})\r\nexport class RestWorldInputCollectionComponent<TProperty extends Property<SimpleValue, string, string> & { _templates: { default: Template } } = Property<SimpleValue, string, string> & { _templates: { default: Template } }> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public readonly defaultTemplate = computed(() => this.property()._templates.default);\r\n public readonly innerFormArray = computed(() => (this._controlContainer.control as FormGroup<any>)?.controls[this.property().name] as FormArray<FormGroup<any>>);\r\n public readonly templates = computed(() => this.getCollectionEntryTemplates(this.property()));\r\n\r\n @ContentChild('inputCollection', { static: false })\r\n public inputCollectionRef?: TemplateRef<unknown>;\r\n\r\n constructor(\r\n private readonly _formService: FormService,\r\n private readonly _controlContainer: ControlContainer,\r\n ) {\r\n super();\r\n }\r\n\r\n private getCollectionEntryTemplates(property?: TProperty): NumberTemplate[] {\r\n if (!property)\r\n return [];\r\n\r\n return Object.entries(property._templates)\r\n .filter(([key, value]) => Number.isInteger(Number.parseInt(key)) && Number.isInteger(Number.parseInt(value?.title ?? \"\")))\r\n .map(([, value]) => new NumberTemplate(value as TemplateDto));\r\n }\r\n\r\n public addNewItemToCollection(): void {\r\n const templates = this.templates();\r\n const defaultTemplate = this.defaultTemplate();\r\n\r\n const maxIndex = Math.max(...Object.keys(templates)\r\n .map(key => Number.parseInt(key))\r\n .filter(key => Number.isSafeInteger(key)));\r\n const nextIndex = maxIndex < 0 ? 0 : maxIndex + 1;\r\n\r\n const copiedTemplateDto = JSON.parse(JSON.stringify(defaultTemplate)) as TemplateDto;\r\n copiedTemplateDto.title = nextIndex.toString();\r\n const copiedTemplate = new Template(copiedTemplateDto);\r\n\r\n this.property.update((property) => { property._templates[nextIndex] = copiedTemplate; return { ...property }; });\r\n this.innerFormArray().push(this._formService.createFormGroupFromTemplate(this.defaultTemplate()));\r\n }\r\n\r\n public collectionItemDropped($event: CdkDragDrop<{}>) {\r\n const previousIndex = $event.previousIndex;\r\n const currentIndex = $event.currentIndex;\r\n const movementDirection = currentIndex > previousIndex ? 1 : -1;\r\n\r\n // Move in FormArray\r\n // We do not need to move the item in the _templates object\r\n const innerFormArray = this.innerFormArray();\r\n const movedControl = innerFormArray.at(previousIndex);\r\n for (let i = previousIndex; i * movementDirection < currentIndex * movementDirection; i = i + movementDirection) {\r\n innerFormArray.setControl(i, innerFormArray.at(i + movementDirection));\r\n }\r\n innerFormArray.setControl(currentIndex, movedControl);\r\n }\r\n\r\n public deleteItemFromCollection(template: NumberTemplate): void {\r\n const title = template.title;\r\n if (title === undefined)\r\n throw new Error(\"Cannot delete a template without a title.\");\r\n\r\n this.property.update((property) => { delete property._templates[title]; return { ...property }; });\r\n this.innerFormArray().removeAt(title);\r\n }\r\n}\r\n\r\n/**\r\n * A form input element that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you also want a label, use {@link RestWorldFormElement} `<rw-form-element>`.\r\n * You can also use one of the different RestWorldInput... `<rw-input-...>` elements to render a specific input,\r\n * but it is advised to control the rendered input through the passed in property.\r\n * @example\r\n * <rw-input [property]=\"property\" [apiName]=\"apiName\"></rw-input>\r\n */\r\n@Component({\r\n selector: 'rw-input',\r\n templateUrl: './restworld-input/restworld-input.component.html',\r\n styleUrls: ['./restworld-input/restworld-input.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputDropdownComponent), forwardRef(() => RestWorldInputObjectComponent), forwardRef(() => RestWorldInputSimpleComponent), RestWorldInputCollectionComponent, RestWorldValidationErrorsComponent, FormsModule]\r\n})\r\nexport class RestWorldInputComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithOptions() {\r\n return PropertyWithOptions<SimpleValue, string, string>;\r\n }\r\n}\r\n\r\n/**\r\n * A dropdown that is automatically created from the given property.\r\n * The dropdown supports searching through a RESTWorld list endpoint on the backend if the `link` of the options is set.\r\n * Otherwise the dropdown will use the `inline` of the options.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-dropdown [property]=\"property\" [apiName]=\"apiName\"></rw-input-dropdown>\r\n */\r\n@Component({\r\n selector: 'rw-input-dropdown',\r\n templateUrl: './restworld-input-dropdown/restworld-input-dropdown.component.html',\r\n styleUrls: ['./restworld-input-dropdown/restworld-input-dropdown.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [Select, ReactiveFormsModule, MultiSelect, Tooltip, Chip, NgTemplateOutlet, HalFormsModule, FormsModule]\r\n})\r\nexport class RestWorldInputDropdownComponent<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> extends RestWorldInputLazyLoadBaseComponent<TProperty> implements OnInit {\r\n /**\r\n * A flag that indicates if the search should be case sensitive.\r\n * The default is false.\r\n */\r\n public readonly caseSensitive = input(false);\r\n /**\r\n * A function that returns the label for the given item.\r\n * The default returns the prompt and optionally the value in brackets.\r\n * The value in brackets will only be displayed if the `cols` field of the property is undefined or greater than 1.\r\n * Overwrite this function to change the label.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getLabel = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n /**\r\n * A function that returns the tooltip for the given item.\r\n * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.\r\n * The default properties to exclude are: createdAt, createdBy, lastChangedAt, lastChangedBy, timestamp, promptField, valueField.\r\n * Overwrite this function to change the tooltip.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getTooltip = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n\r\n public readonly inputOptionsMultipleRef = contentChild<TemplateRef<PropertyTemplateContext>>(\"inputOptionsMultiple\");\r\n public readonly inputOptionsSingleRef = contentChild<TemplateRef<PropertyTemplateContext>>(\"inputOptionsSingle\");\r\n public readonly multiSelect = viewChild<MultiSelect>(MultiSelect);\r\n /**\r\n * An event that is emitted when the selected value changes.\r\n */\r\n public onChange = output<DropdownChangeEvent<TOptionsItem>>();\r\n public onOptionsFiltered = debounce(this.onOptionsFilteredInternal, 500);\r\n public readonly optionsManager: OptionsManager<TProperty, TOptionsItem>;\r\n\r\n private readonly _formControl = computed(() => {\r\n const formGroup = this._controlContainer.control as FormGroup<any>;\r\n return formGroup.controls[this.property().name] as AbstractControl<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[]>;\r\n });\r\n\r\n private readonly _valueChangesSignal = toSignal(\r\n merge(\r\n // Get the initial value when 'control' changes\r\n toObservable(this._formControl).pipe(map((ctl) => ctl.value)),\r\n // Get the new value when 'control.value' changes\r\n toObservable(this._formControl).pipe(mergeMap((ctl) => ctl.valueChanges))\r\n )\r\n );\r\n\r\n constructor(\r\n private readonly _controlContainer: ControlContainer,\r\n optionsService: OptionsService,\r\n ) {\r\n super();\r\n //const valueChangesSignal = toSignal(this._formControl.valueChanges);\r\n this.optionsManager = optionsService.getManager(this.apiName, this.property, this._valueChangesSignal, this.getLabel, this.getTooltip);\r\n }\r\n\r\n public async ngOnInit(): Promise<void> {\r\n await this.optionsManager.initialize();\r\n }\r\n\r\n public onOptionsChanged(event: DropdownChangeEvent<TOptionsItem>) {\r\n this.onChange.emit(event);\r\n }\r\n\r\n public async onOptionsFilteredInternal(event: { originalEvent: Event; filter: string | null }) {\r\n const options = this.optionsManager.options();\r\n const currentItems = this.optionsManager.items();\r\n\r\n if (!(event.filter) || event.filter === '')\r\n return;\r\n\r\n if (event.originalEvent.type === \"input\") {\r\n const inputEvent = (event.originalEvent as InputEvent);\r\n if (inputEvent.inputType === \"insertFromPaste\") {\r\n // If the user pasted in multiple ids as comma separated list, we want to get them all and set them as the selected value.\r\n\r\n var values = event.filter\r\n .split(\",\")\r\n .filter(v => v !== '')\r\n .map(v => v.trim())\r\n .map(v => {\r\n const n = Number.parseFloat(v);\r\n return Number.isNaN(n) ? this.makeUpperIfCaseInsensitive(v.toUpperCase(), false) : n;\r\n });\r\n\r\n if (!values || values.length === 0)\r\n return;\r\n\r\n const allAreNumbers = values.every(v => typeof v === \"number\" && !isNaN(v));\r\n const filter = allAreNumbers\r\n ? `${options.valueField} in (${values.join(',')})`\r\n : `contains(${this.makeUpperIfCaseInsensitive(options.promptField, true)}, '${values.join(\"', '\")}')`;\r\n\r\n if ((options?.link?.href))\r\n await this.optionsManager.updateItemsFromFilter(filter);\r\n\r\n if (currentItems) {\r\n const selectedValues = currentItems\r\n .map(i => this.optionsManager.getValue(i))\r\n .filter(v => values.includes(v as unknown as string | number));\r\n this._formControl().setValue(selectedValues);\r\n this.multiSelect()?.resetFilter();\r\n }\r\n }\r\n else {\r\n // This is the normal case where the user types in a filter.\r\n\r\n let filter = `contains(${this.makeUpperIfCaseInsensitive(options.promptField, true)}, '${this.makeUpperIfCaseInsensitive(event.filter, false)}')`;\r\n if (options.valueField?.toLowerCase() === 'id' && !Number.isNaN(Number.parseInt(event.filter)))\r\n filter = `(${options.valueField} eq ${event.filter}) or (${filter})`;\r\n\r\n if ((options?.link?.href))\r\n await this.optionsManager.updateItemsFromFilter(filter);\r\n }\r\n }\r\n }\r\n\r\n private makeUpperIfCaseInsensitive(filter: string | null | undefined, isOData: boolean): string | null | undefined {\r\n if (this.caseSensitive() || typeof filter !== \"string\")\r\n return filter;\r\n\r\n if (isOData)\r\n return `toupper(${filter})`;\r\n\r\n return filter.toUpperCase();\r\n }\r\n}\r\n\r\n/**\r\n * A complex object with multiple properties that is automatically created from the given property.\r\n * The object can also be nested.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-object [property]=\"property\" [apiName]=\"apiName\"></rw-input-object>\r\n */\r\n@Component({\r\n selector: 'rw-input-object',\r\n templateUrl: './restworld-input-object/restworld-input-object.component.html',\r\n styleUrls: ['./restworld-input-object/restworld-input-object.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputTemplateComponent), ReactiveFormsModule, NgTemplateOutlet]\r\n})\r\nexport class RestWorldInputObjectComponent<TProperty extends Property<SimpleValue, string, string> & { _templates: { default: Template } } = Property<SimpleValue, string, string> & { _templates: { default: Template } }> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public inputObjectRef = contentChild<TemplateRef<unknown>>(\"inputObject\");\r\n\r\n constructor(\r\n private readonly _controlContainer: ControlContainer\r\n ) {\r\n super();\r\n }\r\n\r\n public readonly innerFormGroup = computed(() => {\r\n const formGroup = this._controlContainer.control as FormGroup<any>;\r\n return formGroup.controls[this.property().name] as FormGroup<any>;\r\n });\r\n}\r\n\r\n/**\r\n * A simple input element, like a string, a number or a Date that is automatically created from the given property.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-simple [property]=\"property\" [apiName]=\"apiName\"></rw-input-simple>\r\n */\r\n@Component({\r\n selector: 'rw-input-simple',\r\n templateUrl: './restworld-input-simple/restworld-input-simple.component.html',\r\n styleUrls: ['./restworld-input-simple/restworld-input-simple.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldInputSimpleComponent),\r\n multi: true\r\n }],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule]\r\n})\r\nexport class RestWorldInputSimpleComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputBaseComponent<TProperty> implements ControlValueAccessor {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"mm\")\r\n .replace(\"3333\", \"yy\")\r\n .replace(\"33\", \"y\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n private readonly _inputChild = viewChild<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(\"inputElement\");\r\n private readonly _controlChild = viewChild<ControlValueAccessor>(NG_VALUE_ACCESSOR);\r\n\r\n\r\n constructor(\r\n ) {\r\n super();\r\n }\r\n writeValue(obj: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.writeValue(obj);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.value = obj;\r\n }\r\n registerOnChange(fn: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.registerOnChange(fn);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.oninput = (event) => fn((event.target as HTMLInputElement | HTMLTextAreaElement).value);\r\n }\r\n registerOnTouched(fn: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.registerOnTouched(fn);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.onblur = (event) => fn();\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined && controlChild.setDisabledState !== undefined)\r\n controlChild.setDisabledState(isDisabled);\r\n else if (inputChild !== undefined) {\r\n if (isDisabled)\r\n inputChild.nativeElement.setAttribute(\"disabled\", \"disabled\");\r\n else\r\n inputChild.nativeElement.removeAttribute(\"disabled\");\r\n }\r\n }\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithImage() {\r\n return PropertyWithImage;\r\n }\r\n\r\n public get dateFormat(): string {\r\n return RestWorldInputSimpleComponent._dateFormat;\r\n }\r\n\r\n // public readonly formControl = computed(() => {\r\n // const formGroup = this._controlContainer.control as FormGroup<any>;\r\n // return formGroup.controls[this.property().name] as FormControl<SimpleValue | SimpleValue[]>;\r\n // });\r\n\r\n public get timeFormat() {\r\n return RestWorldInputSimpleComponent._timeFormat;\r\n }\r\n}\r\n\r\n/**\r\n * A collection of `<rw-form>` elements automatically created from a template.\r\n * Does not have any buttons on its own.\r\n * If you want buttons, use {@link RestWorldForm} `<rw-form>`.\r\n * @example\r\n * <rw-form-collection [template]=\"template\" [apiName]=\"apiName\"></rw-form-collection>\r\n */\r\n@Component({\r\n selector: 'rw-input-template',\r\n templateUrl: './restworld-input-template/restworld-input-template.component.html',\r\n styleUrls: ['./restworld-input-template/restworld-input-template.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [RestWorldFormElementComponent]\r\n})\r\nexport class RestWorldInputTemplateComponent<T extends { [K in keyof T]: AbstractControl<any, any>; }> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The template to display.\r\n * @required\r\n * @remarks This is the template that defines the properties to display.\r\n */\r\n public readonly template = input.required<Template | NumberTemplate>();\r\n}\r\n","<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n","<div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\" cdkDropList (cdkDropListDropped)=\"collectionItemDropped($event)\">\n @for (template of templates(); track template) {\n <div class=\"flex align-items-center\" cdkDrag>\n <i class=\"fas fa-grip-lines\" cdkDragHandle></i>\n <div class=\"brace\">\n </div>\n <div class=\"w-full flex justify-content-end\">\n <rw-input-template [formGroup]=\"innerFormArray().controls[template.title!]\" [template]=\"template\" [apiName]=\"apiName()\" class=\"w-full\"></rw-input-template>\n <button pButton pRipple type=\"button\" icon=\"fas fa-trash\" class=\"p-button-outlined p-button-danger ml-2 mb-3\" (click)=\"deleteItemFromCollection(template)\"></button>\n </div>\n </div>\n }\n <div class=\"flex justify-content-end w-full\">\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-outlined p-button-info\" (click)=\"addNewItemToCollection()\"></button>\n </div>\n </div>\n</div>\n","@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n","<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-select\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n @else {\n <p-select\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selectedItem let-selectedItem>\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-select>\n }\n</ng-template>\n\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\n @if (useTemplateDrivenForms()) {\n <p-multiSelect\n [propertyAttributes]=\"property()\"\n [(ngModel)]=\"model\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n @else {\n <p-multiSelect\n [formControlProperty]=\"property()\"\n [options]=\"optionsManager.items()\"\n (onFilter)=\"onOptionsFiltered($event)\"\n (onChange)=\"onOptionsChanged($event)\"\n styleClass=\"w-full\"\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\n [loading]=\"optionsManager.loading()\"\n >\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\n @for (item of items; track item; let i = $index) {\n <p-chip\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\n [label]=\"optionsManager.getLabel()(item)\"\n [removable]=\"true\"\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\n >\n </p-chip>\n }\n </ng-template>\n <ng-template #item let-item>\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\n </ng-template>\n </p-multiSelect>\n }\n</ng-template>\n\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n@else {\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\n}\n","<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\n <div class=\"flex align-items-center\">\n <div class=\"brace\">\n </div>\n <div class=\"w-full\">\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\n </div>\n </div>\n</ng-template>\n\n<ng-container>\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\n</ng-container>\n","@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n","@for (property of template().properties; track property) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n","import { Component, ContentChild, ElementRef, TemplateRef, computed, contentChild, effect, input, model, output, signal } from '@angular/core';\r\nimport { AbstractControl, FormGroup, ReactiveFormsModule, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\r\nimport { FormService, FormsResource, ProblemDetails, PropertyDto, SimpleValue, Template } from '@wertzui/ngx-hal-client';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { AfterSubmitOkEvent, AfterSubmitRedirectEvent } from '../../models/events';\r\nimport { Subscription } from 'rxjs';\r\nimport { RestWorldValidationErrorsComponent } from \"../restworld-validation-errors/restworld-validation-errors.component\";\r\nimport { RestWorldInputTemplateComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { RippleModule } from \"primeng/ripple\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { ProblemService } from \"../../services/problem.service\";\r\n\r\n/**\r\n * A form with Save, Reload and Delete buttons.\r\n * If you do not want buttons, use RestWorldFormTemplateComponent <rw-form-template>.\r\n * You can also provide your own buttons by passing in a template.\r\n * @example\r\n * <rw-form\r\n * [template]=\"template\"\r\n * apiName=\"apiName\"\r\n * rel=\"rel\"\r\n * [allowSubmit]=\"true\"\r\n * [allowDelete]=\"true\"\r\n * [allowReload]=\"true\"\r\n * [showSubmit]=\"true\"\r\n * [showDelete]=\"true\"\r\n * [showReload]=\"true\">\r\n * <ng-template #content let-form=\"form\" let-template=\"template\" let-apiName=\"apiName\">\r\n * <!-- Custom form content here -->\r\n * <!-- This is optional and will replace the default which renders labels and inputs if present -->\r\n * </ng-template>\r\n * <ng-template #buttons let-form=\"form\" let-template=\"template\" let-apiName=\"apiName\">\r\n * <!-- Custom buttons here -->\r\n * <!-- This is optional and will replace the default which renders the Save, Reload and Delete buttons if present -->\r\n * </ng-template>\r\n * </rw-form>\r\n */\r\n@Component({\r\n selector: 'rw-form',\r\n templateUrl: './restworld-form.component.html',\r\n styleUrls: ['./restworld-form.component.css'],\r\n standalone: true,\r\n imports: [ReactiveFormsModule, RestWorldValidationErrorsComponent, RestWorldInputTemplateComponent, ProgressSpinnerModule, ButtonModule, RippleModule, NgTemplateOutlet]\r\n})\r\nexport class RestWorldFormComponent<TPropertyDtos extends ReadonlyArray<PropertyDto<SimpleValue, string, string>>> {\r\n /**\r\n * Emitted after the resource has been deleted.\r\n */\r\n public readonly afterDelete = output<void>();\r\n /**\r\n * Emitted after the form has been submitted.\r\n */\r\n public readonly afterSubmit = output<AfterSubmitOkEvent | AfterSubmitRedirectEvent>();\r\n /**\r\n * Determines whether to enable the delete button.\r\n */\r\n public readonly allowDelete = input(true);\r\n /**\r\n * Determines whether to enable the reload button.\r\n */\r\n public readonly allowReload = input(true);\r\n /**\r\n * Determines whether to enable the submit button.\r\n */\r\n public readonly allowSubmit = input(true);\r\n /**\r\n * The name of the API to use.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Determines whether the resource can be deleted.\r\n */\r\n public readonly canDelete = computed(() =>\r\n this.allowDelete() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n this.template().method == \"PUT\" &&\r\n this.formGroup() !== undefined &&\r\n this.formGroup()?.value.id !== undefined &&\r\n this.formGroup()?.value.timestamp !== undefined &&\r\n !this.isLoading());\r\n /**\r\n * Determines whether the form can be reloaded.\r\n */\r\n public readonly canReload = computed(() =>\r\n this.allowReload() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n this.template().title !== undefined &&\r\n this.template().properties.some(p => p.name === \"id\" && p.value !== undefined && p.value !== null && p.value !== 0) &&\r\n !this.isLoading());\r\n /**\r\n * Determines whether the form can be submitted.\r\n */\r\n public readonly canSubmit = computed(() =>\r\n this.allowSubmit() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n !this.isLoading() &&\r\n this.formGroup() !== undefined);\r\n /**\r\n * The form group that represents the form.\r\n */\r\n public readonly formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()));\r\n public readonly isLoading = signal(false);\r\n /**\r\n * The rel of the form.\r\n */\r\n public readonly rel = input.required<string>();\r\n /**\r\n * Determines whether to show the delete button.\r\n */\r\n public readonly showDelete = input(true);\r\n /**\r\n * Determines whether to show the reload button.\r\n */\r\n public readonly showReload = input(true);\r\n /**\r\n * Determines whether to show the submit button.\r\n */\r\n public readonly showSubmit = input(true);\r\n /**\r\n * The template used to render the form.\r\n */\r\n public readonly template = model.required<Template<TPropertyDtos>>();\r\n /**\r\n * Emitted when the form value changes.\r\n */\r\n public readonly valueChanges = output<any>();\r\n\r\n /**\r\n * A reference to a template that can be used to render custom buttons for the form.\r\n */\r\n public readonly buttonsRef = contentChild<TemplateRef<unknown>>('buttons');\r\n /**\r\n * A reference to a template that can be used to render content before the default buttons.\r\n */\r\n public readonly beforeButtonsRef = contentChild<TemplateRef<unknown>>('beforeButtons');\r\n /**\r\n * A reference to a template that can be used to render content after the default buttons.\r\n */\r\n public readonly afterButtonsRef = contentChild<TemplateRef<unknown>>('afterButtons');\r\n /**\r\n * A reference to a template that can be used to render custom content inside the <form> element instead of the default form.\r\n */\r\n public readonly contentRef = contentChild<TemplateRef<unknown>>('content');\r\n\r\n private readonly _client = computed(() => this._clients.getClient(this.apiName()));\r\n\r\n private _formValueChangesSubscription?: Subscription;\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _confirmationService: ConfirmationService,\r\n private readonly _messageService: MessageService,\r\n private readonly _formService: FormService,\r\n private readonly _elementRef: ElementRef<HTMLElement>,\r\n private readonly _problemService: ProblemService) {\r\n // Update the form value changes subscription to always track the current form group.\r\n effect(() => {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n const formGroup = this.formGroup();\r\n this._formValueChangesSubscription = formGroup?.valueChanges.subscribe(newValue => this.valueChanges.emit(newValue));\r\n this.valueChanges.emit(formGroup?.value);\r\n });\r\n }\r\n\r\n public async delete(): Promise<void> {\r\n if (!this.canDelete())\r\n return;\r\n\r\n const formGroup = this.formGroup();\r\n if (formGroup === undefined)\r\n throw new Error(\"formGroup cannot be undefined.\");\r\n\r\n const template = this.template();\r\n if (template === undefined)\r\n throw new Error(\"template cannot be undefined.\");\r\n\r\n // canDelete already checks that the timestamp is present, so the cast is safe.\r\n const result = await this._client().deleteByTemplateAndForm(template, formGroup as unknown as FormGroup<{ timestamp: AbstractControl<string> }>);\r\n if (this._problemService.checkResponseAndDisplayErrors(result, formGroup)) {\r\n this._messageService.add({ severity: 'success', summary: 'Deleted', detail: 'The resource has been deleted.' })\r\n this.afterDelete.emit();\r\n }\r\n }\r\n\r\n public async reload(): Promise<void> {\r\n const canReload = this.canReload();\r\n const template = this.template();\r\n if (!canReload || template === undefined)\r\n return;\r\n\r\n this.isLoading.set(true);\r\n\r\n try {\r\n const response = await this._client().getForm(template.target!);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, this.formGroup())) {\r\n this.template.set(response.body!.getTemplateByTitle(template.title!) as Template<TPropertyDtos>);\r\n }\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `An unknown error occurred. ${JSON.stringify(e)}`, sticky: true });\r\n console.log(e);\r\n }\r\n\r\n this.isLoading.set(false);\r\n }\r\n\r\n public showDeleteConfirmatioModal() {\r\n this._confirmationService.confirm({\r\n message: 'Do you really want to delete this resource?',\r\n header: 'Confirm delete',\r\n icon: 'far fa-trash-alt',\r\n accept: () => this.delete()\r\n });\r\n }\r\n\r\n public async submit() {\r\n const formGroup = this.formGroup();\r\n const template = this.template();\r\n\r\n if (formGroup !== undefined) {\r\n formGroup.markAllAsTouched();\r\n\r\n if (!formGroup.valid) {\r\n this._messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: 'Please correct the errors before submitting.',\r\n });\r\n\r\n ProblemService.scrollToFirstValidationError(this._elementRef.nativeElement);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canSubmit() || formGroup === undefined || template === undefined)\r\n return;\r\n\r\n this.isLoading.set(true);\r\n\r\n try {\r\n const response = await this._client().submit(template, formGroup.value);\r\n\r\n if (!this._problemService.checkResponseAndDisplayErrors(response, formGroup, \"Error while saving the resource\")) {\r\n }\r\n else if (response.status == 201) {\r\n if (!response.headers.has('Location')) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'The server returned a 201 Created response, but did not return a Location header.', data: response, sticky: true });\r\n return;\r\n }\r\n\r\n this._messageService.add({ severity: 'success', summary: 'Created', detail: 'The resource has been created.' });\r\n\r\n var createdAtUri = response.headers.get('Location')!;\r\n this.afterSubmit.emit({ location: createdAtUri, status: 201 });\r\n }\r\n else {\r\n const responseResource = (response.body as FormsResource);\r\n const newTemplate = responseResource.getTemplateByTitle(template.title!) as Template<TPropertyDtos>;\r\n this.template.set(newTemplate);\r\n\r\n this._messageService.add({ severity: 'success', summary: 'Saved', detail: 'The resource has been saved.' });\r\n\r\n this.afterSubmit.emit({ old: template, new: newTemplate, status: 200 });\r\n }\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `An unknown error occurred. ${JSON.stringify(e)}`, sticky: true });\r\n console.log(e);\r\n }\r\n\r\n this.isLoading.set(false);\r\n }\r\n}\r\n","@if (formGroup() !== undefined && template() !== undefined) {\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\n <div class=\"blockable-container\">\n <div class=\"blockable-element\">\n <div class=\"grid field\">\n <div class=\"col-12 md:col-10 md:col-offset-2\">\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\n </div>\n </div>\n <ng-template #defaultContent>\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n @if (isLoading()) {\n <div class=\"blockable-overlay\">\n <p-progressSpinner></p-progressSpinner>\n </div>\n }\n </div>\n\n <div class=\"grid\">\n <div class=\"col\">\n <div class=\"flex justify-content-end w-full\">\n <ng-template #defaultButtons>\n @if (beforeButtonsRef(); as beforeButtons) {\n <ng-container\n *ngTemplateOutlet=\"beforeButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n }\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\n [disabled]=\"!allowSubmit()\"></button>\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\n [disabled]=\"!canDelete()\"></button>\n @if (afterButtonsRef(); as afterButtons) {\n <ng-container\n *ngTemplateOutlet=\"afterButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n }\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\n </div>\n </div>\n </div>\n </form>\n}\n","import { Component, computed, input } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ProblemDetails, Resource } from '@wertzui/ngx-hal-client';\nimport { RestWorldClient } from '../../services/restworld-client';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MessageService } from 'primeng/api';\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\nimport { InputNumberModule } from \"primeng/inputnumber\";\nimport { ButtonModule } from \"primeng/button\";\n\n/**\n * Component for navigating to a resource by its ID.\n * \n * @remarks\n * This component is used to navigate to a resource by its ID. It takes in the API name, the `rel` of the resource, and an optional `urlPrefix` to use for the URL that is returned from the backend. It also provides a form for entering the ID of the resource to navigate to.\n */\n@Component({\n selector: 'rw-id-navigation',\n templateUrl: './restworld-id-navigation.component.html',\n styleUrls: ['./restworld-id-navigation.component.css'],\n standalone: true,\n imports: [InputNumberModule, ButtonModule, ReactiveFormsModule]\n})\nexport class RestWorldIdNavigationComponent {\n public readonly apiName = input.required<string>();\n public readonly rel = input.required<string>();\n /**\n * A prefix to use for the URL that is returned from the backend.\n * If none is provided, a relative navigation will be performed which means that the last part of the current URL is replaced with the one from the backend.\n */\n public readonly urlPrefix = input<string>();\n\n public idNavigationForm = new FormGroup<{\n id: FormControl<number | null>\n }>({\n id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))\n });\n\n private _client = computed(() => this._clients.getClient(this.apiName()));\n\n constructor(\n private readonly _clients: RestWorldClientCollection,\n private readonly _messageService: MessageService,\n private readonly _router: Router,\n private readonly _route: ActivatedRoute) {\n }\n\n public async navigateById(): Promise<void> {\n const rel = this.rel();\n if (!rel)\n throw new Error('The \"rel\" must be set through the uri of this page for the ID navigation to work.');\n\n if (!this.idNavigationForm.valid) {\n this._messageService.add({ detail: 'You must enter a valid ID to naviage to.', severity: 'error' });\n return;\n }\n var idToNavigateTo = this.idNavigationForm.controls.id.value;\n\n var client = this._client();\n\n var response = await client.getList<Resource>(rel, { $filter: `id eq ${idToNavigateTo}` });\n if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body) {\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API.', data: response });\n return;\n }\n\n var resource = response.body?._embedded?.items?.[0];\n if (!resource) {\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'No resource found with the specified ID.' });\n return;\n }\n\n const urlPrefix = this.urlPrefix();\n if (urlPrefix !== undefined)\n await this._router.navigate([urlPrefix, resource._links.self[0].href]);\n else\n await this._router.navigate([\"..\", resource._links.self[0].href], { relativeTo: this._route });\n\n this.idNavigationForm.reset();\n }\n}\n","<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\n <div class=\"p-inputgroup\">\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\n </div>\n</form>\n","import { Component, input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { MenuItem } from 'primeng/api';\nimport { ButtonModule } from \"primeng/button\";\nimport { SplitButtonModule } from \"primeng/splitbutton\";\nimport { TooltipModule } from \"primeng/tooltip\";\n\n/**\n * Displays one button for every `MenuItem` given in the items array.\n * If a `MenuItem` has nested items, a button with a dropdown menu will be displayed.\n * @example\n * <rw-menu-button [items]=\"items\"></rw-menu-button>\n */\n@Component({\n selector: 'rw-menu-button',\n templateUrl: './restworld-menu-button.component.html',\n styleUrls: ['./restworld-menu-button.component.css'],\n standalone: true,\n imports: [ButtonModule, TooltipModule, SplitButtonModule]\n})\nexport class RestWorldMenuButtonComponent {\n /**\n * An array of menu items to be displayed.\n */\n public readonly items = input.required<MenuItem[]>();\n\n constructor(private readonly _router: Router) {\n\n }\n\n onClick(event: MouseEvent, item: MenuItem) {\n const openInNewWindow = event.ctrlKey || event.button === 1 || event.metaKey;\n if (item.url) {\n window.open(item.url, openInNewWindow ? '_blank' : '_self');\n }\n else if (item.routerLink) {\n if (openInNewWindow) {\n const tree = this._router.createUrlTree(item.routerLink, {\n queryParams: item.queryParams,\n fragment: item.fragment,\n queryParamsHandling: item.queryParamsHandling,\n preserveFragment: item.preserveFragment,\n });\n const url = this._router.serializeUrl(tree);\n window.open(url, '_blank');\n }\n else {\n this._router.navigate(item.routerLink, {\n queryParams: item.queryParams,\n fragment: item.fragment,\n queryParamsHandling: item.queryParamsHandling,\n preserveFragment: item.preserveFragment,\n skipLocationChange: item.skipLocationChange,\n replaceUrl: item.replaceUrl,\n });\n }\n }\n else if (item.command) {\n item.command({ item: item });\n }\n }\n}\n","@for (item of items(); track item; let i = $index) {\n @if (!item.items) {\n <p-button\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-button>\n } \n @else {\n <p-splitButton\n [label]=\"item.label!\"\n [icon]=\"item.icon!\"\n [model]=\"item.items\"\n appendTo=\"body\"\n [disabled]=\"item.disabled!\"\n [style]=\"item.style\"\n [styleClass]=\"item.styleClass!\"\n [pTooltip]=\"item.tooltip!\"\n [tooltipPosition]=\"item.tooltipPosition!\"\n (onClick)=\"onClick($event, item)\"\n [class.ml-2]=\"i > 0\">\n </p-splitButton>\n }\n}\n","import { PrimitiveTypeEnum } from \"@odata/metadata\";\r\nimport { type Token, TokenType, createTraverser, type EqualsExpressionToken, type LeftRightExpressionToken, type LiteralToken, type AndExpressionToken, type OrExpressionToken } from \"@odata/parser\";\r\nimport type { SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { type FilterMetadata, FilterMatchMode } from \"primeng/api\";\r\n\r\ninterface MethodCallExpressionToken extends Token {\r\n type: TokenType.MethodCallExpression;\r\n value: {\r\n method: string;\r\n parameters: Token[];\r\n };\r\n}\r\n\r\ninterface ODataIdentifierToken extends Token {\r\n type: TokenType.ODataIdentifier;\r\n value: {\r\n name: string;\r\n };\r\n}\r\n\r\n/**\r\n * This visitor turns a parsed OData $filter query string represented as a {@link Token} into a map of property names to filter metadata.\r\n * The filter metadata is used by the PrimeNG table component to filter the rows of\r\n * a table based on the values of the columns.\r\n */\r\nexport class OdataVisitor {\r\n private _filters: Map<string, FilterMetadata[]> = new Map();\r\n private operator: \"and\" | \"or\" | undefined;\r\n private propertyName: string | undefined;\r\n private value: SimpleValue | null | undefined;\r\n\r\n private static correctFilterMatchMode(matchMode: string, literalValue: SimpleValue | SimpleValue[] | null): string {\r\n if (literalValue instanceof Date) {\r\n switch (matchMode) {\r\n case FilterMatchMode.EQUALS:\r\n return FilterMatchMode.DATE_IS;\r\n case FilterMatchMode.NOT_EQUALS:\r\n return FilterMatchMode.DATE_IS_NOT;\r\n case FilterMatchMode.LESS_THAN:\r\n return FilterMatchMode.DATE_BEFORE;\r\n case FilterMatchMode.LESS_THAN_OR_EQUAL_TO:\r\n return FilterMatchMode.DATE_BEFORE;\r\n case FilterMatchMode.GREATER_THAN:\r\n return FilterMatchMode.DATE_AFTER;\r\n case FilterMatchMode.GREATER_THAN_OR_EQUAL_TO:\r\n return FilterMatchMode.DATE_AFTER;\r\n }\r\n }\r\n\r\n return matchMode;\r\n }\r\n\r\n private static parseLiteralValue(node: LiteralToken): SimpleValue | null {\r\n const type = node.value as PrimitiveTypeEnum;\r\n switch (type) {\r\n case PrimitiveTypeEnum.Binary:\r\n case PrimitiveTypeEnum.Boolean:\r\n return node.raw === \"true\";\r\n case PrimitiveTypeEnum.Byte:\r\n case PrimitiveTypeEnum.Int16:\r\n case PrimitiveTypeEnum.Int32:\r\n case PrimitiveTypeEnum.Int64:\r\n case PrimitiveTypeEnum.SByte:\r\n return Number.parseInt(node.raw);\r\n case PrimitiveTypeEnum.Date:\r\n case PrimitiveTypeEnum.DateTime:\r\n case PrimitiveTypeEnum.DateTimeOffset:\r\n case PrimitiveTypeEnum.Duration:\r\n case PrimitiveTypeEnum.TimeOfDay:\r\n return new Date(node.raw);\r\n case PrimitiveTypeEnum.Decimal:\r\n case PrimitiveTypeEnum.Double:\r\n case PrimitiveTypeEnum.Single:\r\n return Number.parseFloat(node.raw);\r\n default:\r\n switch (node.raw) {\r\n case \"null\":\r\n return null;\r\n default:\r\n return node.raw.startsWith(\"'\") ? node.raw.substring(1, node.raw.length - 1) : node.raw;\r\n }\r\n }\r\n }\r\n\r\n private static parseMethodCallExpression(node: Token): string {\r\n switch (node.value.method) {\r\n case 'startswith':\r\n return FilterMatchMode.STARTS_WITH;\r\n case 'contains':\r\n return FilterMatchMode.CONTAINS;\r\n case 'not contains':\r\n return FilterMatchMode.NOT_CONTAINS;\r\n case 'endswith':\r\n return FilterMatchMode.ENDS_WITH;\r\n default:\r\n throw Error(`Unknown method call ${node.value.method}`);\r\n }\r\n }\r\n\r\n /***\r\n * Parses an OData $filter query string and returns a map of property names to filter metadata.\r\n * @param node The root node of the OData $filter query string.\r\n * @param logToConsole If true, logs the type and raw value of each token to the console.\r\n * @returns A map of property names to filter metadata.\r\n */\r\n public parse(node: Token, logToConsole?: boolean): Map<string, FilterMetadata[]> {\r\n if (logToConsole) {\r\n const visitLogAll = createTraverser(\r\n Object.fromEntries(\r\n Object.entries(TokenType)\r\n .map(([key, value]) => ([key, (node: Token) => console.log(`${node.type}: ${node.raw}`)] as [string, (node: Token) => void])\r\n )\r\n ), true);\r\n visitLogAll(node);\r\n }\r\n\r\n const visit = createTraverser({\r\n EqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.EQUALS),\r\n NotEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.NOT_EQUALS),\r\n GreaterThanExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.GREATER_THAN),\r\n GreaterOrEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO),\r\n LesserThanExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.LESS_THAN),\r\n LesserOrEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.LESS_THAN_OR_EQUAL_TO),\r\n HasExpression: (node: Token) => this.CreateFilter(this.propertyName, [this.value], FilterMatchMode.EQUALS),\r\n ODataIdentifier: (node: Token) => this.propertyName = node.value.name,\r\n Literal: (node: Token) => this.value = OdataVisitor.parseLiteralValue(node as LiteralToken),\r\n AndExpression: (node: Token) => this.operator = \"and\",\r\n OrExpression: (node: Token) => this.operator = \"or\",\r\n BoolParenExpression: (node: Token) => this.SetOperatorForFilters(),\r\n MethodCallExpression: (node: Token) => this.visitMethodCallExpression(node as MethodCallExpressionToken, visit),\r\n }, true);\r\n\r\n visit(node);\r\n\r\n return this._filters;\r\n }\r\n\r\n private CreateFilter(propertyName: string | undefined, value: SimpleValue | SimpleValue[] | null, matchMode: string) {\r\n if (propertyName === undefined)\r\n throw Error(`Cannot add a filter for the value ${value} and the match mode ${matchMode} without a property name`);\r\n\r\n matchMode = OdataVisitor.correctFilterMatchMode(matchMode, value);\r\n const filter = this._filters.get(propertyName);\r\n if (filter === undefined) {\r\n this._filters.set(propertyName, [{ value, operator: \"and\", matchMode: matchMode }]);\r\n }\r\n else if (filter.length === 1 && Array.isArray(filter[0].value) && Array.isArray(value)) {\r\n filter[0].value.push(...value); // Flags enum\r\n }\r\n else {\r\n filter.push({ value, operator: \"and\", matchMode: matchMode });\r\n }\r\n }\r\n\r\n private SetOperatorForFilters() {\r\n // In this case we are in the outermost expression which is just parantheses around the complete $filter value\r\n if (this.propertyName === undefined)\r\n return;\r\n\r\n // If we have not found an operator, or it is \"and\", we can just stay with the default created with the filter.\r\n if (this.operator === undefined || this.operator === \"and\")\r\n return;\r\n\r\n const filter = this._filters.get(this.propertyName);\r\n if (filter === undefined)\r\n return;\r\n\r\n // The operator is \"or\", so we need to set the operator for all filters to \"or\"\r\n for (const f of filter)\r\n f.operator = this.operator;\r\n }\r\n\r\n // The visitor does not correctly implement the MethodCallExpressionToken, so we need to do this manually\r\n private visitMethodCallExpression(node: MethodCallExpressionToken, visit: (node: Token) => void) {\r\n for (const parameter of node.value.parameters)\r\n visit(parameter);\r\n const matchMode = OdataVisitor.parseMethodCallExpression(node);\r\n this.CreateFilter(this.propertyName, this.value, matchMode);\r\n }\r\n}\r\n","import { defaultParser } from \"@odata/parser\";\r\nimport type { FilterMetadata } from \"primeng/api\";\r\nimport { OdataVisitor } from \"./odata-visitor\";\r\nimport type { Property, SimpleValue } from \"@wertzui/ngx-hal-client\";\r\n\r\n\r\n/**\r\n * This class is used to parse an OData $filter string into a Record of filter constraints.\r\n */\r\nexport class ODataFilterParser {\r\n\r\n public static parseFilter(filter: string | undefined, properties: Partial<Record<string, Property<SimpleValue, string, string>>>): Partial<Record<string, FilterMetadata[]>> {\r\n if (!filter)\r\n return {};\r\n\r\n // The parser has a bug where it does not correctly parse cast expressions, so we need to replace them with the first argument\r\n // See https://github.com/Soontao/odata-v4-parser/issues/283\r\n filter = ODataFilterParser.replaceCastExpressions(filter);\r\n const ast = defaultParser.filter(filter);\r\n const visitor = new OdataVisitor();\r\n const filters = visitor.parse(ast);\r\n\r\n /// OData needs enum values in pascal case, but JSON and therefor HAL-Forms needs them in camel case\r\n ODataFilterParser.MakeEnumValuesCamelCase(filters, properties);\r\n\r\n return Object.fromEntries(filters);\r\n }\r\n\r\n private static MakeEnumValuesCamelCase(filters: Map<string, FilterMetadata[]>, properties: Partial<Record<string, Property<SimpleValue, string, string>>>) {\r\n for (const [key, value] of filters) {\r\n for (const filter of value) {\r\n const options = properties[key]?.options;\r\n if (options && !options.link && typeof filter.value === \"string\") {\r\n filter.value = filter.value.charAt(0).toLowerCase() + filter.value.slice(1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static replaceCastExpressions(input: string): string {\r\n // Regular expression to match cast(x, y) and extract x\r\n const regex = /cast\\(([^,]+),\\s*[^)]+\\)/g;\r\n\r\n // Replace matches with the first captured group (x)\r\n const result = input.replace(regex, (match, x) => x.trim());\r\n\r\n return result;\r\n }\r\n}\r\n","import { ODataParameters } from \"../models/o-data\";\r\nimport { ODataFilterParser } from \"./odata-filter-parser\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { type FilterToken } from \"@odata/parser\";\r\nimport { Property, PropertyType, SimpleValue, Template } from \"@wertzui/ngx-hal-client\";\r\nimport { FilterMatchMode, FilterMetadata, TranslationKeys } from \"primeng/api\";\r\nimport { TableLazyLoadEvent } from \"primeng/table\";\r\n\r\n/**\r\n * A static class that provides utility methods for creating OData filters, order by clauses, and parameters from {@link TableLazyLoadEvent} objects.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ODataService {\r\n /**\r\n * Creates an OData filter string for a given property and filter metadata.\r\n * @param property - The property to filter on.\r\n * @param filter - The filter metadata to use.\r\n * @returns The OData filter string, or undefined if the filter value is falsy.\r\n */\r\n public static createFilterForProperty(property: Property<SimpleValue, string, string>, filter: FilterMetadata): string | undefined {\r\n if (filter.matchMode == TranslationKeys.NO_FILTER)\r\n return undefined;\r\n\r\n // Enums are handled differently\r\n if (property.options && !property.options.link)\r\n return ODataService.createFilterForEnum(property, filter);\r\n\r\n const oDataOperator = ODataService.createODataOperator(\r\n filter.matchMode,\r\n );\r\n const comparisonValue = ODataService.createComparisonValue(property, filter.value);\r\n\r\n switch (oDataOperator) {\r\n case 'contains':\r\n case 'not contains':\r\n case 'startswith':\r\n case 'endswith':\r\n return `${oDataOperator}(${property.name}, ${comparisonValue})`;\r\n default:\r\n return `${property.name} ${oDataOperator} ${comparisonValue}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an OData `$filter` value for an array of {@link FilterMetadata} objects and a given {@link Property}.\r\n * @param property - The {@link Property} to filter on.\r\n * @param filters - An array of {@link FilterMetadata} objects.\r\n * @returns The OData `$filter` value, or undefined if no filters were provided.\r\n */\r\n public static createFilterForPropertyArray(property: Property<SimpleValue, string, string>, filters: FilterMetadata[]): string | undefined {\r\n const filter = filters\r\n .map(f => ODataService.createFilterForProperty(property, f))\r\n .filter(f => !!f)\r\n .join(` ${filters[0].operator} `);\r\n\r\n if (filter === '')\r\n return undefined;\r\n\r\n return `(${filter})`;\r\n }\r\n\r\n /**\r\n * Creates an OData `$filter` value from a {@link TableLazyLoadEvent} and an array of {@link Property Properties}.\r\n * @param event The {@link TableLazyLoadEvent} containing the filter data.\r\n * @param properties An optional array of {@link Property Properties} to filter on.\r\n * @returns The OData $`$filter` value, or undefined if no filters were applied or no properties were provided.\r\n */\r\n public static createFilterFromTableLoadEvent(event: TableLazyLoadEvent, properties?: ReadonlyArray<Property<SimpleValue, string, string>>): string | undefined {\r\n const eventFilters = event.filters;\r\n if (eventFilters === undefined || properties === undefined)\r\n return undefined;\r\n\r\n const filter = properties\r\n .map(property => ({ property, filters: eventFilters[property.name] as (FilterMetadata[] | undefined) }))\r\n .filter(f => f.filters !== undefined)\r\n .map(f => ODataService.createFilterForPropertyArray(f.property, f.filters!))\r\n .filter(f => !!f)\r\n .join(' and ');\r\n\r\n if (filter === '')\r\n return undefined;\r\n\r\n return `(${filter})`;\r\n }\r\n\r\n /**\r\n * Creates a map of property names to filter metadata from an OData $filter string.\r\n * @param filter The OData filter string to parse.\r\n * @returns A record of property names to filter metadata.\r\n */\r\n public static createFilterMetadataFromODataFilter(filter: string | undefined, properties: Partial<Record<string, Property<SimpleValue, string, string>>>): Partial<Record<string, FilterMetadata[]>> {\r\n const filters = ODataFilterParser.parseFilter(filter, properties);\r\n\r\n return filters;\r\n }\r\n\r\n /**\r\n * Creates a OData `$orderby` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$orderby` value from.\r\n * @returns The `$orderby` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createOrderByFromTableLoadEvent(event: TableLazyLoadEvent): string | undefined {\r\n if (event.multiSortMeta && event.multiSortMeta.length > 0) {\r\n return event.multiSortMeta\r\n .map(m => `${m.field} ${m.order > 0 ? 'asc' : 'desc'}`)\r\n .join(', ');\r\n }\r\n\r\n if (event.sortField) {\r\n const order = !event.sortOrder || event.sortOrder > 0 ? 'asc' : 'desc';\r\n return `${event.sortField} ${order}`;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Creates an {@link ODataParameters} object from a given {@link ActivatedRoute}.\r\n * @param route The {@link ActivatedRoute} to create the {@link ODataParameters} from.\r\n * @param prefix An optional prefix to use for the query parameter keys.\r\n * @returns The {@link ODataParameters} object created from the {@link ActivatedRoute}.\r\n */\r\n public static createParametersFromRoute(route: ActivatedRoute, prefix?: string): ODataParameters {\r\n const snapshot = route.snapshot;\r\n\r\n let oDataParameters = {} as ODataParameters;\r\n const filter = snapshot.queryParamMap.get(`${prefix}$filter`);\r\n const orderBy = snapshot.queryParamMap.get(`${prefix}$orderby`);\r\n const top = snapshot.queryParamMap.get(`${prefix}$top`);\r\n const skip = snapshot.queryParamMap.get(`${prefix}$skip`);\r\n\r\n if (filter)\r\n oDataParameters.$filter = filter;\r\n if (orderBy)\r\n oDataParameters.$orderby = orderBy;\r\n if (top) {\r\n const topNumber = Number.parseInt(top);\r\n if (Number.isInteger(topNumber))\r\n oDataParameters.$top = topNumber;\r\n }\r\n if (skip) {\r\n const skipNumber = Number.parseInt(skip);\r\n if (Number.isInteger(skipNumber))\r\n oDataParameters.$skip = skipNumber;\r\n }\r\n\r\n return oDataParameters;\r\n }\r\n\r\n /**\r\n * Creates {@link ODataParameters} from a {@link TableLazyLoadEvent} and an optional {@link Template}.\r\n * @param event The {@link TableLazyLoadEvent} to create OData parameters from.\r\n * @param template An optional {@link Template} to use for creating the OData parameters.\r\n * @returns An {@link ODataParameters} object containing the `$filter`, `$orderby`, `$top`, and `$skip` parameters.\r\n */\r\n public static createParametersFromTableLoadEvent(event: TableLazyLoadEvent, template?: Template): ODataParameters {\r\n const oDataParameters = {\r\n $filter: ODataService.createFilterFromTableLoadEvent(event, template?.properties),\r\n $orderby: ODataService.createOrderByFromTableLoadEvent(event),\r\n $top: ODataService.createTopFromTableLoadEvent(event),\r\n $skip: ODataService.createSkipFromTableLoadEvent(event)\r\n };\r\n\r\n return oDataParameters;\r\n }\r\n\r\n /**\r\n * Creates a OData `$skip` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$skip` value from.\r\n * @returns The `$skip` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createSkipFromTableLoadEvent(event: TableLazyLoadEvent): number | undefined {\r\n return event.first;\r\n }\r\n\r\n /**\r\n * Creates a OData `$top` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$top` value from.\r\n * @returns The `$top` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createTopFromTableLoadEvent(event: TableLazyLoadEvent): number | undefined {\r\n return event.rows === null ? undefined : event.rows;\r\n }\r\n\r\n private static createComparisonValue(property: Property<SimpleValue, string, string>, value: unknown, isEnum?: boolean): string {\r\n if (value === null || value === undefined)\r\n return 'null';\r\n\r\n const type = ODataService.getPropertyType(property, value);\r\n\r\n switch (type) {\r\n case PropertyType.Date:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateOnly)`;\r\n case PropertyType.DatetimeLocal:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateTime)`;\r\n case PropertyType.DatetimeOffset:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateTimeOffset)`;\r\n case PropertyType.Time:\r\n return `cast(${(value as Date).toISOString()}, Edm.TimeOnly)`;\r\n case PropertyType.Duration:\r\n return `cast(${(value as Date).toISOString()}, Edm.TimeSpan)`;\r\n case PropertyType.Bool:\r\n case PropertyType.Number:\r\n case PropertyType.Currency:\r\n case PropertyType.Month:\r\n return '' + value;\r\n case PropertyType.Percent:\r\n return '' + ((value as number) / 100);\r\n default:\r\n return `'${isEnum && typeof value === \"string\" ? value.charAt(0).toUpperCase() + value.slice(1) : value}'`;\r\n }\r\n }\r\n\r\n private static createFilterForEnum(property: Property<SimpleValue, string, string>, filter: FilterMetadata): string | undefined {\r\n if (filter.matchMode == TranslationKeys.NO_FILTER)\r\n return undefined;\r\n\r\n const options = property.options;\r\n if (options === undefined)\r\n throw Error(`Property ${property.name} has no options`);\r\n\r\n const maxItems = options.maxItems ?? Number.MAX_SAFE_INTEGER;\r\n const oDataOperator = ODataService.createODataOperator(\r\n filter.matchMode,\r\n );\r\n\r\n // Normal enum\r\n if (maxItems === 1) {\r\n const comparisonValue = ODataService.createComparisonValue(property, filter.value, true);\r\n return `${property.name} ${oDataOperator} ${comparisonValue}`;\r\n }\r\n\r\n // Flags enum\r\n if (filter.value === null || filter.value === undefined)\r\n return undefined;\r\n\r\n const values = Array.isArray(filter.value) ? filter.value : [filter.value];\r\n const comparisonValues = values.map(v => ODataService.createComparisonValue(property, v, true));\r\n\r\n const filters = comparisonValues.map(v => `${property.name} has ${v}`);\r\n const concatenatedFilters = filters.join(' and ');\r\n\r\n return `(${concatenatedFilters})`;\r\n }\r\n\r\n private static createODataOperator(matchMode?: string): string {\r\n switch (matchMode) {\r\n case FilterMatchMode.STARTS_WITH:\r\n return 'startswith';\r\n case FilterMatchMode.CONTAINS:\r\n return 'contains';\r\n case FilterMatchMode.NOT_CONTAINS:\r\n return 'not contains';\r\n case FilterMatchMode.ENDS_WITH:\r\n return 'endswith';\r\n case FilterMatchMode.EQUALS:\r\n return 'eq';\r\n case FilterMatchMode.NOT_EQUALS:\r\n return 'ne';\r\n case FilterMatchMode.IN:\r\n return 'in';\r\n case FilterMatchMode.LESS_THAN:\r\n return 'lt';\r\n case FilterMatchMode.LESS_THAN_OR_EQUAL_TO:\r\n return 'le';\r\n case FilterMatchMode.GREATER_THAN:\r\n return 'gt';\r\n case FilterMatchMode.GREATER_THAN_OR_EQUAL_TO:\r\n return 'ge';\r\n case FilterMatchMode.IS:\r\n return 'eq';\r\n case FilterMatchMode.IS_NOT:\r\n return 'ne';\r\n case FilterMatchMode.BEFORE:\r\n return 'lt';\r\n case FilterMatchMode.AFTER:\r\n return 'gt';\r\n case FilterMatchMode.DATE_AFTER:\r\n return 'ge';\r\n case FilterMatchMode.DATE_BEFORE:\r\n return 'lt';\r\n case FilterMatchMode.DATE_IS:\r\n return 'eq';\r\n case FilterMatchMode.DATE_IS_NOT:\r\n return 'ne';\r\n default:\r\n throw Error(`Unknown matchMode ${matchMode}`);\r\n }\r\n }\r\n\r\n private static getPropertyType(property: Property<SimpleValue, string, string>, value: unknown): PropertyType {\r\n if (property.options) {\r\n if (typeof value === \"string\" ||\r\n Array.isArray(value) && value.every(v => typeof v === \"string\") ||\r\n property.options.inline?.some(o => property.options!.valueField !== undefined && typeof (o as any)[property.options!.valueField] === \"string\"))\r\n return PropertyType.Text;\r\n\r\n return PropertyType.Number;\r\n }\r\n\r\n return property.type!;\r\n }\r\n}\r\n","import { Component, computed, effect, input, untracked, type OnDestroy } from '@angular/core';\r\nimport { Template, FormService, type Property, type SimpleValue, type ExtractValueType, type PropertyDto } from \"@wertzui/ngx-hal-client\";\r\nimport type { FilterMetadata } from \"primeng/api\";\r\nimport type { Subscription } from \"rxjs\";\r\nimport { RestWorldInputComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { FormGroup, ReactiveFormsModule } from \"@angular/forms\";\r\n\r\n/**\r\n * This component is used to display a filter element for a table column.\r\n * It is used internally by the <rw-table> component, but can also be used in the #filter template of a column in the header of a <p-table>.\r\n */\r\n@Component({\r\n selector: 'rw-table-column-filter-element',\r\n imports: [RestWorldInputComponent, ReactiveFormsModule],\r\n templateUrl: './rest-world-table-column-filter-element.component.html',\r\n styleUrl: './rest-world-table-column-filter-element.component.css'\r\n})\r\nexport class RestWorldTableColumnFilterElementComponent<TProperty extends Property<SimpleValue, string, string>> implements OnDestroy {\r\n /**\r\n * The filter constraint to update when the value changes.\r\n * This is coming from the $context of the #filter template\r\n */\r\n public readonly filterConstraint = input.required<FilterMetadata>();\r\n /**\r\n * The HAL-Forms property to filter by.\r\n * This is normally the column.\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The name of the API to use when generating dropdowns.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The initial value of the filter.\r\n */\r\n public readonly value = input.required<ExtractValueType<TProperty> | null>();\r\n\r\n public readonly form = computed<FormGroup>(() => this._formService.createFormGroupFromTemplate(this.template()));\r\n\r\n private readonly template = computed(() => new Template({\r\n properties: [this.property() as PropertyDto<SimpleValue, string, string>],\r\n }))\r\n\r\n private _formValueChangesSubscription?: Subscription;\r\n\r\n constructor(private readonly _formService: FormService) {\r\n effect(() => {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n const form = this.form();\r\n const property = this.property();\r\n const value = untracked(() => this.value());\r\n const formControl = form.controls[property.name];\r\n this._formValueChangesSubscription = formControl.valueChanges.subscribe(this.setFilterValue.bind(this));\r\n formControl.setValue(value);\r\n });\r\n }\r\n\r\n private setFilterValue(value: ExtractValueType<TProperty> | null): void {\r\n this.filterConstraint().value = value;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n }\r\n}\r\n","<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n","import { Component, Optional, computed, effect, input, model, signal, viewChild } from '@angular/core';\r\nimport { FormService, Property, PropertyType, SimpleValue, Template } from '@wertzui/ngx-hal-client';\r\nimport { FilterMetadata, MenuItem, SelectItem, TranslationKeys } from 'primeng/api';\r\nimport { ODataParameters } from '../../models/o-data';\r\nimport { ODataService } from '../../services/odata.service';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { AbstractControl, ControlContainer, FormArray, FormArrayName, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { TableLazyLoadEvent, TableModule } from 'primeng/table';\r\nimport { PrimeNG } from 'primeng/config';\r\nimport { RestWorldMenuButtonComponent } from \"../restworld-menu-button/restworld-menu-button.component\";\r\nimport { RestWorldInputComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { RestWorldDisplayComponent } from \"../restworld-displays/restworld-displays\";\r\nimport { RestWorldTableColumnFilterElementComponent } from \"../rest-world-table-column-filter-element/rest-world-table-column-filter-element.component\";\r\nimport { Router, ActivatedRoute } from \"@angular/router\";\r\n\r\n/**\r\n * Displays a table based on a search-, an edit-template and a list of items.\r\n * The search-template is required and used to display the table columns and to filter and sort the items.\r\n * The edit-template is optional and used to edit the items. For the edit capability, the table must be part of a reactive form.\r\n * The items are displayed as table rows.\r\n * The table supports lazy loading, row selection, row menus, and context menus.\r\n *\r\n * @example\r\n * <rw-table\r\n * [apiName]=\"apiName\"\r\n * [searchTemplate]=\"searchTemplate\"\r\n * [editTemplate]=\"editTemplate\"\r\n * [rows]=\"rows\"\r\n * [rowsPerPageOptions]=\"[10, 25, 50]\"\r\n * [headerMenu]=\"headerMenu\"\r\n * [rowMenu]=\"rowMenu\"\r\n * [rowStyleClass]=\"rowStyleClass\"\r\n * [cellStyleClass]=\"cellStyleClass\"\r\n * [totalRecords]=\"totalRecords\"\r\n * [multiSortMeta]=\"multiSortMeta\"\r\n * [styleClass]=\"styleClass\"\r\n * [tableStyle]=\"tableStyle\"\r\n * [scrollable]=\"scrollable\"\r\n * [scrollHeight]=\"scrollHeight\"\r\n * [selectionMode]=\"selectionMode\"\r\n * [rowHover]=\"rowHover\"\r\n * [selection]=\"selection\"\r\n * [contextMenuItems]=\"contextMenuItems\"\r\n * [isLoading]=\"isLoading\"\r\n * [(selectedRows)]=\"selectedRows\"\r\n * [(oDataParameters)]=\"oDataParameters\"\r\n * </rw-table>\r\n *\r\n */\r\n@Component({\r\n selector: 'rw-table',\r\n templateUrl: './restworld-table.component.html',\r\n styleUrls: ['./restworld-table.component.css'],\r\n standalone: true,\r\n viewProviders: [{\r\n provide: ControlContainer,\r\n deps: [[Optional, FormArrayName]],\r\n useFactory: (arrayName: FormArrayName) => arrayName,\r\n }],\r\n imports: [TableModule, RestWorldMenuButtonComponent, RestWorldInputComponent, RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent]\r\n})\r\nexport class RestWorldTableComponent<TListItem extends Record<string, any>> {\r\n public readonly PropertyType = PropertyType;\r\n /**\r\n * The name of the api.\r\n * For the editing capability, you must also set the editTemplate and the formArray.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * A function that returns the style class for a cell.\r\n * @param row The row for which to return the style class.\r\n * @param column The column for which to return the style class.\r\n * @param rowIndex The index of the row on the currently displayed page.\r\n * @param columnIndex The index of the column.\r\n * @returns The style class for the cell.\r\n */\r\n public readonly cellStyleClass = input<(row: TListItem, column: Property<SimpleValue, string, string>, rowIndex: number, columnIndex: number) => string>(() => \"\");\r\n public readonly cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries<string>(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))));\r\n public readonly columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? []);\r\n public readonly contextMenu = viewChild<ContextMenu>(\"contextMenu\");\r\n public readonly contextMenuItems = signal<MenuItem[]>([]);\r\n public readonly dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yy\")\r\n .replace(\"33\", \"y\");\r\n public readonly editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {});\r\n /**\r\n * The template that is used to edit the items.\r\n * Bind this to the template that is used to edit the items.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n * For the editing capability, you must also set the apiName and the formArray.\r\n */\r\n public readonly editTemplate = input<Template>();\r\n public readonly filters = computed(() => {\r\n const filter = this.oDataParameters().$filter;\r\n const properties = this.searchTemplate()?.propertiesRecord;\r\n if (filter === null || filter === undefined || typeof filter !== \"string\" || properties === undefined)\r\n return {};\r\n\r\n return ODataService.createFilterMetadataFromODataFilter(filter, properties);\r\n });\r\n /**\r\n * The form array that contains the form groups for the items.\r\n * Bind this to the form array that contains the form groups for the items.\r\n * Each entry in the array represents one row in the currently displayed page of the table.\r\n * For the editing capability, you must also set the apiName and the editTemplate.\r\n */\r\n public readonly formArray = computed(() => this._controlContainer?.control as FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>> | undefined);\r\n /**\r\n * An optional menu that is displayed at the top right of the table.\r\n * @see RestWorldMenuButtonComponent\r\n */\r\n public readonly headerMenu = input<MenuItem[]>([]);\r\n public readonly isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined);\r\n /**\r\n * Indicates whether the table is currently loading.\r\n * Set this to true while loading new items from the backend when reacting to the `onFilterOrSortChanged` event.\r\n */\r\n public readonly isLoading = input(false);\r\n\r\n /**\r\n * Indicates whether the table is lazy loaded.\r\n * If set to true, sorting and filtering needs to be handled by the `load` event.\r\n * If set to false, sorting and filtering is handled by the table component itself.\r\n * The default is `true`.\r\n * @see load\r\n */\r\n public readonly lazy = input(true);\r\n\r\n /**\r\n * Indicates whether the table has a paginator.\r\n * If set to true, the table will display a paginator at the bottom.\r\n * If set to false, the table will not display a paginator and all rows will be displayed at once.\r\n * The default is `true`.\r\n * In order to customize the number of rows per page, you can set the `rowsPerPageOptions` property.\r\n * @see rowsPerPageOptions\r\n */\r\n public readonly paginator = input(true);\r\n public readonly multiSortMeta = computed(() => {\r\n const orderBy = this.oDataParameters().$orderby;\r\n if (orderBy === null || orderBy === undefined || typeof orderBy !== \"string\")\r\n return undefined;\r\n\r\n return orderBy\r\n .split(\",\")\r\n .map(o => o.trim())\r\n .filter(o => o !== \"\")\r\n .map(o => {\r\n const [field, order] = o.split(\" \");\r\n const orderAsNumber = order?.toLowerCase() === \"desc\" ? -1 : 1;\r\n return { field: field, order: orderAsNumber };\r\n });\r\n });\r\n public readonly oDataParameters = model<ODataParameters>({});\r\n public readonly reflectParametersInUrl = input(true);\r\n /**\r\n * Indicates whether the table rows are highlighted when the mouse hovers over them.\r\n */\r\n public readonly rowHover = input<boolean>(false);\r\n /**\r\n * A function that returns the menu for a row.\r\n * Based on the openedByRightClick parameter, the function can return different menus.\r\n * The menu when it has not been opened by a right click is displayed in an extra column to the right of the table if `showRowMenuAsColumn` is `true`.\r\n * The menu when it has been opened by a right click is displayed as a context menu if `showRowMenuOnRightClick` is `true`.\r\n * @param row The row for which to return the menu.\r\n * @param openedByRightClick Indicates whether the menu was opened by a right click.\r\n * @returns The menu for the row.\r\n * @see showRowMenuAsColumn\r\n * @see showRowMenuOnRightClick\r\n */\r\n public readonly rowMenu = input<(row: TListItem, openedByRightClick: boolean) => MenuItem[]>(() => []);\r\n public readonly rowMenus = computed(() => {\r\n return this.showRowMenuAsColumn() ? this.rows().map(r => this.rowMenu()(r, false)) : [];\r\n });\r\n /**\r\n * A function that returns the style class for a row.\r\n * @param row The row for which to return the style class.\r\n * @param rowIndex The index of the row on the currently displayed page.\r\n * @returns The style class for the row.\r\n */\r\n public readonly rowStyleClass = input<(row: TListItem, rowIndex: number) => string>(() => \"\");\r\n public readonly rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)));\r\n /**\r\n * The items that are displayed as table rows.\r\n * Bind this to the items that are displayed as table rows.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n */\r\n public readonly rows = input.required<TListItem[]>();\r\n public readonly rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0);\r\n /**\r\n * The number of rows per page.\r\n * The default is the first element of rowsPerPageOptions.\r\n */\r\n public readonly rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0]);\r\n /**\r\n * The possible values for the number of rows per page.\r\n * The default is [10, 25, 50].\r\n */\r\n public readonly rowsPerPageOptions = input([10, 25, 50]);\r\n /**\r\n * The height of the scrollable table.\r\n * The default is \"flex\".\r\n */\r\n public readonly scrollHeight = input<string>(\"flex\");\r\n /**\r\n * Indicates whether the table is scrollable.\r\n * The default is `true`.\r\n */\r\n public readonly scrollable = input<boolean>(true);\r\n /**\r\n * The template that is used to display the table columns and to filter and sort the items.\r\n * Bind this to the template that is used to display the table columns and to filter and sort the items.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n */\r\n public readonly searchTemplate = input.required<Template>();\r\n /**\r\n * The currently selected rows.\r\n */\r\n public readonly selectedRows = model<TListItem[]>([]);\r\n /**\r\n * The mode how rows can be selected.\r\n * The default is `null` which means rows cannot be selected.\r\n */\r\n public readonly selectionMode = input<\"single\" | \"multiple\" | null>(null);\r\n public readonly showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)));\r\n /**\r\n * Indicates whether the row menu is displayed as a column to the right of the table.\r\n */\r\n public readonly showRowMenuAsColumn = input(true);\r\n /**\r\n * Indicates whether the row menu is displayed as a context menu when the user right clicks on a row.\r\n */\r\n public readonly showRowMenuOnRightClick = input(true);\r\n /**\r\n * The style class for the table.\r\n * The default is \"\".\r\n */\r\n public readonly styleClass = input<string>(\"\");\r\n /**\r\n * The inline style for the table.\r\n */\r\n public readonly tableStyle = input<Record<string, string>>();\r\n public readonly totalRecords = input(0);\r\n public readonly urlParameterPrefix = input(\"\");\r\n\r\n // private _formArray?: FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>>;\r\n private readonly _filterMatchModeOptions: { [K in keyof PrimeNG[\"filterMatchModeOptions\"]]: SelectItem[] } & { \"boolean\": SelectItem[] } & { \"enum\": SelectItem[] };\r\n private readonly timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n private _initialQueryParamsSet = false;\r\n private _lastUsedFilters: Partial<Record<string, FilterMetadata | FilterMetadata[]>> = {};\r\n\r\n public constructor(\r\n private readonly _controlContainer: ControlContainer,\r\n private readonly _formService: FormService,\r\n router: Router,\r\n activatedRoute: ActivatedRoute,\r\n primeNGConfig: PrimeNG) {\r\n this._filterMatchModeOptions = {\r\n text: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.text].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n numeric: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.numeric].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n date: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.date].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n boolean: [TranslationKeys.NO_FILTER, TranslationKeys.EQUALS, TranslationKeys.NOT_EQUALS].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n enum: [TranslationKeys.NO_FILTER, TranslationKeys.EQUALS, TranslationKeys.NOT_EQUALS].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n };\r\n\r\n // Update the form array on changes\r\n effect(() => {\r\n const formArray = this.formArray();\r\n const editTemplate = this.editTemplate();\r\n const rows = this.rows();\r\n\r\n if (!this.isEditable() || !formArray || !editTemplate)\r\n return;\r\n\r\n formArray.clear();\r\n\r\n const newControls = rows\r\n .map(r => {\r\n const formGroup = this._formService.createFormGroupFromTemplate(editTemplate) as FormGroup;\r\n formGroup.patchValue(r);\r\n return formGroup;\r\n });\r\n\r\n for (const control of newControls)\r\n formArray.push(control);\r\n });\r\n\r\n // update the url when the oDataParameters change\r\n effect(async () => {\r\n if (!this.reflectParametersInUrl())\r\n return;\r\n\r\n const urlParameterPrefix = this.urlParameterPrefix();\r\n const oDataParameters = this.oDataParameters();\r\n\r\n // Set the initial query parameters on the first change\r\n if (!this._initialQueryParamsSet) {\r\n this._initialQueryParamsSet = true;\r\n const oDataParametersFromUrl = ODataService.createParametersFromRoute(activatedRoute, urlParameterPrefix);\r\n const mergedParameters = { ...oDataParameters, ...oDataParametersFromUrl };\r\n this.oDataParameters.set(mergedParameters);\r\n return;\r\n }\r\n\r\n // Update the query parameters in the url after the first change\r\n const parameters = this.prefixObjectProperties(oDataParameters, urlParameterPrefix);\r\n await router.navigate([], { queryParams: parameters, queryParamsHandling: 'merge' });\r\n });\r\n }\r\n\r\n public load(event: TableLazyLoadEvent) {\r\n this.fixUserFilterErrors(event.filters);\r\n // this.multiSortMeta = event.multiSortMeta;\r\n const currentParameters = this.oDataParameters();\r\n const searchTemplate = this.searchTemplate();\r\n if (!searchTemplate || searchTemplate.properties.length === 0)\r\n return;\r\n\r\n const parameters = ODataService.createParametersFromTableLoadEvent(event, searchTemplate);\r\n ODataService.createFilterMetadataFromODataFilter(parameters.$filter, searchTemplate.propertiesRecord);\r\n if (currentParameters.$filter !== parameters.$filter || currentParameters.$orderby !== parameters.$orderby || currentParameters.$top !== parameters.$top || currentParameters.$skip !== parameters.$skip)\r\n this.oDataParameters.set(parameters);\r\n }\r\n\r\n public openContextMenu(event: MouseEvent, row: TListItem): void {\r\n const contextMenu = this.contextMenu();\r\n if (!this.showRowMenuOnRightClick() || contextMenu === undefined)\r\n return;\r\n\r\n this.contextMenuItems.set(this.rowMenu()(row, true));\r\n contextMenu.show(event);\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n public showInputField(column: Property): boolean {\r\n if (!this.isEditable())\r\n return false;\r\n\r\n const editProperty = this.editProperties()[column.name];\r\n\r\n return editProperty !== undefined && editProperty.type !== PropertyType.Hidden && !editProperty.readOnly;\r\n }\r\n\r\n public toColumnFilterType(property: Property<SimpleValue, string, string> | undefined): ColumnFilterType {\r\n if (!property)\r\n return ColumnFilterType.text;\r\n\r\n const propertyType = property.type;\r\n switch (propertyType) {\r\n case PropertyType.Number:\r\n case PropertyType.Percent:\r\n case PropertyType.Currency:\r\n case PropertyType.Month:\r\n return ColumnFilterType.numeric;\r\n case PropertyType.Bool:\r\n return ColumnFilterType.boolean;\r\n case PropertyType.Date:\r\n case PropertyType.DatetimeLocal:\r\n case PropertyType.DatetimeOffset:\r\n return ColumnFilterType.date;\r\n default:\r\n return property.options ? property.options.link ? ColumnFilterType.numeric : ColumnFilterType.enum : ColumnFilterType.text;\r\n }\r\n }\r\n\r\n public toMatchModeOptions(property: Property<SimpleValue, string, string>): SelectItem<any>[] | undefined {\r\n const columnFilterType = this.toColumnFilterType(property);\r\n return this._filterMatchModeOptions[columnFilterType];\r\n }\r\n\r\n public toMaxFractionDigits(property: Property<SimpleValue, string, string>): number | undefined {\r\n switch (property.type) {\r\n case PropertyType.Number:\r\n case PropertyType.Percent:\r\n case PropertyType.Currency:\r\n return property.step?.toString().split(\".\")[1]?.length ?? 2;\r\n case PropertyType.Month:\r\n return 0;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n private fixUserFilterError(filterEntry: FilterMetadata | undefined, lastFilterEntry: FilterMetadata | undefined, propertyName: string) {\r\n if (!filterEntry)\r\n return;\r\n\r\n if (\r\n lastFilterEntry !== undefined &&\r\n lastFilterEntry.matchMode !== TranslationKeys.NO_FILTER &&\r\n filterEntry.matchMode === TranslationKeys.NO_FILTER) {\r\n // The user changed the mode from something to no filter\r\n // => We reset the value\r\n filterEntry.value = null;\r\n }\r\n else if (\r\n filterEntry.matchMode === TranslationKeys.NO_FILTER &&\r\n (lastFilterEntry === undefined || lastFilterEntry.value === null) &&\r\n filterEntry.value !== null) {\r\n // The user entered a value into the filter, but forgot to change the mode\r\n // => We set the match mode to the default for the type that is not no filter\r\n filterEntry.matchMode = this._filterMatchModeOptions[this.toColumnFilterType(this.searchTemplate().propertiesRecord[propertyName])][1].value;\r\n }\r\n }\r\n\r\n private fixUserFilterErrors(filters?: Partial<Record<string, FilterMetadata | FilterMetadata[]>>) {\r\n if (!filters)\r\n return;\r\n\r\n Object.entries(filters).forEach(([propertyName, filter]) => {\r\n const lastFilter = this._lastUsedFilters[propertyName];\r\n if (Array.isArray(filter)) {\r\n filter.forEach((filterEntry, index) => this.fixUserFilterError(filterEntry, Array.isArray(lastFilter) ? lastFilter[index] : lastFilter, propertyName));\r\n }\r\n else {\r\n this.fixUserFilterError(filter, Array.isArray(lastFilter) ? lastFilter[0] : lastFilter, propertyName);\r\n }\r\n });\r\n this._lastUsedFilters = JSON.parse(JSON.stringify(filters));\r\n }\r\n\r\n private prefixObjectProperties<T extends Record<string, any>, P extends string>(\r\n obj: T,\r\n prefix: P\r\n ): { [K in keyof T as `${P}${string & K}`]: T[K] } {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => [`${prefix}${key}`, value])\r\n ) as { [K in keyof T as `${P}${string & K}`]: T[K] };\r\n }\r\n}\r\n\r\nenum ColumnFilterType {\r\n text = 'text',\r\n numeric = 'numeric',\r\n boolean = 'boolean',\r\n date = 'date',\r\n enum = 'enum',\r\n}\r\n","<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n responsiveLayout=\"scroll\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [styleClass]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[rowIndex - (table.first ?? 0)]\">\r\n @for (col of columns; track col) {\r\n <td [className]=\"cellStyleClasses()[rowIndex - (table.first ?? 0)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n <ng-container [formGroup]=\"fomrArray.controls[rowIndex - (table.first ?? 0)]\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n","export class RestWorldOptions {\r\n constructor(public readonly BaseUrl: string, public readonly Version?: number) {\r\n if (!BaseUrl.endsWith('/'))\r\n throw new Error(`The provided BaseUrl '${BaseUrl}' does not end with a slash '/'.`);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Cast super type into type using generics\r\n * Return Type obtained by optional @param type OR assignment type.\r\n * @example\r\n * <div *ngFor=\"let item of items | as: Item\">\r\n */\r\n@Pipe({\r\n name: 'as',\r\n standalone: true\r\n})\r\nexport class AsPipe implements PipeTransform {\r\n /**\r\n * Cast (S: SuperType) into (T: Type) using @Generics.\r\n * @param value (S: SuperType) obtained from input type.\r\n * @optional @param type (T CastingType)\r\n * type?: { new (): T }\r\n * type?: new () => T\r\n */\r\n transform<S, T extends S>(value: S, type: new (...args: any[]) => T): T {\r\n return value as T;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ClientSettings } from \"../models/client-settings\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { RestWorldClientCollection } from \"./restworld-client-collection\";\r\nimport { provideRestWorld } from \"../provide-restworld\";\r\n\r\n/**\r\n * This service is responsible for loading the settings from the client-backend and setting up the RestWorldClientCollection.\r\n * It is automatically provided by the {@link provideRestWorld()} function.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsService {\r\n private static _settings: ClientSettings | undefined;\r\n\r\n private initialized = false;\r\n private initializing = false;\r\n\r\n constructor(\r\n private _clients: RestWorldClientCollection) {\r\n }\r\n\r\n public get settings(): ClientSettings | undefined {\r\n return SettingsService._settings;\r\n }\r\n\r\n private static async ensureSettingsAreLoaded(): Promise<void> {\r\n if (SettingsService._settings === undefined) {\r\n const response = await fetch('/settings');\r\n const settings: ClientSettings = await response.json();\r\n SettingsService._settings = settings;\r\n }\r\n }\r\n\r\n /**\r\n * Ensures that the settings are loaded and the RestWorldClientCollection is set up.\r\n * This method is called automatically by {@link provideRestWorld()}\r\n * */\r\n public async ensureInitialized(): Promise<void> {\r\n if (this.initializing || this.initialized)\r\n return;\r\n\r\n this.initializing = true;\r\n\r\n await SettingsService.ensureSettingsAreLoaded();\r\n await this.populateRESTworldClientCollectionFromSettings();\r\n\r\n this.initialized = true;\r\n this.initializing = false;\r\n }\r\n\r\n private async populateRESTworldClientCollectionFromSettings(): Promise<void> {\r\n if (!this.settings?.apiUrls)\r\n return;\r\n\r\n await Promise.all(this.settings.apiUrls\r\n .map(api => this._clients.addOrGetExistingClient(api.name, new RestWorldOptions(api.url, api.version))));\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { NavigationEnd, Router } from \"@angular/router\";\r\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { AlwaysOffSampler, AlwaysOnSampler, BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, SimpleSpanProcessor, SpanProcessor, TraceIdRatioBasedSampler, WebTracerProvider } from '@opentelemetry/sdk-trace-web';\r\nimport { SettingsService } from \"./settings.service\";\r\nimport { ZoneContextManager } from \"@opentelemetry/context-zone-peer-dep\";\r\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\r\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\r\nimport { ClientSettings } from \"../models/client-settings\";\r\nimport { resourceFromAttributes } from \"@opentelemetry/resources\";\r\nimport { context, trace, Span, SpanKind, Tracer } from '@opentelemetry/api';\r\nimport { filter } from 'rxjs/operators';\r\nimport { ATTR_SERVICE_NAME } from \"@opentelemetry/semantic-conventions\";\r\n\r\n/**\r\n * This service is responsible for setting up OpenTelemetry.\r\n * It will initialize the OpenTelemetry SDK and register the instrumentations.\r\n * It will also set up the exporters and samplers.\r\n *\r\n * The settings for the OpenTelemetry SDK are loaded from the {@link SettingsService}.\r\n *\r\n * @remarks\r\n * This service is automatically initialized by the `APP_INITIALIZER` in the {@link RestworldClientModule}.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class OpenTelemetryService {\r\n private _tracer: any;\r\n private _activeNavigationSpan: Span | null = null;\r\n private _lastNavigationPath: string | null = null;\r\n\r\n constructor(\r\n private readonly _settingsService: SettingsService,\r\n private readonly _router: Router\r\n ) {\r\n // Listen for navigation events to create parent spans\r\n this._router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe((event: any) => {\r\n this.createNavigationSpan((event as NavigationEnd).urlAfterRedirects);\r\n });\r\n\r\n // Listen for beforeunload event to end the span when user leaves the application\r\n window.addEventListener('beforeunload', () => {\r\n this.endCurrentNavigationSpan();\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current span as active in the global context\r\n * This ensures that new spans created after this will automatically\r\n * become child spans of this active span\r\n */\r\n private activateNavigationContext(): void {\r\n if (this._activeNavigationSpan) {\r\n // Make this span the active span in the current context\r\n const activeContext = trace.setSpan(context.active(), this._activeNavigationSpan);\r\n\r\n // Use ZoneContextManager to persist this context across async operations\r\n // This is important for Angular applications that use zones\r\n context.with(activeContext, () => {\r\n // The context remains active for all operations within this callback\r\n // and for all asynchronous operations started within this zone\r\n\r\n // Set the context as a property in the window for access by other parts of the application\r\n // This helps ensure the context is available for all operations\r\n (window as any).__navigationContext = activeContext;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new span to track a navigation event.\r\n * This will be the parent span for any HTTP requests made during this navigation.\r\n * Only creates a new span if the path has changed from the last navigation.\r\n * @param url The URL being navigated to\r\n */\r\n private createNavigationSpan(url: string): void {\r\n // Parse the URL to extract route information\r\n let routePath = 'unknown';\r\n try {\r\n const urlObj = new URL(url, window.location.origin);\r\n routePath = urlObj.pathname;\r\n } catch (e) {\r\n routePath = url; // Use the raw URL if parsing fails\r\n }\r\n\r\n // If the path hasn't changed, don't create a new span\r\n if (this._lastNavigationPath === routePath) {\r\n return;\r\n }\r\n\r\n // Update the last navigation path\r\n this._lastNavigationPath = routePath;\r\n\r\n // End the previous span if it exists\r\n if (this._activeNavigationSpan) {\r\n this._activeNavigationSpan.end();\r\n this._activeNavigationSpan = null;\r\n }\r\n\r\n if (!this._tracer) {\r\n return; // Not initialized yet\r\n }\r\n\r\n // Create a new span for this navigation\r\n this._activeNavigationSpan = this._tracer.startSpan(\r\n `Navigation to ${routePath}`,\r\n {\r\n kind: SpanKind.INTERNAL,\r\n attributes: {\r\n 'component': 'router',\r\n 'route.path': routePath,\r\n 'client.address': window.location.href,\r\n 'client.port': window.location.port,\r\n 'browser.language': navigator.language\r\n }\r\n }\r\n );\r\n\r\n // Activate this navigation span as the current context\r\n this.activateNavigationContext();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await this._settingsService.ensureInitialized();\r\n\r\n const clientSettings = this._settingsService.settings;\r\n if (!clientSettings)\r\n throw new Error('Client Settings are not loaded yet.');\r\n if (!clientSettings.extensions)\r\n throw new Error('Client Settings do not contain extensions.');\r\n\r\n const sampler = OpenTelemetryService.GetSampler(clientSettings);\r\n const spanProcessors = OpenTelemetryService.GetSpanProcessors(clientSettings);\r\n const resource = OpenTelemetryService.GetResource(clientSettings);\r\n\r\n const provider = new WebTracerProvider({\r\n sampler: sampler,\r\n spanProcessors: spanProcessors,\r\n resource: resource,\r\n });\r\n\r\n provider.register({\r\n // Changing default contextManager to use ZoneContextManager - supports asynchronous operations - optional\r\n contextManager: new ZoneContextManager(),\r\n });\r\n\r\n // Get a tracer from the provider\r\n this._tracer = provider.getTracer('angular-navigation-tracer');\r\n\r\n // Create the initial navigation span based on the current URL\r\n if (this._router && this._router.url) {\r\n this.createNavigationSpan(this._router.url);\r\n }\r\n }\r\n\r\n /**\r\n * Ends the current navigation span if one exists.\r\n * This can be called when the user is leaving the application or when\r\n * special navigation events happen that should terminate the current span.\r\n */\r\n public endCurrentNavigationSpan(): void {\r\n if (this._activeNavigationSpan) {\r\n this._activeNavigationSpan.end();\r\n this._activeNavigationSpan = null;\r\n this._lastNavigationPath = null; // Reset the last navigation path when ending the span manually\r\n }\r\n }\r\n\r\n private static GetResource(clientSettings: ClientSettings) {\r\n const serviceName = clientSettings.extensions[\"OTEL_SERVICE_NAME\"];\r\n const resourceAttributes = clientSettings.extensions[\"OTEL_RESOURCE_ATTRIBUTES\"];\r\n\r\n const resource = resourceFromAttributes({});\r\n\r\n if (resourceAttributes) {\r\n resourceAttributes\r\n .split(\",\")\r\n .map((attribute: string) => {\r\n const [key, value] = attribute.split(\"=\");\r\n resource.attributes[key] = value;\r\n });\r\n }\r\n\r\n if (serviceName)\r\n resource.attributes[ATTR_SERVICE_NAME] = serviceName;\r\n\r\n return resource;\r\n }\r\n\r\n private static GetSpanProcessors(clientSettings: ClientSettings): SpanProcessor[] {\r\n const exporterEndpoint = clientSettings.extensions[\"OTEL_EXPORTER_OTLP_ENDPOINT\"];\r\n const exporterHeaders = clientSettings.extensions[\"OTEL_EXPORTER_OTLP_HEADERS\"];\r\n\r\n if (!exporterEndpoint)\r\n return[new SimpleSpanProcessor(new ConsoleSpanExporter())];\r\n else {\r\n let headersObj = {};\r\n if (exporterHeaders) {\r\n headersObj = Object.fromEntries(\r\n exporterHeaders\r\n .split(\",\")\r\n .map((header: string) => {\r\n const [key, value] = header.split(\"=\");\r\n return [key, value];\r\n }));\r\n }\r\n\r\n const traceExporterEndpoint = exporterEndpoint.endsWith(\"/\") ? exporterEndpoint + \"v1/traces\" : exporterEndpoint + \"/v1/traces\";\r\n\r\n const otlpExporterConfiguration = {\r\n url: traceExporterEndpoint,\r\n headers: headersObj,\r\n compression: \"gzip\" as CompressionAlgorithm,\r\n };\r\n\r\n return[new BatchSpanProcessor(new OTLPTraceExporter(otlpExporterConfiguration))];\r\n }\r\n }\r\n\r\n private static GetSampler(clientSettings: ClientSettings) {\r\n const tracesSampler = clientSettings.extensions[\"OTEL_TRACES_SAMPLER\"];\r\n const tracesSamplerArg = clientSettings.extensions[\"OTEL_TRACES_SAMPLER_ARG\"];\r\n\r\n switch (tracesSampler) {\r\n case \"always_on\":\r\n return new AlwaysOnSampler();\r\n case \"always_off\":\r\n return new AlwaysOffSampler();\r\n case \"traceidratio\":\r\n const ratio = Number.parseFloat(tracesSamplerArg ?? \"1\");\r\n return new TraceIdRatioBasedSampler(ratio);\r\n case \"parentbased_always_on\":\r\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\r\n case \"parentbased_always_off\":\r\n return new ParentBasedSampler({ root: new AlwaysOffSampler() });\r\n case \"parentbased_traceidratio\":\r\n const ratio2 = Number.parseFloat(tracesSamplerArg ?? \"1\");\r\n return new ParentBasedSampler({ root: new TraceIdRatioBasedSampler(ratio2) });\r\n default:\r\n return new AlwaysOnSampler();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the active context that contains the current navigation span.\r\n * This is used by the HttpInterceptor to ensure HttpClient requests are\r\n * properly associated with the current navigation span.\r\n * @returns The active context, or null if no navigation span exists\r\n */\r\n public getActiveContext(): any {\r\n if (this._activeNavigationSpan) {\r\n // Create a context with the active navigation span\r\n return trace.setSpan(context.active(), this._activeNavigationSpan);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the OpenTelemetry tracer instance for creating spans\r\n * @returns The tracer instance or undefined if not initialized\r\n */\r\n public getTracer(): Tracer {\r\n return this._tracer;\r\n }\r\n}\r\n","import { Component, ContentChild, TemplateRef, computed, effect, input, model, resource, signal, untracked } from \"@angular/core\";\r\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\r\nimport { Router } from \"@angular/router\";\r\nimport { ProblemDetails, PropertyType, Resource, Template, Templates } from \"@wertzui/ngx-hal-client\";\r\nimport { ValdemortConfig } from \"ngx-valdemort\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from \"primeng/confirmdialog\";\r\nimport { SkeletonModule } from \"primeng/skeleton\";\r\nimport { TabsModule } from \"primeng/tabs\";\r\nimport { RestWorldFormComponent } from \"../../components/restworld-form/restworld-form.component\";\r\nimport { RestWorldIdNavigationComponent } from \"../../components/restworld-id-navigation/restworld-id-navigation.component\";\r\nimport { AfterSubmitOkEvent, AfterSubmitRedirectEvent } from \"../../models/events\";\r\nimport { RestWorldClientCollection } from \"../../services/restworld-client-collection\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\n\r\n/**\r\n* Component for editing a resource in the RESTworld application.\r\n* This component loads the forms resource from the API and renders a tab view where every template of the forms resource is rendered as a tab.\r\n* Every template becomes one `RestworldFormComponent` in the tab view.\r\n* It also allows adding extra tabs to the view.\r\n* An ID navigation form is also rendered at the top right of the view.\r\n* @example\r\n* <rw-edit apiName=\"api\" rel=\"rel\" uri=\"/api/rel/1\"></rw-edit>\r\n* @example\r\n* <rw-edit apiName=\"api\" rel=\"rel\" uri=\"/api/rel/1\">\r\n* <ng-template #extraTabs>\r\n* <p-tabPanel header=\"Extra tab\">\r\n* <p>Some extra content</p>\r\n* </p-tabPanel>\r\n* </ng-template>\r\n* </rw-edit>\r\n*/\r\n@Component({\r\n selector: \"rw-edit\",\r\n templateUrl: \"./restworld-edit-view.component.html\",\r\n styleUrls: [\"./restworld-edit-view.component.css\"],\r\n standalone: true,\r\n imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule, NgTemplateOutlet]\r\n})\r\nexport class RESTworldEditViewComponent {\r\n @ContentChild(\"extraTabs\", { static: false })\r\n /**\r\n * A reference to an optional template that can be used to add extra tabs to the view.\r\n */\r\n public extraTabsRef?: TemplateRef<unknown>;\r\n public idNavigationForm = new FormGroup<{\r\n id: FormControl<number | null>\r\n }>({\r\n id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))\r\n });\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _messageService: MessageService,\r\n private readonly _router: Router,\r\n valdemortConfig: ValdemortConfig) {\r\n valdemortConfig.errorClasses = \"p-error text-sm\";\r\n }\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n /**\r\n * The relation to load the resource from.\r\n */\r\n public readonly rel = input.required<string>();\r\n\r\n /**\r\n * The URI of the resource to load.\r\n */\r\n public uri = input.required<string>();\r\n /**\r\n * The name of the API to load the resource from.\r\n */\r\n public apiName = input.required<string>();\r\n public templates = resource({\r\n params: () => ({ apiName: this.apiName(), uri: this.uri() }),\r\n loader: ({ params }) => this.loadInternal(params.apiName, params.uri)\r\n });\r\n public displayTab = model(\"Loading\");\r\n\r\n async afterSubmit($event: AfterSubmitOkEvent | AfterSubmitRedirectEvent) {\r\n if ($event.status == 201) {\r\n await this._router.navigate([\"edit\", this.apiName(), this.rel(), $event.location])\r\n }\r\n }\r\n\r\n async afterDelete(): Promise<void> {\r\n await this._router.navigate([\"list\", this.apiName, this.rel()])\r\n }\r\n\r\n private async loadInternal(apiName: string, uri: string): Promise<Template[]> {\r\n if (!apiName || !uri)\r\n return [];\r\n try {\r\n const client = this._clients.getClient(apiName);\r\n const templatesOrProblemDetails = await client.getAllTemplatesByUri(uri);\r\n\r\n // Check if we got ProblemDetails instead of Templates\r\n if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {\r\n this._messageService.add({\r\n severity: \"error\",\r\n summary: \"Error\",\r\n detail: `Error from API: ${templatesOrProblemDetails.title} - ${templatesOrProblemDetails.detail}`,\r\n data: templatesOrProblemDetails,\r\n sticky: true\r\n });\r\n return [];\r\n }\r\n\r\n // Process the templates\r\n const templates = templatesOrProblemDetails as Templates;\r\n const templateArray = Object.values(templates).filter((t): t is Template => t !== undefined);\r\n if (templateArray.length > 0)\r\n this.displayTab.set(templateArray[0].title!);\r\n\r\n return templateArray;\r\n } catch (e: unknown) {\r\n if (e instanceof Error)\r\n this._messageService.add({ severity: \"error\", summary: \"Error\", detail: \"Error while loading the templates from the API. \" + e.message, data: e, sticky: true });\r\n else\r\n this._messageService.add({ severity: \"error\", summary: \"Error\", detail: \"Error while loading the templates from the API. \" + e, data: e, sticky: true });\r\n\r\n return [];\r\n }\r\n }\r\n}\r\n","<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n","import { Component, computed, effect, input, linkedSignal, model, resource } from '@angular/core';\r\nimport { PagedListResource, ProblemDetails, Resource, ResourceDto, ResourceOfDto, Template, type PropertyDto, type SimpleValue } from '@wertzui/ngx-hal-client';\r\nimport { ConfirmationService, MenuItem, MessageService } from 'primeng/api';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { AvatarGenerator } from '../../services/avatar-generator';\r\nimport { Router } from '@angular/router';\r\nimport { ODataParameters } from '../../models/o-data';\r\nimport { RestWorldTableComponent } from \"../../components/restworld-table/restworld-table.component\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { ProblemService } from \"../../services/problem.service\";\r\n\r\n/**\r\n * A component that displays a list of resources from a RESTworld API.\r\n * This component is meant to be used in conjunction with the `RESTworldEditViewComponent`, but can also be used with any other component if a custom `editLink` is provided.\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [editLink]=\"'/edit'\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [createButtonMenu]=\"[{label: 'Create new', icon: 'fas fa-plus', routerLink: ['/edit', 'api', 'rel', 'new']}]\" [editLink]=\"'/edit'\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [createButtonMenu]=\"[{label: 'Create new', icon: 'fas fa-plus', routerLink: ['/edit', 'api', 'rel', 'new']}]\" [editLink]=\"'/edit'\">\r\n * <ng-template pTemplate=\"header\">\r\n * <div class=\"p-d-flex p-ai-center\">\r\n * <div class=\"p-mr-2\">\r\n * <i class=\"fas fa-search\"></i>\r\n * </div>\r\n * <div class=\"p-inputgroup\">\r\n * <input pInputText type=\"text\" placeholder=\"Search...\" (input)=\"load({$search: $event.target.value})\">\r\n * </div>\r\n * </div>\r\n * </ng-template>\r\n * </rw-list>\r\n *\r\n */\r\n@Component({\r\n selector: 'rw-list',\r\n templateUrl: './restworld-list-view.component.html',\r\n styleUrls: ['./restworld-list-view.component.css'],\r\n standalone: true,\r\n imports: [RestWorldTableComponent, ConfirmDialogModule]\r\n})\r\nexport class RESTworldListViewComponent<TListDto extends ResourceDto & Record<string, unknown>> {\r\n /**\r\n * An array of menu items to be displayed in the create button dropdown menu.\r\n * That is the menu at the top right of the list.\r\n */\r\n public readonly createButtonMenu = input<MenuItem[]>();\r\n public isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading());\r\n public readonly filter = model<string | undefined>(undefined, { alias: \"$filter\" });\r\n public readonly orderby = model<string | undefined>(undefined, { alias: \"$orderby\" });\r\n public readonly skip = model<number | undefined>(undefined, { alias: \"$skip\" });\r\n public readonly top = model<number | undefined>(undefined, { alias: \"$top\" });\r\n\r\n public readonly oDataParameters = linkedSignal(() => {\r\n const parameters: ODataParameters = {\r\n $filter: this.filter(),\r\n $orderby: this.orderby(),\r\n $skip: this.skip(),\r\n $top: this.top()\r\n };\r\n return parameters;\r\n });\r\n\r\n /**\r\n * The URL for the edit link of the RESTworld list view.\r\n * Use it if you want to use a custom edit view instead of the default `RESTworldEditViewComponent`.\r\n * @param value The new value for the edit link URL.\r\n */\r\n public readonly editLink = input(\"/edit\", { transform: (value) => value ?? \"/edit\" });\r\n\r\n public readonly headerMenu = computed(() => [\r\n {\r\n icon: \"fas fa-plus\",\r\n styleClass: \"p-button-success\",\r\n routerLink: [this.editLink(), this.apiName(), this.rel(), this.newHref()],\r\n items: this.createButtonMenu()\r\n }\r\n ]);\r\n\r\n public readonly rowMenu = computed<(row: ResourceOfDto<TListDto>, openedByRightClick: boolean) => MenuItem[]>(() => (row, openedByRightClick) => {\r\n return [\r\n {\r\n icon: \"fas fa-edit\",\r\n label: openedByRightClick ? \"View / Edit\" : undefined,\r\n tooltip: !openedByRightClick ? \"View / Edit\" : undefined,\r\n tooltipPosition: \"left\",\r\n routerLink: [this.editLink(), this.apiName(), this.rel(), row._links?.self[0].href]\r\n }, {\r\n icon: \"fas fa-trash-alt\",\r\n label: openedByRightClick ? \"Delete\" : undefined,\r\n tooltip: !openedByRightClick ? \"Delete\" : undefined,\r\n tooltipPosition: \"left\",\r\n styleClass: \"p-button-danger\",\r\n command: () => this.showDeleteConfirmatioModal(row)\r\n }\r\n ];\r\n });\r\n\r\n private static readonly _emptylistResource = new PagedListResource({ _embedded: { items: [] }, _links: { self: [] } });\r\n\r\n private static readonly _emptySearchTemplate: Template<ReadonlyArray<PropertyDto<SimpleValue, string, string>>> = new Template({ properties: [] });\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _confirmationService: ConfirmationService,\r\n private readonly _messageService: MessageService,\r\n public readonly avatarGenerator: AvatarGenerator,\r\n private readonly _router: Router,\r\n private readonly _problemService: ProblemService) {\r\n this.listResource.set(RESTworldListViewComponent._emptylistResource);\r\n this.searchTemplate.set(RESTworldListViewComponent._emptySearchTemplate);\r\n effect(() => console.log((this.rel())));\r\n }\r\n\r\n /**\r\n * Sets the name of the API to load and triggers a reload of the data.\r\n * @param value The name of the API to load.\r\n */\r\n public readonly apiName = input<string>();\r\n /**\r\n * Sets the rel value for the RESTWorld list view component.\r\n * @param value The new rel value to set.\r\n */\r\n public readonly rel = input<string>();\r\n\r\n public readonly newHref = computed(() => this.listResource.value()?.findLink('new')?.href);\r\n public readonly items = computed(() => this.listResource.value()?._embedded.items || []);\r\n\r\n public createNew(): Promise<boolean> {\r\n return this._router.navigate([this.editLink, this.apiName, this.rel, this.newHref]);\r\n }\r\n\r\n public async delete(resource: Resource): Promise<void> {\r\n const client = this._client();\r\n if (client === undefined) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'No client found for the API.' });\r\n return;\r\n }\r\n\r\n\r\n const response = await client.delete(resource);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, undefined, \"Error while deleting the resource from the API.\", \"Error\")) {\r\n this._messageService.add({ severity: 'success', summary: 'Deleted', detail: 'The resource has been deleted.' });\r\n\r\n this.listResource.reload();\r\n }\r\n }\r\n\r\n public readonly listResource = resource({\r\n params: () => ({ oDataParameters: this.oDataParameters(), rel: this.rel() }),\r\n loader: async ({ params }) => {\r\n const client = this._client();\r\n if (params.rel === undefined || client === undefined)\r\n return RESTworldListViewComponent._emptylistResource;\r\n\r\n const response = await client.getList<TListDto>(params.rel, params.oDataParameters);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, undefined, \"Error while loading the resources from the API.\", \"Error\")) {\r\n return response.body;\r\n }\r\n\r\n return RESTworldListViewComponent._emptylistResource;\r\n },\r\n });\r\n\r\n public readonly totalRecords = computed(() => {\r\n const top = this.top();\r\n const listResource = this.listResource.value();\r\n const rowsPerPage = top ?? listResource?._embedded.items.length ?? 0;\r\n const totalPages = listResource?.totalPages ?? 1;\r\n const totalRecords = totalPages * rowsPerPage;\r\n return totalRecords;\r\n });\r\n\r\n public readonly searchTemplate = resource({\r\n params: () => ({ resource: this.listResource.value() }),\r\n loader: async ({ params }) => {\r\n const client = this._client();\r\n if (params.resource === undefined || client === undefined)\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n \r\n // We only want to load the template once\r\n const currentSearchTemplate = this.searchTemplate.value() as Template<ReadonlyArray<PropertyDto<SimpleValue, string, string>>> | undefined;\r\n if (currentSearchTemplate !== undefined && currentSearchTemplate !== RESTworldListViewComponent._emptySearchTemplate)\r\n return currentSearchTemplate;\r\n \r\n // return RESTworldListViewComponent._emptySearchTemplate;\r\n try {\r\n const templates = await client.getAllTemplates(params.resource);\r\n if (ProblemDetails.isProblemDetails(templates)) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `No templates found in the API response.`, data: templates });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n\r\n const searchTemplate = templates[\"Search\"];\r\n if (searchTemplate === undefined) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `No \"Search\" template found in the API response.`, data: templates });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n \r\n return searchTemplate;\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API. ' + e, data: e });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n }\r\n });\r\n\r\n public showDeleteConfirmatioModal(resource: Resource) {\r\n this._confirmationService.confirm({\r\n message: 'Do you really want to delete this resource?',\r\n header: 'Confirm delete',\r\n icon: 'far fa-trash-alt',\r\n accept: () => this.delete(resource)\r\n });\r\n }\r\n\r\n private readonly _client = computed(() => {\r\n const apiName = this.apiName();\r\n if (apiName === undefined)\r\n return undefined;\r\n\r\n return this._clients.getClient(apiName);\r\n });\r\n}\r\n","@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n","import { type HttpInterceptor, type HttpRequest, type HttpHandler, type HttpEvent, HttpEventType, type HttpResponse, HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { context, type Attributes, SpanKind, trace, propagation, SpanStatusCode } from \"@opentelemetry/api\";\r\nimport { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY, ATTR_URL_SCHEME, ATTR_CLIENT_ADDRESS, ATTR_CLIENT_PORT, ATTR_HTTP_REQUEST_HEADER, ATTR_SERVICE_NAME, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_HTTP_RESPONSE_HEADER } from \"@opentelemetry/semantic-conventions\";\r\nimport { type Observable, tap, finalize } from \"rxjs\";\r\nimport { OpenTelemetryService } from \"./opentelemetry.service\";\r\n\r\n/**\r\n * This is an HttpInterceptor that ensures all HttpClient requests\r\n * are properly associated with the current navigation span.\r\n */\r\n\r\n@Injectable()\r\nexport class OpenTelemetryHttpInterceptor implements HttpInterceptor {\r\n constructor(private readonly _telemetryService: OpenTelemetryService) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // Get the active context from the OpenTelemetryService\r\n const activeContext = this._telemetryService.getActiveContext();\r\n\r\n // If we have an active navigation context, create a child span for this HTTP request\r\n if (activeContext && this._telemetryService.getTracer()) {\r\n // Execute within the active context to ensure proper parenting\r\n return context.with(activeContext, () => {\r\n // Extract span information from the request\r\n const url = new URL(request.url, window.location.origin);\r\n const method = request.method;\r\n const spanName = `${method} ${url.pathname}`;\r\n\r\n // Get tracer from the telemetry service to create a span\r\n const tracer = this._telemetryService.getTracer();\r\n\r\n // Create attributes for the span, handling null values from headers\r\n const contentLength = request.headers.get('Content-Length');\r\n const contentType = request.headers.get('Content-Type');\r\n\r\n const attributes: Attributes = {\r\n [ATTR_HTTP_REQUEST_METHOD]: method,\r\n [ATTR_URL_FULL]: request.url,\r\n [ATTR_URL_PATH]: url.pathname,\r\n [ATTR_URL_QUERY]: url.search.replace('?', ''),\r\n [ATTR_URL_SCHEME]: url.protocol.replace(':', ''),\r\n \"url.host\": url.host,\r\n \"http.user_agent\": navigator.userAgent,\r\n [ATTR_CLIENT_ADDRESS]: window.location.href,\r\n [ATTR_CLIENT_PORT]: window.location.port,\r\n [ATTR_HTTP_REQUEST_HEADER(\"accept\")]: request.headers.get('Accept') ?? undefined,\r\n [ATTR_HTTP_REQUEST_HEADER(\"accept-language\")]: request.headers.get('Accept-Language') ?? undefined,\r\n \"http.request.body.size\": contentLength ?? undefined,\r\n [ATTR_HTTP_REQUEST_HEADER(\"content-type\")]: contentType ?? undefined,\r\n [ATTR_SERVICE_NAME]: 'ngx-restworld-client'\r\n };\r\n\r\n // Start a new span for this HTTP request\r\n const span = tracer.startSpan(spanName, {\r\n kind: SpanKind.CLIENT,\r\n attributes\r\n });\r\n\r\n // Create a context with the current span\r\n const spanContext = trace.setSpan(context.active(), span);\r\n\r\n // Create a carrier object for W3C trace context headers\r\n const carrier: Record<string, string> = {};\r\n\r\n // Inject trace context headers into the carrier\r\n propagation.inject(spanContext, carrier);\r\n\r\n // Clone the request with the added W3C trace context headers\r\n let headers = request.headers;\r\n Object.entries(carrier).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n\r\n // Create the traced request with the W3C headers\r\n const tracedRequest = request.clone({ headers });\r\n\r\n // Use with() to make this span active during request execution\r\n return context.with(spanContext, () => {\r\n // Handle the request and observe the response\r\n return next.handle(tracedRequest).pipe(\r\n // Use operators to capture response or error before completing the span\r\n tap({\r\n next: (event: HttpEvent<any>) => {\r\n if (event.type === HttpEventType.Response) {\r\n const response = event as HttpResponse<any>;\r\n const responseAttrs: Record<string, string | number | boolean> = {\r\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status\r\n };\r\n\r\n // Only add response header values if they exist\r\n const respContentLength = response.headers.get('Content-Length');\r\n const respContentType = response.headers.get('Content-Type');\r\n\r\n if (respContentLength) responseAttrs[\"http.response.body.size\"] = respContentLength;\r\n if (respContentType) responseAttrs[ATTR_HTTP_RESPONSE_HEADER(\"content-type\")] = respContentType;\r\n\r\n // Add response attributes to the span\r\n span.setAttributes(responseAttrs);\r\n span.setStatus({\r\n code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR\r\n });\r\n\r\n // End the span when we get the full response\r\n span.end();\r\n }\r\n },\r\n error: (error: Error) => {\r\n // Record the error and end the span\r\n span.setStatus({\r\n code: SpanStatusCode.ERROR,\r\n message: error.message || 'Http request failed'\r\n });\r\n span.recordException(error);\r\n span.end();\r\n }\r\n }),\r\n // Make sure the span ends even if the observable completes without going through our tap handlers\r\n finalize(() => {\r\n if (span) {\r\n // Only end if not already ended in the tap handlers\r\n try {\r\n span.end();\r\n } catch (e) {\r\n // Ignore errors from ending an already-ended span\r\n }\r\n }\r\n })\r\n );\r\n });\r\n });\r\n }\r\n\r\n // No active context, just proceed with the request without tracing\r\n return next.handle(request);\r\n }\r\n}\r\n\r\n/**\r\n * Provider for the OpenTelemetry HTTP interceptor.\r\n * This interceptor ensures that HttpClient requests are properly\r\n * associated with the current navigation span.\r\n */\r\nexport const OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER = {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: OpenTelemetryHttpInterceptor,\r\n multi: true\r\n};\r\n","import { EnvironmentProviders, inject, provideAppInitializer, type Provider, type Type } from \"@angular/core\";\r\nimport { OpenTelemetryService } from \"./services/opentelemetry.service\";\r\nimport { SettingsService } from \"./services/settings.service\";\r\nimport { AvatarGenerator } from \"./services/avatar-generator\";\r\nimport { NgHttpCachingStrategy, provideNgHttpCaching, withNgHttpCachingLocalStorage, type NgHttpCachingConfig } from \"ng-http-caching\";\r\nimport { OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER } from \"./services/openTelemetryHttpInterceptor\";\r\n\r\n/**\r\n * Povides the RESTworld functionality to the application.\r\n * This includes the RestWorldClientCollection, the SettingsService and the OpenTelemetryService.\r\n * You need to call this function in your main.ts in the providers array of the bootstrapApplication function.\r\n * @param ngHttpCachingConfig An optional configuration for caching http requests. Will be merged with the default configuration if provided.\r\n * The default configuration is this:\r\n * ```typescript\r\n * {\r\n * allowedMethod: [\"ALL\"],\r\n * checkResponseHeaders: true,\r\n * cacheStrategy: NgHttpCachingStrategy.DISALLOW_ALL,\r\n * store: withNgHttpCachingLocalStorage(),\r\n * }\r\n * ```\r\n */\r\nexport function provideRestWorld(ngHttpCachingConfig?: NgHttpCachingConfig): (EnvironmentProviders | Provider)[] {\r\n const defaultCachingConfig = {\r\n allowedMethod: [\"ALL\"],\r\n checkResponseHeaders: true,\r\n cacheStrategy: NgHttpCachingStrategy.DISALLOW_ALL,\r\n store: withNgHttpCachingLocalStorage(),\r\n }\r\n\r\n const mergedCachingConfig = { ...defaultCachingConfig, ...ngHttpCachingConfig };\r\n\r\n const restWorldInitializer = provideAppInitializer(async () => {\r\n const settingsService = inject(SettingsService);\r\n const opentelemetryService = inject(OpenTelemetryService);\r\n await settingsService.ensureInitialized();\r\n await opentelemetryService.initialize();\r\n });\r\n\r\n const cachingProviders = provideNgHttpCaching(mergedCachingConfig);\r\n\r\n const allProviders = [\r\n restWorldInitializer,\r\n cachingProviders,\r\n OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER\r\n ];\r\n\r\n return allProviders;\r\n}\r\n\r\n/**\r\n * Provide a custom avatar generator to the application.\r\n * You can use this functionality to provide your own implementation of the AvatarGenerator.\r\n */\r\nexport function provideCustomAvatarGenerator(generator: Type<any>): Provider {\r\n return { provide: AvatarGenerator, useClass: generator };\r\n}\r\n","/*\r\n * Public API Surface of ngx-restworld-client\r\n */\r\n\r\nexport * from \"./lib/constants/link-names\";\r\n\r\nexport * from \"./lib/components/restworld-avatar/restworld-avatar.component\";\r\nexport * from \"./lib/components/restworld-displays/restworld-displays\";\r\nexport * from \"./lib/components/restworld-file/restworld-file.component\";\r\nexport * from \"./lib/components/restworld-form/restworld-form.component\";\r\nexport * from \"./lib/components/restworld-id-navigation/restworld-id-navigation.component\";\r\nexport * from \"./lib/components/restworld-image/restworld-image.component\";\r\nexport * from \"./lib/components/restworld-inputs/restworld-inputs\";\r\nexport * from \"./lib/components/restworld-label/restworld-label.component\";\r\nexport * from \"./lib/components/restworld-menu-button/restworld-menu-button.component\";\r\nexport * from \"./lib/components/restworld-table/restworld-table.component\";\r\nexport * from \"./lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component\";\r\nexport * from \"./lib/components/restworld-validation-errors/restworld-validation-errors.component\";\r\n\r\nexport * from \"./lib/constants/link-names\";\r\n\r\nexport * from \"./lib/models/api-url\";\r\nexport * from \"./lib/models/client-settings\";\r\nexport * from \"./lib/models/o-data\";\r\nexport * from \"./lib/models/restworld-image\";\r\nexport * from \"./lib/models/restworld-options\";\r\nexport * from \"./lib/models/special-properties\";\r\nexport * from \"./lib/models/templating\";\r\n\r\nexport * from \"./lib/pipes/as.pipe\";\r\nexport * from \"./lib/pipes/clr-format.pipe\";\r\nexport * from \"./lib/pipes/property-type-format.pipe\";\r\nexport * from \"./lib/pipes/safe-url.pipe\";\r\n\r\nexport * from \"./lib/services/avatar-generator\";\r\nexport * from \"./lib/services/options.service\";\r\nexport * from \"./lib/services/odata.service\";\r\nexport * from \"./lib/services/odata-filter-parser\";\r\nexport * from \"./lib/services/odata-visitor\";\r\nexport * from \"./lib/services/opentelemetry.service\";\r\nexport * from \"./lib/services/problem.service\";\r\nexport * from \"./lib/services/restworld-client-collection\";\r\nexport * from \"./lib/services/restworld-client\";\r\nexport * from \"./lib/services/settings.service\";\r\n\r\nexport * from \"./lib/util/debounce\";\r\n\r\nexport * from \"./lib/views/restworld-edit-view/restworld-edit-view.component\";\r\nexport * from \"./lib/views/restworld-list-view/restworld-list-view.component\";\r\n\r\nexport * from \"./lib/provide-restworld\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AvatarGenerator","i1.ClrFormatPipe","i1","i1.ProblemService","i2.RestWorldClientCollection","i1.OptionsService","i2","i5","i3","i4","i4.OptionsService","i5.FormControlProperty","i5.PropertyControlStatus","i5.PropertySelectAttributes","i5.PropertyAttributes","i5.DefaultPropertyValueAccessor","i5.PropertyInputNumberAttributes","i1.RestWorldClientCollection","i4.ProblemService","i7","i6","i1.SettingsService","i3.AvatarGenerator","i5.ProblemService","i1.OpenTelemetryService"],"mappings":"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"}
1
+ {"version":3,"file":"wertzui-ngx-restworld-client.mjs","sources":["../../../projects/ngx-restworld-client/src/lib/constants/link-names.ts","../../../projects/ngx-restworld-client/src/lib/services/avatar-generator.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-avatar/restworld-avatar.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-avatar/restworld-avatar.component.html","../../../projects/ngx-restworld-client/src/lib/models/special-properties.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-label/restworld-label.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-label/restworld-label.component.html","../../../projects/ngx-restworld-client/src/lib/pipes/clr-format.pipe.ts","../../../projects/ngx-restworld-client/src/lib/pipes/property-type-format.pipe.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component.ts","../../../projects/ngx-restworld-client/src/lib/services/problem.service.ts","../../../projects/ngx-restworld-client/src/lib/services/restworld-client.ts","../../../projects/ngx-restworld-client/src/lib/services/restworld-client-collection.ts","../../../projects/ngx-restworld-client/src/lib/services/options.service.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-displays.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-collection/restworld-display-collection.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display/restworld-display.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-dropdown/restworld-display-dropdown.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-element/restworld-display-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-object/restworld-display-object.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-simple/restworld-display-simple.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-displays/restworld-display-template/restworld-display-template.component.html","../../../projects/ngx-restworld-client/src/lib/pipes/safe-url.pipe.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-file/restworld-file.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-file/restworld-file.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-validation-errors/restworld-validation-errors.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-validation-errors/restworld-validation-errors.component.html","../../../projects/ngx-restworld-client/src/lib/util/debounce.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-image/restworld-image.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-image/restworld-image.component.html","../../../projects/ngx-restworld-client/src/lib/directives/property.directives.ts","../../../projects/ngx-restworld-client/src/lib/services/odata-visitor.ts","../../../projects/ngx-restworld-client/src/lib/services/odata-filter-parser.ts","../../../projects/ngx-restworld-client/src/lib/services/odata.service.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-menu-button/restworld-menu-button.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-menu-button/restworld-menu-button.component.html","../../../projects/ngx-restworld-client/src/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.ts","../../../projects/ngx-restworld-client/src/lib/components/rest-world-table-column-filter-element/rest-world-table-column-filter-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-table/restworld-table.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-table/restworld-table.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-inputs.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-form-element/restworld-form-element.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-collection/restworld-input-collection.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input/restworld-input.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-dropdown/restworld-input-dropdown.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-object/restworld-input-object.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-simple/restworld-input-simple.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-inputs/restworld-input-template/restworld-input-template.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-form/restworld-form.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-form/restworld-form.component.html","../../../projects/ngx-restworld-client/src/lib/components/restworld-id-navigation/restworld-id-navigation.component.ts","../../../projects/ngx-restworld-client/src/lib/components/restworld-id-navigation/restworld-id-navigation.component.html","../../../projects/ngx-restworld-client/src/lib/models/restworld-options.ts","../../../projects/ngx-restworld-client/src/lib/pipes/as.pipe.ts","../../../projects/ngx-restworld-client/src/lib/services/settings.service.ts","../../../projects/ngx-restworld-client/src/lib/services/opentelemetry.service.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-edit-view/restworld-edit-view.component.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-edit-view/restworld-edit-view.component.html","../../../projects/ngx-restworld-client/src/lib/views/restworld-list-view/restworld-list-view.component.ts","../../../projects/ngx-restworld-client/src/lib/views/restworld-list-view/restworld-list-view.component.html","../../../projects/ngx-restworld-client/src/lib/services/openTelemetryHttpInterceptor.ts","../../../projects/ngx-restworld-client/src/lib/provide-restworld.ts","../../../projects/ngx-restworld-client/src/public-api.ts","../../../projects/ngx-restworld-client/src/wertzui-ngx-restworld-client.ts"],"sourcesContent":["/**\r\n * Well known link names.\r\n */\r\nexport enum LinkNames {\r\n get = \"Get\",\r\n getList = \"GetList\",\r\n post = \"Post\",\r\n put = \"Put\",\r\n delete = \"Delete\",\r\n new = \"New\"\r\n}\r\n","import { Injectable, Input } from '@angular/core';\r\nimport { SafeUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * A class that generates avatars based on a given name or email.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AvatarGenerator {\r\n private static _imageCache: Map<string, SafeUrl> = new Map<string, SafeUrl>();\r\n private static _nonWordRegex = new RegExp('\\\\W');\r\n\r\n /**\r\n * Override this method to provide a custom implementation for retrieving the image for a user.\r\n * If this method is not overridden, the image will always be empty, resulting in the avatar always be shown as label.\r\n * @param nameOrEmail The name or email of the user whose image should be retrieved.\r\n * @returns A Promise that resolves with a SafeUrl object representing the user's image, or an empty string if no image is available.\r\n */\r\n public getImageAsyncOverride: (nameOrEmail: string) => Promise<SafeUrl> = () => Promise.resolve('');\r\n\r\n // from https://stackoverflow.com/a/66494926/1378307\r\n private static getBackgroundColor(\r\n text: string,\r\n minLightness = 40,\r\n maxLightness = 80,\r\n minSaturation = 30,\r\n maxSaturation = 100,\r\n ): string {\r\n if (!text) return '#aaa';\r\n\r\n const hash = [...text].reduce((acc, char) => {\r\n return char.charCodeAt(0) + ((acc << 5) - acc);\r\n }, 0);\r\n\r\n return (\r\n 'hsl(' +\r\n (hash % 360) +\r\n ', ' +\r\n ((hash % (maxSaturation - minSaturation)) + minSaturation) +\r\n '%, ' +\r\n ((hash % (maxLightness - minLightness)) + minLightness) +\r\n '%)'\r\n );\r\n }\r\n\r\n private static getLocalPartOfEmailAddress(email: string): string {\r\n const indexOfAt = email.indexOf('@');\r\n if (indexOfAt < 2) {\r\n if (indexOfAt >= 0) {\r\n if (indexOfAt === email.length - 1)\r\n return email.substring(0, indexOfAt);\r\n return email.substring(indexOfAt + 1);\r\n }\r\n } else {\r\n return email.substring(0, indexOfAt);\r\n }\r\n\r\n return email;\r\n }\r\n\r\n private static getTwoUppercaseLettersFromName(name: string): string {\r\n // Too short to do anything besides just returning the name\r\n if (name.length <= 2) {\r\n return name.toUpperCase();\r\n }\r\n\r\n // Try to split by non word characters\r\n const splittedByNonWord = name.split(AvatarGenerator._nonWordRegex);\r\n if (splittedByNonWord.length > 1) {\r\n return (splittedByNonWord[0][0] + splittedByNonWord[1][0]).toUpperCase();\r\n }\r\n\r\n // Try to split by upper case letters\r\n const upperCaseLetters = [...name]\r\n .filter((c) => c.toUpperCase() === c && !AvatarGenerator._nonWordRegex.test(c))\r\n .join();\r\n if (upperCaseLetters.length > 1) {\r\n return upperCaseLetters.substring(0, 2);\r\n }\r\n\r\n // Just return the first 2 letters\r\n return name.substring(0, 2).toUpperCase();\r\n }\r\n\r\n /**\r\n * Retrieves the image for the given name or email address from the cache if it exists,\r\n * otherwise retrieves it from the server and caches it for future use.\r\n * @param nameOrEmail The name or email address of the user to retrieve the image for.\r\n * @returns A Promise that resolves to a SafeUrl representing the retrieved image.\r\n */\r\n public async getImageAsync(nameOrEmail: string): Promise<SafeUrl> {\r\n let promise = AvatarGenerator._imageCache.get(nameOrEmail);\r\n\r\n if (promise === undefined) {\r\n promise = this.getImageAsyncOverride(nameOrEmail);\r\n AvatarGenerator._imageCache.set(nameOrEmail, promise);\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n /**\r\n * Gets the label for the avatar based on the given name or email.\r\n * If an image is available for the given name or email, an empty string is returned.\r\n * Otherwise, the label is generated from the name or email.\r\n * The label always consists of 2 uppercase letters.\r\n * @param nameOrEmail The name or email to generate the label from.\r\n * @returns The label for the avatar.\r\n */\r\n public async getLabelAsync(nameOrEmail: string): Promise<string> {\r\n if (!nameOrEmail)\r\n return '';\r\n\r\n if (await this.getImageAsync(nameOrEmail))\r\n return '';\r\n\r\n const name = AvatarGenerator.getLocalPartOfEmailAddress(nameOrEmail);\r\n const initials = AvatarGenerator.getTwoUppercaseLettersFromName(name);\r\n\r\n return initials;\r\n }\r\n\r\n /**\r\n * Gets the style object for the avatar based on the given name or email.\r\n * @param nameOrEmail - The name or email of the user.\r\n * @returns A Promise that resolves to the style object containing the background color and foreground color of the avatar.\r\n * If the image for the user is found, returns undefined.\r\n */\r\n public async getStyleAsync(nameOrEmail: string,): Promise<{ 'background-color': string; 'color': string } | undefined> {\r\n if (await this.getImageAsync(nameOrEmail))\r\n return undefined;\r\n\r\n const foregroundColor = '#ffffff';\r\n const backgroundColor = AvatarGenerator.getBackgroundColor(nameOrEmail);\r\n\r\n const style = {\r\n 'background-color': backgroundColor,\r\n 'color': foregroundColor,\r\n };\r\n\r\n return style;\r\n }\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { AvatarGenerator } from '../../services/avatar-generator';\r\nimport { AvatarModule } from \"primeng/avatar\";\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\nimport { AsyncPipe } from \"@angular/common\";\r\n\r\n/**\r\n * This component displays an avatar for a given user.\r\n * The avatar consists of an image or a 2 character label in a circle, based on what the `AvatarGenerator` returns for that user.\r\n * If you have not overridden the `AvatarGenerator`'s `getImageAsyncOverride` method, the image will always be empty and the label will be generated from the user's name or email.\r\n * @example\r\n * <rw-avatar [user]=\"'John Doe'\"></rw-avatar>\r\n */\r\n@Component({\r\n selector: 'rw-avatar',\r\n templateUrl: './restworld-avatar.component.html',\r\n styleUrls: ['./restworld-avatar.component.css'],\r\n standalone: true,\r\n imports: [AvatarModule, TooltipModule, AsyncPipe]\r\n})\r\nexport class RestWorldAvatarComponent {\r\n /**\r\n * The username of the user to display an avatar for.\r\n */\r\n public readonly user = input.required<string>();\r\n public readonly image = computed(async () => await this._generator.getImageAsync(this.user()));\r\n public readonly label = computed(async () => await this._generator.getLabelAsync(this.user()));\r\n public readonly style = computed(async () => await this._generator.getStyleAsync(this.user()));\r\n public readonly tooltip = computed(() => this.user() ?? '');\r\n\r\n constructor(\r\n private readonly _generator: AvatarGenerator\r\n ) {\r\n }\r\n}\r\n","<p-avatar \r\n [pTooltip]=\"tooltip()\" \r\n tooltipPosition=\"top\" \r\n [image]=\"$any(image() | async)\" \r\n [label]=\"$any(label() | async)\" \r\n [style]=\"style() | async\"\r\n shape=\"circle\">\r\n</p-avatar>","import { Property, Options, SimpleValue } from '@wertzui/ngx-hal-client'\r\nimport { RestWorldImage } from './restworld-image';\r\n\r\n/**\r\n * A property that represents an image.\r\n */\r\nexport class PropertyWithImage extends Property<string, never, never> { \r\n restWorldImage!: RestWorldImage \r\n}\r\n\r\n/**\r\n * A property that represents a dropdown.\r\n */\r\nexport class PropertyWithOptions<TValue extends SimpleValue = SimpleValue, OptionsPromptField extends string = \"prompt\", OptionsValueField extends string = \"value\"> extends Property<TValue, OptionsPromptField, OptionsValueField> { \r\n declare options: Options<TValue, OptionsPromptField, OptionsValueField> \r\n};\r\n","import { Component, input } from '@angular/core';\r\nimport { ControlContainer, FormGroupDirective } from '@angular/forms';\r\nimport { Property, PropertyType, SimpleValue } from '@wertzui/ngx-hal-client';\r\n\r\n/**\r\n * A label that is generated from the given property.\r\n * If you also want an input element, you can either use {@link RestWorldFormElement} `<rw-form-element>` to have a label and an input rendered,\r\n * or use {@link RestWorldInput} `<rw-input>` which will just render the input element, so you can freely place this label.\r\n * @example\r\n * <rw-label [property]=\"property\"></rw-label>\r\n */\r\n@Component({\r\n selector: 'rw-label',\r\n templateUrl: './restworld-label.component.html',\r\n styleUrls: ['./restworld-label.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }]\r\n})\r\nexport class RestWorldLabelComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The property to be displayed.\r\n * @required\r\n **/\r\n readonly property = input.required<TProperty>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n}\r\n","@if (property().type !== PropertyType.Hidden) {\r\n <label \r\n [attr.for]=\"property().name\"\r\n [class.p-disabled]=\"property().readOnly\">\r\n {{property().prompt ?? property().name}}\r\n </label>\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n// @ts-ignore\r\nimport * as clrFormat from 'clr-format';\r\n\r\n@Pipe({\r\n name: 'clrFormat',\r\n standalone: true\r\n})\r\n/**\r\n * A pipe that formats a value using a specified format string.\r\n * Have a look at https://learn.microsoft.com/en-us/dotnet/standard/base-types/formatting-types to see what is supported.\r\n * @example\r\n * <div>{{ value | clrFormat: 'yyyy-MM-dd' }}</div>\r\n */\r\nexport class ClrFormatPipe implements PipeTransform {\r\n private static readonly formatFunction = ClrFormatPipe.getFormatFunction();\r\n\r\n private static getFormatFunction(): (format: string, value: any) => string {\r\n // Depending if this is bundled with webpack or not, the default export will be different\r\n return clrFormat.default ?? clrFormat;\r\n }\r\n\r\n public transform(value: any, format?: string): string {\r\n if (format === undefined)\r\n return value;\r\n\r\n return format.includes(\"{0\") ? ClrFormatPipe.formatFunction(format, value) : ClrFormatPipe.formatFunction(\"{0:\" + format + \"}\", value);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ClrFormatPipe } from './clr-format.pipe';\r\nimport { PropertyType } from '@wertzui/ngx-hal-client';\r\n\r\n@Pipe({\r\n name: 'propertyTypeFormat',\r\n standalone: true\r\n})\r\n/**\r\n * A pipe that formats the value of a {@link Property} based on its {@link PropertyType}.\r\n * @example\r\n * <div>{{ value | propertyTypeFormat: property.type }}</div>\r\n */\r\nexport class PropertyTypeFormatPipe implements PipeTransform {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yyyy\")\r\n .replace(\"33\", \"yy\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n private static readonly _typeToFormatMap = new Map<PropertyType, string>([\r\n [PropertyType.Hidden, \"\"],\r\n [PropertyType.Text, \"{0}\"],\r\n [PropertyType.Textarea, \"{0}\"],\r\n [PropertyType.Search, \"{0}\"],\r\n [PropertyType.Tel, \"{0}\"],\r\n [PropertyType.Url, \"{0}\"],\r\n [PropertyType.Email, \"{0}\"],\r\n [PropertyType.Password, \"{0}\"],\r\n [PropertyType.Date, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \"}\"],\r\n [PropertyType.Month, \"{0}\"],\r\n [PropertyType.Week, \"{0}\"],\r\n [PropertyType.Time, \"{0:\" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.DatetimeLocal, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \" \" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.Number, \"{0}\"],\r\n [PropertyType.Range, \"{0}\"],\r\n [PropertyType.Color, \"{0}\"],\r\n [PropertyType.Bool, \"{0}\"],\r\n [PropertyType.DatetimeOffset, \"{0:\" + PropertyTypeFormatPipe._dateFormat + \" \" + PropertyTypeFormatPipe._timeFormat + \"}\"],\r\n [PropertyType.Duration, \"{0}\"],\r\n [PropertyType.Image, \"{0}\"],\r\n [PropertyType.File, \"{0}\"],\r\n [PropertyType.Collection, \"{0}\"],\r\n [PropertyType.Object, \"{0}\"],\r\n [PropertyType.Percent, \"{0:P}\"],\r\n [PropertyType.Currency, \"{0:N}\"],\r\n ]);\r\n\r\n public constructor(private readonly _clrFormatPipe: ClrFormatPipe) {\r\n }\r\n\r\n public transform(value: any, type?: PropertyType): string {\r\n const format = type === undefined ? \"{0}\" : (PropertyTypeFormatPipe._typeToFormatMap.get(type) ?? \"{0}\");\r\n return this._clrFormatPipe.transform(value, format);\r\n }\r\n}\r\n","/*\r\n# PRIMENG LICENSES\r\n\r\n## PRIMENG COMMUNITY VERSIONS LICENSE\r\n\r\nThe MIT License (MIT)\r\n\r\nCopyright (c) 2016-2025 PrimeTek\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE.\r\n*/\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n AfterContentInit,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n forwardRef,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n TemplateRef,\r\n viewChild,\r\n ViewEncapsulation,\r\n contentChild,\r\n model,\r\n contentChildren,\r\n computed\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormControl,\r\n NG_VALUE_ACCESSOR,\r\n NgControl,\r\n} from '@angular/forms';\r\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\r\nimport { BaseComponent } from 'primeng/basecomponent';\r\nimport { CheckboxChangeEvent, CheckboxStyle } from 'primeng/checkbox';\r\n\r\nexport const TRI_STATE_CHECKBOX_VALUE_ACCESSOR: any = {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TriStateCheckbox),\r\n multi: true,\r\n};\r\n/**\r\n * Checkbox is an extension to standard checkbox element with theming.\r\n * @group Components\r\n */\r\n@Component({\r\n selector: 'p-tri-state-checkbox, p-tri-state-checkBox, p-tri-state-check-box, rw-tri-state-checkbox, rw-tri-state-checkBox, rw-tri-state-check-box',\r\n standalone: true,\r\n imports: [CommonModule, SharedModule],\r\n template: `\r\n <div [style]=\"style()\" [class]=\"styleClass()\" [ngClass]=\"containerClass()\" [attr.data-p-highlight]=\"model() === true\" [attr.data-p-checked]=\"model() === true\" [attr.data-p-disabled]=\"disabled()\" [title]=\"model()\">\r\n <input\r\n #input\r\n [attr.id]=\"inputId()\"\r\n type=\"checkbox\"\r\n [value]=\"model()\"\r\n [attr.name]=\"name()\"\r\n [checked]=\"model()\"\r\n [attr.tabindex]=\"tabindex()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [attr.required]=\"required()\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [style]=\"inputStyle()\"\r\n [class]=\"inputClass()\"\r\n [ngClass]=\"{ 'p-checkbox-input': true }\"\r\n (focus)=\"onInputFocus($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (change)=\"handleChange($event)\"\r\n />\r\n <div class=\"p-checkbox-box\">\r\n @if (!checkboxIconTemplate() && !_checkboxIconTemplate) {\r\n @if (model() === true) {\r\n @if (checkboxIcon()) {\r\n <span class=\"p-checkbox-icon\" [ngClass]=\"checkboxIcon()\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n @else {\r\n <span class=\"p-checkbox-icon pi pi-check\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n }\r\n @else if (model() === null) {\r\n <span class=\"p-checkbox-icon pi pi-minus\" [attr.data-pc-section]=\"'icon'\"></span>\r\n }\r\n }\r\n <ng-template *ngTemplateOutlet=\"checkboxIconTemplate() ?? _checkboxIconTemplate ?? null; context: { model: model, class: 'p-checkbox-icon' }\"></ng-template>\r\n </div>\r\n </div>\r\n `,\r\n providers: [TRI_STATE_CHECKBOX_VALUE_ACCESSOR, CheckboxStyle],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class TriStateCheckbox\r\n extends BaseComponent\r\n implements AfterContentInit, ControlValueAccessor {\r\n /**\r\n * Value of the checkbox.\r\n * @group Props\r\n */\r\n readonly value = input<any>();\r\n /**\r\n * Name of the checkbox group.\r\n * @group Props\r\n */\r\n readonly name = input<string>();\r\n /**\r\n * When present, it specifies that the element should be disabled.\r\n * @group Props\r\n */\r\n readonly disabled = model<boolean | undefined>(undefined);\r\n /**\r\n * Establishes relationships between the component and label(s) where its value should be one or more element IDs.\r\n * @group Props\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n /**\r\n * Used to define a string that labels the input element.\r\n * @group Props\r\n */\r\n readonly ariaLabel = input<string>();\r\n /**\r\n * Index of the element in tabbing order.\r\n * @group Props\r\n */\r\n readonly tabindex = input<number, unknown>(undefined, { transform: numberAttribute });\r\n /**\r\n * Identifier of the focus input to match a label defined for the component.\r\n * @group Props\r\n */\r\n readonly inputId = input<string>();\r\n /**\r\n * Inline style of the component.\r\n * @group Props\r\n */\r\n readonly style = input<{\r\n [klass: string]: any;\r\n } | null>();\r\n /**\r\n * Inline style of the input element.\r\n * @group Props\r\n */\r\n readonly inputStyle = input<{\r\n [klass: string]: any;\r\n } | null>();\r\n /**\r\n * Style class of the component.\r\n * @group Props\r\n */\r\n readonly styleClass = input<string>(\"\");\r\n /**\r\n * Style class of the input element.\r\n * @group Props\r\n */\r\n readonly inputClass = input<string>(\"\");\r\n /**\r\n * Defines the size of the component.\r\n * @group Props\r\n */\r\n readonly size = input<'large' | 'small'>();\r\n /**\r\n * Form control value.\r\n * @group Props\r\n */\r\n readonly formControl = input<FormControl>();\r\n /**\r\n * Icon class of the checkbox icon.\r\n * @group Props\r\n */\r\n readonly checkboxIcon = input<string | undefined>();\r\n /**\r\n * When present, it specifies that the component cannot be edited.\r\n * @group Props\r\n */\r\n readonly readonly = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n /**\r\n * When present, it specifies that checkbox must be checked before submitting the form.\r\n * @group Props\r\n */\r\n readonly required = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n /**\r\n * When present, it specifies that the component should automatically get focus on load.\r\n * @group Props\r\n */\r\n readonly autofocus = input<boolean, unknown>(undefined, { transform: booleanAttribute });\r\n\r\n readonly model = model<boolean | null>(null);\r\n /**\r\n * Specifies the input variant of the component.\r\n * @group Props\r\n */\r\n variant = input<'filled' | 'outlined'>('outlined');\r\n /**\r\n * Callback to invoke on value change.\r\n * @param {CheckboxChangeEvent} event - Custom value change event.\r\n * @group Emits\r\n */\r\n onChange = output<CheckboxChangeEvent>();\r\n /**\r\n * Callback to invoke when the receives focus.\r\n * @param {Event} event - Browser event.\r\n * @group Emits\r\n */\r\n onFocus = output<Event>();\r\n /**\r\n * Callback to invoke when the loses focus.\r\n * @param {Event} event - Browser event.\r\n * @group Emits\r\n */\r\n onBlur = output<Event>();\r\n\r\n inputViewChild = viewChild.required<HTMLInputElement>('input');\r\n\r\n readonly containerClass = computed(() => ({\r\n 'p-checkbox p-component': true,\r\n 'p-checkbox-checked p-highlight': this.model(),\r\n 'p-disabled': this.disabled(),\r\n 'p-variant-filled':\r\n this.variant() === 'filled' ||\r\n this.config.inputStyle() === 'filled' ||\r\n this.config.inputVariant() === 'filled',\r\n 'p-checkbox-sm p-inputfield-sm': this.size() === 'small',\r\n 'p-checkbox-lg p-inputfield-lg': this.size() === 'large',\r\n }));\r\n\r\n /**\r\n * The template of the checkbox icon.\r\n * @group Templates\r\n */\r\n readonly checkboxIconTemplate = contentChild<TemplateRef<any>>('checkboxicon', { descendants: false });\r\n\r\n readonly templates = contentChildren(PrimeTemplate);\r\n\r\n _checkboxIconTemplate: TemplateRef<any> | undefined;\r\n\r\n onModelChange: Function = () => { };\r\n\r\n onModelTouched: Function = () => { };\r\n\r\n focused: boolean = false;\r\n\r\n _componentStyle = inject(CheckboxStyle);\r\n\r\n override ngAfterContentInit() {\r\n this.templates().forEach((item) => {\r\n switch (item.getType()) {\r\n case 'icon':\r\n this._checkboxIconTemplate = item.template;\r\n break;\r\n case 'checkboxicon':\r\n this._checkboxIconTemplate = item.template;\r\n break;\r\n }\r\n });\r\n }\r\n\r\n updateModel(event: Event) {\r\n let newModelValue;\r\n\r\n /*\r\n * When `formControlName` or `formControl` is used - `writeValue` is not called after control changes.\r\n * Otherwise it is causing multiple references to the actual value: there is one array reference inside the component and another one in the control value.\r\n * `selfControl` is the source of truth of references, it is made to avoid reference loss.\r\n * */\r\n const selfControl = this.injector.get<NgControl | null>(NgControl, null, {\r\n optional: true,\r\n self: true,\r\n });\r\n\r\n const currentModelValue =\r\n selfControl && !this.formControl() ? selfControl.value : this.model;\r\n\r\n newModelValue = this.getNextValue(this.model());\r\n this.model.set(newModelValue);\r\n this.onModelChange(newModelValue);\r\n\r\n this.onChange.emit({ checked: newModelValue, originalEvent: event });\r\n }\r\n\r\n private getNextValue(currentValue: boolean | null): boolean | null {\r\n switch (currentValue) {\r\n case true:\r\n return false;\r\n case false:\r\n return this.required() ? true : null;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n handleChange(event: Event) {\r\n if (!this.readonly()) {\r\n this.updateModel(event);\r\n }\r\n }\r\n\r\n onInputFocus(event: Event) {\r\n this.focused = true;\r\n this.onFocus.emit(event);\r\n }\r\n\r\n onInputBlur(event: Event) {\r\n this.focused = false;\r\n this.onBlur.emit(event);\r\n this.onModelTouched();\r\n }\r\n\r\n focus() {\r\n this.inputViewChild().focus();\r\n }\r\n\r\n writeValue(model: any): void {\r\n this.model.set(model);\r\n this.cd.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: Function): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: Function): void {\r\n this.onModelTouched = fn;\r\n }\r\n\r\n setDisabledState(val: boolean): void {\r\n setTimeout(() => {\r\n this.disabled.set(val);\r\n this.cd.markForCheck();\r\n });\r\n }\r\n}\r\n","import type { HttpResponse } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { UntypedFormArray, UntypedFormGroup, type AbstractControl, type FormGroup } from \"@angular/forms\";\r\nimport { ProblemDetails } from \"@wertzui/ngx-hal-client\";\r\nimport { MessageService } from \"primeng/api\";\r\n\r\n/**\r\n * This service is responsible for displaying problems to the user.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class ProblemService {\r\n constructor(private readonly _messageService: MessageService) {\r\n }\r\n\r\n /**\r\n * Scrolls to the first validation error.\r\n * @param nativeElement Any parent element of the <rw-validation-errors>. If not provided, the document will be used.\r\n */\r\n public static scrollToFirstValidationError(nativeElement?: HTMLElement): void {\r\n const enclosingElement = nativeElement ?? document;\r\n setTimeout(() => {\r\n const validationErrorElements = enclosingElement.querySelectorAll('rw-validation-errors>val-errors>div');\r\n if (validationErrorElements.length === 0)\r\n return;\r\n\r\n const firstError = validationErrorElements[0];\r\n firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n },\r\n 100);\r\n }\r\n\r\n private static getSubControl(control: AbstractControl | undefined, pathElement: string): AbstractControl | undefined {\r\n if (pathElement === \"\")\r\n return control;\r\n\r\n if (control instanceof UntypedFormGroup)\r\n return control.controls[pathElement];\r\n\r\n if (control instanceof UntypedFormArray) {\r\n const index = Number.parseInt(pathElement);\r\n if (Number.isInteger(index))\r\n return control.controls[index];\r\n }\r\n\r\n return control;\r\n }\r\n\r\n /**\r\n * Adds errors to a control's existing errors.\r\n * @param control The control to add errors to.\r\n * @param newErrors The new errors to add.\r\n */\r\n public addErrors(control: AbstractControl, newErrors: unknown): void {\r\n if (!newErrors)\r\n return;\r\n\r\n // Get existing remote errors or initialize an empty array\r\n const existingErrors = control.errors?.remote;\r\n\r\n // Combine the errors\r\n let combinedErrors;\r\n if (!existingErrors) {\r\n // No existing errors, just use the new ones\r\n combinedErrors = [newErrors];\r\n } else if (Array.isArray(existingErrors)) {\r\n // Existing errors are already an array, add to it\r\n combinedErrors = [...existingErrors, newErrors];\r\n } else {\r\n // Existing errors are not an array, combine with new errors\r\n combinedErrors = [existingErrors, newErrors];\r\n }\r\n\r\n // Set the combined errors\r\n control.setErrors({ ...control.errors, remote: combinedErrors });\r\n }\r\n\r\n /**\r\n * Checks the response and displays errors if necessary.\r\n * @param response The response to check.\r\n * @param formGroup The form group to display validation errors in.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n * @returns True if the response is ok, false otherwise.\r\n */\r\n public checkResponseAndDisplayErrors<T>(response: HttpResponse<T | ProblemDetails>, formGroup?: FormGroup, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): response is HttpResponse<T> & { body: T} {\r\n if (response.ok)\r\n return true;\r\n\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n if (formGroup)\r\n this.displayValidationErrors(response.body, formGroup);\r\n\r\n this.displayToast(response.body, defaultDetail, defaultTitle);\r\n }\r\n else {\r\n this._messageService.add({ severity: \"error\", summary: defaultTitle, detail: defaultDetail, sticky: true });\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks the response and displays errors if necessary.\r\n * Throws an error if the response is not ok.\r\n * @param response The response to check.\r\n * @param formGroup The form group to display validation errors in.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n * @returns True if the response is ok, false otherwise.\r\n */\r\n public checkResponseDisplayErrorsAndThrow<T>(response: HttpResponse<T | ProblemDetails>, formGroup?: FormGroup, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): asserts response is HttpResponse<T> & { body: T} {\r\n if (response.ok)\r\n return;\r\n\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n if (formGroup)\r\n this.displayValidationErrors(response.body, formGroup);\r\n\r\n this.displayToastAndThrow(response.body, defaultDetail, defaultTitle);\r\n }\r\n else {\r\n this.displayToastAndThrow(undefined, defaultDetail, defaultTitle);\r\n }\r\n }\r\n\r\n /**\r\n * Displays a toast message with the given problem details.\r\n * @param problemDetails The problem details to display.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n */\r\n public displayToast(problemDetails?: ProblemDetails, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): void {\r\n const summary = problemDetails?.title ?? defaultTitle;\r\n const detail = problemDetails?.detail ?? defaultDetail;\r\n\r\n this._messageService.add({ severity: \"error\", summary: summary, detail: detail, sticky: true });\r\n }\r\n\r\n /**\r\n * Displays a toast message with the given problem details and throws an error.\r\n * @param problemDetails The problem details to display.\r\n * @param defaultDetail The default detail to display if the problem details do not contain a detail.\r\n * @param defaultTitle The default title to display if the problem details do not contain a title.\r\n */\r\n public displayToastAndThrow(problemDetails?: ProblemDetails, defaultDetail: string = \"Error\", defaultTitle: string = \"Error\"): never {\r\n const summary = problemDetails?.title ?? defaultTitle;\r\n const detail = problemDetails?.detail ?? defaultDetail;\r\n\r\n this._messageService.add({ severity: \"error\", summary: summary, detail: detail, sticky: true });\r\n throw new Error(`${summary}: ${detail}`);\r\n }\r\n\r\n /**\r\n * Displays validation errors in the form.\r\n * @param problemDetails The problem details containing the validation errors.\r\n * @param formGroup The form group to display the errors in.\r\n * @param nativeElement Any parent element of the <rw-validation-errors>. If not provided, the document will be used.\r\n */\r\n public displayValidationErrors(problemDetails: ProblemDetails, formGroup: FormGroup, nativeElement?: HTMLElement): void {\r\n // display validation errors\r\n if (problemDetails[\"errors\"] as {}) {\r\n // Add the problem detail to the form group errors\r\n this.addErrors(formGroup, problemDetails.detail);\r\n\r\n for (const [key, errorsForKey] of Object.entries(problemDetails[\"errors\"] as {})) {\r\n const path = key.split(/\\.|\\[/).map(e => e.replace(\"]\", \"\"));\r\n // The path might start with a $, indicating the root.\r\n if (path.length > 0 && path[0] === \"$\")\r\n path.shift();\r\n const formControl = path.reduce<AbstractControl | undefined>(ProblemService.getSubControl, formGroup);\r\n\r\n if (formControl) {\r\n // Add the errors to the form control\r\n this.addErrors(formControl, errorsForKey);\r\n formControl.markAsTouched();\r\n }\r\n\r\n // Add the field-specific errors to the form group as well\r\n this.addErrors(formGroup, errorsForKey);\r\n }\r\n\r\n formGroup.markAsTouched();\r\n }\r\n\r\n ProblemService.scrollToFirstValidationError(nativeElement);\r\n }\r\n}\r\n","import { HttpHeaders, HttpResponse } from '@angular/common/http';\r\nimport { FormsResource, HalClient, Link, PagedListResource, PagedListResourceDto, ProblemDetails, Resource, ResourceDto, ResourceFactory, Template, Templates } from \"@wertzui/ngx-hal-client\";\r\nimport { LinkNames } from \"../constants/link-names\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { lastValueFrom } from 'rxjs';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\n\r\n/**\r\n * A client that can interact with a RESTworld API.\r\n * It leverages the {@link HalClient} to perform HTTP operations and manage resources.\r\n */\r\nexport class RestWorldClient {\r\n private _defaultCurie?: string;\r\n private _homeResource?: Resource;\r\n\r\n constructor(\r\n private _halClient: HalClient,\r\n private _options: RestWorldOptions\r\n ) { }\r\n\r\n /**\r\n * Gets the underlying {@link HalClient} that is used by this {@link RestWorldClient}.\r\n */\r\n public get halClient() {\r\n return this._halClient;\r\n }\r\n\r\n private static combineHeaders(originalHeaders: HttpHeaders | undefined, headersToAdd: HttpHeaders | undefined, overwriteExisting: boolean) {\r\n if (!headersToAdd)\r\n return originalHeaders;\r\n if (!originalHeaders)\r\n return headersToAdd;\r\n\r\n let combinedHeaders = originalHeaders;\r\n\r\n for (const key of headersToAdd.keys()) {\r\n if (!combinedHeaders.has(key) || overwriteExisting) {\r\n const headerValuesToAdd = headersToAdd.getAll(key);\r\n if (headerValuesToAdd)\r\n combinedHeaders = combinedHeaders.set(key, headerValuesToAdd);\r\n }\r\n }\r\n\r\n return combinedHeaders;\r\n }\r\n\r\n private static createHeadersWithBody(\r\n version?: number,\r\n accept?: string,\r\n contentType?: string)\r\n : HttpHeaders {\r\n if (version)\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}; v=${version}`,\r\n 'Content-Type': `${contentType ?? 'application/json'}; v=${version}`\r\n });\r\n\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}`,\r\n 'Content-Type': `${contentType ?? 'application/json'}`\r\n });\r\n }\r\n\r\n private static createHeadersWithoutBody(\r\n version?: number,\r\n accept?: string)\r\n : HttpHeaders {\r\n if (version)\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}; v=${version}`,\r\n 'Content-Type': `v=${version}`\r\n });\r\n\r\n return new HttpHeaders({\r\n 'Accept': `${accept ?? 'application/hal+json'}`,\r\n });\r\n }\r\n\r\n /**\r\n * Deletes the specified resource.\r\n *\r\n * @param resource - The resource to be deleted.\r\n * @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.\r\n * @throws An error if the resource does not have a delete link.\r\n */\r\n public async delete(resource: Resource & { timestamp?: string }): Promise<HttpResponse<void | ProblemDetails>> {\r\n const deleteLink = resource.findLink('delete');\r\n if (!deleteLink) {\r\n const selfLink = resource.findLink('self');\r\n const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';\r\n throw new Error(`The resource does not have a delete link. ${resourceInfo}`);\r\n }\r\n const url = deleteLink.href;\r\n\r\n return this.deleteByUrl(url, resource.timestamp);\r\n }\r\n\r\n /**\r\n * Deletes a resource identified by the given template and timestamp supplied by the given form group.\r\n *\r\n * @param template - The template containing the target URL for the resource to be deleted.\r\n * @param formGroup - The form group containing the timestamp.\r\n * @returns A promise that resolves to an HttpResponse which can either be void or contain ProblemDetails.\r\n * @throws Error if the target URL in the template is undefined.\r\n */\r\n public async deleteByTemplateAndForm(template: Template, formGroup: FormGroup<{ timestamp: AbstractControl<string> }>): Promise<HttpResponse<void | ProblemDetails>> {\r\n const url = template.target;\r\n if (url === undefined)\r\n throw new Error(\"The target of the given template cannot be undefined.\");\r\n\r\n const timestamp = formGroup.value.timestamp\r\n\r\n return this.deleteByUrl(url, timestamp);\r\n }\r\n\r\n /**\r\n * Deletes a resource at the specified URL.\r\n *\r\n * @param url - The URL of the resource to delete.\r\n * @param timestamp - An optional If-Match value to include in the request headers.\r\n * @returns A promise that resolves to an HttpResponse containing either void or ProblemDetails.\r\n */\r\n public async deleteByUrl(url: string, timestamp?: string): Promise<HttpResponse<void | ProblemDetails>> {\r\n let header = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n\r\n if (timestamp !== undefined)\r\n header = header.append(\"If-Match\", timestamp);\r\n\r\n const response = await this.halClient.delete(url, header);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Ensures that the home resource is set. If the home resource is not already set,\r\n * it attempts to fetch it using the `getHomeForced` method. If the response contains\r\n * a problem detail or is empty, an error is thrown. Otherwise, the home resource is\r\n * set and the default CURIE is configured.\r\n *\r\n * @remarks You should never need to call this in your application, as the home resource\r\n * is automatically set when the client is created in the {@link RestWorldClientCollection}.\r\n * @throws {Error} If the home resource cannot be fetched or the response is empty.\r\n * @returns {Promise<void>} A promise that resolves when the home resource is set.\r\n */\r\n public async ensureHomeResourceIsSet(): Promise<void> {\r\n if (!this._homeResource) {\r\n const response = await this.getHomeForced();\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was: ${response}`);\r\n }\r\n if (!response.body)\r\n throw new Error(`Cannot get the home resource from ${this._options.BaseUrl} with Version ${this._options.Version}. Response was empty.`);\r\n this._homeResource = response.body;\r\n this.setDefaultCurie();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves all forms associated with the given resource.\r\n *\r\n * @param resource - The resource from which to retrieve form links.\r\n * @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.\r\n */\r\n public async getAllForms(resource: Resource): Promise<HttpResponse<FormsResource | ProblemDetails>[]> {\r\n const urls = resource.getFormLinkHrefs();\r\n const formsPromises = urls.map(url => this.getForm(url));\r\n const formsAndProblems = await Promise.all(formsPromises);\r\n return formsAndProblems;\r\n }\r\n\r\n /**\r\n * Retrieves all links from the home resource.\r\n *\r\n * @returns An object where the keys are relation types (rel) and the values are arrays of {@link Link} objects or undefined.\r\n * @throws An error if the home resource is not set. Ensure to call {@link ensureHomeResourceIsSet} first.\r\n */\r\n public getAllLinksFromHome(): { [rel: string]: Link[] | undefined; } {\r\n if (!this._homeResource)\r\n throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');\r\n\r\n return this._homeResource._links;\r\n }\r\n\r\n /**\r\n * Retrieves all pages from a list resource.\r\n *\r\n * @template TListDto - The type of the list resource DTO, extending {@link ResourceDto}.\r\n * @param {string} rel - The relation name to identify the link.\r\n * @param {Object} parameters - The parameters to be sent with the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to be sent with the request.\r\n * @param {string} [curie] - Optional CURIE to resolve the link.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list resource or problem details.\r\n */\r\n public async getAllPagesFromList<TListDto extends ResourceDto>(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href;\r\n\r\n const response = await this.getAllPagesFromListByUri<TListDto>(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves all pages from a paginated list by the given URI and combines them into a single response.\r\n *\r\n * @template TListDto - The type of the list DTO, which extends {@link ResourceDto}.\r\n * @param {string} uri - The URI to fetch the list from.\r\n * @param {{}} parameters - The parameters to include in the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a combined paginated list resource or problem details.\r\n *\r\n * @remarks\r\n * This method will continue to fetch the next pages as long as there are more pages available, combining all items into a single list.\r\n * If any request fails or returns a problem detail, the method will return the response immediately.\r\n */\r\n public async getAllPagesFromListByUri<TListDto extends ResourceDto>(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const response = await this.getListByUri<TListDto>(uri, parameters, headers);\r\n\r\n if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body?._embedded?.items)\r\n return response;\r\n\r\n const items = response.body._embedded.items;\r\n let lastResponse = response;\r\n\r\n while ((lastResponse?.body?._links?.next?.length ?? 0) > 0) {\r\n // Get the next response\r\n const nextLinks = lastResponse.body?._links.next;\r\n const nextLink = nextLinks ? nextLinks[0] : undefined;\r\n const nextHref = nextLink?.href;\r\n if (nextHref) {\r\n lastResponse = await this.getListByUri<TListDto>(nextHref, parameters, headers);\r\n\r\n if (!lastResponse.ok || ProblemDetails.isProblemDetails(lastResponse.body) || !lastResponse.body)\r\n return lastResponse;\r\n\r\n // Combine the embedded items\r\n lastResponse.body?._embedded?.items?.forEach(r => items.push(r));\r\n }\r\n }\r\n\r\n // We combined everything, so there is just one big page\r\n response.body.totalPages = 1;\r\n response.body._links.next = undefined;\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves all templates associated with a given resource.\r\n *\r\n * This method fetches all forms related to the provided {@link Resource} and extracts the templates from the responses.\r\n * If any of the form responses indicate a failure, it creates a combined ProblemDetails object with information from all failures.\r\n *\r\n * @param resource - The {@link Resource} for which to retrieve templates.\r\n * @returns A promise that resolves to the {@link Templates} associated with the resource or ProblemDetails if there's an error.\r\n */\r\n public async getAllTemplates(resource: Resource): Promise<Templates | ProblemDetails> {\r\n const formResponses = await this.getAllForms(resource);\r\n\r\n const failedResponses = formResponses.filter(response => !response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body);\r\n if (failedResponses.length !== 0) {\r\n // If we have multiple failed responses, create a combined problem details\r\n if (failedResponses.length > 1) {\r\n const failureDetails = failedResponses.map(response => {\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n return response.body.detail || `Problem details from ${response.url}`;\r\n }\r\n return `Error ${response.status} (${response.statusText}) from ${response.url}`;\r\n }).join('; ');\r\n\r\n // Check if all failed responses have the same status code\r\n const allStatuses = failedResponses.map(response => {\r\n if (ProblemDetails.isProblemDetails(response.body)) {\r\n return response.body.status;\r\n }\r\n return response.status;\r\n });\r\n\r\n // Use the common status code if all are the same, otherwise use 500\r\n const uniqueStatuses = new Set(allStatuses);\r\n const status = uniqueStatuses.size === 1 ? allStatuses[0] : 500;\r\n\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: resource.findLink('self')?.href || \"\" }] },\r\n detail: `Multiple errors occurred while loading form responses: ${failureDetails}`,\r\n status: status,\r\n title: \"Multiple Form Loading Errors\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n // Single failure case\r\n const firstFailedResponse = failedResponses[0];\r\n if (ProblemDetails.isProblemDetails(firstFailedResponse.body)) {\r\n return firstFailedResponse.body;\r\n }\r\n\r\n // If we don't have a ProblemDetails object but the response failed,\r\n // create a new ProblemDetails object with the error information\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: firstFailedResponse.url || \"\" }] },\r\n detail: `Error while loading the response from ${firstFailedResponse.url}`,\r\n status: firstFailedResponse.status,\r\n title: firstFailedResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.1\"\r\n };\r\n\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n const formTemplates = Object.assign({}, ...formResponses.map(response => (response.body as FormsResource)._templates)) as Templates;\r\n\r\n return formTemplates;\r\n }\r\n\r\n /**\r\n * Fetches a form resource from the specified URL.\r\n *\r\n * @param {string} url - The URL of the form resource to fetch.\r\n * @returns A promise that resolves to an HttpResponse containing either a FormsResource or a ProblemDetails object.\r\n */\r\n public async getForm(url: string): Promise<HttpResponse<FormsResource | ProblemDetails>> {\r\n const header = RestWorldClient.createHeadersWithoutBody(this._options.Version, 'application/prs.hal-forms+json');\r\n return this._halClient.get(url, ResourceFactory.createFormResource, header);\r\n }\r\n\r\n /**\r\n * Retrieves a specific link from the home resource based on the provided relation type, name, and curie.\r\n *\r\n * @param rel - The relation type of the link to retrieve.\r\n * @param name - (Optional) The name of the link to retrieve. If not provided, the first link with the specified relation type is returned.\r\n * @param curie - (Optional) The CURIE (Compact URI) to use for the relation type.\r\n * @returns The {@link Link} that matches the specified criteria.\r\n * @throws {Error} If no link matches the specified criteria.\r\n */\r\n public getLinkFromHome(rel: string, name?: string, curie?: string): Link {\r\n const links = this.getLinksFromHome(rel, curie);\r\n\r\n const link = name ? links.find(l => l.name === name) : links[0];\r\n\r\n if (!link)\r\n throw new Error(`The home resource does not have a link with the rel '${this.getFullRel(rel, curie)}' and the name '${name}'.`);\r\n\r\n return link;\r\n }\r\n\r\n /**\r\n * Retrieves links from the home resource based on the provided relation type.\r\n *\r\n * @param rel - The relation type to look for in the home resource.\r\n * @param curie - An optional CURIE (Compact URI) to expand the relation type.\r\n * @returns An array of {@link Link} objects that match the specified relation type.\r\n * @throws Will throw an error if the home resource is not set or if no links are found for the specified relation type.\r\n */\r\n public getLinksFromHome(rel: string, curie?: string): Link[] {\r\n if (!this._homeResource)\r\n throw new Error('Home resource is not set. Call ensureHomeResourceIsSet() first.');\r\n\r\n const fullRel = this.getFullRel(rel, curie);\r\n const links = this._homeResource._links[fullRel];\r\n if (!links || links.length === 0)\r\n throw Error(`The home resource does not have a link with the rel '${fullRel}'.`);\r\n\r\n return links;\r\n }\r\n\r\n /**\r\n * Retrieves a list of resources from the REST API.\r\n *\r\n * @template TListDto - The type of the resource DTO.\r\n * @param {string} rel - The relation name to identify the link.\r\n * @param {Object} parameters - The query parameters to include in the request.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @param {string} [curie] - Optional CURIE to resolve the link.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list of resources or problem details.\r\n */\r\n public async getList<TListDto extends ResourceDto>(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href\r\n\r\n const response = await this.getListByUri<TListDto>(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list as a CSV file from the RESTworld API.\r\n *\r\n * @param rel - The relation name to identify the link.\r\n * @param parameters - The parameters to include in the request.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @param curie - Optional CURIE (Compact URI) to resolve the link.\r\n * @returns A promise that resolves to an HttpResponse containing a Blob of the CSV data, or undefined if the request fails.\r\n */\r\n public async getListAsCsv(rel: string, parameters: {}, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<Blob> | undefined> {\r\n const link = this.getLinkFromHome(rel, LinkNames.getList, curie);\r\n const uri = link.href;\r\n\r\n const response = await this.getListByUriAsCsv(uri, parameters, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list of resources from the specified URI.\r\n *\r\n * @template TListDto - The type of the resource DTO.\r\n * @param {string} uri - The URI to fetch the list from.\r\n * @param {Object} parameters - The parameters to fill the URI template.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>>} - A promise that resolves to an HTTP response containing either a paged list of resources or problem details.\r\n */\r\n public async getListByUri<TListDto extends ResourceDto>(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<PagedListResource<TListDto> | ProblemDetails>> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await this.halClient.get<PagedListResourceDto<TListDto>, PagedListResource<TListDto>>(filledUri, ResourceFactory.createPagedListResource<TListDto, ResourceDto>, combinedHeaders);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a list from the given URI and returns it as a CSV file.\r\n *\r\n * @param uri - The URI to fetch the list from.\r\n * @param parameters - The parameters to fill the URI template.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to an HTTP response containing the CSV file as a Blob, or undefined if the request fails.\r\n */\r\n public async getListByUriAsCsv(uri: string, parameters: {}, headers?: HttpHeaders): Promise<HttpResponse<Blob> | undefined> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version, 'text/csv');\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await lastValueFrom(this.halClient.httpClient.get(filledUri, { headers: combinedHeaders, responseType: 'blob', observe: 'response' }));\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Retrieves a single resource or problem details based on the provided relationship and ID.\r\n *\r\n * @param rel - The relationship name to identify the resource.\r\n * @param id - The ID of the resource to retrieve. Must be an integer.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @param curie - Optional CURIE (Compact URI) to resolve the relationship.\r\n * @returns A promise that resolves to an HTTP response containing either the resource or problem details.\r\n * @throws An error if the provided ID is not an integer.\r\n */\r\n public async getSingle(rel: string, id: number, headers?: HttpHeaders, curie?: string): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n if (!Number.isInteger(id))\r\n throw new Error('When supplying a rel, an ID must be supplied too.');\r\n\r\n const link = this.getLinkFromHome(rel, LinkNames.get, curie);\r\n const uri = link.fillTemplate({ id: id.toString() });\r\n\r\n const response = this.getSingleByUri(uri, headers);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Fetches a single resource by its URI.\r\n *\r\n * @template TState - The type of the state object.\r\n * @param {string} uri - The URI of the resource to fetch.\r\n * @param {HttpHeaders} [headers] - Optional HTTP headers to include in the request.\r\n * @returns {Promise<HttpResponse<Resource | ProblemDetails>>} - A promise that resolves to the HTTP response containing the resource or problem details.\r\n */\r\n public async getSingleByUri<TState>(uri: string, headers?: HttpHeaders): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n const defaultHeaders = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n const response = await this.halClient.get<TState & ResourceDto, Resource & TState>(uri, ResourceFactory.createResource, combinedHeaders);\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Sends a POST request to the specified URI with the given parameters and body, expecting a CSV response.\r\n *\r\n * @param uri - The URI to send the POST request to.\r\n * @param parameters - The parameters to fill the URI template.\r\n * @param body - The body of the POST request (optional).\r\n * @param headers - Additional headers to include in the request (optional).\r\n * @returns A promise that resolves to an HttpResponse containing a Blob of the CSV data, or undefined if the request fails.\r\n */\r\n public async postListByUriAsCsv(uri: string, parameters: {}, body?: any, headers?: HttpHeaders): Promise<HttpResponse<Blob> | undefined> {\r\n const link = new Link();\r\n link.href = uri;\r\n const filledUri = link.fillTemplate(parameters);\r\n const defaultHeaders = RestWorldClient.createHeadersWithBody(this._options.Version, 'text/csv');\r\n const combinedHeaders = RestWorldClient.combineHeaders(headers, defaultHeaders, false);\r\n\r\n const response = await lastValueFrom(this.halClient.httpClient.post(filledUri, body, { headers: combinedHeaders, responseType: 'blob', observe: 'response' }));\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Saves the given resource using the appropriate HTTP method (PUT or POST) based on the name of the save link.\r\n *\r\n * @template TState - The type of the state to be saved.\r\n * @param {Resource & TState} resource - The resource to be saved, which must contain a save link.\r\n * @returns {Promise<HttpResponse<Resource & TState | ProblemDetails>>} - A promise that resolves to the HTTP response,\r\n * which can be either the saved resource or a ProblemDetails object in case of an error.\r\n * @throws {Error} - Throws an error if the resource does not have a save link or if the save link does not have a name.\r\n */\r\n public async save<TState>(resource: Resource & TState): Promise<HttpResponse<Resource & TState | ProblemDetails>> {\r\n const saveLink = resource.findLink('save');\r\n if (!saveLink) {\r\n const selfLink = resource.findLink('self');\r\n const resourceInfo = selfLink ? `Resource with self link: ${selfLink.href}` : 'Resource (no self link)';\r\n throw new Error(`The resource does not have a save link. ${resourceInfo}`);\r\n }\r\n if (!saveLink.name) {\r\n throw new Error(`The save link with href '${saveLink.href}' does not have a save name.`);\r\n }\r\n\r\n const uri = saveLink.href;\r\n const method = saveLink.name.toLowerCase();\r\n const header = RestWorldClient.createHeadersWithBody(this._options.Version);\r\n\r\n let response;\r\n switch (method) {\r\n case 'put':\r\n response = await this.halClient.put<TState, Resource & TState>(uri, resource, ResourceFactory.createResource<TState>, header);\r\n break;\r\n case 'post':\r\n response = await this.halClient.post<TState, Resource & TState>(uri, resource, ResourceFactory.createResource<TState>, header);\r\n break;\r\n default:\r\n throw new Error(`'${method}' is not allowed as link name for the save link. Only 'POST' and 'PUT' are allowed.`);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Submits the form values to the specified template target URI using the appropriate HTTP method.\r\n *\r\n * @param template - The template containing the target URI and HTTP method.\r\n * @param formValues - The form values to be submitted.\r\n * @returns A promise that resolves to an {@link HttpResponse} containing either a {@link FormsResource} or {@link ProblemDetails}.\r\n */\r\n public async submit(template: Template, formValues: {}): Promise<HttpResponse<FormsResource | ProblemDetails>> {\r\n const uri = template.target || '';\r\n const method = template.method?.toLowerCase();\r\n const header = RestWorldClient.createHeadersWithBody(this._options.Version, 'application/prs.hal-forms+json');\r\n\r\n let response;\r\n switch (method) {\r\n case 'put':\r\n response = await this.halClient.put<void, FormsResource>(uri, formValues, ResourceFactory.createFormResource, header);\r\n break;\r\n case 'post':\r\n response = await this.halClient.post<void, FormsResource>(uri, formValues, ResourceFactory.createFormResource, header);\r\n break;\r\n default:\r\n response = await this.halClient.get<void, FormsResource>(uri, ResourceFactory.createFormResource, header);\r\n }\r\n\r\n return response;\r\n }\r\n\r\n private getFullRel(rel: string, curie?: string): string {\r\n // rel already includes a curie => just return it\r\n if (rel.includes(':'))\r\n return rel;\r\n\r\n // No curie given => use default curie.\r\n if (!curie)\r\n curie = this._defaultCurie;\r\n\r\n // Combine curie and rel\r\n const fullRel = `${curie}:${rel}`;\r\n\r\n return fullRel;\r\n }\r\n\r\n private async getHomeForced(): Promise<HttpResponse<Resource | ProblemDetails>> {\r\n const header = RestWorldClient.createHeadersWithoutBody(this._options.Version);\r\n const response = await this.halClient.get(this._options.BaseUrl, ResourceFactory.createResource, header);\r\n return response;\r\n }\r\n\r\n private setDefaultCurie(): void {\r\n const curies = this._homeResource?._links?.curies;\r\n if (!curies || curies.length === 0 || !curies[0])\r\n this._defaultCurie = undefined;\r\n else\r\n this._defaultCurie = curies[0].name;\r\n }\r\n\r\n /**\r\n * Retrieves all forms associated with a resource fetched by its URI.\r\n *\r\n * This method first fetches the resource from the given URI and then retrieves all forms for that resource.\r\n * If the resource response contains a problem detail, it returns an array with a single HTTP response containing that problem detail.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to an array of HTTP responses, each containing either a `FormsResource` or `ProblemDetails`.\r\n */\r\n public async getAllFormsByUri(uri: string, headers?: HttpHeaders): Promise<HttpResponse<FormsResource | ProblemDetails>[]> {\r\n const resourceResponse = await this.getSingleByUri(uri, headers);\r\n\r\n if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n // Return the problem details as is, wrapped in an array\r\n if (ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n return [resourceResponse as HttpResponse<ProblemDetails>];\r\n }\r\n\r\n // If no body or problem details, create a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Error while loading the resource from ${uri}`,\r\n status: resourceResponse.status,\r\n title: resourceResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n\r\n const problemDetails = new ProblemDetails(problemDetailsDto);\r\n\r\n // Modify the response body to include our problem details\r\n const errorResponse = { ...resourceResponse, body: problemDetails } as HttpResponse<ProblemDetails>;\r\n return [errorResponse];\r\n }\r\n\r\n if (!resourceResponse.body) {\r\n // Handle empty response with a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Resource from ${uri} was empty`,\r\n status: 404,\r\n title: \"Resource Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n\r\n const problemDetails = new ProblemDetails(problemDetailsDto);\r\n\r\n const errorResponse = { ...resourceResponse, body: problemDetails } as HttpResponse<ProblemDetails>;\r\n return [errorResponse];\r\n }\r\n\r\n return this.getAllForms(resourceResponse.body);\r\n }\r\n\r\n /**\r\n * Retrieves all templates associated with a resource fetched by its URI.\r\n *\r\n * This method first fetches the resource from the given URI and then retrieves all templates for that resource.\r\n * It combines functionality from {@link getSingleByUri} and {@link getAllTemplates}.\r\n * If the resource response contains a problem detail or if any form responses fail,\r\n * the method returns the problem detail rather than throwing an error.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to the {@link Templates} associated with the resource or a ProblemDetails object if there was an error.\r\n */\r\n public async getAllTemplatesByUri(uri: string, headers?: HttpHeaders): Promise<Templates | ProblemDetails> {\r\n const resourceResponse = await this.getSingleByUri(uri, headers);\r\n\r\n if (!resourceResponse.ok || ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n if (ProblemDetails.isProblemDetails(resourceResponse.body)) {\r\n return resourceResponse.body;\r\n }\r\n\r\n // If no problem details in body but response not OK, create a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Error while loading the resource from ${uri}`,\r\n status: resourceResponse.status,\r\n title: resourceResponse.statusText,\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n if (!resourceResponse.body) {\r\n // Handle empty response with a proper ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `Resource from ${uri} was empty`,\r\n status: 404,\r\n title: \"Resource Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n return this.getAllTemplates(resourceResponse.body);\r\n }\r\n\r\n /**\r\n * Retrieves a specific template by title from a resource fetched by its URI.\r\n *\r\n * This method first fetches all templates from the resource at the given URI and then\r\n * returns the template with the specified title. If the resource cannot be fetched,\r\n * if it contains a problem detail, or if any form responses fail, this method returns\r\n * the problem detail rather than throwing an error.\r\n *\r\n * @param uri - The URI of the resource to fetch.\r\n * @param templateTitle - The title of the template to retrieve.\r\n * @param headers - Optional HTTP headers to include in the request.\r\n * @returns A promise that resolves to the {@link Template} with the specified title or a ProblemDetails object if there was an error.\r\n */\r\n public async getTemplateByUri(uri: string, templateTitle: string, headers?: HttpHeaders): Promise<Template | ProblemDetails> {\r\n const templatesOrProblemDetails = await this.getAllTemplatesByUri(uri, headers);\r\n\r\n // If we got ProblemDetails instead of Templates, return it\r\n if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {\r\n return templatesOrProblemDetails;\r\n }\r\n\r\n const templates = templatesOrProblemDetails as Templates;\r\n const template = templates[templateTitle];\r\n\r\n if (template === undefined) {\r\n const templateTitles = Object.keys(templates);\r\n // Instead of throwing an error, return a properly constructed ProblemDetails object\r\n const problemDetailsDto = {\r\n _links: { self: [{ href: uri }] },\r\n detail: `No template with title '${templateTitle}' found. Available templates are: ${templateTitles.join(', ')}`,\r\n status: 404,\r\n title: \"Template Not Found\",\r\n type: \"https://tools.ietf.org/html/rfc7231#section-6.5.4\"\r\n };\r\n return new ProblemDetails(problemDetailsDto);\r\n }\r\n\r\n return template;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { HalClient } from \"@wertzui/ngx-hal-client\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { RestWorldClient } from \"./restworld-client\";\r\n\r\n/**\r\n * Represents a collection of RestWorld clients accessible by their API name.\r\n * This is the main class that you want to inject into all your components that are making calls to your backend APIs.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RestWorldClientCollection {\r\n private readonly _clients: {\r\n [name: string]: RestWorldClient;\r\n };\r\n\r\n /**\r\n * Creates an instance of RestworldClientCollection.\r\n * @param _halClient The HalClient instance to use for making requests.\r\n */\r\n constructor(private _halClient: HalClient) {\r\n this._clients = {};\r\n }\r\n\r\n /**\r\n * Determines whether the collection contains a client with the specified name.\r\n * @param name The name of the client to search for.\r\n * @returns True if the collection contains a client with the specified name; otherwise, false.\r\n */\r\n public containsClient(name: string): boolean {\r\n return Object.keys(this._clients).includes(name);\r\n }\r\n\r\n /**\r\n * Adds a new RestWorldClient to the collection with the given name and options, or returns an existing client with the same name.\r\n * @param name - The name of the client to add or retrieve.\r\n * @param options - The options to use when creating a new client.\r\n * @returns A Promise that resolves to the newly added or existing RestWorldClient.\r\n */\r\n public async addOrGetExistingClient(name: string, options: RestWorldOptions): Promise<RestWorldClient> {\r\n if (Object.keys(this._clients).includes(name))\r\n return this.getClient(name);\r\n\r\n const client = new RestWorldClient(this._halClient, options);\r\n await client.ensureHomeResourceIsSet();\r\n this._clients[name] = client;\r\n return client;\r\n }\r\n\r\n /**\r\n * Returns the RestWorldClient instance with the specified name.\r\n * This is the main method of this class that you want to use in your components.\r\n * @param name The API name of the RestWorldClient instance to retrieve.\r\n * @returns The RestWorldClient instance with the specified name.\r\n * @throws An error if no client with the specified name exists.\r\n */\r\n public getClient(name: string): RestWorldClient {\r\n const client = this._clients[name];\r\n if (!client)\r\n throw new Error(`No client with the name '${name}' exists.`);\r\n\r\n return client;\r\n }\r\n\r\n public get all(): { [name: string]: RestWorldClient } {\r\n return this._clients;\r\n }\r\n}\r\n","import { computed, Injectable, resource, signal, type Signal } from \"@angular/core\";\r\nimport { RestWorldClientCollection } from \"./restworld-client-collection\";\r\nimport { type ExtractGenericOptionsItemType, type ExtractGenericOptionsSelectedValuesType, type Options, type Property, type SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { HttpHeaders } from \"@angular/common/http\";\r\nimport { NgHttpCachingHeaders } from \"ng-http-caching\";\r\nimport { ProblemService } from \"./problem.service\";\r\n\r\n/**\r\n * This manager can be used to load the options for a property and to manage the selected values.\r\n * It is normally instantiated by the OptionsService.\r\n * This manager is normally used in combination with <p-select> and <p-multiSelect> components.\r\n * It is used internally by the <rw-dropdown> component.\r\n */\r\nexport class OptionsManager<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> {\r\n public readonly getLabel = computed(() => this._getLabel() ?? ((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => this.getDefaultLabel(itemOrValue)));\r\n public readonly getTooltip = computed(() => this._getTooltip() ?? ((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => this.getDefaultTooltip(itemOrValue)));\r\n // public readonly items = linkedSignal(() => this.options()?.inline as TOptionsItem[] ?? []);\r\n public readonly loading = computed(() => this.items.isLoading());\r\n public readonly options = computed(() => this.property().options);\r\n public readonly promptField = computed(() => this.options()?.promptField ?? \"prompt\");\r\n public readonly valueField = computed(() => this.options()?.valueField ?? \"value\");\r\n\r\n private readonly _client = computed(() => this._clients.getClient(this.apiName()));\r\n public readonly selectedItems = computed(() => this.selectedValues()?.map(value => this.getItemByValue(this.items.value(), value as ExtractGenericOptionsSelectedValuesType<TProperty>) ?? []));\r\n\r\n public readonly selectedValues = computed(() => {\r\n const values = this._selectedValues();\r\n\r\n if (values === null || values === undefined)\r\n return [];\r\n\r\n return (Array.isArray(values) ? values : [values]) as ExtractGenericOptionsSelectedValuesType<TProperty>[];\r\n });\r\n\r\n public readonly filter = signal<string | undefined>(undefined);\r\n private _lastFilter: string | undefined = undefined;\r\n public readonly items = resource({\r\n params: () => ({ filter: this.filter(), options: this.options(), selectedValues: this.selectedValues() }),\r\n loader: async ({ params }) => {\r\n const options = params.options;\r\n let filter = params.filter;\r\n const selectedValues = params.selectedValues;\r\n\r\n // We have inline options, so we don't need to load them from the server.\r\n if (Array.isArray(options?.inline) && options.inline.length > 0)\r\n return options.inline as TOptionsItem[];\r\n\r\n // First load: there might be selected items, but the user has not typed in a filter yet.\r\n // In this case, we want to load the selected items to be able to show them in the dropdown.\r\n if (filter === undefined && selectedValues.length > 0)\r\n filter = `${options.valueField} in (${selectedValues})`;\r\n\r\n // Only make the call if the filter has changed.\r\n // This prevents unnecessary calls when the selected values change but the filter is the same.\r\n if (filter === this._lastFilter) {\r\n const currentItems = this.items.value() as TOptionsItem[] | undefined;\r\n if (currentItems === undefined)\r\n return [] as TOptionsItem[];\r\n\r\n return currentItems;\r\n }\r\n\r\n this._lastFilter = filter;\r\n\r\n const templatedUri = options.link?.href;\r\n if (!templatedUri) {\r\n this._problemService.displayToast(undefined, `The property ${this.property().name} does not have options with a link href.`);\r\n return [] as TOptionsItem[];\r\n }\r\n\r\n const headersWithCaching = new HttpHeaders({[NgHttpCachingHeaders.ALLOW_CACHE]: \"1\", [NgHttpCachingHeaders.LIFETIME]: \"3000\"});\r\n const response = await this._client().getListByUri<TOptionsItem>(templatedUri, { $filter: filter, $top: 10 }, headersWithCaching);\r\n this._problemService.checkResponseDisplayErrorsAndThrow(response, undefined, `An error occurred while getting the selected items for the property ${this.property().name}.`);\r\n\r\n const oldItems = this.items.value();\r\n const newItems = response.body._embedded.items;\r\n const combinedItems = this.combineCurrentItemsWithSelected(oldItems, selectedValues, newItems);\r\n\r\n return combinedItems;\r\n }\r\n });\r\n\r\n constructor(\r\n private readonly _problemService: ProblemService,\r\n private readonly _clients: RestWorldClientCollection,\r\n public readonly apiName: Signal<string>,\r\n public readonly property: Signal<TProperty>,\r\n private readonly _selectedValues: Signal<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | undefined>,\r\n private readonly _getLabel: Signal<((item: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>,\r\n private readonly _getTooltip: Signal<((item: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>) {\r\n }\r\n\r\n private static jsonStringifyWithElipsis(value: unknown) {\r\n const maxLength = 200;\r\n const end = 10;\r\n const start = maxLength - end - 2;\r\n const json = JSON.stringify(value);\r\n const shortened = json.length > maxLength ? json.substring(0, start) + '…' + json.substring(json.length - end) : json;\r\n\r\n return shortened;\r\n }\r\n\r\n private getItemByValue(items: TOptionsItem[] | undefined, value: ExtractGenericOptionsSelectedValuesType<TProperty>): TOptionsItem | undefined {\r\n const foundItem = items?.find(item => this.getValue(item) === value);\r\n if (foundItem)\r\n return foundItem;\r\n\r\n if (value === null || value === undefined)\r\n return undefined;\r\n\r\n return { [this.valueField()]: value, [this.promptField()]: \"\" } as TOptionsItem;\r\n }\r\n\r\n /**\r\n * Returns the prompt of the item or value.\r\n * @param itemOrValue The item or value to get the prompt for.\r\n * @returns The prompt of the item or value.\r\n */\r\n public getPrompt(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n const promptField = this.promptField();\r\n let item = itemOrValue as TOptionsItem | undefined;\r\n\r\n if (itemOrValue === undefined || itemOrValue === null || !itemOrValue.hasOwnProperty(promptField)) {\r\n const value = itemOrValue as unknown as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n item = this.getItemByValue(this.items.value(), value);\r\n }\r\n\r\n if (item === undefined || item === null || !item.hasOwnProperty(promptField))\r\n return \"\";\r\n\r\n return item[promptField as keyof TOptionsItem] as string ?? \"\";\r\n }\r\n\r\n /**\r\n * Returns the value of the item or value.\r\n * @param itemOrValue The item or value to get the value for.\r\n * @returns The value of the item or value.\r\n */\r\n public getValue(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): ExtractGenericOptionsSelectedValuesType<TProperty> {\r\n const valueField = this.valueField();\r\n if (itemOrValue === undefined || itemOrValue === null || !itemOrValue.hasOwnProperty(valueField)) {\r\n const value = itemOrValue as unknown as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n return value;\r\n }\r\n\r\n const item = itemOrValue as TOptionsItem;\r\n return item[valueField as keyof TOptionsItem] as ExtractGenericOptionsSelectedValuesType<TProperty>;\r\n }\r\n\r\n /**\r\n * Updates the items based on the given filter.\r\n * @param filter The filter to use when getting the items.\r\n */\r\n public async updateItemsFromFilter(filter: string | undefined): Promise<void> {\r\n this.filter.set(filter);\r\n }\r\n\r\n private combineCurrentItemsWithSelected(oldItems: TOptionsItem[] | undefined, selectedValues: ExtractGenericOptionsSelectedValuesType<TProperty>[], newItems: TOptionsItem[]): TOptionsItem[] {\r\n if (!oldItems)\r\n return newItems;\r\n\r\n // const selectedValuesAsArray = (Array.isArray(selectedValues) ? selectedValues : [selectedValues]) as ExtractGenericOptionsSelectedValuesType<TProperty>[];\r\n const itemsToKeep = oldItems.filter(i => selectedValues.includes(this.getValue(i)));\r\n const newValues = newItems.map(i => this.getValue(i));\r\n const combinedItems = newItems.concat(itemsToKeep.filter(i => !newValues.includes(this.getValue(i))));\r\n\r\n return combinedItems;\r\n }\r\n\r\n private getDefaultLabel(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n if (itemOrValue === undefined || itemOrValue === null)\r\n return \"\";\r\n\r\n let label = this.getPrompt(itemOrValue);\r\n const property = this.property();\r\n if (property.cols === undefined || property.cols > 1) {\r\n const value = this.getValue(itemOrValue);\r\n if (value?.toString().toUpperCase() !== label.toUpperCase())\r\n label += ` (${value})`;\r\n }\r\n\r\n return label;\r\n }\r\n\r\n private getDefaultTooltip(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>): string {\r\n if (itemOrValue === undefined || itemOrValue === null || typeof itemOrValue !== \"object\")\r\n return \"\";\r\n\r\n const promptField = this.promptField();\r\n const valueField = this.valueField();\r\n\r\n const tooltip = Object.entries(itemOrValue)\r\n .filter(([key]) => !(key.startsWith('_') || ['createdAt', 'createdBy', 'lastChangedAt', 'lastChangedBy', 'timestamp', promptField, valueField].includes(key)))\r\n .reduce((prev, [key, value], index) => `${prev}${index === 0 ? '' : '\\n'}${key}: ${OptionsManager.jsonStringifyWithElipsis(value)}`, '');\r\n\r\n return tooltip;\r\n }\r\n}\r\n\r\n/**\r\n * This service provides a manager for properties with options.\r\n * The manager can be used to load the options for a property and to manage the selected values.\r\n * The manager is normally used in combination with <p-select> and <p-multiSelect> components.\r\n * It is used internally by the <rw-dropdown> component.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class OptionsService {\r\n constructor(\r\n private readonly _problemService: ProblemService,\r\n private readonly _clients: RestWorldClientCollection) {\r\n }\r\n\r\n public getManager<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>>(\r\n apiName: Signal<string>,\r\n property: Signal<TProperty>,\r\n selectValues: Signal<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | undefined>,\r\n getLabel: Signal<((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>,\r\n getTooltip: Signal<((itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined) | undefined>): OptionsManager<TProperty, TOptionsItem> {\r\n return new OptionsManager(this._problemService, this._clients, apiName, property, selectValues, getLabel, getTooltip);\r\n }\r\n}\r\n","import { Component, computed, forwardRef, input, OnInit } from '@angular/core';\r\nimport { Property, SimpleValue, PropertyType, Template, NumberTemplate, TemplateDto, Options, ExtractGenericOptionsItemType, ExtractValueType, ExtractGenericOptionsSelectedValuesType } from '@wertzui/ngx-hal-client';\r\nimport { PropertyWithOptions, PropertyWithImage } from '../../models/special-properties'\r\nimport { RestWorldLabelComponent } from \"../restworld-label/restworld-label.component\";\r\nimport { Tooltip } from \"primeng/tooltip\";\r\nimport { RestWorldAvatarComponent } from \"../restworld-avatar/restworld-avatar.component\";\r\nimport { PropertyTypeFormatPipe } from \"../../pipes/property-type-format.pipe\";\r\nimport { CheckboxModule } from \"primeng/checkbox\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { OptionsManager, OptionsService } from \"../../services/options.service\";\r\nimport { TriStateCheckbox } from \"../restworld-tri-state-checkbox/restworld-tri-state-checkbox.component\";\r\n\r\n/**\r\n * Displays the value of a collection that is automatically created from the given property.\r\n * The elements and can also be nested.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-collection [property]=\"property\" [apiName]=\"apiName\" [values]=\"values\"></rw-display-collection>\r\n */\r\n@Component({\r\n selector: 'rw-display-collection',\r\n templateUrl: './restworld-display-collection/restworld-display-collection.component.html',\r\n styleUrl: './restworld-display-collection/restworld-display-collection.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayTemplateComponent)]\r\n})\r\nexport class RestWorldDisplayCollectionComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<Property & { _templates: { default: Template } }>();\r\n public readonly templates = computed(() => {\r\n const values = this.values();\r\n const property = this.property();\r\n\r\n return values ?\r\n Array.from(RestWorldDisplayCollectionComponent.map(RestWorldDisplayCollectionComponent.toArray(values)!.entries(), (entry: [string | number, any]) => (new NumberTemplate({ ...(property._templates.default as TemplateDto), title: entry[0].toString() })))) :\r\n RestWorldDisplayCollectionComponent.getCollectionEntryTemplates(property);\r\n });\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly values = input<any[] | Partial<Record<string, any> | undefined>>();\r\n\r\n private static getCollectionEntryTemplates(property?: Property): NumberTemplate[] {\r\n if (!property)\r\n return [];\r\n\r\n return Object.entries(property._templates)\r\n .filter(([key, value]) => Number.isInteger(Number.parseInt(key)) && Number.isInteger(Number.parseInt(value?.title ?? \"\")))\r\n .map(([, value]) => new NumberTemplate(value as TemplateDto));\r\n }\r\n\r\n private static * map<T1, T2>(iterable: IterableIterator<T1>, callback: (value: T1) => T2) {\r\n for (let x of iterable) {\r\n yield callback(x);\r\n }\r\n }\r\n\r\n private static toArray<T>(arrayOrDictionary: T[] | Partial<Record<string, T>> | undefined): T[] | { key: string, value: T }[] | undefined {\r\n if (!arrayOrDictionary)\r\n return undefined;\r\n\r\n if (Array.isArray(arrayOrDictionary))\r\n return arrayOrDictionary;\r\n\r\n return Object.entries(arrayOrDictionary).map(([key, value]) => ({ key, value: value! }));\r\n }\r\n}\r\n\r\n/**\r\n * Displays a value that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you also want a label, use {@link RestWorldDisplayElementComponent} `<rw-display-element>`.\r\n * You can also use one of the different RestWorldDisplay... `<rw-display-...>` elements to render a specific property type,\r\n * but it is advised to control the rendered element through the passed in property.\r\n * @example\r\n * <rw-display [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display>\r\n */\r\n@Component({\r\n selector: 'rw-display',\r\n templateUrl: './restworld-display/restworld-display.component.html',\r\n styleUrl: './restworld-display/restworld-display.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayDropdownComponent), forwardRef(() => RestWorldDisplayObjectComponent), forwardRef(() => RestWorldDisplaySimpleComponent), RestWorldDisplayCollectionComponent]\r\n})\r\nexport class RestWorldDisplayComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value as ExtractValueType<TProperty>);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly value = input<ExtractValueType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | ExtractGenericOptionsSelectedValuesType<TProperty> | Record<string, SimpleValue> | Map<number, Record<string, SimpleValue>>>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithOptions() {\r\n return PropertyWithOptions<SimpleValue, string, string>;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the value of a dropdown that is automatically created from the given property.\r\n * If set the dropdown will use the `inline` property of the options to render the `selectedValues` Otherwise it will just render the values, but no prompt for them.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-dropdown [property]=\"property\" [apiName]=\"apiName\" [selectedValues]=\"selectedValues\"></rw-display-dropdown>\r\n */\r\n@Component({\r\n selector: 'rw-display-dropdown',\r\n templateUrl: './restworld-display-dropdown/restworld-display-dropdown.component.html',\r\n styleUrl: './restworld-display-dropdown/restworld-display-dropdown.component.css',\r\n standalone: true,\r\n imports: [Tooltip]\r\n})\r\nexport class RestWorldDisplayDropdownComponent<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * A function that returns the label for the given item.\r\n * The default returns the prompt and optionally the value in brackets.\r\n * The value in brackets will only be displayed if the `cols` field of the property is undefined or greater than 1.\r\n * Overwrite this function to change the label.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getLabel = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n /**\r\n * A function that returns the tooltip for the given item.\r\n * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.\r\n * The default properties to exclude are: createdAt, createdBy, lastChangedAt, lastChangedBy, timestamp, promptField, valueField.\r\n * Overwrite this function to change the tooltip.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getTooltip = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n public readonly options = computed(() => this.property().options!);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n public readonly selectedValues = input([] as ExtractGenericOptionsSelectedValuesType<TProperty>[], { transform: (value: ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[]) => (Array.isArray(value) ? value : [value]) as ExtractGenericOptionsSelectedValuesType<TProperty>[] });\r\n\r\n public readonly optionsManager: OptionsManager<TProperty, TOptionsItem>;\r\n\r\n constructor(\r\n optionsService: OptionsService\r\n ) {\r\n this.optionsManager = optionsService.getManager(this.apiName, this.property, this.selectedValues, this.getLabel, this.getTooltip);\r\n }\r\n}\r\n\r\n/**\r\n * Display the value of a form element with a label that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested display elements may be rendered.\r\n * If you want to display just the value without a label, use {@link RestWorldDisplayComponent} `<rw-display>`.\r\n * @example\r\n * <rw-display-element [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-element>\r\n */\r\n@Component({\r\n selector: 'rw-display-element',\r\n templateUrl: './restworld-display-element/restworld-display-element.component.html',\r\n styleUrl: './restworld-display-element/restworld-display-element.component.css',\r\n standalone: true,\r\n imports: [RestWorldLabelComponent, RestWorldDisplayComponent]\r\n})\r\nexport class RestWorldDisplayElementComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value as ExtractValueType<TProperty>);\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public value = input<ExtractValueType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[] | ExtractGenericOptionsSelectedValuesType<TProperty> | Record<string, SimpleValue> | Map<number, Record<string, SimpleValue>>>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the value of a complex object with multiple properties that is automatically created from the given property.\r\n * The object can also be nested.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-object [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-object>\r\n */\r\n@Component({\r\n selector: 'rw-display-object',\r\n templateUrl: './restworld-display-object/restworld-display-object.component.html',\r\n styleUrl: './restworld-display-object/restworld-display-object.component.css',\r\n standalone: true,\r\n imports: [forwardRef(() => RestWorldDisplayTemplateComponent)]\r\n})\r\nexport class RestWorldDisplayObjectComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<Property<null, never, never> & {\r\n _templates: {\r\n default: Template;\r\n };\r\n }>();\r\n /**\r\n * The value to display. If not set, the value of the template properties will be used.\r\n */\r\n public readonly value = input<Record<string, SimpleValue>>();\r\n}\r\n\r\n/**\r\n * Displays the value of a simple element, like a string, a number or a Date that is automatically created from the given property.\r\n * @remarks It is advised to use {@link RestWorldDisplayComponent} `<rw-display>` and control the rendered elements with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-display-simple [property]=\"property\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-simple>\r\n */\r\n@Component({\r\n selector: 'rw-display-simple',\r\n templateUrl: './restworld-display-simple/restworld-display-simple.component.html',\r\n styleUrl: './restworld-display-simple/restworld-display-simple.component.css',\r\n standalone: true,\r\n imports: [RestWorldAvatarComponent, PropertyTypeFormatPipe, TriStateCheckbox, FormsModule, TriStateCheckbox]\r\n})\r\nexport class RestWorldDisplaySimpleComponent<TProperty extends Property<SimpleValue, string, string>> {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yyyy\")\r\n .replace(\"33\", \"yy\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Either the value or the property.value if the value is not set.\r\n */\r\n public readonly computedValue = computed(() => this.value() ?? this.property().value ?? this._defaultValue());\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The value to display. If not set, the value of the property will be used.\r\n */\r\n public readonly value = input<SimpleValue>();\r\n\r\n private readonly _defaultValue = computed(() => {\r\n const property = this.property();\r\n if (!property.required || property.options?.minItems === 0)\r\n return undefined;\r\n\r\n if (property.type === PropertyType.Number)\r\n return 0;\r\n\r\n return undefined;\r\n });\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithImage() {\r\n return PropertyWithImage;\r\n }\r\n\r\n public get dateFormat(): string {\r\n return RestWorldDisplaySimpleComponent._dateFormat;\r\n }\r\n\r\n public get timeFormat() {\r\n return RestWorldDisplaySimpleComponent._timeFormat;\r\n }\r\n}\r\n\r\n/**\r\n * Displays the values of a collection of `<rw-display>` elements automatically created from a template.\r\n * @example\r\n * <rw-display-template [template]=\"template\" [apiName]=\"apiName\" [value]=\"value\"></rw-display-template>\r\n */\r\n@Component({\r\n selector: 'rw-display-template',\r\n templateUrl: './restworld-display-template/restworld-display-template.component.html',\r\n styleUrl: './restworld-display-template/restworld-display-template.component.css',\r\n standalone: true,\r\n imports: [RestWorldDisplayElementComponent]\r\n})\r\nexport class RestWorldDisplayTemplateComponent {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The template to display.\r\n * @required\r\n * @remarks This is the template that defines the properties to display.\r\n */\r\n public readonly template = input.required<Template>();\r\n /**\r\n * The value to display. If not set, the values of the template properties will be used.\r\n */\r\n public readonly value = input<Record<string, any>>();\r\n}\r\n","<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n @for (template of templates(); track template) {\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full flex justify-content-end\">\r\n <rw-display-template [template]=\"$any(template)\" [value]=\"values() ? $any(values())[template.title!] : undefined\" [apiName]=\"apiName()\" class=\"w-full\"></rw-display-template>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","@if (property().type !== PropertyType.Hidden) {\r\n @if (property().options) {\r\n <rw-display-dropdown [property]=\"$any(property())\" [selectedValues]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-display-object [property]=\"$any(property())\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-display-collection [property]=\"$any(property())\" [values]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-collection>\r\n }\r\n @default {\r\n <rw-display-simple [property]=\"property()\" [value]=\"$any(computedValue())\" [apiName]=\"apiName()\"></rw-display-simple>\r\n }\r\n }\r\n }\r\n}\r\n","@for (item of optionsManager.selectedItems(); track item; let last = $last) {\r\n <span [pTooltip]=\"optionsManager.getTooltip()($any(item))\">{{optionsManager.getLabel()($any(item))}}</span>{{last ? \"\" : \", \"}}\r\n}\r\n","@if (property().type !== PropertyType.Hidden) {\r\n <div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-display [property]=\"property()\" [value]=\"computedValue()\" [apiName]=\"apiName()\" class=\"col-12 md:col-10\"></rw-display>\r\n </div>\r\n}\r\n","<div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-display-template [template]=\"property()._templates.default\" [value]=\"value\" [apiName]=\"apiName()\"></rw-display-template>\r\n </div>\r\n</div>","@let prop = property();\r\n@let val = computedValue();\r\n@switch (prop.type) {\r\n\r\n @case (PropertyType.Text) {\r\n @if (prop.name === 'createdBy' || prop.name === 'lastChangedBy') {\r\n <rw-avatar [user]=\"$any(val)\"></rw-avatar>\r\n }\r\n @else {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n <rw-tri-state-checkbox [model]=\"$any(val)\" [readonly]=\"true\" [disabled]=\"true\"></rw-tri-state-checkbox>\r\n }\r\n @default {\r\n <span class=\"w-full\">{{val | propertyTypeFormat:prop.type}}</span>\r\n }\r\n}\r\n","@for (property of template().properties; track property) {\r\n <rw-display-element [property]=\"property\" [value]=\"value()?.[property.name]\" [apiName]=\"apiName()\"></rw-display-element>\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\n\r\n/**\r\n * A pipe that sanitizes a URL and returns a `SafeUrl` object.\r\n * @example\r\n * <img [src]=\"url | safeUrl\"></img>\r\n */\r\n@Pipe({\r\n name: 'safeUrl',\r\n standalone: true\r\n})\r\nexport class SafeUrlPipe implements PipeTransform {\r\n constructor(private _domSanitizer: DomSanitizer) {\r\n }\r\n\r\n /**\r\n * Sanitizes the given URL and returns a `SafeUrl` object.\r\n * @param url The URL to sanitize.\r\n * @returns A `SafeUrl` object representing the sanitized URL.\r\n * @throws An error if the given URL is not a string.\r\n */\r\n public transform(url: unknown): SafeUrl {\r\n if (typeof url !== 'string')\r\n throw new Error(`The given url '${url}' is not a string.`)\r\n\r\n return this._domSanitizer.bypassSecurityTrustResourceUrl(url);\r\n }\r\n}\r\n","import { Component, forwardRef, QueryList, ViewChildren, input, signal } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { FileUpload, FileUploadModule } from 'primeng/fileupload';\r\nimport { SafeUrlPipe } from \"../../pipes/safe-url.pipe\";\r\n\r\n/**\r\n * Represents a component for uploading files in the RESTworld Angular client.\r\n * Implements the ControlValueAccessor interface to enable two-way data binding.\r\n * @example\r\n * <rw-file\r\n * [(ngModel)]=\"base64EncodedFileUri\"\r\n * accept=\"file/text\">\r\n * </rw-file>\r\n */\r\n@Component({\r\n selector: 'rw-file',\r\n templateUrl: './restworld-file.component.html',\r\n styleUrls: ['./restworld-file.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldFileComponent),\r\n multi: true\r\n }],\r\n imports: [ButtonModule, FileUploadModule, SafeUrlPipe]\r\n})\r\nexport class RestWorldFileComponent implements ControlValueAccessor {\r\n private onChange?: Function;\r\n /**\r\n * The file types that the component should accept.\r\n * This is a comma-separated list of MIME types or file extensions.\r\n * If not specified, all file types are accepted.\r\n */\r\n public readonly accept = input(\"\", { transform: (v: string) => v ?? \"\" });\r\n\r\n /**\r\n * The name of the file to be uploaded.\r\n */\r\n public readonly fileName = input(\"download\", { transform: (v: string) => v ?? \"download\" });\r\n\r\n public readonly disabled = signal(false);\r\n /**\r\n * The URI of the file.\r\n */\r\n public uri = signal<string | undefined>(undefined);\r\n\r\n writeValue(obj?: string): void {\r\n this.uri.set(obj);\r\n }\r\n registerOnChange(fn?: Function): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(): void {\r\n // not needed for this component, but needed to implement the interface\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n public fileChanged(event: { files: File[] }): void {\r\n const file = event.files[0];\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n this.uri.set(reader.result as string);\r\n this.onChange?.(this.uri());\r\n };\r\n\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n public deleteFile() {\r\n this.uri.set(undefined);\r\n this.onChange?.(this.uri());\r\n }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"fileName()\" class=\"mr-1\" pButton\r\n pTooltip=\"Download file\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No file present\"></p-button>\r\n }\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" pTooltip=\"Upload new file\" mode=\"basic\" [auto]=\"true\"\r\n [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"fileChanged($event)\"></p-fileUpload>\r\n @if (uri()) {\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteFile()\"/>\r\n }\r\n</div>\r\n","import { Component, ElementRef, ViewChildren, computed, input } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, FormGroup, FormGroupDirective } from '@angular/forms';\r\nimport { Property, PropertyType, SimpleValue } from '@wertzui/ngx-hal-client';\r\nimport { ValidationErrorDirective, ValidationErrorsComponent } from 'ngx-valdemort';\r\nimport { MessageModule } from 'primeng/message';\r\n\r\n/**\r\n * Displays validation errors either for one property or for a whole form.\r\n * If a property is given, only the validation errors for this property will be displayed.\r\n * If a form is given, all validation errors for all properties will be displayed.\r\n * @example\r\n * <rw-validation-errors [property]=\"property\"></rw-validation-errors>\r\n * <rw-validation-errors [form]=\"form\"></rw-validation-errors>\r\n */\r\n@Component({\r\n selector: 'rw-validation-errors',\r\n templateUrl: './restworld-validation-errors.component.html',\r\n styleUrls: ['./restworld-validation-errors.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [ValidationErrorsComponent, ValidationErrorDirective, MessageModule]\r\n})\r\nexport class RestWorldValidationErrorsComponent<T extends { [K in keyof T]: AbstractControl<any, any>; }> {\r\n /**\r\n * The form to display the validation errors for.\r\n * Either set this or the property input.\r\n */\r\n public readonly form = input<FormGroup<T>>();\r\n public readonly name = computed(() => this.property()?.name ?? null);\r\n public readonly prompt = computed(() => this.property()?.prompt ?? this.name() ?? null);\r\n /**\r\n * The property to display the validation errors for.\r\n * Either set this or the form input.\r\n */\r\n public readonly property = input<Property<SimpleValue, string, string>>();\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n}\r\n","@if (property() && property()?.type !== PropertyType.Hidden) {\r\n <val-errors [controlName]=\"name()\">\r\n <ng-template valError=\"required\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The field '{{prompt()}}' is required.</p-message></ng-template>\r\n <ng-template valError=\"email\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be a valid email address.</p-message></ng-template>\r\n <ng-template valError=\"min\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be equal or greater than or equal to {{ error.min }}.</p-message></ng-template>\r\n <ng-template valError=\"max\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">'{{prompt()}}' must be smaller than or equal to {{ error.max }}.</p-message></ng-template>\r\n <ng-template valError=\"minlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be equal or greater than or equal to {{ error.requiredLength }}.</p-message></ng-template>\r\n <ng-template valError=\"maxlength\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The length of '{{prompt()}}' must be shorter than or equal to {{ error.requiredLength }}.</p-message></ng-template>\r\n <ng-template valError=\"pattern\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">The value for '{{prompt()}}' does not match the pattern {{ error }}.</p-message></ng-template>\r\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\r\n </val-errors>\r\n}\r\n@if (form()) {\r\n <val-errors [control]=\"form()!\">\r\n <ng-template valError=\"remote\" let-error=\"error\"><p-message severity=\"error\" variant=\"simple\" size=\"small\">{{ error }}</p-message></ng-template>\r\n </val-errors>\r\n}\r\n","/**\r\n * Creates a debounced function that delays invoking the provided function until after the specified delay in milliseconds has elapsed since the last time the debounced function was invoked.\r\n *\r\n * @param fn - The function to debounce.\r\n * @param delayMilliseconds - The number of milliseconds to delay. Defaults to 300 milliseconds.\r\n * @returns A new debounced function.\r\n */\r\nexport const debounce = (fn: Function, delayMilliseconds = 300) => {\r\n let timeoutId: number | undefined;\r\n return function (this: any, ...args: any[]) {\r\n window.clearTimeout(timeoutId);\r\n timeoutId = window.setTimeout(() => fn.apply(this, args), delayMilliseconds);\r\n };\r\n};\r\n","import { AfterViewInit, Component, forwardRef, OnInit, QueryList, ViewChildren, input, viewChildren, signal, computed, model, effect } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ImageCroppedEvent, ImageCropperComponent } from 'ngx-image-cropper';\r\nimport { FileUpload, FileUploadModule } from 'primeng/fileupload';\r\nimport { Dialog, DialogModule } from 'primeng/dialog'\r\nimport { Property } from '@wertzui/ngx-hal-client';\r\nimport { RestWorldImage } from '../../models/restworld-image'\r\nimport { SafeUrlPipe } from '../../pipes/safe-url.pipe';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { ColorPickerModule } from \"primeng/colorpicker\";\r\n\r\n/**\r\n * A component for displaying and editing images with various options such as cropping, resizing, and aspect ratio.\r\n * Implements ControlValueAccessor to work with Angular forms.\r\n */\r\n@Component({\r\n selector: 'rw-image',\r\n templateUrl: './restworld-image.component.html',\r\n styleUrls: ['./restworld-image.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldImageComponent),\r\n multi: true\r\n }],\r\n imports: [SafeUrlPipe, ButtonModule, ImageCropperComponent, FileUploadModule, DialogModule, ColorPickerModule, FormsModule]\r\n})\r\nexport class RestWorldImageComponent implements ControlValueAccessor {\r\n public readonly property = input.required<Property & {\r\n restWorldImage: RestWorldImage;\r\n }>();\r\n public readonly accept = computed(() => {\r\n const property = this.property();\r\n return property.restWorldImage.accept ?? typeof property.placeholder === \"string\" ? property.placeholder as string : \"image/*\"\r\n });\r\n public readonly alignImage = computed(() => this.property().restWorldImage.alignImage ?? \"center\");\r\n public readonly alt = computed(() => {\r\n const property = this.property();\r\n return property.prompt ?? property.name;\r\n });\r\n public readonly aspectRatio = computed(() => this.property().restWorldImage.aspectRatio ?? 1);\r\n // If no background color is set, we set it to white.\r\n // Otherwise the color picker would show red, the input would be empty and the image cropper would show transparent.\r\n public readonly backgroundColor = model(\"#ffffff\");\r\n public readonly canvasRotation = computed(() => this.property().restWorldImage.canvasRotation);\r\n public readonly containWithinAspectRatio = computed(() => this.property().restWorldImage.containWithinAspectRatio);\r\n public readonly cropper = computed(() => this.property().restWorldImage.cropper);\r\n public readonly cropperMaxHeight = computed(() => this.property().restWorldImage.cropperMaxHeight);\r\n public readonly cropperMaxWidth = computed(() => this.property().restWorldImage.cropperMaxWidth);\r\n public readonly cropperMinHeight = computed(() => this.property().restWorldImage.cropperMinHeight);\r\n public readonly cropperMinWidth = computed(() => this.property().restWorldImage.cropperMinWidth);\r\n public readonly cropperStaticHeight = computed(() => this.property().restWorldImage.cropperStaticHeight);\r\n public readonly cropperStaticWidth = computed(() => this.property().restWorldImage.cropperStaticWidth);\r\n public readonly dialogs = viewChildren(Dialog);\r\n public readonly disabled = signal(false);\r\n public readonly fileUploads = viewChildren(FileUpload);\r\n public readonly filename = computed(() => this.property().name + \".\" + (this.property().restWorldImage.format ?? \".png\"));\r\n public readonly format = computed(() => this.property().restWorldImage.format);\r\n public readonly imageCroppers = viewChildren(ImageCropperComponent);\r\n public readonly imageQuality = computed(() => this.property().restWorldImage.imageQuality);\r\n public readonly initialStepSize = computed(() => this.property().restWorldImage.initialStepSize);\r\n public readonly maintainAspectRatio = computed(() => this.property().restWorldImage.maintainAspectRatio);\r\n public readonly onlyScaleDown = computed(() => this.property().restWorldImage.onlyScaleDown);\r\n public readonly resizeToHeight = computed(() => this.property().restWorldImage.resizeToHeight);\r\n public readonly resizeToWidth = computed(() => this.property().restWorldImage.resizeToWidth);\r\n public readonly roundCropper = computed(() => this.property().restWorldImage.roundCropper);\r\n\r\n public displayCropDialog = model(false);\r\n private tempCroppedUri?: string;\r\n public readonly tempImageFile = signal<File | undefined>(undefined);\r\n public readonly uri = signal<string | undefined>(undefined);\r\n\r\n private onChange?: Function;\r\n\r\n constructor() {\r\n effect(() => this.property().restWorldImage.backgroundColor = this.backgroundColor());\r\n effect(() => this.backgroundColor.set(this.property().restWorldImage.backgroundColor ?? \"#ffffff\"));\r\n\r\n // We need to trigger imageLoadedInView each time, after the opening animation of the dialog has been completed.\r\n // Otherwise the image cropper initially (and after every window resize) thinks that the image size is 0x0,\r\n // because the opening animation hast just begun when the image cropper is first shown.\r\n effect(() => this.dialogs()?.map(d => d.onShow.subscribe(() =>\r\n this.imageCroppers()?.forEach(i => { i.imageLoadedInView(); })\r\n )));\r\n }\r\n\r\n public acceptCroppedImage(): void {\r\n this.uri.set(this.tempCroppedUri);\r\n this.onChange?.(this.uri());\r\n this.closeCropDialog();\r\n }\r\n\r\n public closeCropDialog(): void {\r\n this.fileUploads()?.forEach(f => f.clear());\r\n this.displayCropDialog.set(false);\r\n }\r\n\r\n public croppedImageChanged(event: ImageCroppedEvent): void {\r\n this.tempCroppedUri = event.base64 ?? undefined;\r\n }\r\n\r\n public deleteImage() {\r\n this.uri.set(undefined);\r\n this.onChange?.(this.uri());\r\n }\r\n\r\n public imageChanged(event: { files: File[] }): void {\r\n this.tempImageFile.set(event.files[0]);\r\n this.showCropDialog();\r\n }\r\n\r\n public registerOnChange(fn?: Function): void {\r\n this.onChange = fn;\r\n }\r\n\r\n public registerOnTouched(): void {\r\n // not needed for this component, but needed to implement the interface\r\n }\r\n\r\n public setDisabledState?(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n public showCropDialog(): void {\r\n this.displayCropDialog.set(true);\r\n }\r\n\r\n public writeValue(obj?: string): void {\r\n this.uri.set(obj);\r\n }\r\n}\r\n","<div class=\"flex align-items-center\">\r\n @if (uri()) {\r\n <a [href]=\"uri() | safeUrl\" [download]=\"filename()\" class=\"mr-1\" pButton pTooltip=\"Download image\" icon=\"pi pi-download\"></a>\r\n }\r\n @else {\r\n <p-button [disabled]=\"true\" icon=\"pi pi-download\" class=\"mr-1\" pTooltip=\"No image present\"></p-button>\r\n }\r\n\r\n <p-fileUpload class=\"mr-1\" chooseIcon=\"pi-upload fas fa-upload\" [chooseButtonProps]=\"{ label: '' }\" mode=\"basic\" [auto]=\"true\" [accept]=\"accept()\" [customUpload]=\"true\" (uploadHandler)=\"imageChanged($event)\" pTooltip=\"Upload new image\"></p-fileUpload>\r\n\r\n @if (uri()) {\r\n <img class=\"thumbnail mr-1\" [src]=\"uri() | safeUrl\" [alt]=\"alt()\" (click)=\"showCropDialog()\" pTooltip=\"Zoom and crop\" />\r\n <p-button icon=\"pi pi-times\" severity=\"danger\" [text]=\"true\" (onClick)=\"deleteImage()\"/>\r\n }\r\n</div>\r\n\r\n<p-dialog [header]=\"alt()\" [(visible)]=\"displayCropDialog\">\r\n <image-cropper\r\n [autoCrop]=\"true\"\r\n (imageCropped)=\"croppedImageChanged($event)\"\r\n [alignImage]=\"alignImage()\"\r\n [aspectRatio]=\"aspectRatio()\"\r\n [backgroundColor]=\"backgroundColor()\"\r\n [canvasRotation]=\"canvasRotation()\"\r\n [containWithinAspectRatio]=\"containWithinAspectRatio()\"\r\n [cropper]=\"cropper()\"\r\n [cropperMaxHeight]=\"cropperMaxHeight()\"\r\n [cropperMaxWidth]=\"cropperMaxWidth()\"\r\n [cropperMinHeight]=\"cropperMinHeight()\"\r\n [cropperMinWidth]=\"cropperMinWidth()\"\r\n [cropperStaticHeight]=\"cropperStaticHeight()\"\r\n [cropperStaticWidth]=\"cropperStaticWidth()\"\r\n [format]=\"format()\"\r\n [imageQuality]=\"imageQuality()\"\r\n [initialStepSize]=\"initialStepSize()\"\r\n [maintainAspectRatio]=\"maintainAspectRatio()\"\r\n [onlyScaleDown]=\"onlyScaleDown()\"\r\n [resizeToWidth]=\"resizeToWidth()\"\r\n [resizeToHeight]=\"resizeToHeight()\"\r\n [roundCropper]=\"roundCropper()\"\r\n [imageFile]=\"tempImageFile()\"\r\n [imageURL]=\"uri()\"\r\n output=\"base64\"\r\n ></image-cropper>\r\n <div class=\"flex justify-content-end\">\r\n <div class=\"flex-auto align-items-center\">\r\n <span>Background color:&nbsp;</span>\r\n <p-colorPicker [(ngModel)]=\"backgroundColor\" appendTo=\"body\" class=\"ml-1 mr-1\"></p-colorPicker>\r\n <input pInputText [(ngModel)]=\"backgroundColor\" />\r\n </div>\r\n <button type=\"button\" pButton pRipple (click)=\"acceptCroppedImage()\" class=\"mr-2\">Ok</button>\r\n <button type=\"button\" pButton pRipple (click)=\"closeCropDialog()\">Cancel</button>\r\n </div>\r\n</p-dialog>\r\n","import { Directive, Host, Inject, input, Optional, Self, SkipSelf, ElementRef, type OnChanges, Renderer2, type SimpleChanges, effect, forwardRef, NgModule, type InputSignal, type InputSignalWithTransform } from \"@angular/core\";\r\nimport { FormControlName, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, type AsyncValidator, type AsyncValidatorFn, ControlContainer, type ControlValueAccessor, type Validator, type ValidatorFn, DefaultValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, RangeValueAccessor, NumberValueAccessor, NgControl, NgControlStatus, ReactiveFormsModule } from \"@angular/forms\";\r\nimport type { Property, SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { InputNumber } from \"primeng/inputnumber\";\r\nimport { MultiSelect } from \"primeng/multiselect\";\r\nimport { Select } from \"primeng/select\";\r\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\r\n\r\nexport function setValueOfInputSignal<T, TransformT>(signal: InputSignal<T> | InputSignalWithTransform<T, TransformT>, value: T) {\r\n const node = signal[SIGNAL];\r\n signalSetFn(node, value);\r\n // There is node.applyValueToInputSignal(node, value); too but it does not accept InputSignalWithTransform<T, TransformT>\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of a p-inputNumber element based on the property.\r\n * It sets the mode, minFractionDigits and maxFractionDigits attributes.\r\n * Thses are based on the properties step value.\r\n */\r\n@Directive({\r\n selector: \"p-inputNumber[formControlProperty], p-inputNumber[propertyAttributes]\",\r\n})\r\nexport class PropertyInputNumberAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n @Self() inputNumber: InputNumber,\r\n ) {\r\n // We need to set it to the maximum value in the constructor, because for some reason lowering it in the effect works, but raising it does not.\r\n inputNumber.maxFractionDigits = 100;\r\n\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n console.error(\"Cannot create an instance of the PropertyInputNumberAttributes directive without a property.\");\r\n return;\r\n }\r\n\r\n const element = inputNumber;\r\n if (!element) {\r\n console.error(`Cannot create an instance of the PropertyInputNumberAttributes directive for the property \"${property.name}\" without a p-inputNumber element.`);\r\n return;\r\n }\r\n\r\n element.showButtons = !property.readOnly;\r\n element.minFractionDigits = 0;\r\n if (property.step)\r\n setValueOfInputSignal(element.step, property.step);\r\n if (!property.step || property.step < 0) {\r\n element.mode = \"decimal\";\r\n }\r\n else if (property.step && property.step >= 1) {\r\n element.maxFractionDigits = PropertyInputNumberAttributes.countFractionalDigits(property.value);\r\n }\r\n });\r\n }\r\n\r\n private static countFractionalDigits(value: unknown): number {\r\n if (value === null || value === undefined || typeof value !== \"number\")\r\n return 0;\r\n\r\n let count = 0;\r\n while (!Number.isInteger(value) && count < 100) { // Prevent infinite loop due to precision issues\r\n value *= 10;\r\n count++;\r\n }\r\n\r\n return count;\r\n }\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of a p-select or p-multiSelect element based on the property.\r\n * It sets the optionLabel, optionValue, readonly, filterBy, filter, showClear, required, filterPlaceholder, appendTo, display, selectionLimit, showToggleAll attributes.\r\n * You need to set either the property or the propertyAttributes input.\r\n * If both are set, the property input will be used.\r\n * The propertyAttributes can be used if you want to set the attributes of an input element based on a property without binding the property to a form control using the propertyFormControl directive.\r\n * @example\r\n * <p-select [formControlProperty]=\"property\" />\r\n * <p-select [propertyAttributes]=\"property\" />\r\n * <p-multiSelect [formControlProperty]=\"property\" />\r\n * <p-multiSelect [propertyAttributes]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"p-select[formControlProperty], p-select[propertyAttributes], p-multiSelect[formControlProperty], p-multiSelect[propertyAttributes]\",\r\n})\r\nexport class PropertySelectAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n /**\r\n * The property to display.\r\n */\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n @Self() @Optional() select?: Select,\r\n @Self() @Optional() multiSelect?: MultiSelect,\r\n ) {\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n console.error(\"Cannot create an instance of the PropertySelectControl directive without a property.\");\r\n return;\r\n }\r\n\r\n const options = property.options;\r\n if (!options) {\r\n console.error(`Cannot create an instance of the PropertySelectControl directive for the property \"${property.name}\" without options.`);\r\n return;\r\n }\r\n\r\n const element = select ?? multiSelect;\r\n if (!element) {\r\n console.error(`Cannot create an instance of the PropertySelectControl directive for the property \"${property.name}\" without a p-select or p-multiSelect element.`);\r\n return;\r\n }\r\n\r\n const promptField = options.promptField ?? \"prompt\";\r\n const valueField = options.valueField ?? \"value\";\r\n element.optionLabel = promptField;\r\n element.optionValue = valueField;\r\n element.readonly = property.readOnly;\r\n element.filterBy = promptField + \",\" + valueField;\r\n element.filter = true;\r\n element.showClear = !property.required || (options.minItems ?? 0) <= 0;\r\n // element.appendTo = \"body\";\r\n setValueOfInputSignal(element.appendTo, \"body\");\r\n\r\n if (element instanceof Select) {\r\n // element.required = property.required || (options.minItems ?? 0) > 0;\r\n setValueOfInputSignal(element.required, property.required || (options.minItems ?? 0) > 0);\r\n element.filterPlaceholder = options.link?.href ? \"search for more results\" : \"\"\r\n }\r\n else if (element instanceof MultiSelect) {\r\n // It is missspelled in the primeng component using an uppercase H\r\n element.filterPlaceHolder = options.link?.href ? \"search for more results\" : \"\"\r\n element.display = \"chip\";\r\n element.selectionLimit = options.maxItems;\r\n element.showToggleAll = true;\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\n/**\r\n * This directive sets the attributes of an input element based on the property.\r\n * It sets the id, name, placeholder, type, max, min, step, required, readOnly, cols, rows, maxLength, minLength attributes.\r\n * It also adds the p-disabled class if the property is readOnly.\r\n * You need to set either the property or the propertyAttributes input.\r\n * If both are set, the property input will be used.\r\n * The propertyAttributes can be used if you want to set the attributes of an input element based on a property without binding the property to a form control using the propertyFormControl directive.\r\n * @example\r\n * <input [formControlProperty]=\"property\" />\r\n * <input [propertyAttributes]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"[formControlProperty],[propertyAttributes]\",\r\n})\r\nexport class PropertyAttributes<TProperty extends Property<SimpleValue, string, string>> {\r\n public readonly formControlProperty = input<TProperty>();\r\n public readonly propertyAttributes = input<TProperty>();\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef,\r\n private readonly renderer: Renderer2\r\n ) {\r\n effect(() => {\r\n const property = this.formControlProperty() ?? this.propertyAttributes();\r\n if (!property) {\r\n return;\r\n }\r\n\r\n const nativeElement = this.elementRef.nativeElement;\r\n if (!(nativeElement instanceof HTMLElement))\r\n return;\r\n\r\n this.renderer.setAttribute(nativeElement, \"id\", property.name);\r\n this.renderer.setAttribute(nativeElement, \"name\", property.name);\r\n if (property.placeholder)\r\n this.renderer.setAttribute(nativeElement, \"placeholder\", property.placeholder as string);\r\n if (property.type)\r\n this.renderer.setAttribute(nativeElement, \"type\", property.type);\r\n if (property.max)\r\n this.renderer.setAttribute(nativeElement, \"max\", property.max.toString());\r\n if (property.min)\r\n this.renderer.setAttribute(nativeElement, \"min\", property.min.toString());\r\n if (property.step)\r\n this.renderer.setAttribute(nativeElement, \"step\", property.step.toString());\r\n if (property.required)\r\n this.renderer.setAttribute(nativeElement, \"required\", \"true\");\r\n if (property.readOnly) {\r\n // If the element is a textarea, we set the disabled property, otherwise we add the p-disabled class.\r\n // This is because the p-disabled class prevents scrolling and resizing of the textarea, which is not desired.\r\n if (nativeElement instanceof HTMLTextAreaElement)\r\n this.renderer.setAttribute(nativeElement, \"disabled\", \"disabled\");\r\n else\r\n this.renderer.addClass(nativeElement, \"p-disabled\");\r\n }\r\n if (property.cols)\r\n this.renderer.setAttribute(nativeElement, \"cols\", property.cols.toString());\r\n if (property.rows)\r\n this.renderer.setAttribute(nativeElement, \"rows\", property.rows.toString());\r\n if (property.maxLength)\r\n this.renderer.setAttribute(nativeElement, \"maxlength\", property.maxLength.toString());\r\n if (property.minLength)\r\n this.renderer.setAttribute(nativeElement, \"minlength\", property.minLength.toString());\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * This directive binds a property to a form control.\r\n * It sets the name of the form control to the name of the property and acts just like [formControlName]=\"myProperty().name\".\r\n * @example\r\n * <input [formControlProperty]=\"property\" />\r\n */\r\n@Directive({\r\n selector: \"[formControlProperty]:not([useTemplateDrivenForms=true])\",\r\n providers: [\r\n {\r\n provide: NgControl,\r\n useExisting: forwardRef(() => FormControlProperty),\r\n },\r\n ],\r\n})\r\nexport class FormControlProperty<TProperty extends Property<SimpleValue, string, string>> extends FormControlName implements OnChanges {\r\n public readonly formControlProperty = input.required<TProperty>();\r\n\r\n private _propertyAdded = false;\r\n\r\n constructor(\r\n @Optional() @Host() @SkipSelf() parent: ControlContainer,\r\n @Optional() @Self() @Inject(NG_VALIDATORS) validators: (Validator | ValidatorFn)[],\r\n @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: (AsyncValidator | AsyncValidatorFn)[],\r\n @Optional() @Self() @Inject(NG_VALUE_ACCESSOR) valueAccessors: ControlValueAccessor[],\r\n ) {\r\n super(parent, validators, asyncValidators, valueAccessors, null);\r\n\r\n effect(() => {\r\n const property = this.formControlProperty();\r\n if (!property) {\r\n return;\r\n }\r\n\r\n this.name = property.name;\r\n });\r\n }\r\n\r\n public override ngOnChanges(changes: SimpleChanges): void {\r\n // We cannot purely rely on the effect, because FormControlName used ngOnChanges which runs before any effects.\r\n // FormControlName reads this.name in ngOnChanges, so we need to set it here to make sure it is set before FormControlName reads it.\r\n if (!this._propertyAdded) {\r\n this.name = this.formControlProperty().name;\r\n this._propertyAdded = true;\r\n }\r\n\r\n super.ngOnChanges(changes);\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: \"input:not([type=checkbox])[formControlProperty], textarea[formControlProperty], select[formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DefaultPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DefaultPropertyValueAccessor extends DefaultValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=checkbox][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class CheckboxPropertyValueAccessor extends CheckboxControlValueAccessor {\r\n}\r\n\r\n\r\n@Directive({\r\n selector: \"select:not([multiple])[formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class SelectPropertyValueAccessor extends SelectControlValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=range][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RangePropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class RangePropertyValueAccessor extends RangeValueAccessor {\r\n}\r\n\r\n@Directive({\r\n selector: \"input[type=number][formControlProperty]\",\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => NumberPropertyValueAccessor),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class NumberPropertyValueAccessor extends NumberValueAccessor {\r\n}\r\n\r\nexport const ngControlStatusHost = {\r\n \"[class.ng-untouched]\": \"isUntouched\",\r\n \"[class.ng-touched]\": \"isTouched\",\r\n \"[class.ng-pristine]\": \"isPristine\",\r\n \"[class.ng-dirty]\": \"isDirty\",\r\n \"[class.ng-valid]\": \"isValid\",\r\n \"[class.ng-invalid]\": \"isInvalid\",\r\n \"[class.ng-pending]\": \"isPending\",\r\n};\r\n\r\n@Directive({\r\n selector: \"[formControlProperty]\",\r\n host: ngControlStatusHost\r\n})\r\nexport class PropertyControlStatus extends NgControlStatus {\r\n constructor(@Self() cd: NgControl) {\r\n super(cd);\r\n }\r\n}\r\n\r\n@NgModule({\r\n imports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],\r\n exports: [FormControlProperty, DefaultPropertyValueAccessor, CheckboxPropertyValueAccessor, SelectPropertyValueAccessor, RangePropertyValueAccessor, NumberPropertyValueAccessor, PropertyControlStatus, PropertySelectAttributes, PropertyAttributes, PropertyInputNumberAttributes, ReactiveFormsModule],\r\n})\r\nexport class HalFormsModule { }\r\n","import { PrimitiveTypeEnum } from \"@odata/metadata\";\r\nimport { type Token, TokenType, createTraverser, type EqualsExpressionToken, type LeftRightExpressionToken, type LiteralToken, type AndExpressionToken, type OrExpressionToken } from \"@odata/parser\";\r\nimport type { SimpleValue } from \"@wertzui/ngx-hal-client\";\r\nimport { type FilterMetadata, FilterMatchMode } from \"primeng/api\";\r\n\r\ninterface MethodCallExpressionToken extends Token {\r\n type: TokenType.MethodCallExpression;\r\n value: {\r\n method: string;\r\n parameters: Token[];\r\n };\r\n}\r\n\r\ninterface ODataIdentifierToken extends Token {\r\n type: TokenType.ODataIdentifier;\r\n value: {\r\n name: string;\r\n };\r\n}\r\n\r\n/**\r\n * This visitor turns a parsed OData $filter query string represented as a {@link Token} into a map of property names to filter metadata.\r\n * The filter metadata is used by the PrimeNG table component to filter the rows of\r\n * a table based on the values of the columns.\r\n */\r\nexport class OdataVisitor {\r\n private _filters: Map<string, FilterMetadata[]> = new Map();\r\n private operator: \"and\" | \"or\" | undefined;\r\n private propertyName: string | undefined;\r\n private value: SimpleValue | null | undefined;\r\n\r\n private static correctFilterMatchMode(matchMode: string, literalValue: SimpleValue | SimpleValue[] | null): string {\r\n if (literalValue instanceof Date) {\r\n switch (matchMode) {\r\n case FilterMatchMode.EQUALS:\r\n return FilterMatchMode.DATE_IS;\r\n case FilterMatchMode.NOT_EQUALS:\r\n return FilterMatchMode.DATE_IS_NOT;\r\n case FilterMatchMode.LESS_THAN:\r\n return FilterMatchMode.DATE_BEFORE;\r\n case FilterMatchMode.LESS_THAN_OR_EQUAL_TO:\r\n return FilterMatchMode.DATE_BEFORE;\r\n case FilterMatchMode.GREATER_THAN:\r\n return FilterMatchMode.DATE_AFTER;\r\n case FilterMatchMode.GREATER_THAN_OR_EQUAL_TO:\r\n return FilterMatchMode.DATE_AFTER;\r\n }\r\n }\r\n\r\n return matchMode;\r\n }\r\n\r\n private static parseLiteralValue(node: LiteralToken): SimpleValue | null {\r\n const type = node.value as PrimitiveTypeEnum;\r\n switch (type) {\r\n case PrimitiveTypeEnum.Binary:\r\n case PrimitiveTypeEnum.Boolean:\r\n return node.raw === \"true\";\r\n case PrimitiveTypeEnum.Byte:\r\n case PrimitiveTypeEnum.Int16:\r\n case PrimitiveTypeEnum.Int32:\r\n case PrimitiveTypeEnum.Int64:\r\n case PrimitiveTypeEnum.SByte:\r\n return Number.parseInt(node.raw);\r\n case PrimitiveTypeEnum.Date:\r\n case PrimitiveTypeEnum.DateTime:\r\n case PrimitiveTypeEnum.DateTimeOffset:\r\n case PrimitiveTypeEnum.Duration:\r\n case PrimitiveTypeEnum.TimeOfDay:\r\n return new Date(node.raw);\r\n case PrimitiveTypeEnum.Decimal:\r\n case PrimitiveTypeEnum.Double:\r\n case PrimitiveTypeEnum.Single:\r\n return Number.parseFloat(node.raw);\r\n default:\r\n switch (node.raw) {\r\n case \"null\":\r\n return null;\r\n default:\r\n return node.raw.startsWith(\"'\") ? node.raw.substring(1, node.raw.length - 1) : node.raw;\r\n }\r\n }\r\n }\r\n\r\n private static parseMethodCallExpression(node: Token): string {\r\n switch (node.value.method) {\r\n case 'startswith':\r\n return FilterMatchMode.STARTS_WITH;\r\n case 'contains':\r\n return FilterMatchMode.CONTAINS;\r\n case 'not contains':\r\n return FilterMatchMode.NOT_CONTAINS;\r\n case 'endswith':\r\n return FilterMatchMode.ENDS_WITH;\r\n default:\r\n throw Error(`Unknown method call ${node.value.method}`);\r\n }\r\n }\r\n\r\n /***\r\n * Parses an OData $filter query string and returns a map of property names to filter metadata.\r\n * @param node The root node of the OData $filter query string.\r\n * @param logToConsole If true, logs the type and raw value of each token to the console.\r\n * @returns A map of property names to filter metadata.\r\n */\r\n public parse(node: Token, logToConsole?: boolean): Map<string, FilterMetadata[]> {\r\n if (logToConsole) {\r\n const visitLogAll = createTraverser(\r\n Object.fromEntries(\r\n Object.entries(TokenType)\r\n .map(([key, value]) => ([key, (node: Token) => console.log(`${node.type}: ${node.raw}`)] as [string, (node: Token) => void])\r\n )\r\n ), true);\r\n visitLogAll(node);\r\n }\r\n\r\n const visit = createTraverser({\r\n EqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.EQUALS),\r\n NotEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.NOT_EQUALS),\r\n GreaterThanExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.GREATER_THAN),\r\n GreaterOrEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO),\r\n LesserThanExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.LESS_THAN),\r\n LesserOrEqualsExpression: (node: Token) => this.CreateFilter(this.propertyName, this.value, FilterMatchMode.LESS_THAN_OR_EQUAL_TO),\r\n HasExpression: (node: Token) => this.CreateFilter(this.propertyName, [this.value], FilterMatchMode.EQUALS),\r\n ODataIdentifier: (node: Token) => this.propertyName = node.value.name,\r\n Literal: (node: Token) => this.value = OdataVisitor.parseLiteralValue(node as LiteralToken),\r\n AndExpression: (node: Token) => this.operator = \"and\",\r\n OrExpression: (node: Token) => this.operator = \"or\",\r\n BoolParenExpression: (node: Token) => this.SetOperatorForFilters(),\r\n MethodCallExpression: (node: Token) => this.visitMethodCallExpression(node as MethodCallExpressionToken, visit),\r\n }, true);\r\n\r\n visit(node);\r\n\r\n return this._filters;\r\n }\r\n\r\n private CreateFilter(propertyName: string | undefined, value: SimpleValue | SimpleValue[] | null, matchMode: string) {\r\n if (propertyName === undefined)\r\n throw Error(`Cannot add a filter for the value ${value} and the match mode ${matchMode} without a property name`);\r\n\r\n matchMode = OdataVisitor.correctFilterMatchMode(matchMode, value);\r\n const filter = this._filters.get(propertyName);\r\n if (filter === undefined) {\r\n this._filters.set(propertyName, [{ value, operator: \"and\", matchMode: matchMode }]);\r\n }\r\n else if (filter.length === 1 && Array.isArray(filter[0].value) && Array.isArray(value)) {\r\n filter[0].value.push(...value); // Flags enum\r\n }\r\n else {\r\n filter.push({ value, operator: \"and\", matchMode: matchMode });\r\n }\r\n }\r\n\r\n private SetOperatorForFilters() {\r\n // In this case we are in the outermost expression which is just parantheses around the complete $filter value\r\n if (this.propertyName === undefined)\r\n return;\r\n\r\n // If we have not found an operator, or it is \"and\", we can just stay with the default created with the filter.\r\n if (this.operator === undefined || this.operator === \"and\")\r\n return;\r\n\r\n const filter = this._filters.get(this.propertyName);\r\n if (filter === undefined)\r\n return;\r\n\r\n // The operator is \"or\", so we need to set the operator for all filters to \"or\"\r\n for (const f of filter)\r\n f.operator = this.operator;\r\n }\r\n\r\n // The visitor does not correctly implement the MethodCallExpressionToken, so we need to do this manually\r\n private visitMethodCallExpression(node: MethodCallExpressionToken, visit: (node: Token) => void) {\r\n for (const parameter of node.value.parameters)\r\n visit(parameter);\r\n const matchMode = OdataVisitor.parseMethodCallExpression(node);\r\n this.CreateFilter(this.propertyName, this.value, matchMode);\r\n }\r\n}\r\n","import { defaultParser } from \"@odata/parser\";\r\nimport type { FilterMetadata } from \"primeng/api\";\r\nimport { OdataVisitor } from \"./odata-visitor\";\r\nimport type { Property, SimpleValue } from \"@wertzui/ngx-hal-client\";\r\n\r\n\r\n/**\r\n * This class is used to parse an OData $filter string into a Record of filter constraints.\r\n */\r\nexport class ODataFilterParser {\r\n\r\n public static parseFilter(filter: string | undefined, properties: Partial<Record<string, Property<SimpleValue, string, string>>>): Partial<Record<string, FilterMetadata[]>> {\r\n if (!filter)\r\n return {};\r\n\r\n // The parser has a bug where it does not correctly parse cast expressions, so we need to replace them with the first argument\r\n // See https://github.com/Soontao/odata-v4-parser/issues/283\r\n filter = ODataFilterParser.replaceCastExpressions(filter);\r\n const ast = defaultParser.filter(filter);\r\n const visitor = new OdataVisitor();\r\n const filters = visitor.parse(ast);\r\n\r\n /// OData needs enum values in pascal case, but JSON and therefor HAL-Forms needs them in camel case\r\n ODataFilterParser.MakeEnumValuesCamelCase(filters, properties);\r\n\r\n return Object.fromEntries(filters);\r\n }\r\n\r\n private static MakeEnumValuesCamelCase(filters: Map<string, FilterMetadata[]>, properties: Partial<Record<string, Property<SimpleValue, string, string>>>) {\r\n for (const [key, value] of filters) {\r\n for (const filter of value) {\r\n const options = properties[key]?.options;\r\n if (options && !options.link && typeof filter.value === \"string\") {\r\n filter.value = filter.value.charAt(0).toLowerCase() + filter.value.slice(1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private static replaceCastExpressions(input: string): string {\r\n // Regular expression to match cast(x, y) and extract x\r\n const regex = /cast\\(([^,]+),\\s*[^)]+\\)/g;\r\n\r\n // Replace matches with the first captured group (x)\r\n const result = input.replace(regex, (match, x) => x.trim());\r\n\r\n return result;\r\n }\r\n}\r\n","import { ODataParameters } from \"../models/o-data\";\r\nimport { ODataFilterParser } from \"./odata-filter-parser\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { type FilterToken } from \"@odata/parser\";\r\nimport { Property, PropertyType, SimpleValue, Template } from \"@wertzui/ngx-hal-client\";\r\nimport { FilterMatchMode, FilterMetadata, TranslationKeys } from \"primeng/api\";\r\nimport { TableLazyLoadEvent } from \"primeng/table\";\r\n\r\n/**\r\n * A static class that provides utility methods for creating OData filters, order by clauses, and parameters from {@link TableLazyLoadEvent} objects.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ODataService {\r\n /**\r\n * Creates an OData filter string for a given property and filter metadata.\r\n * @param property - The property to filter on.\r\n * @param filter - The filter metadata to use.\r\n * @returns The OData filter string, or undefined if the filter value is falsy.\r\n */\r\n public static createFilterForProperty(property: Property<SimpleValue, string, string>, filter: FilterMetadata): string | undefined {\r\n if (filter.matchMode == TranslationKeys.NO_FILTER)\r\n return undefined;\r\n\r\n // Enums are handled differently\r\n if (property.options && !property.options.link)\r\n return ODataService.createFilterForEnum(property, filter);\r\n\r\n const oDataOperator = ODataService.createODataOperator(\r\n filter.matchMode,\r\n );\r\n const comparisonValue = ODataService.createComparisonValue(property, filter.value);\r\n\r\n switch (oDataOperator) {\r\n case 'contains':\r\n case 'not contains':\r\n case 'startswith':\r\n case 'endswith':\r\n return `${oDataOperator}(${property.name}, ${comparisonValue})`;\r\n default:\r\n return `${property.name} ${oDataOperator} ${comparisonValue}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates an OData `$filter` value for an array of {@link FilterMetadata} objects and a given {@link Property}.\r\n * @param property - The {@link Property} to filter on.\r\n * @param filters - An array of {@link FilterMetadata} objects.\r\n * @returns The OData `$filter` value, or undefined if no filters were provided.\r\n */\r\n public static createFilterForPropertyArray(property: Property<SimpleValue, string, string>, filters: FilterMetadata[]): string | undefined {\r\n const filter = filters\r\n .map(f => ODataService.createFilterForProperty(property, f))\r\n .filter(f => !!f)\r\n .join(` ${filters[0].operator} `);\r\n\r\n if (filter === '')\r\n return undefined;\r\n\r\n return `(${filter})`;\r\n }\r\n\r\n /**\r\n * Creates an OData `$filter` value from a {@link TableLazyLoadEvent} and an array of {@link Property Properties}.\r\n * @param event The {@link TableLazyLoadEvent} containing the filter data.\r\n * @param properties An optional array of {@link Property Properties} to filter on.\r\n * @returns The OData $`$filter` value, or undefined if no filters were applied or no properties were provided.\r\n */\r\n public static createFilterFromTableLoadEvent(event: TableLazyLoadEvent, properties?: ReadonlyArray<Property<SimpleValue, string, string>>): string | undefined {\r\n const eventFilters = event.filters;\r\n if (eventFilters === undefined || properties === undefined)\r\n return undefined;\r\n\r\n const filter = properties\r\n .map(property => ({ property, filters: eventFilters[property.name] as (FilterMetadata[] | undefined) }))\r\n .filter(f => f.filters !== undefined)\r\n .map(f => ODataService.createFilterForPropertyArray(f.property, f.filters!))\r\n .filter(f => !!f)\r\n .join(' and ');\r\n\r\n if (filter === '')\r\n return undefined;\r\n\r\n return `(${filter})`;\r\n }\r\n\r\n /**\r\n * Creates a map of property names to filter metadata from an OData $filter string.\r\n * @param filter The OData filter string to parse.\r\n * @returns A record of property names to filter metadata.\r\n */\r\n public static createFilterMetadataFromODataFilter(filter: string | undefined, properties: Partial<Record<string, Property<SimpleValue, string, string>>>): Partial<Record<string, FilterMetadata[]>> {\r\n const filters = ODataFilterParser.parseFilter(filter, properties);\r\n\r\n return filters;\r\n }\r\n\r\n /**\r\n * Creates a OData `$orderby` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$orderby` value from.\r\n * @returns The `$orderby` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createOrderByFromTableLoadEvent(event: TableLazyLoadEvent): string | undefined {\r\n if (event.multiSortMeta && event.multiSortMeta.length > 0) {\r\n return event.multiSortMeta\r\n .map(m => `${m.field} ${m.order > 0 ? 'asc' : 'desc'}`)\r\n .join(', ');\r\n }\r\n\r\n if (event.sortField) {\r\n const order = !event.sortOrder || event.sortOrder > 0 ? 'asc' : 'desc';\r\n return `${event.sortField} ${order}`;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Creates an {@link ODataParameters} object from a given {@link ActivatedRoute}.\r\n * @param route The {@link ActivatedRoute} to create the {@link ODataParameters} from.\r\n * @param prefix An optional prefix to use for the query parameter keys.\r\n * @returns The {@link ODataParameters} object created from the {@link ActivatedRoute}.\r\n */\r\n public static createParametersFromRoute(route: ActivatedRoute, prefix?: string): ODataParameters {\r\n const snapshot = route.snapshot;\r\n\r\n let oDataParameters = {} as ODataParameters;\r\n const filter = snapshot.queryParamMap.get(`${prefix}$filter`);\r\n const orderBy = snapshot.queryParamMap.get(`${prefix}$orderby`);\r\n const top = snapshot.queryParamMap.get(`${prefix}$top`);\r\n const skip = snapshot.queryParamMap.get(`${prefix}$skip`);\r\n\r\n if (filter)\r\n oDataParameters.$filter = filter;\r\n if (orderBy)\r\n oDataParameters.$orderby = orderBy;\r\n if (top) {\r\n const topNumber = Number.parseInt(top);\r\n if (Number.isInteger(topNumber))\r\n oDataParameters.$top = topNumber;\r\n }\r\n if (skip) {\r\n const skipNumber = Number.parseInt(skip);\r\n if (Number.isInteger(skipNumber))\r\n oDataParameters.$skip = skipNumber;\r\n }\r\n\r\n return oDataParameters;\r\n }\r\n\r\n /**\r\n * Creates {@link ODataParameters} from a {@link TableLazyLoadEvent} and an optional {@link Template}.\r\n * @param event The {@link TableLazyLoadEvent} to create OData parameters from.\r\n * @param template An optional {@link Template} to use for creating the OData parameters.\r\n * @returns An {@link ODataParameters} object containing the `$filter`, `$orderby`, `$top`, and `$skip` parameters.\r\n */\r\n public static createParametersFromTableLoadEvent(event: TableLazyLoadEvent, template?: Template): ODataParameters {\r\n const oDataParameters = {\r\n $filter: ODataService.createFilterFromTableLoadEvent(event, template?.properties),\r\n $orderby: ODataService.createOrderByFromTableLoadEvent(event),\r\n $top: ODataService.createTopFromTableLoadEvent(event),\r\n $skip: ODataService.createSkipFromTableLoadEvent(event)\r\n };\r\n\r\n return oDataParameters;\r\n }\r\n\r\n /**\r\n * Creates a OData `$skip` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$skip` value from.\r\n * @returns The `$skip` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createSkipFromTableLoadEvent(event: TableLazyLoadEvent): number | undefined {\r\n return event.first;\r\n }\r\n\r\n /**\r\n * Creates a OData `$top` value from a {@link TableLazyLoadEvent}.\r\n * @param event The {@link TableLazyLoadEvent} to create the `$top` value from.\r\n * @returns The `$top` value created from the {@link TableLazyLoadEvent}.\r\n */\r\n public static createTopFromTableLoadEvent(event: TableLazyLoadEvent): number | undefined {\r\n return event.rows === null ? undefined : event.rows;\r\n }\r\n\r\n private static createComparisonValue(property: Property<SimpleValue, string, string>, value: unknown, isEnum?: boolean): string {\r\n if (value === null || value === undefined)\r\n return 'null';\r\n\r\n const type = ODataService.getPropertyType(property, value);\r\n\r\n switch (type) {\r\n case PropertyType.Date:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateOnly)`;\r\n case PropertyType.DatetimeLocal:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateTime)`;\r\n case PropertyType.DatetimeOffset:\r\n return `cast(${(value as Date).toISOString()}, Edm.DateTimeOffset)`;\r\n case PropertyType.Time:\r\n return `cast(${(value as Date).toISOString()}, Edm.TimeOnly)`;\r\n case PropertyType.Duration:\r\n return `cast(${(value as Date).toISOString()}, Edm.TimeSpan)`;\r\n case PropertyType.Bool:\r\n case PropertyType.Number:\r\n case PropertyType.Currency:\r\n case PropertyType.Month:\r\n return '' + value;\r\n case PropertyType.Percent:\r\n return '' + ((value as number) / 100);\r\n default:\r\n return `'${isEnum && typeof value === \"string\" ? value.charAt(0).toUpperCase() + value.slice(1) : value}'`;\r\n }\r\n }\r\n\r\n private static createFilterForEnum(property: Property<SimpleValue, string, string>, filter: FilterMetadata): string | undefined {\r\n if (filter.matchMode == TranslationKeys.NO_FILTER)\r\n return undefined;\r\n\r\n const options = property.options;\r\n if (options === undefined)\r\n throw Error(`Property ${property.name} has no options`);\r\n\r\n const maxItems = options.maxItems ?? Number.MAX_SAFE_INTEGER;\r\n const oDataOperator = ODataService.createODataOperator(\r\n filter.matchMode,\r\n );\r\n\r\n // Normal enum\r\n if (maxItems === 1) {\r\n const comparisonValue = ODataService.createComparisonValue(property, filter.value, true);\r\n return `${property.name} ${oDataOperator} ${comparisonValue}`;\r\n }\r\n\r\n // Flags enum\r\n if (filter.value === null || filter.value === undefined)\r\n return undefined;\r\n\r\n const values = Array.isArray(filter.value) ? filter.value : [filter.value];\r\n const comparisonValues = values.map(v => ODataService.createComparisonValue(property, v, true));\r\n\r\n const filters = comparisonValues.map(v => `${property.name} has ${v}`);\r\n const concatenatedFilters = filters.join(' and ');\r\n\r\n return `(${concatenatedFilters})`;\r\n }\r\n\r\n private static createODataOperator(matchMode?: string): string {\r\n switch (matchMode) {\r\n case FilterMatchMode.STARTS_WITH:\r\n return 'startswith';\r\n case FilterMatchMode.CONTAINS:\r\n return 'contains';\r\n case FilterMatchMode.NOT_CONTAINS:\r\n return 'not contains';\r\n case FilterMatchMode.ENDS_WITH:\r\n return 'endswith';\r\n case FilterMatchMode.EQUALS:\r\n return 'eq';\r\n case FilterMatchMode.NOT_EQUALS:\r\n return 'ne';\r\n case FilterMatchMode.IN:\r\n return 'in';\r\n case FilterMatchMode.LESS_THAN:\r\n return 'lt';\r\n case FilterMatchMode.LESS_THAN_OR_EQUAL_TO:\r\n return 'le';\r\n case FilterMatchMode.GREATER_THAN:\r\n return 'gt';\r\n case FilterMatchMode.GREATER_THAN_OR_EQUAL_TO:\r\n return 'ge';\r\n case FilterMatchMode.IS:\r\n return 'eq';\r\n case FilterMatchMode.IS_NOT:\r\n return 'ne';\r\n case FilterMatchMode.BEFORE:\r\n return 'lt';\r\n case FilterMatchMode.AFTER:\r\n return 'gt';\r\n case FilterMatchMode.DATE_AFTER:\r\n return 'ge';\r\n case FilterMatchMode.DATE_BEFORE:\r\n return 'lt';\r\n case FilterMatchMode.DATE_IS:\r\n return 'eq';\r\n case FilterMatchMode.DATE_IS_NOT:\r\n return 'ne';\r\n default:\r\n throw Error(`Unknown matchMode ${matchMode}`);\r\n }\r\n }\r\n\r\n private static getPropertyType(property: Property<SimpleValue, string, string>, value: unknown): PropertyType {\r\n if (property.options) {\r\n if (typeof value === \"string\" ||\r\n Array.isArray(value) && value.every(v => typeof v === \"string\") ||\r\n property.options.inline?.some(o => property.options!.valueField !== undefined && typeof (o as any)[property.options!.valueField] === \"string\"))\r\n return PropertyType.Text;\r\n\r\n return PropertyType.Number;\r\n }\r\n\r\n return property.type!;\r\n }\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { MenuItem } from 'primeng/api';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { SplitButtonModule } from \"primeng/splitbutton\";\r\nimport { TooltipModule } from \"primeng/tooltip\";\r\n\r\n/**\r\n * Displays one button for every `MenuItem` given in the items array.\r\n * If a `MenuItem` has nested items, a button with a dropdown menu will be displayed.\r\n * @example\r\n * <rw-menu-button [items]=\"items\"></rw-menu-button>\r\n */\r\n@Component({\r\n selector: 'rw-menu-button',\r\n templateUrl: './restworld-menu-button.component.html',\r\n styleUrls: ['./restworld-menu-button.component.css'],\r\n standalone: true,\r\n imports: [ButtonModule, TooltipModule, SplitButtonModule]\r\n})\r\nexport class RestWorldMenuButtonComponent {\r\n /**\r\n * An array of menu items to be displayed.\r\n */\r\n public readonly items = input.required<MenuItem[]>();\r\n\r\n constructor(private readonly _router: Router) {\r\n\r\n }\r\n\r\n onClick(event: MouseEvent, item: MenuItem) {\r\n const openInNewWindow = event.ctrlKey || event.button === 1 || event.metaKey;\r\n if (item.url) {\r\n window.open(item.url, openInNewWindow ? '_blank' : '_self');\r\n }\r\n else if (item.routerLink) {\r\n if (openInNewWindow) {\r\n const tree = this._router.createUrlTree(item.routerLink, {\r\n queryParams: item.queryParams,\r\n fragment: item.fragment,\r\n queryParamsHandling: item.queryParamsHandling,\r\n preserveFragment: item.preserveFragment,\r\n });\r\n const url = this._router.serializeUrl(tree);\r\n window.open(url, '_blank');\r\n }\r\n else {\r\n this._router.navigate(item.routerLink, {\r\n queryParams: item.queryParams,\r\n fragment: item.fragment,\r\n queryParamsHandling: item.queryParamsHandling,\r\n preserveFragment: item.preserveFragment,\r\n skipLocationChange: item.skipLocationChange,\r\n replaceUrl: item.replaceUrl,\r\n });\r\n }\r\n }\r\n else if (item.command) {\r\n item.command({ item: item });\r\n }\r\n }\r\n}\r\n","@for (item of items(); track item; let i = $index) {\r\n @if (!item.items) {\r\n <p-button\r\n [label]=\"item.label!\"\r\n [icon]=\"item.icon!\"\r\n [disabled]=\"item.disabled!\"\r\n [style]=\"item.style\"\r\n [styleClass]=\"item.styleClass!\"\r\n [pTooltip]=\"item.tooltip!\"\r\n [tooltipPosition]=\"item.tooltipPosition!\"\r\n (onClick)=\"onClick($event, item)\"\r\n [class.ml-2]=\"i > 0\">\r\n </p-button>\r\n } \r\n @else {\r\n <p-splitButton\r\n [label]=\"item.label!\"\r\n [icon]=\"item.icon!\"\r\n [model]=\"item.items\"\r\n appendTo=\"body\"\r\n [disabled]=\"item.disabled!\"\r\n [style]=\"item.style\"\r\n [styleClass]=\"item.styleClass!\"\r\n [pTooltip]=\"item.tooltip!\"\r\n [tooltipPosition]=\"item.tooltipPosition!\"\r\n (onClick)=\"onClick($event, item)\"\r\n [class.ml-2]=\"i > 0\">\r\n </p-splitButton>\r\n }\r\n}\r\n","import { Component, computed, effect, input, untracked, type OnDestroy } from '@angular/core';\r\nimport { Template, FormService, type Property, type SimpleValue, type ExtractValueType, type PropertyDto } from \"@wertzui/ngx-hal-client\";\r\nimport type { FilterMetadata } from \"primeng/api\";\r\nimport type { Subscription } from \"rxjs\";\r\nimport { RestWorldInputComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { FormGroup, ReactiveFormsModule } from \"@angular/forms\";\r\n\r\n/**\r\n * This component is used to display a filter element for a table column.\r\n * It is used internally by the <rw-table> component, but can also be used in the #filter template of a column in the header of a <p-table>.\r\n */\r\n@Component({\r\n selector: 'rw-table-column-filter-element',\r\n imports: [RestWorldInputComponent, ReactiveFormsModule],\r\n templateUrl: './rest-world-table-column-filter-element.component.html',\r\n styleUrl: './rest-world-table-column-filter-element.component.css'\r\n})\r\nexport class RestWorldTableColumnFilterElementComponent<TProperty extends Property<SimpleValue, string, string>> implements OnDestroy {\r\n /**\r\n * The filter constraint to update when the value changes.\r\n * This is coming from the $context of the #filter template\r\n */\r\n public readonly filterConstraint = input.required<FilterMetadata>();\r\n /**\r\n * The HAL-Forms property to filter by.\r\n * This is normally the column.\r\n */\r\n public readonly property = input.required<TProperty>();\r\n /**\r\n * The name of the API to use when generating dropdowns.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The initial value of the filter.\r\n */\r\n public readonly value = input.required<ExtractValueType<TProperty> | null>();\r\n\r\n public readonly form = computed<FormGroup>(() => this._formService.createFormGroupFromTemplate(this.template()));\r\n\r\n private readonly template = computed(() => new Template({\r\n properties: [this.property() as PropertyDto<SimpleValue, string, string>],\r\n }))\r\n\r\n private _formValueChangesSubscription?: Subscription;\r\n\r\n constructor(private readonly _formService: FormService) {\r\n effect(() => {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n const form = this.form();\r\n const property = this.property();\r\n const value = untracked(() => this.value());\r\n const formControl = form.controls[property.name];\r\n this._formValueChangesSubscription = formControl.valueChanges.subscribe(this.setFilterValue.bind(this));\r\n formControl.setValue(value);\r\n });\r\n }\r\n\r\n private setFilterValue(value: ExtractValueType<TProperty> | null): void {\r\n this.filterConstraint().value = value;\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n }\r\n}\r\n","<form [formGroup]=\"form()\">\r\n <rw-input [property]=\"property()\" [apiName]=\"apiName()\"></rw-input>\r\n</form>\r\n","import { Component, Optional, computed, effect, forwardRef, input, model, signal, viewChild } from '@angular/core';\r\nimport { FormService, Property, PropertyType, SimpleValue, Template } from '@wertzui/ngx-hal-client';\r\nimport { FilterMetadata, MenuItem, SelectItem, TranslationKeys, FilterService, type SortMeta } from 'primeng/api';\r\nimport { ODataParameters } from '../../models/o-data';\r\nimport { ODataService } from '../../services/odata.service';\r\nimport { ContextMenu, ContextMenuModule } from 'primeng/contextmenu';\r\nimport { AbstractControl, ControlContainer, FormArray, FormArrayName, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { Table, TableLazyLoadEvent, TableModule } from 'primeng/table';\r\nimport { PrimeNG } from 'primeng/config';\r\nimport { RestWorldMenuButtonComponent } from \"../restworld-menu-button/restworld-menu-button.component\";\r\nimport { RestWorldInputComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { RestWorldDisplayComponent } from \"../restworld-displays/restworld-displays\";\r\nimport { RestWorldTableColumnFilterElementComponent } from \"../rest-world-table-column-filter-element/rest-world-table-column-filter-element.component\";\r\nimport { Router, ActivatedRoute } from \"@angular/router\";\r\n\r\n/**\r\n * Displays a table based on a search-, an edit-template and a list of items.\r\n * The search-template is required and used to display the table columns and to filter and sort the items.\r\n * The edit-template is optional and used to edit the items. For the edit capability, the table must be part of a reactive form.\r\n * The items are displayed as table rows.\r\n * The table supports lazy loading, row selection, row menus, and context menus.\r\n *\r\n * @example\r\n * <rw-table\r\n * [apiName]=\"apiName\"\r\n * [searchTemplate]=\"searchTemplate\"\r\n * [editTemplate]=\"editTemplate\"\r\n * [rows]=\"rows\"\r\n * [rowsPerPageOptions]=\"[10, 25, 50]\"\r\n * [headerMenu]=\"headerMenu\"\r\n * [rowMenu]=\"rowMenu\"\r\n * [rowStyleClass]=\"rowStyleClass\"\r\n * [cellStyleClass]=\"cellStyleClass\"\r\n * [totalRecords]=\"totalRecords\"\r\n * [multiSortMeta]=\"multiSortMeta\"\r\n * [styleClass]=\"styleClass\"\r\n * [tableStyle]=\"tableStyle\"\r\n * [scrollable]=\"scrollable\"\r\n * [scrollHeight]=\"scrollHeight\"\r\n * [selectionMode]=\"selectionMode\"\r\n * [rowHover]=\"rowHover\"\r\n * [selection]=\"selection\"\r\n * [contextMenuItems]=\"contextMenuItems\"\r\n * [isLoading]=\"isLoading\"\r\n * [(selectedRows)]=\"selectedRows\"\r\n * [(oDataParameters)]=\"oDataParameters\"\r\n * </rw-table>\r\n *\r\n */\r\n@Component({\r\n selector: 'rw-table',\r\n templateUrl: './restworld-table.component.html',\r\n styleUrls: ['./restworld-table.component.css'],\r\n standalone: true,\r\n viewProviders: [{\r\n provide: ControlContainer,\r\n deps: [[Optional, FormArrayName]],\r\n useFactory: (arrayName: FormArrayName) => arrayName,\r\n }],\r\n imports: [TableModule, RestWorldMenuButtonComponent, forwardRef(() => RestWorldInputComponent), RestWorldDisplayComponent, ReactiveFormsModule, ContextMenuModule, RestWorldTableColumnFilterElementComponent, RestWorldTableColumnFilterElementComponent]\r\n})\r\nexport class RestWorldTableComponent<TListItem extends Record<string, any>> {\r\n onSort($event: { multisortmeta: SortMeta[] }) {\r\n if (this.lazy())\r\n return;\r\n\r\n console.log(\"Sort event:\", $event);\r\n\r\n // sort the form array for the indexes to line up with the sorted rows\r\n const formArray = this.formArray();\r\n const editTemplate = this.editTemplate();\r\n if (!formArray || !editTemplate)\r\n return;\r\n\r\n formArray.controls.sort((a, b) => {\r\n for (const sortMeta of $event.multisortmeta) {\r\n const field = sortMeta.field;\r\n const valueA = a.get(field)?.value;\r\n const valueB = b.get(field)?.value;\r\n const order = sortMeta.order ?? 1;\r\n if (valueA === valueB)\r\n continue;\r\n if (valueA === undefined || valueA === null)\r\n return -1 * order;\r\n if (valueB === undefined || valueB === null)\r\n return 1 * order;\r\n if (valueA < valueB)\r\n return -1 * order;\r\n if (valueA > valueB)\r\n return 1 * order;\r\n }\r\n return 0;\r\n });\r\n\r\n }\r\n public readonly PropertyType = PropertyType;\r\n /**\r\n * The name of the api.\r\n * For the editing capability, you must also set the editTemplate and the formArray.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * A function that returns the style class for a cell.\r\n * @param row The row for which to return the style class.\r\n * @param column The column for which to return the style class.\r\n * @param rowIndex The index of the row on the currently displayed page.\r\n * @param columnIndex The index of the column.\r\n * @returns The style class for the cell.\r\n */\r\n public readonly cellStyleClass = input<(row: TListItem, column: Property<SimpleValue, string, string>, rowIndex: number, columnIndex: number) => string>(() => \"\");\r\n public readonly cellStyleClasses = computed(() => this.rows().map((r, ri) => Object.fromEntries<string>(this.columns().map((c, ci) => [c.name, this.cellStyleClass()(r, c, ri, ci)]))));\r\n public readonly columns = computed(() => this.searchTemplate()?.properties.filter(p => p.type !== PropertyType.Hidden) ?? []);\r\n public readonly contextMenu = viewChild<ContextMenu>(\"contextMenu\");\r\n public readonly primeNgTable = viewChild.required<Table>(\"table\");\r\n public readonly contextMenuItems = signal<MenuItem[]>([]);\r\n public readonly dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"MM\")\r\n .replace(\"3333\", \"yy\")\r\n .replace(\"33\", \"y\");\r\n public readonly editProperties = computed(() => this.editTemplate()?.propertiesRecord ?? {});\r\n /**\r\n * The template that is used to edit the items.\r\n * Bind this to the template that is used to edit the items.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n * For the editing capability, you must also set the apiName and the formArray.\r\n */\r\n public readonly editTemplate = input<Template>();\r\n public readonly filters = computed(() => {\r\n const filter = this.oDataParameters().$filter;\r\n const properties = this.searchTemplate()?.propertiesRecord;\r\n if (filter === null || filter === undefined || typeof filter !== \"string\" || properties === undefined)\r\n return {};\r\n\r\n return ODataService.createFilterMetadataFromODataFilter(filter, properties);\r\n });\r\n /**\r\n * The form array that contains the form groups for the items.\r\n * Bind this to the form array that contains the form groups for the items.\r\n * Each entry in the array represents one row in the currently displayed page of the table.\r\n * For the editing capability, you must also set the apiName and the editTemplate.\r\n */\r\n public readonly formArray = computed(() => this._controlContainer?.control as FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>> | undefined);\r\n /**\r\n * An optional menu that is displayed at the top right of the table.\r\n * @see RestWorldMenuButtonComponent\r\n */\r\n public readonly headerMenu = input<MenuItem[]>([]);\r\n public readonly isEditable = computed(() => this.editTemplate() !== undefined && this.formArray() !== undefined && this.apiName() !== undefined);\r\n /**\r\n * Indicates whether the table is currently loading.\r\n * Set this to true while loading new items from the backend when reacting to the `onFilterOrSortChanged` event.\r\n */\r\n public readonly isLoading = input(false);\r\n\r\n /**\r\n * Indicates whether the table is lazy loaded.\r\n * If set to true, sorting and filtering needs to be handled by the `load` event.\r\n * If set to false, sorting and filtering is handled by the table component itself.\r\n * The default is `true`.\r\n * @see load\r\n */\r\n public readonly lazy = input(true);\r\n\r\n /**\r\n * Indicates whether the table has a paginator.\r\n * If set to true, the table will display a paginator at the bottom.\r\n * If set to false, the table will not display a paginator and all rows will be displayed at once.\r\n * The default is `true`.\r\n * In order to customize the number of rows per page, you can set the `rowsPerPageOptions` property.\r\n * @see rowsPerPageOptions\r\n */\r\n public readonly paginator = input(true);\r\n public readonly multiSortMeta = computed(() => {\r\n const orderBy = this.oDataParameters().$orderby;\r\n if (orderBy === null || orderBy === undefined || typeof orderBy !== \"string\")\r\n return undefined;\r\n\r\n return orderBy\r\n .split(\",\")\r\n .map(o => o.trim())\r\n .filter(o => o !== \"\")\r\n .map(o => {\r\n const [field, order] = o.split(\" \");\r\n const orderAsNumber = order?.toLowerCase() === \"desc\" ? -1 : 1;\r\n return { field: field, order: orderAsNumber };\r\n });\r\n });\r\n public readonly oDataParameters = model<ODataParameters>({});\r\n public readonly reflectParametersInUrl = input(true);\r\n /**\r\n * Indicates whether the table rows are highlighted when the mouse hovers over them.\r\n */\r\n public readonly rowHover = input<boolean>(false);\r\n /**\r\n * A function that returns the menu for a row.\r\n * Based on the openedByRightClick parameter, the function can return different menus.\r\n * The menu when it has not been opened by a right click is displayed in an extra column to the right of the table if `showRowMenuAsColumn` is `true`.\r\n * The menu when it has been opened by a right click is displayed as a context menu if `showRowMenuOnRightClick` is `true`.\r\n * @param row The row for which to return the menu.\r\n * @param openedByRightClick Indicates whether the menu was opened by a right click.\r\n * @returns The menu for the row.\r\n * @see showRowMenuAsColumn\r\n * @see showRowMenuOnRightClick\r\n */\r\n public readonly rowMenu = input<(row: TListItem, openedByRightClick: boolean) => MenuItem[]>(() => []);\r\n public readonly rowMenus = computed(() => {\r\n return this.showRowMenuAsColumn() ? this.rows().map(r => this.rowMenu()(r, false)) : [];\r\n });\r\n /**\r\n * A function that returns the style class for a row.\r\n * @param row The row for which to return the style class.\r\n * @param rowIndex The index of the row on the currently displayed page.\r\n * @returns The style class for the row.\r\n */\r\n public readonly rowStyleClass = input<(row: TListItem, rowIndex: number) => string>(() => \"\");\r\n public readonly rowStyleClasses = computed(() => this.rows().map((r, i) => this.rowStyleClass()(r, i)));\r\n /**\r\n * The items that are displayed as table rows.\r\n * Bind this to the items that are displayed as table rows.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n */\r\n public readonly rows = input.required<TListItem[]>();\r\n public readonly rowsBeforeCurrentPage = computed(() => this.oDataParameters().$skip ?? 0);\r\n /**\r\n * The number of rows per page.\r\n * The default is the first element of rowsPerPageOptions.\r\n */\r\n public readonly rowsPerPage = computed(() => this.oDataParameters().$top ?? this.rowsPerPageOptions()[0]);\r\n /**\r\n * The possible values for the number of rows per page.\r\n * The default is [10, 25, 50].\r\n */\r\n public readonly rowsPerPageOptions = input([10, 25, 50]);\r\n /**\r\n * The height of the scrollable table.\r\n * The default is \"flex\".\r\n */\r\n public readonly scrollHeight = input<string>(\"flex\");\r\n /**\r\n * Indicates whether the table is scrollable.\r\n * The default is `true`.\r\n */\r\n public readonly scrollable = input<boolean>(true);\r\n /**\r\n * The template that is used to display the table columns and to filter and sort the items.\r\n * Bind this to the template that is used to display the table columns and to filter and sort the items.\r\n * Normally this is returned from the backend as part of the hal-forms resource from a list endpoint.\r\n */\r\n public readonly searchTemplate = input.required<Template>();\r\n /**\r\n * The currently selected rows.\r\n */\r\n public readonly selectedRows = model<TListItem[]>([]);\r\n /**\r\n * The mode how rows can be selected.\r\n * The default is `null` which means rows cannot be selected.\r\n */\r\n public readonly selectionMode = input<\"single\" | \"multiple\" | null>(null);\r\n public readonly showMenuColumn = computed(() => this.headerMenu().length > 0 || (this.showRowMenuAsColumn() && this.rowMenus().some(m => m.length > 0)));\r\n /**\r\n * Indicates whether the row menu is displayed as a column to the right of the table.\r\n */\r\n public readonly showRowMenuAsColumn = input(true);\r\n /**\r\n * Indicates whether the row menu is displayed as a context menu when the user right clicks on a row.\r\n */\r\n public readonly showRowMenuOnRightClick = input(true);\r\n /**\r\n * The style class for the table.\r\n * The default is \"\".\r\n */\r\n public readonly styleClass = input<string>(\"\");\r\n /**\r\n * The inline style for the table.\r\n */\r\n public readonly tableStyle = input<Record<string, string>>();\r\n public readonly totalRecords = input(0);\r\n public readonly urlParameterPrefix = input(\"\");\r\n\r\n // private _formArray?: FormArray<FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown> }>>;\r\n private readonly _filterMatchModeOptions: { [K in keyof PrimeNG[\"filterMatchModeOptions\"]]: SelectItem[] } & { \"boolean\": SelectItem[] } & { \"enum\": SelectItem[] };\r\n private readonly timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n private _initialQueryParamsSet = false;\r\n private _lastUsedFilters: Partial<Record<string, FilterMetadata | FilterMetadata[]>> = {};\r\n\r\n public constructor(\r\n private readonly _controlContainer: ControlContainer,\r\n private readonly _formService: FormService,\r\n router: Router,\r\n activatedRoute: ActivatedRoute,\r\n primeNGConfig: PrimeNG,\r\n filterService: FilterService) {\r\n this._filterMatchModeOptions = {\r\n text: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.text].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n numeric: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.numeric].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n date: [TranslationKeys.NO_FILTER, ...primeNGConfig.filterMatchModeOptions.date].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n boolean: [TranslationKeys.NO_FILTER, TranslationKeys.EQUALS, TranslationKeys.NOT_EQUALS].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n enum: [TranslationKeys.NO_FILTER, TranslationKeys.EQUALS, TranslationKeys.NOT_EQUALS].map(o => ({ label: primeNGConfig.getTranslation(o), value: o })),\r\n };\r\n\r\n filterService.register(TranslationKeys.NO_FILTER, () => true);\r\n\r\n // Update the form array on changes\r\n effect(() => {\r\n const formArray = this.formArray();\r\n const editTemplate = this.editTemplate();\r\n const rows = this.rows();\r\n const lazy = this.lazy();\r\n\r\n if (!this.isEditable() || !formArray || !editTemplate || !lazy)\r\n return;\r\n\r\n formArray.clear();\r\n\r\n const newControls = rows\r\n .map(r => {\r\n const formGroup = this._formService.createFormGroupFromTemplate(editTemplate) as FormGroup;\r\n formGroup.patchValue(r);\r\n return formGroup;\r\n });\r\n\r\n for (const control of newControls)\r\n formArray.push(control);\r\n });\r\n\r\n // update the url when the oDataParameters change\r\n effect(async () => {\r\n if (!this.reflectParametersInUrl())\r\n return;\r\n\r\n const urlParameterPrefix = this.urlParameterPrefix();\r\n const oDataParameters = this.oDataParameters();\r\n\r\n // Set the initial query parameters on the first change\r\n if (!this._initialQueryParamsSet) {\r\n this._initialQueryParamsSet = true;\r\n const oDataParametersFromUrl = ODataService.createParametersFromRoute(activatedRoute, urlParameterPrefix);\r\n const mergedParameters = { ...oDataParameters, ...oDataParametersFromUrl };\r\n this.oDataParameters.set(mergedParameters);\r\n return;\r\n }\r\n\r\n // Update the query parameters in the url after the first change\r\n const parameters = this.prefixObjectProperties(oDataParameters, urlParameterPrefix);\r\n await router.navigate([], { queryParams: parameters, queryParamsHandling: 'merge' });\r\n });\r\n }\r\n\r\n public getFormGroupAtIndex(indexOnCurrentPage: number): FormGroup<{ [K in keyof TListItem]: AbstractControl<unknown, unknown, any> }> | undefined {\r\n const formArray = this.formArray();\r\n if (!formArray)\r\n return undefined;\r\n\r\n const finalIndex = this.getAbsoluteIndex(indexOnCurrentPage);\r\n\r\n return formArray.at(finalIndex);\r\n }\r\n\r\n public getAbsoluteIndex(indexOnCurrentPage: number): number {\r\n const lazy = this.lazy();\r\n if (!lazy)\r\n return indexOnCurrentPage;\r\n const primeNgTable = this.primeNgTable();\r\n if (!primeNgTable)\r\n return indexOnCurrentPage;\r\n return indexOnCurrentPage - (primeNgTable.first ?? 0);\r\n }\r\n\r\n public load(event: TableLazyLoadEvent) {\r\n this.fixUserFilterErrors(event.filters);\r\n // this.multiSortMeta = event.multiSortMeta;\r\n const currentParameters = this.oDataParameters();\r\n const searchTemplate = this.searchTemplate();\r\n if (!searchTemplate || searchTemplate.properties.length === 0)\r\n return;\r\n\r\n const parameters = ODataService.createParametersFromTableLoadEvent(event, searchTemplate);\r\n ODataService.createFilterMetadataFromODataFilter(parameters.$filter, searchTemplate.propertiesRecord);\r\n if (currentParameters.$filter !== parameters.$filter || currentParameters.$orderby !== parameters.$orderby || currentParameters.$top !== parameters.$top || currentParameters.$skip !== parameters.$skip)\r\n this.oDataParameters.set(parameters);\r\n }\r\n\r\n public openContextMenu(event: MouseEvent, row: TListItem): void {\r\n const contextMenu = this.contextMenu();\r\n if (!this.showRowMenuOnRightClick() || contextMenu === undefined)\r\n return;\r\n\r\n this.contextMenuItems.set(this.rowMenu()(row, true));\r\n contextMenu.show(event);\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n public showInputField(column: Property): boolean {\r\n if (!this.isEditable())\r\n return false;\r\n\r\n const editProperty = this.editProperties()[column.name];\r\n\r\n return editProperty !== undefined && editProperty.type !== PropertyType.Hidden && !editProperty.readOnly;\r\n }\r\n\r\n public toColumnFilterType(property: Property<SimpleValue, string, string> | undefined): ColumnFilterType {\r\n if (!property)\r\n return ColumnFilterType.text;\r\n\r\n const propertyType = property.type;\r\n switch (propertyType) {\r\n case PropertyType.Number:\r\n case PropertyType.Percent:\r\n case PropertyType.Currency:\r\n case PropertyType.Month:\r\n return ColumnFilterType.numeric;\r\n case PropertyType.Bool:\r\n return ColumnFilterType.boolean;\r\n case PropertyType.Date:\r\n case PropertyType.DatetimeLocal:\r\n case PropertyType.DatetimeOffset:\r\n return ColumnFilterType.date;\r\n default:\r\n return property.options ? property.options.link ? ColumnFilterType.numeric : ColumnFilterType.enum : ColumnFilterType.text;\r\n }\r\n }\r\n\r\n public toMatchModeOptions(property: Property<SimpleValue, string, string>): SelectItem<any>[] | undefined {\r\n const columnFilterType = this.toColumnFilterType(property);\r\n return this._filterMatchModeOptions[columnFilterType];\r\n }\r\n\r\n public toMaxFractionDigits(property: Property<SimpleValue, string, string>): number | undefined {\r\n switch (property.type) {\r\n case PropertyType.Number:\r\n case PropertyType.Percent:\r\n case PropertyType.Currency:\r\n return property.step?.toString().split(\".\")[1]?.length ?? 2;\r\n case PropertyType.Month:\r\n return 0;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n private fixUserFilterError(filterEntry: FilterMetadata | undefined, lastFilterEntry: FilterMetadata | undefined, propertyName: string) {\r\n if (!filterEntry)\r\n return;\r\n\r\n if (\r\n lastFilterEntry !== undefined &&\r\n lastFilterEntry.matchMode !== TranslationKeys.NO_FILTER &&\r\n filterEntry.matchMode === TranslationKeys.NO_FILTER) {\r\n // The user changed the mode from something to no filter\r\n // => We reset the value\r\n filterEntry.value = null;\r\n }\r\n else if (\r\n filterEntry.matchMode === TranslationKeys.NO_FILTER &&\r\n (lastFilterEntry === undefined || lastFilterEntry.value === null) &&\r\n filterEntry.value !== null) {\r\n // The user entered a value into the filter, but forgot to change the mode\r\n // => We set the match mode to the default for the type that is not no filter\r\n filterEntry.matchMode = this._filterMatchModeOptions[this.toColumnFilterType(this.searchTemplate().propertiesRecord[propertyName])][1].value;\r\n }\r\n }\r\n\r\n private fixUserFilterErrors(filters?: Partial<Record<string, FilterMetadata | FilterMetadata[]>>) {\r\n if (!filters)\r\n return;\r\n\r\n Object.entries(filters).forEach(([propertyName, filter]) => {\r\n const lastFilter = this._lastUsedFilters[propertyName];\r\n if (Array.isArray(filter)) {\r\n filter.forEach((filterEntry, index) => this.fixUserFilterError(filterEntry, Array.isArray(lastFilter) ? lastFilter[index] : lastFilter, propertyName));\r\n }\r\n else {\r\n this.fixUserFilterError(filter, Array.isArray(lastFilter) ? lastFilter[0] : lastFilter, propertyName);\r\n }\r\n });\r\n this._lastUsedFilters = JSON.parse(JSON.stringify(filters));\r\n }\r\n\r\n private prefixObjectProperties<T extends Record<string, any>, P extends string>(\r\n obj: T,\r\n prefix: P\r\n ): { [K in keyof T as `${P}${string & K}`]: T[K] } {\r\n return Object.fromEntries(\r\n Object.entries(obj).map(([key, value]) => [`${prefix}${key}`, value])\r\n ) as { [K in keyof T as `${P}${string & K}`]: T[K] };\r\n }\r\n}\r\n\r\nenum ColumnFilterType {\r\n text = 'text',\r\n numeric = 'numeric',\r\n boolean = 'boolean',\r\n date = 'date',\r\n enum = 'enum',\r\n}\r\n","<p-table\r\n #table\r\n [value]=\"rows()\"\r\n [columns]=\"columns()\"\r\n [lazy]=\"lazy()\"\r\n [lazyLoadOnInit]=\"false\"\r\n (onLazyLoad)=\"load($event)\"\r\n [paginator]=\"paginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n [rows]=\"rowsPerPage()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [loading]=\"isLoading()\"\r\n sortMode=\"multiple\"\r\n [multiSortMeta]=\"multiSortMeta()\"\r\n [class]=\"styleClass()\"\r\n [tableStyle]=\"tableStyle()\"\r\n [scrollable]=\"scrollable()\"\r\n [scrollHeight]=\"scrollHeight()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [rowHover]=\"rowHover()\"\r\n [(selection)]=\"selectedRows\"\r\n [filters]=\"$any(filters())\"\r\n [first]=\"rowsBeforeCurrentPage()\"\r\n (onSort)=\"onSort($event)\"\r\n >\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @for (col of columns; track col.name) {\r\n <th [pSortableColumn]=\"col.name\">\r\n <div class=\"p-d-flex p-jc-between p-ai-center gap-1\">\r\n {{col.prompt}}\r\n @if(!col.readOnly) {\r\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\r\n @if (lazy()) {\r\n <p-columnFilter #f\r\n [type]=\"toColumnFilterType(col.type)\"\r\n [maxFractionDigits]=\"toMaxFractionDigits(col)\"\r\n matchMode=\"noFilter\"\r\n [matchModeOptions]=\"toMatchModeOptions(col)\"\r\n [showMatchModes]=\"true\"\r\n [field]=\"col.name\"\r\n display=\"menu\"\r\n [maxConstraints]=\"100\"\r\n [class.has-filter]=\"f.hasFilter\">\r\n <ng-template #filter let-value let-filterConstraint=\"filterConstraint\" let-field=\"field\">\r\n <rw-table-column-filter-element [property]=\"col\" [value]=\"value\" [apiName]=\"apiName()\" [filterConstraint]=\"filterConstraint\"></rw-table-column-filter-element>\r\n </ng-template>\r\n </p-columnFilter>\r\n }\r\n }\r\n </div>\r\n </th>\r\n }\r\n @if (showMenuColumn()) {\r\n <th>\r\n <rw-menu-button [items]=\"headerMenu()\"></rw-menu-button>\r\n </th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\r\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode() === null\" [className]=\"rowStyleClasses()[getAbsoluteIndex(rowIndex)]\">\r\n @for (col of columns; track col.name) {\r\n <td [className]=\"cellStyleClasses()[getAbsoluteIndex(rowIndex)][col.name]\">\r\n @let fomrArray = formArray();\r\n @if (showInputField(col) && fomrArray) {\r\n @let formControl = getFormGroupAtIndex(rowIndex);\r\n @if (formControl) {\r\n <ng-container [formGroup]=\"formControl\" >\r\n <rw-input [apiName]=\"apiName()\" [property]=\"editProperties()[col.name]!\"></rw-input>\r\n </ng-container>\r\n }\r\n }\r\n @else {\r\n <rw-display [property]=\"col\" [value]=\"entity[col.name]\" [apiName]=\"apiName()!\"></rw-display>\r\n }\r\n </td>\r\n }\r\n @if (showMenuColumn()) {\r\n <td>\r\n @if (showRowMenuAsColumn()) {\r\n <rw-menu-button [items]=\"rowMenus()[getAbsoluteIndex(rowIndex)]\"></rw-menu-button>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems()\"></p-contextMenu>\r\n","import { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { Component, ContentChild, Directive, ElementRef, TemplateRef, computed, contentChild, forwardRef, input, model, output, viewChild } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, FormArray, FormGroup, FormGroupDirective, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule, type ControlValueAccessor } from '@angular/forms';\r\nimport { FormService, NumberTemplate, Options, OptionsItemDto, Property, PropertyType, SimpleValue, Template, TemplateDto } from '@wertzui/ngx-hal-client';\r\nimport { type MenuItem } from 'primeng/api';\r\nimport { DropdownChangeEvent } from '../../models/events';\r\nimport { PropertyTemplateContext } from '../../models/templating';\r\nimport { PropertyWithOptions, PropertyWithImage } from '../../models/special-properties'\r\nimport { debounce } from '../../util/debounce';\r\nimport { MultiSelect } from 'primeng/multiselect';\r\nimport { RestWorldLabelComponent } from \"../restworld-label/restworld-label.component\";\r\nimport { RestWorldValidationErrorsComponent } from \"../restworld-validation-errors/restworld-validation-errors.component\";\r\nimport { Select, type SelectChangeEvent } from \"primeng/select\";\r\nimport { Tooltip } from \"primeng/tooltip\";\r\nimport { Chip } from 'primeng/chip';\r\nimport { DatePicker } from \"primeng/datepicker\";\r\nimport { InputNumber } from \"primeng/inputnumber\";\r\nimport { RestWorldImageComponent } from \"../restworld-image/restworld-image.component\";\r\nimport { RestWorldFileComponent } from \"../restworld-file/restworld-file.component\";\r\nimport { InputText } from \"primeng/inputtext\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { HalFormsModule } from \"../../directives/property.directives\";\r\nimport { OptionsManager, OptionsService } from \"../../services/options.service\";\r\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\r\nimport { debounceTime, distinctUntilChanged, EMPTY, map, merge, mergeMap, startWith, switchMap } from \"rxjs\";\r\nimport { TriStateCheckbox } from '../restworld-tri-state-checkbox/restworld-tri-state-checkbox.component';\r\nimport { RestWorldTableComponent } from \"../restworld-table/restworld-table.component\";\r\n\r\n/**\r\n * This helper type converts a Property<X, Y, Z> to an OptionsItemDto<X, Y, Z> and preserves the generic parameters.\r\n */\r\nexport type ExtractGenericOptionsItemType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? OptionsItemDto<X, Y, Z> : never\r\nexport type ExtractGenericOptionsSelectedValuesType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? Options<X, Y, Z>[\"selectedValues\"] : never\r\nexport type ExtractValueType<TProperty> = TProperty extends Property<infer X, infer Y, infer Z> ? X : never\r\n\r\n/**\r\n * A base class for all input components..\r\n */\r\n@Directive()\r\nexport abstract class RestWorldInputBaseComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> {\r\n /**\r\n * The property to display.\r\n * @required\r\n */\r\n public readonly property = model.required<TProperty>();\r\n\r\n /**\r\n * Set this to true if the input should use template driven forms instead of the default reactive forms.\r\n */\r\n public readonly useTemplateDrivenForms = input(false);\r\n\r\n public readonly model = model<ExtractValueType<TProperty>>();\r\n}\r\n\r\n/**\r\n * A base class for all input components which also feature lazy loading, like dropdowns.\r\n */\r\n@Directive()\r\nexport abstract class RestWorldInputLazyLoadBaseComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputBaseComponent<TProperty> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n}\r\n\r\n/**\r\n * A form element with a label that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you want a form element without a label, use {@link RestWorldFormInput} `<rw-input>`.\r\n * @example\r\n * <rw-form-element [property]=\"property\" [apiName]=\"apiName\"></rw-form-element>\r\n */\r\n@Component({\r\n selector: 'rw-form-element',\r\n templateUrl: './restworld-form-element/restworld-form-element.component.html',\r\n styleUrls: ['./restworld-form-element/restworld-form-element.component.css'],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputComponent), RestWorldLabelComponent]\r\n})\r\nexport class RestWorldFormElementComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n}\r\n\r\n/**\r\n * A collection that is automatically created from the given property.\r\n * The collection supports drag & drop to re order the elements and can also be nested.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-collection [property]=\"property\" [apiName]=\"apiName\"></rw-input-collection>\r\n */\r\n@Component({\r\n selector: 'rw-input-collection',\r\n templateUrl: './restworld-input-collection/restworld-input-collection.component.html',\r\n styleUrls: ['./restworld-input-collection/restworld-input-collection.component.css'],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [DragDropModule, ReactiveFormsModule, forwardRef(() => RestWorldTableComponent)]\r\n})\r\nexport class RestWorldInputCollectionComponent<TProperty extends Property<SimpleValue, string, string> & { _templates: { default: Template } } = Property<SimpleValue, string, string> & { _templates: { default: Template } }> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public readonly defaultTemplate = computed(() => this.property()._templates.default);\r\n public readonly innerFormArray = computed(() => (this._controlContainer.control as FormGroup<any>)?.controls[this.property().name] as FormArray<FormGroup<any>>);\r\n public readonly templates = computed(() => this.getCollectionEntryTemplates(this.property()));\r\n\r\n public readonly rows = toSignal(\r\n merge(\r\n // Get the initial value when 'control' changes\r\n toObservable(this.innerFormArray).pipe(map((ctl) => ctl.value)),\r\n // Get the new value when 'control.value' changes\r\n toObservable(this.innerFormArray).pipe(mergeMap((ctl) => ctl.valueChanges))\r\n ),\r\n { initialValue: [] }\r\n );\r\n\r\n @ContentChild('inputCollection', { static: false })\r\n public inputCollectionRef?: TemplateRef<unknown>;\r\n public readonly headerMenu = computed(() => {\r\n const isReadOnly = this.property().readOnly;\r\n if (isReadOnly)\r\n return [];\r\n\r\n return [\r\n {\r\n icon: \"fas fa-plus\",\r\n styleClass: \"p-button-outlined p-button-info\",\r\n command: () => this.addNewItemToCollection()\r\n } as MenuItem\r\n ];\r\n });\r\n public readonly rowMenu = computed(() => (row: any, openedByRightClick: boolean) => {\r\n const isReadOnly = this.property().readOnly;\r\n if (isReadOnly)\r\n return [];\r\n\r\n return [\r\n {\r\n icon: \"fas fa-trash-alt\",\r\n label: openedByRightClick ? \"Delete\" : undefined,\r\n tooltip: !openedByRightClick ? \"Delete\" : undefined,\r\n tooltipPosition: \"left\",\r\n styleClass: \"p-button-outlined p-button-danger\",\r\n command: () => this.deleteItemFromCollection(row)\r\n } as MenuItem\r\n ];\r\n });\r\n\r\n\r\n constructor(\r\n private readonly _formService: FormService,\r\n private readonly _controlContainer: ControlContainer,\r\n ) {\r\n super();\r\n }\r\n\r\n private getCollectionEntryTemplates(property?: TProperty): NumberTemplate[] {\r\n if (!property)\r\n return [];\r\n\r\n return Object.entries(property._templates)\r\n .filter(([key, value]) => Number.isInteger(Number.parseInt(key)) && Number.isInteger(Number.parseInt(value?.title ?? \"\")))\r\n .map(([, value]) => new NumberTemplate(value as TemplateDto));\r\n }\r\n\r\n public addNewItemToCollection(): void {\r\n const templates = this.templates();\r\n const defaultTemplate = this.defaultTemplate();\r\n\r\n const maxIndex = Math.max(...Object.keys(templates)\r\n .map(key => Number.parseInt(key))\r\n .filter(key => Number.isSafeInteger(key)));\r\n const nextIndex = maxIndex < 0 ? 0 : maxIndex + 1;\r\n\r\n const copiedTemplateDto = JSON.parse(JSON.stringify(defaultTemplate)) as TemplateDto;\r\n copiedTemplateDto.title = nextIndex.toString();\r\n const copiedTemplate = new Template(copiedTemplateDto);\r\n\r\n this.innerFormArray().push(this._formService.createFormGroupFromTemplate(this.defaultTemplate()));\r\n this.property.update((property) => { property._templates[nextIndex] = copiedTemplate; return { ...property }; });\r\n }\r\n\r\n public deleteItemFromCollection(row: any): void {\r\n const index = this.rows().indexOf(row);\r\n this.innerFormArray().removeAt(index);\r\n }\r\n}\r\n\r\n/**\r\n * A form input element that is automatically created from a property in a form template.\r\n * This may also be a complex object or a collection in which case multiple and nested input elements may be rendered.\r\n * If you also want a label, use {@link RestWorldFormElement} `<rw-form-element>`.\r\n * You can also use one of the different RestWorldInput... `<rw-input-...>` elements to render a specific input,\r\n * but it is advised to control the rendered input through the passed in property.\r\n * @example\r\n * <rw-input [property]=\"property\" [apiName]=\"apiName\"></rw-input>\r\n */\r\n@Component({\r\n selector: 'rw-input',\r\n templateUrl: './restworld-input/restworld-input.component.html',\r\n styleUrls: ['./restworld-input/restworld-input.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputDropdownComponent), forwardRef(() => RestWorldInputObjectComponent), forwardRef(() => RestWorldInputSimpleComponent), RestWorldInputCollectionComponent, RestWorldValidationErrorsComponent, FormsModule]\r\n})\r\nexport class RestWorldInputComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithOptions() {\r\n return PropertyWithOptions<SimpleValue, string, string>;\r\n }\r\n}\r\n\r\n/**\r\n * A dropdown that is automatically created from the given property.\r\n * The dropdown supports searching through a RESTWorld list endpoint on the backend if the `link` of the options is set.\r\n * Otherwise the dropdown will use the `inline` of the options.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-dropdown [property]=\"property\" [apiName]=\"apiName\"></rw-input-dropdown>\r\n */\r\n@Component({\r\n selector: 'rw-input-dropdown',\r\n templateUrl: './restworld-input-dropdown/restworld-input-dropdown.component.html',\r\n styleUrls: ['./restworld-input-dropdown/restworld-input-dropdown.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [Select, ReactiveFormsModule, MultiSelect, Tooltip, Chip, NgTemplateOutlet, HalFormsModule, FormsModule]\r\n})\r\nexport class RestWorldInputDropdownComponent<TProperty extends Property<SimpleValue, string, string> & { options: Options<SimpleValue, string, string> }, TOptionsItem extends ExtractGenericOptionsItemType<TProperty> = ExtractGenericOptionsItemType<TProperty>> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n /**\r\n * A flag that indicates if the search should be case sensitive.\r\n * The default is false.\r\n */\r\n public readonly caseSensitive = input(false);\r\n /**\r\n * A function that returns the label for the given item.\r\n * The default returns the prompt and optionally the value in brackets.\r\n * The value in brackets will only be displayed if the `cols` field of the property is undefined or greater than 1.\r\n * Overwrite this function to change the label.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getLabel = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n /**\r\n * A function that returns the tooltip for the given item.\r\n * The default returns all properties of the item except the ones that start with an underscore or the ones that are in the list of default properties to exclude.\r\n * The default properties to exclude are: createdAt, createdBy, lastChangedAt, lastChangedBy, timestamp, promptField, valueField.\r\n * Overwrite this function to change the tooltip.\r\n * @param item The item to get the label for.\r\n */\r\n public readonly getTooltip = input<(itemOrValue: TOptionsItem | ExtractGenericOptionsSelectedValuesType<TProperty>) => string | undefined>();\r\n\r\n public readonly inputOptionsMultipleRef = contentChild<TemplateRef<PropertyTemplateContext>>(\"inputOptionsMultiple\");\r\n public readonly inputOptionsSingleRef = contentChild<TemplateRef<PropertyTemplateContext>>(\"inputOptionsSingle\");\r\n public readonly multiSelect = viewChild<MultiSelect>(MultiSelect);\r\n /**\r\n * An event that is emitted when the selected value changes.\r\n */\r\n public onChange = output<DropdownChangeEvent<TOptionsItem>>();\r\n public onOptionsFiltered = debounce(this.onOptionsFilteredInternal, 500);\r\n public readonly optionsManager: OptionsManager<TProperty, TOptionsItem>;\r\n\r\n private readonly _formControl = computed(() => {\r\n const formGroup = this._controlContainer.control as FormGroup<any>;\r\n return formGroup.controls[this.property().name] as AbstractControl<ExtractGenericOptionsSelectedValuesType<TProperty> | ExtractGenericOptionsSelectedValuesType<TProperty>[]>;\r\n });\r\n\r\n private readonly _value = toSignal(\r\n toObservable(this._formControl).pipe(\r\n distinctUntilChanged(),\r\n switchMap(formControl =>\r\n formControl\r\n ? formControl.valueChanges.pipe(\r\n debounceTime(0),\r\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b))\r\n ).pipe(startWith(formControl.value))\r\n : EMPTY\r\n )\r\n )\r\n );\r\n\r\n constructor(\r\n private readonly _controlContainer: ControlContainer,\r\n optionsService: OptionsService,\r\n ) {\r\n super();\r\n this.optionsManager = optionsService.getManager(this.apiName, this.property, this._value, this.getLabel, this.getTooltip);\r\n }\r\n\r\n public onOptionsChanged(event: SelectChangeEvent) {\r\n this.onChange.emit({ originalEvent: event.originalEvent!, value: event.value });\r\n }\r\n\r\n public async onOptionsFilteredInternal(event: { originalEvent: Event; filter: string | null }) {\r\n const options = this.optionsManager.options();\r\n const currentItems = this.optionsManager.items.value();\r\n\r\n if (!(event.filter) || event.filter === '')\r\n return;\r\n\r\n if (event.originalEvent.type === \"input\") {\r\n const inputEvent = (event.originalEvent as InputEvent);\r\n if (inputEvent.inputType === \"insertFromPaste\") {\r\n // If the user pasted in multiple ids as comma separated list, we want to get them all and set them as the selected value.\r\n\r\n var values = event.filter\r\n .split(\",\")\r\n .filter(v => v !== '')\r\n .map(v => v.trim())\r\n .map(v => {\r\n const n = Number.parseFloat(v);\r\n return Number.isNaN(n) ? this.makeUpperIfCaseInsensitive(v.toUpperCase(), false) : n;\r\n });\r\n\r\n if (!values || values.length === 0)\r\n return;\r\n\r\n const allAreNumbers = values.every(v => typeof v === \"number\" && !isNaN(v));\r\n const filter = allAreNumbers\r\n ? `${options.valueField} in (${values.join(',')})`\r\n : `contains(${this.makeUpperIfCaseInsensitive(options.promptField, true)}, '${values.join(\"', '\")}')`;\r\n\r\n if ((options?.link?.href))\r\n await this.optionsManager.updateItemsFromFilter(filter);\r\n\r\n if (currentItems) {\r\n const selectedValues = currentItems\r\n .map(i => this.optionsManager.getValue(i))\r\n .filter(v => values.includes(v as unknown as string | number));\r\n this._formControl().setValue(selectedValues);\r\n this.multiSelect()?.resetFilter();\r\n }\r\n }\r\n else {\r\n // This is the normal case where the user types in a filter.\r\n\r\n let filter = `contains(${this.makeUpperIfCaseInsensitive(options.promptField, true)}, '${this.makeUpperIfCaseInsensitive(event.filter, false)}')`;\r\n if (options.valueField?.toLowerCase() === 'id' && !Number.isNaN(Number.parseInt(event.filter)))\r\n filter = `(${options.valueField} eq ${event.filter}) or (${filter})`;\r\n\r\n if ((options?.link?.href))\r\n await this.optionsManager.updateItemsFromFilter(filter);\r\n }\r\n }\r\n }\r\n\r\n private makeUpperIfCaseInsensitive(filter: string | null | undefined, isOData: boolean): string | null | undefined {\r\n if (this.caseSensitive() || typeof filter !== \"string\")\r\n return filter;\r\n\r\n if (isOData)\r\n return `toupper(${filter})`;\r\n\r\n return filter.toUpperCase();\r\n }\r\n}\r\n\r\n/**\r\n * A complex object with multiple properties that is automatically created from the given property.\r\n * The object can also be nested.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-object [property]=\"property\" [apiName]=\"apiName\"></rw-input-object>\r\n */\r\n@Component({\r\n selector: 'rw-input-object',\r\n templateUrl: './restworld-input-object/restworld-input-object.component.html',\r\n styleUrls: ['./restworld-input-object/restworld-input-object.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [forwardRef(() => RestWorldInputTemplateComponent), ReactiveFormsModule, NgTemplateOutlet]\r\n})\r\nexport class RestWorldInputObjectComponent<TProperty extends Property<SimpleValue, string, string> & { _templates: { default: Template } } = Property<SimpleValue, string, string> & { _templates: { default: Template } }> extends RestWorldInputLazyLoadBaseComponent<TProperty> {\r\n public inputObjectRef = contentChild<TemplateRef<unknown>>(\"inputObject\");\r\n\r\n constructor(\r\n private readonly _controlContainer: ControlContainer\r\n ) {\r\n super();\r\n }\r\n\r\n public readonly innerFormGroup = computed(() => {\r\n const formGroup = this._controlContainer.control as FormGroup<any>;\r\n return formGroup.controls[this.property().name] as FormGroup<any>;\r\n });\r\n}\r\n\r\n/**\r\n * A simple input element, like a string, a number or a Date that is automatically created from the given property.\r\n * @remarks It is advised to use {@link RestWorldInputComponent} `<rw-input>` and control the rendered inputs with the passed in property\r\n * instead of using this component directly.\r\n * @example\r\n * <rw-input-simple [property]=\"property\" [apiName]=\"apiName\"></rw-input-simple>\r\n */\r\n@Component({\r\n selector: 'rw-input-simple',\r\n templateUrl: './restworld-input-simple/restworld-input-simple.component.html',\r\n styleUrls: ['./restworld-input-simple/restworld-input-simple.component.css'],\r\n standalone: true,\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RestWorldInputSimpleComponent),\r\n multi: true\r\n }],\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [DatePicker, InputNumber, TriStateCheckbox, RestWorldImageComponent, RestWorldFileComponent, InputText, HalFormsModule, FormsModule]\r\n})\r\nexport class RestWorldInputSimpleComponent<TProperty extends Property<SimpleValue, string, string> = Property<SimpleValue, string, string>> extends RestWorldInputBaseComponent<TProperty> implements ControlValueAccessor {\r\n private static readonly _dateFormat = new Date(3333, 10, 22) // months start at 0 in JS\r\n .toLocaleDateString()\r\n .replace(\"22\", \"dd\")\r\n .replace(\"11\", \"mm\")\r\n .replace(\"3333\", \"yy\")\r\n .replace(\"33\", \"y\");\r\n private static readonly _timeFormat = new Date(1, 1, 1, 22, 33, 44)\r\n .toLocaleTimeString()\r\n .replace(\"22\", \"hh\")\r\n .replace(\"33\", \"mm\")\r\n .replace(\"44\", \"ss\");\r\n\r\n private readonly _inputChild = viewChild<ElementRef<HTMLInputElement | HTMLTextAreaElement>>(\"inputElement\");\r\n private readonly _controlChild = viewChild<ControlValueAccessor>(NG_VALUE_ACCESSOR);\r\n\r\n\r\n constructor(\r\n ) {\r\n super();\r\n }\r\n writeValue(obj: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.writeValue(obj);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.value = obj;\r\n }\r\n registerOnChange(fn: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.registerOnChange(fn);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.oninput = (event) => fn((event.target as HTMLInputElement | HTMLTextAreaElement).value);\r\n }\r\n registerOnTouched(fn: any): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined)\r\n controlChild.registerOnTouched(fn);\r\n else if (inputChild !== undefined)\r\n inputChild.nativeElement.onblur = (event) => fn();\r\n }\r\n setDisabledState?(isDisabled: boolean): void {\r\n const controlChild = this._controlChild();\r\n const inputChild = this._inputChild();\r\n if (controlChild !== undefined && controlChild.setDisabledState !== undefined)\r\n controlChild.setDisabledState(isDisabled);\r\n else if (inputChild !== undefined) {\r\n if (isDisabled)\r\n inputChild.nativeElement.setAttribute(\"disabled\", \"disabled\");\r\n else\r\n inputChild.nativeElement.removeAttribute(\"disabled\");\r\n }\r\n }\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n public get PropertyWithImage() {\r\n return PropertyWithImage;\r\n }\r\n\r\n public get dateFormat(): string {\r\n return RestWorldInputSimpleComponent._dateFormat;\r\n }\r\n\r\n // public readonly formControl = computed(() => {\r\n // const formGroup = this._controlContainer.control as FormGroup<any>;\r\n // return formGroup.controls[this.property().name] as FormControl<SimpleValue | SimpleValue[]>;\r\n // });\r\n\r\n public get timeFormat() {\r\n return RestWorldInputSimpleComponent._timeFormat;\r\n }\r\n}\r\n\r\n/**\r\n * A collection of `<rw-form>` elements automatically created from a template.\r\n * Does not have any buttons on its own.\r\n * If you want buttons, use {@link RestWorldForm} `<rw-form>`.\r\n * @example\r\n * <rw-form-collection [template]=\"template\" [apiName]=\"apiName\"></rw-form-collection>\r\n */\r\n@Component({\r\n selector: 'rw-input-template',\r\n templateUrl: './restworld-input-template/restworld-input-template.component.html',\r\n styleUrls: ['./restworld-input-template/restworld-input-template.component.css'],\r\n standalone: true,\r\n viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],\r\n imports: [RestWorldFormElementComponent]\r\n})\r\nexport class RestWorldInputTemplateComponent<T extends { [K in keyof T]: AbstractControl<any, any>; }> {\r\n /**\r\n * The name of the API to use for the property.\r\n * @required\r\n * @remarks This is the name of the API as defined in the `RestWorldClientCollection`.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * The template to display.\r\n * @required\r\n * @remarks This is the template that defines the properties to display.\r\n */\r\n public readonly template = input.required<Template | NumberTemplate>();\r\n}\r\n","<div class=\"grid field\">\r\n <rw-label [property]=\"property()\" class=\"col-12 md:col-2 flex align-items-center\"></rw-label>\r\n <rw-input [apiName]=\"apiName()\" [property]=\"property()\" class=\"col-12 md:col-10\"></rw-input>\r\n</div>\r\n","<rw-table\r\n [apiName]=\"apiName()\"\r\n [editTemplate]=\"defaultTemplate()\"\r\n [formArrayName]=\"property().name\"\r\n [lazy]=\"false\"\r\n [rows]=\"rows()\"\r\n [searchTemplate]=\"defaultTemplate()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n\r\n >\r\n</rw-table>\r\n","@if (property()) {\r\n @if (property().options) {\r\n <rw-input-dropdown [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-dropdown>\r\n }\r\n @else {\r\n @switch (property().type) {\r\n @case (PropertyType.Object) {\r\n <rw-input-object [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-object>\r\n }\r\n @case (PropertyType.Collection) {\r\n <rw-input-collection [apiName]=\"apiName()\" [property]=\"$any(property())\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-collection>\r\n }\r\n @default {\r\n <rw-input-simple [property]=\"property()\" [useTemplateDrivenForms]=\"useTemplateDrivenForms()\"></rw-input-simple>\r\n }\r\n }\r\n }\r\n\r\n <rw-validation-errors [property]=\"property()\"></rw-validation-errors>\r\n}\r\n","<ng-template #defaultInputOptionsSingle let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\r\n @if (useTemplateDrivenForms()) {\r\n <p-select\r\n [propertyAttributes]=\"property()\"\r\n [(ngModel)]=\"model\"\r\n [options]=\"optionsManager.items.value()\"\r\n (onFilter)=\"onOptionsFiltered($event)\"\r\n (onChange)=\"onOptionsChanged($event)\"\r\n styleClass=\"w-full\"\r\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\r\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\r\n [loading]=\"optionsManager.loading()\"\r\n >\r\n <ng-template #selectedItem let-selectedItem>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\r\n </ng-template>\r\n <ng-template #item let-item>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\r\n </ng-template>\r\n </p-select>\r\n }\r\n @else {\r\n <p-select\r\n [formControlProperty]=\"property()\"\r\n [options]=\"optionsManager.items.value()\"\r\n (onFilter)=\"onOptionsFiltered($event)\"\r\n (onChange)=\"onOptionsChanged($event)\"\r\n styleClass=\"w-full\"\r\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\r\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\r\n [loading]=\"optionsManager.loading()\"\r\n >\r\n <ng-template #selectedItem let-selectedItem>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(selectedItem)\">{{optionsManager.getLabel()(selectedItem)}}</span>\r\n </ng-template>\r\n <ng-template #item let-item>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\r\n </ng-template>\r\n </p-select>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultInputOptionsMultiple let-property=\"property\" let-template=\"template\" let-items=\"items\" let-useTemplateDrivenForms=\"useTemplateDrivenForms\">\r\n @if (useTemplateDrivenForms()) {\r\n <p-multiSelect\r\n [propertyAttributes]=\"property()\"\r\n [(ngModel)]=\"model\"\r\n [options]=\"optionsManager.items.value()\"\r\n (onFilter)=\"onOptionsFiltered($event)\"\r\n (onChange)=\"onOptionsChanged($event)\"\r\n styleClass=\"w-full\"\r\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\r\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\r\n [loading]=\"optionsManager.loading()\"\r\n >\r\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\r\n @for (item of items; track item; let i = $index) {\r\n <p-chip\r\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\r\n [label]=\"optionsManager.getLabel()(item)\"\r\n [removable]=\"true\"\r\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\r\n >\r\n </p-chip>\r\n }\r\n </ng-template>\r\n <ng-template #item let-item>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\r\n </ng-template>\r\n </p-multiSelect>\r\n }\r\n @else {\r\n <p-multiSelect\r\n [formControlProperty]=\"property()\"\r\n [options]=\"optionsManager.items.value()\"\r\n (onFilter)=\"onOptionsFiltered($event)\"\r\n (onChange)=\"onOptionsChanged($event)\"\r\n styleClass=\"w-full\"\r\n [panelStyleClass]=\"optionsManager.loading() ? 'loading' : ''\"\r\n [emptyFilterMessage]=\"optionsManager.loading() ? 'Loading...' : ''\"\r\n [loading]=\"optionsManager.loading()\"\r\n >\r\n <ng-template #selecteditems let-items let-removeChip=\"removeChip\">\r\n @for (item of items; track item; let i = $index) {\r\n <p-chip\r\n [pTooltip]=\"optionsManager.getTooltip()(item)\"\r\n [label]=\"optionsManager.getLabel()(item)\"\r\n [removable]=\"true\"\r\n (onRemove)=\"removeChip(optionsManager.getValue(item), $event)\"\r\n >\r\n </p-chip>\r\n }\r\n </ng-template>\r\n <ng-template #item let-item>\r\n <span [pTooltip]=\"optionsManager.getTooltip()(item)\">{{optionsManager.getLabel()(item)}}</span>\r\n </ng-template>\r\n </p-multiSelect>\r\n }\r\n</ng-template>\r\n\r\n@if(!optionsManager.options().maxItems || optionsManager.options().maxItems == 1) {\r\n <ng-container *ngTemplateOutlet=\"inputOptionsSingleRef() ?? defaultInputOptionsSingle; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\r\n}\r\n@else {\r\n <ng-container *ngTemplateOutlet=\"inputOptionsMultipleRef() ?? defaultInputOptionsMultiple; context: { property: property, apiName: apiName, items: optionsManager.items, useTemplateDrivenForms: useTemplateDrivenForms, model: model }\"></ng-container>\r\n}\r\n","<ng-template #defaultInputObject let-property=\"property\" let-innerFormGroup=\"innerFormGroup\", let-apiName=\"apiName\">\r\n <div class=\"flex align-items-center\">\r\n <div class=\"brace\">\r\n </div>\r\n <div class=\"w-full\">\r\n <rw-input-template [formGroup]=\"innerFormGroup()\" [template]=\"property()._templates.default\" [apiName]=\"apiName()\"></rw-input-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-container>\r\n <ng-container *ngTemplateOutlet=\"inputObjectRef() || defaultInputObject; context: { property: property, innerFormGroup: innerFormGroup, apiName: apiName }\"></ng-container>\r\n</ng-container>\r\n","@switch(property().type) {\r\n @case (PropertyType.Textarea) {\r\n @if (useTemplateDrivenForms()){\r\n <textarea #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n @else {\r\n <textarea #inputElement [formControlProperty]=\"property()\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\"></textarea>\r\n }\r\n }\r\n @case (PropertyType.Date) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Month) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Time) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.DatetimeLocal) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Number) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-inputNumber [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n @else {\r\n <p-inputNumber inputMode=\"decimal\" [formControlProperty]=\"property()\" class=\"w-full\" styleClass=\"w-full\"></p-inputNumber>\r\n }\r\n }\r\n @case (PropertyType.Bool) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-tri-state-checkbox [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [required]=\"property().required ?? false\"></rw-tri-state-checkbox>\r\n }\r\n @else {\r\n <rw-tri-state-checkbox [formControlProperty]=\"property()\" [required]=\"property().required\"></rw-tri-state-checkbox>\r\n }\r\n }\r\n @case (PropertyType.DatetimeOffset) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Duration) {\r\n @if (useTemplateDrivenForms()) {\r\n <p-datepicker [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n @else {\r\n <p-datepicker [formControlProperty]=\"property()\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\"></p-datepicker>\r\n }\r\n }\r\n @case (PropertyType.Image) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-image [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n @else {\r\n <rw-image [formControlName]=\"property().name\" [property]=\"$any(property())\"></rw-image>\r\n }\r\n }\r\n @case (PropertyType.File) {\r\n @if (useTemplateDrivenForms()) {\r\n <rw-file [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n @else {\r\n <rw-file [formControlName]=\"property().name\" [fileName]=\"property().name\" [accept]=\"$any(property().placeholder)\"></rw-file>\r\n }\r\n }\r\n @default {\r\n <!-- <input [formControlName]=\"property().name\" [id]=\"property().name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property().readOnly\" /> -->\r\n @if (useTemplateDrivenForms()) {\r\n <input #inputElement [propertyAttributes]=\"property()\" [(ngModel)]=\"model\" pInputText class=\"w-full\" />\r\n }\r\n @else {\r\n <input #inputElement [formControlProperty]=\"property()\" pInputText class=\"w-full\" />\r\n }\r\n }\r\n}\r\n","@for (property of template().properties; track property.name) {\r\n <rw-form-element [property]=\"property\" [apiName]=\"apiName()\"></rw-form-element>\r\n}\r\n","import { Component, ContentChild, ElementRef, TemplateRef, computed, contentChild, effect, input, model, output, signal } from '@angular/core';\r\nimport { AbstractControl, FormGroup, ReactiveFormsModule, UntypedFormArray, UntypedFormGroup } from '@angular/forms';\r\nimport { FormService, FormsResource, ProblemDetails, PropertyDto, SimpleValue, Template } from '@wertzui/ngx-hal-client';\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { AfterSubmitOkEvent, AfterSubmitRedirectEvent } from '../../models/events';\r\nimport { Subscription } from 'rxjs';\r\nimport { RestWorldValidationErrorsComponent } from \"../restworld-validation-errors/restworld-validation-errors.component\";\r\nimport { RestWorldInputTemplateComponent } from \"../restworld-inputs/restworld-inputs\";\r\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\r\nimport { ButtonModule } from \"primeng/button\";\r\nimport { RippleModule } from \"primeng/ripple\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { ProblemService } from \"../../services/problem.service\";\r\n\r\n/**\r\n * A form with Save, Reload and Delete buttons.\r\n * If you do not want buttons, use RestWorldFormTemplateComponent <rw-form-template>.\r\n * You can also provide your own buttons by passing in a template.\r\n * @example\r\n * <rw-form\r\n * [template]=\"template\"\r\n * apiName=\"apiName\"\r\n * rel=\"rel\"\r\n * [allowSubmit]=\"true\"\r\n * [allowDelete]=\"true\"\r\n * [allowReload]=\"true\"\r\n * [showSubmit]=\"true\"\r\n * [showDelete]=\"true\"\r\n * [showReload]=\"true\">\r\n * <ng-template #content let-form=\"form\" let-template=\"template\" let-apiName=\"apiName\">\r\n * <!-- Custom form content here -->\r\n * <!-- This is optional and will replace the default which renders labels and inputs if present -->\r\n * </ng-template>\r\n * <ng-template #buttons let-form=\"form\" let-template=\"template\" let-apiName=\"apiName\">\r\n * <!-- Custom buttons here -->\r\n * <!-- This is optional and will replace the default which renders the Save, Reload and Delete buttons if present -->\r\n * </ng-template>\r\n * </rw-form>\r\n */\r\n@Component({\r\n selector: 'rw-form',\r\n templateUrl: './restworld-form.component.html',\r\n styleUrls: ['./restworld-form.component.css'],\r\n standalone: true,\r\n imports: [ReactiveFormsModule, RestWorldValidationErrorsComponent, RestWorldInputTemplateComponent, ProgressSpinnerModule, ButtonModule, RippleModule, NgTemplateOutlet]\r\n})\r\nexport class RestWorldFormComponent<TPropertyDtos extends ReadonlyArray<PropertyDto<SimpleValue, string, string>>> {\r\n /**\r\n * Emitted after the resource has been deleted.\r\n */\r\n public readonly afterDelete = output<void>();\r\n /**\r\n * Emitted after the form has been submitted.\r\n */\r\n public readonly afterSubmit = output<AfterSubmitOkEvent | AfterSubmitRedirectEvent>();\r\n /**\r\n * Determines whether to enable the delete button.\r\n */\r\n public readonly allowDelete = input(true);\r\n /**\r\n * Determines whether to enable the reload button.\r\n */\r\n public readonly allowReload = input(true);\r\n /**\r\n * Determines whether to enable the submit button.\r\n */\r\n public readonly allowSubmit = input(true);\r\n /**\r\n * The name of the API to use.\r\n */\r\n public readonly apiName = input.required<string>();\r\n /**\r\n * Determines whether the resource can be deleted.\r\n */\r\n public readonly canDelete = computed(() =>\r\n this.allowDelete() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n this.template().method == \"PUT\" &&\r\n this.formGroup() !== undefined &&\r\n this.formGroup()?.value.id !== undefined &&\r\n this.formGroup()?.value.timestamp !== undefined &&\r\n !this.isLoading());\r\n /**\r\n * Determines whether the form can be reloaded.\r\n */\r\n public readonly canReload = computed(() =>\r\n this.allowReload() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n this.template().title !== undefined &&\r\n this.template().properties.some(p => p.name === \"id\" && p.value !== undefined && p.value !== null && p.value !== 0) &&\r\n !this.isLoading());\r\n /**\r\n * Determines whether the form can be submitted.\r\n */\r\n public readonly canSubmit = computed(() =>\r\n this.allowSubmit() &&\r\n this.template() !== undefined &&\r\n this.template().target !== undefined &&\r\n !this.isLoading() &&\r\n this.formGroup() !== undefined);\r\n /**\r\n * The form group that represents the form.\r\n */\r\n public readonly formGroup = computed(() => this._formService.createFormGroupFromTemplate(this.template()));\r\n public readonly isLoading = signal(false);\r\n /**\r\n * The rel of the form.\r\n */\r\n public readonly rel = input.required<string>();\r\n /**\r\n * Determines whether to show the delete button.\r\n */\r\n public readonly showDelete = input(true);\r\n /**\r\n * Determines whether to show the reload button.\r\n */\r\n public readonly showReload = input(true);\r\n /**\r\n * Determines whether to show the submit button.\r\n */\r\n public readonly showSubmit = input(true);\r\n /**\r\n * The template used to render the form.\r\n */\r\n public readonly template = model.required<Template<TPropertyDtos>>();\r\n /**\r\n * Emitted when the form value changes.\r\n */\r\n public readonly valueChanges = output<any>();\r\n\r\n /**\r\n * A reference to a template that can be used to render custom buttons for the form.\r\n */\r\n public readonly buttonsRef = contentChild<TemplateRef<unknown>>('buttons');\r\n /**\r\n * A reference to a template that can be used to render content before the default buttons.\r\n */\r\n public readonly beforeButtonsRef = contentChild<TemplateRef<unknown>>('beforeButtons');\r\n /**\r\n * A reference to a template that can be used to render content after the default buttons.\r\n */\r\n public readonly afterButtonsRef = contentChild<TemplateRef<unknown>>('afterButtons');\r\n /**\r\n * A reference to a template that can be used to render custom content inside the <form> element instead of the default form.\r\n */\r\n public readonly contentRef = contentChild<TemplateRef<unknown>>('content');\r\n\r\n private readonly _client = computed(() => this._clients.getClient(this.apiName()));\r\n\r\n private _formValueChangesSubscription?: Subscription;\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _confirmationService: ConfirmationService,\r\n private readonly _messageService: MessageService,\r\n private readonly _formService: FormService,\r\n private readonly _elementRef: ElementRef<HTMLElement>,\r\n private readonly _problemService: ProblemService) {\r\n // Update the form value changes subscription to always track the current form group.\r\n effect(() => {\r\n this._formValueChangesSubscription?.unsubscribe();\r\n const formGroup = this.formGroup();\r\n this._formValueChangesSubscription = formGroup?.valueChanges.subscribe(newValue => this.valueChanges.emit(newValue));\r\n this.valueChanges.emit(formGroup?.value);\r\n });\r\n }\r\n\r\n public async delete(): Promise<void> {\r\n if (!this.canDelete())\r\n return;\r\n\r\n const formGroup = this.formGroup();\r\n if (formGroup === undefined)\r\n throw new Error(\"formGroup cannot be undefined.\");\r\n\r\n const template = this.template();\r\n if (template === undefined)\r\n throw new Error(\"template cannot be undefined.\");\r\n\r\n // canDelete already checks that the timestamp is present, so the cast is safe.\r\n const result = await this._client().deleteByTemplateAndForm(template, formGroup as unknown as FormGroup<{ timestamp: AbstractControl<string> }>);\r\n if (this._problemService.checkResponseAndDisplayErrors(result, formGroup)) {\r\n this._messageService.add({ severity: 'success', summary: 'Deleted', detail: 'The resource has been deleted.' })\r\n this.afterDelete.emit();\r\n }\r\n }\r\n\r\n public async reload(): Promise<void> {\r\n const canReload = this.canReload();\r\n const template = this.template();\r\n if (!canReload || template === undefined)\r\n return;\r\n\r\n this.isLoading.set(true);\r\n\r\n try {\r\n const response = await this._client().getForm(template.target!);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, this.formGroup())) {\r\n this.template.set(response.body!.getTemplateByTitle(template.title!) as Template<TPropertyDtos>);\r\n }\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `An unknown error occurred. ${JSON.stringify(e)}`, sticky: true });\r\n console.log(e);\r\n }\r\n\r\n this.isLoading.set(false);\r\n }\r\n\r\n public showDeleteConfirmatioModal() {\r\n this._confirmationService.confirm({\r\n message: 'Do you really want to delete this resource?',\r\n header: 'Confirm delete',\r\n icon: 'far fa-trash-alt',\r\n accept: () => this.delete()\r\n });\r\n }\r\n\r\n public async submit() {\r\n const formGroup = this.formGroup();\r\n const template = this.template();\r\n\r\n if (formGroup !== undefined) {\r\n formGroup.markAllAsTouched();\r\n\r\n if (!formGroup.valid) {\r\n this._messageService.add({\r\n severity: 'error',\r\n summary: 'Error',\r\n detail: 'Please correct the errors before submitting.',\r\n });\r\n\r\n ProblemService.scrollToFirstValidationError(this._elementRef.nativeElement);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canSubmit() || formGroup === undefined || template === undefined)\r\n return;\r\n\r\n this.isLoading.set(true);\r\n\r\n try {\r\n const response = await this._client().submit(template, formGroup.value);\r\n\r\n if (!this._problemService.checkResponseAndDisplayErrors(response, formGroup, \"Error while saving the resource\")) {\r\n }\r\n else if (response.status == 201) {\r\n if (!response.headers.has('Location')) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'The server returned a 201 Created response, but did not return a Location header.', data: response, sticky: true });\r\n return;\r\n }\r\n\r\n this._messageService.add({ severity: 'success', summary: 'Created', detail: 'The resource has been created.' });\r\n\r\n var createdAtUri = response.headers.get('Location')!;\r\n this.afterSubmit.emit({ location: createdAtUri, status: 201 });\r\n }\r\n else {\r\n const responseResource = (response.body as FormsResource);\r\n const newTemplate = responseResource.getTemplateByTitle(template.title!) as Template<TPropertyDtos>;\r\n this.template.set(newTemplate);\r\n\r\n this._messageService.add({ severity: 'success', summary: 'Saved', detail: 'The resource has been saved.' });\r\n\r\n this.afterSubmit.emit({ old: template, new: newTemplate, status: 200 });\r\n }\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `An unknown error occurred. ${JSON.stringify(e)}`, sticky: true });\r\n console.log(e);\r\n }\r\n\r\n this.isLoading.set(false);\r\n }\r\n}\r\n","@if (formGroup() !== undefined && template() !== undefined) {\r\n <form [formGroup]=\"formGroup()\" (ngSubmit)=\"submit()\">\r\n <div class=\"blockable-container\">\r\n <div class=\"blockable-element\">\r\n <div class=\"grid field\">\r\n <div class=\"col-12 md:col-10 md:col-offset-2\">\r\n <rw-validation-errors [form]=\"formGroup()\"></rw-validation-errors>\r\n </div>\r\n </div>\r\n <ng-template #defaultContent>\r\n <rw-input-template [template]=\"template()\" [apiName]=\"apiName()\"></rw-input-template>\r\n </ng-template>\r\n <ng-container\r\n *ngTemplateOutlet=\"contentRef() ?? defaultContent; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\r\n </div>\r\n @if (isLoading()) {\r\n <div class=\"blockable-overlay\">\r\n <p-progressSpinner></p-progressSpinner>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <ng-template #defaultButtons>\r\n @if (beforeButtonsRef(); as beforeButtons) {\r\n <ng-container\r\n *ngTemplateOutlet=\"beforeButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\r\n }\r\n <button pButton pRipple type=\"submit\" label=\"Save\" icon=\"far fa-save\" class=\"mx-2 p-button-success\"\r\n [disabled]=\"!allowSubmit()\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Reload\" icon=\"fas fa-redo\" class=\"mx-2 p-button-info\"\r\n (click)=\"reload()\" [disabled]=\"!canReload()\"></button>\r\n <button pButton pRipple type=\"button\" label=\"Delete\" icon=\"far fa-trash-alt\"\r\n class=\"ml-2 p-button-danger\" (click)=\"showDeleteConfirmatioModal()\"\r\n [disabled]=\"!canDelete()\"></button>\r\n @if (afterButtonsRef(); as afterButtons) {\r\n <ng-container\r\n *ngTemplateOutlet=\"afterButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\r\n }\r\n </ng-template>\r\n <ng-container\r\n *ngTemplateOutlet=\"buttonsRef() ?? defaultButtons; context: { form: formGroup, template: template, apiName: apiName() }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ProblemDetails, Resource } from '@wertzui/ngx-hal-client';\r\nimport { RestWorldClient } from '../../services/restworld-client';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { MessageService } from 'primeng/api';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { InputNumberModule } from \"primeng/inputnumber\";\r\nimport { ButtonModule } from \"primeng/button\";\r\n\r\n/**\r\n * Component for navigating to a resource by its ID.\r\n * \r\n * @remarks\r\n * This component is used to navigate to a resource by its ID. It takes in the API name, the `rel` of the resource, and an optional `urlPrefix` to use for the URL that is returned from the backend. It also provides a form for entering the ID of the resource to navigate to.\r\n */\r\n@Component({\r\n selector: 'rw-id-navigation',\r\n templateUrl: './restworld-id-navigation.component.html',\r\n styleUrls: ['./restworld-id-navigation.component.css'],\r\n standalone: true,\r\n imports: [InputNumberModule, ButtonModule, ReactiveFormsModule]\r\n})\r\nexport class RestWorldIdNavigationComponent {\r\n public readonly apiName = input.required<string>();\r\n public readonly rel = input.required<string>();\r\n /**\r\n * A prefix to use for the URL that is returned from the backend.\r\n * If none is provided, a relative navigation will be performed which means that the last part of the current URL is replaced with the one from the backend.\r\n */\r\n public readonly urlPrefix = input<string>();\r\n\r\n public idNavigationForm = new FormGroup<{\r\n id: FormControl<number | null>\r\n }>({\r\n id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))\r\n });\r\n\r\n private _client = computed(() => this._clients.getClient(this.apiName()));\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _messageService: MessageService,\r\n private readonly _router: Router,\r\n private readonly _route: ActivatedRoute) {\r\n }\r\n\r\n public async navigateById(): Promise<void> {\r\n const rel = this.rel();\r\n if (!rel)\r\n throw new Error('The \"rel\" must be set through the uri of this page for the ID navigation to work.');\r\n\r\n if (!this.idNavigationForm.valid) {\r\n this._messageService.add({ detail: 'You must enter a valid ID to naviage to.', severity: 'error' });\r\n return;\r\n }\r\n var idToNavigateTo = this.idNavigationForm.controls.id.value;\r\n\r\n var client = this._client();\r\n\r\n var response = await client.getList<Resource>(rel, { $filter: `id eq ${idToNavigateTo}` });\r\n if (!response.ok || ProblemDetails.isProblemDetails(response.body) || !response.body) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API.', data: response });\r\n return;\r\n }\r\n\r\n var resource = response.body?._embedded?.items?.[0];\r\n if (!resource) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'No resource found with the specified ID.' });\r\n return;\r\n }\r\n\r\n const urlPrefix = this.urlPrefix();\r\n if (urlPrefix !== undefined)\r\n await this._router.navigate([urlPrefix, resource._links.self[0].href]);\r\n else\r\n await this._router.navigate([\"..\", resource._links.self[0].href], { relativeTo: this._route });\r\n\r\n this.idNavigationForm.reset();\r\n }\r\n}\r\n","<form [formGroup]=\"idNavigationForm\" (ngSubmit)=\"navigateById()\" class=\"mr-3\">\r\n <div class=\"p-inputgroup\">\r\n <p-inputNumber formControlName=\"id\" placeholder=\"Navigate by ID\"></p-inputNumber>\r\n <button type=\"submit\" pButton pRipple icon=\"fa-solid fa-arrow-right\"></button>\r\n </div>\r\n</form>\r\n","export class RestWorldOptions {\r\n constructor(public readonly BaseUrl: string, public readonly Version?: number) {\r\n if (!BaseUrl.endsWith('/'))\r\n throw new Error(`The provided BaseUrl '${BaseUrl}' does not end with a slash '/'.`);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Cast super type into type using generics\r\n * Return Type obtained by optional @param type OR assignment type.\r\n * @example\r\n * <div *ngFor=\"let item of items | as: Item\">\r\n */\r\n@Pipe({\r\n name: 'as',\r\n standalone: true\r\n})\r\nexport class AsPipe implements PipeTransform {\r\n /**\r\n * Cast (S: SuperType) into (T: Type) using @Generics.\r\n * @param value (S: SuperType) obtained from input type.\r\n * @optional @param type (T CastingType)\r\n * type?: { new (): T }\r\n * type?: new () => T\r\n */\r\n transform<S, T extends S>(value: S, type: new (...args: any[]) => T): T {\r\n return value as T;\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { ClientSettings } from \"../models/client-settings\";\r\nimport { RestWorldOptions } from \"../models/restworld-options\";\r\nimport { RestWorldClientCollection } from \"./restworld-client-collection\";\r\nimport { provideRestWorld } from \"../provide-restworld\";\r\n\r\n/**\r\n * This service is responsible for loading the settings from the client-backend and setting up the RestWorldClientCollection.\r\n * It is automatically provided by the {@link provideRestWorld()} function.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsService {\r\n private static _settings: ClientSettings | undefined;\r\n\r\n private initialized = false;\r\n private initializing = false;\r\n\r\n constructor(\r\n private _clients: RestWorldClientCollection) {\r\n }\r\n\r\n public get settings(): ClientSettings | undefined {\r\n return SettingsService._settings;\r\n }\r\n\r\n private static async ensureSettingsAreLoaded(): Promise<void> {\r\n if (SettingsService._settings === undefined) {\r\n const response = await fetch('/settings');\r\n const settings: ClientSettings = await response.json();\r\n SettingsService._settings = settings;\r\n }\r\n }\r\n\r\n /**\r\n * Ensures that the settings are loaded and the RestWorldClientCollection is set up.\r\n * This method is called automatically by {@link provideRestWorld()}\r\n * */\r\n public async ensureInitialized(): Promise<void> {\r\n if (this.initializing || this.initialized)\r\n return;\r\n\r\n this.initializing = true;\r\n\r\n await SettingsService.ensureSettingsAreLoaded();\r\n await this.populateRESTworldClientCollectionFromSettings();\r\n\r\n this.initialized = true;\r\n this.initializing = false;\r\n }\r\n\r\n private async populateRESTworldClientCollectionFromSettings(): Promise<void> {\r\n if (!this.settings?.apiUrls)\r\n return;\r\n\r\n await Promise.all(this.settings.apiUrls\r\n .map(api => this._clients.addOrGetExistingClient(api.name, new RestWorldOptions(api.url, api.version))));\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { NavigationEnd, Router } from \"@angular/router\";\r\nimport { HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { AlwaysOffSampler, AlwaysOnSampler, BatchSpanProcessor, ConsoleSpanExporter, ParentBasedSampler, SimpleSpanProcessor, SpanProcessor, StackContextManager, TraceIdRatioBasedSampler, WebTracerProvider } from '@opentelemetry/sdk-trace-web';\r\nimport { SettingsService } from \"./settings.service\";\r\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-proto\";\r\nimport { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base';\r\nimport { ClientSettings } from \"../models/client-settings\";\r\nimport { resourceFromAttributes } from \"@opentelemetry/resources\";\r\nimport { context, trace, Span, SpanKind, Tracer } from '@opentelemetry/api';\r\nimport { filter } from 'rxjs/operators';\r\nimport { ATTR_SERVICE_NAME } from \"@opentelemetry/semantic-conventions\";\r\n\r\n/**\r\n * This service is responsible for setting up OpenTelemetry.\r\n * It will initialize the OpenTelemetry SDK and register the instrumentations.\r\n * It will also set up the exporters and samplers.\r\n *\r\n * The settings for the OpenTelemetry SDK are loaded from the {@link SettingsService}.\r\n *\r\n * @remarks\r\n * This service is automatically initialized by the `APP_INITIALIZER` in the {@link RestworldClientModule}.\r\n */\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class OpenTelemetryService {\r\n private _tracer: any;\r\n private _activeNavigationSpan: Span | null = null;\r\n private _lastNavigationPath: string | null = null;\r\n\r\n constructor(\r\n private readonly _settingsService: SettingsService,\r\n private readonly _router: Router\r\n ) {\r\n // Listen for navigation events to create parent spans\r\n this._router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe((event: any) => {\r\n this.createNavigationSpan((event as NavigationEnd).urlAfterRedirects);\r\n });\r\n\r\n // Listen for beforeunload event to end the span when user leaves the application\r\n window.addEventListener('beforeunload', () => {\r\n this.endCurrentNavigationSpan();\r\n });\r\n }\r\n\r\n /**\r\n * Sets the current span as active in the global context\r\n * This ensures that new spans created after this will automatically\r\n * become child spans of this active span\r\n */\r\n private activateNavigationContext(): void {\r\n if (this._activeNavigationSpan) {\r\n // Make this span the active span in the current context\r\n const activeContext = trace.setSpan(context.active(), this._activeNavigationSpan);\r\n\r\n // Use ZoneContextManager to persist this context across async operations\r\n // This is important for Angular applications that use zones\r\n context.with(activeContext, () => {\r\n // The context remains active for all operations within this callback\r\n // and for all asynchronous operations started within this zone\r\n\r\n // Set the context as a property in the window for access by other parts of the application\r\n // This helps ensure the context is available for all operations\r\n (window as any).__navigationContext = activeContext;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new span to track a navigation event.\r\n * This will be the parent span for any HTTP requests made during this navigation.\r\n * Only creates a new span if the path has changed from the last navigation.\r\n * @param url The URL being navigated to\r\n */\r\n private createNavigationSpan(url: string): void {\r\n // Parse the URL to extract route information\r\n let routePath = 'unknown';\r\n try {\r\n const urlObj = new URL(url, window.location.origin);\r\n routePath = urlObj.pathname;\r\n } catch (e) {\r\n routePath = url; // Use the raw URL if parsing fails\r\n }\r\n\r\n // If the path hasn't changed, don't create a new span\r\n if (this._lastNavigationPath === routePath) {\r\n return;\r\n }\r\n\r\n // Update the last navigation path\r\n this._lastNavigationPath = routePath;\r\n\r\n // End the previous span if it exists\r\n if (this._activeNavigationSpan) {\r\n this._activeNavigationSpan.end();\r\n this._activeNavigationSpan = null;\r\n }\r\n\r\n if (!this._tracer) {\r\n return; // Not initialized yet\r\n }\r\n\r\n // Create a new span for this navigation\r\n this._activeNavigationSpan = this._tracer.startSpan(\r\n `Navigation to ${routePath}`,\r\n {\r\n kind: SpanKind.INTERNAL,\r\n attributes: {\r\n 'component': 'router',\r\n 'route.path': routePath,\r\n 'client.address': window.location.href,\r\n 'client.port': window.location.port,\r\n 'browser.language': navigator.language\r\n }\r\n }\r\n );\r\n\r\n // Activate this navigation span as the current context\r\n this.activateNavigationContext();\r\n }\r\n\r\n async initialize(): Promise<void> {\r\n await this._settingsService.ensureInitialized();\r\n\r\n const clientSettings = this._settingsService.settings;\r\n if (!clientSettings)\r\n throw new Error('Client Settings are not loaded yet.');\r\n if (!clientSettings.extensions)\r\n throw new Error('Client Settings do not contain extensions.');\r\n\r\n const sampler = OpenTelemetryService.GetSampler(clientSettings);\r\n const spanProcessors = OpenTelemetryService.GetSpanProcessors(clientSettings);\r\n const resource = OpenTelemetryService.GetResource(clientSettings);\r\n\r\n const provider = new WebTracerProvider({\r\n sampler: sampler,\r\n spanProcessors: spanProcessors,\r\n resource: resource,\r\n });\r\n\r\n provider.register({\r\n // Changing default contextManager to use StackContextManager - this ensures that http calls made in Angular's HttpClient will be properly associated with the current navigation span\r\n contextManager: new StackContextManager(),\r\n });\r\n\r\n // Get a tracer from the provider\r\n this._tracer = provider.getTracer('angular-navigation-tracer');\r\n\r\n // Create the initial navigation span based on the current URL\r\n if (this._router && this._router.url) {\r\n this.createNavigationSpan(this._router.url);\r\n }\r\n }\r\n\r\n /**\r\n * Ends the current navigation span if one exists.\r\n * This can be called when the user is leaving the application or when\r\n * special navigation events happen that should terminate the current span.\r\n */\r\n public endCurrentNavigationSpan(): void {\r\n if (this._activeNavigationSpan) {\r\n this._activeNavigationSpan.end();\r\n this._activeNavigationSpan = null;\r\n this._lastNavigationPath = null; // Reset the last navigation path when ending the span manually\r\n }\r\n }\r\n\r\n private static GetResource(clientSettings: ClientSettings) {\r\n const serviceName = clientSettings.extensions[\"OTEL_SERVICE_NAME\"];\r\n const resourceAttributes = clientSettings.extensions[\"OTEL_RESOURCE_ATTRIBUTES\"];\r\n\r\n const resource = resourceFromAttributes({});\r\n\r\n if (resourceAttributes) {\r\n resourceAttributes\r\n .split(\",\")\r\n .map((attribute: string) => {\r\n const [key, value] = attribute.split(\"=\");\r\n resource.attributes[key] = value;\r\n });\r\n }\r\n\r\n if (serviceName)\r\n resource.attributes[ATTR_SERVICE_NAME] = serviceName;\r\n\r\n return resource;\r\n }\r\n\r\n private static GetSpanProcessors(clientSettings: ClientSettings): SpanProcessor[] {\r\n const exporterEndpoint = clientSettings.extensions[\"OTEL_EXPORTER_OTLP_ENDPOINT\"];\r\n const exporterHeaders = clientSettings.extensions[\"OTEL_EXPORTER_OTLP_HEADERS\"];\r\n\r\n if (!exporterEndpoint)\r\n return[new SimpleSpanProcessor(new ConsoleSpanExporter())];\r\n else {\r\n let headersObj = {};\r\n if (exporterHeaders) {\r\n headersObj = Object.fromEntries(\r\n exporterHeaders\r\n .split(\",\")\r\n .map((header: string) => {\r\n const [key, value] = header.split(\"=\");\r\n return [key, value];\r\n }));\r\n }\r\n\r\n const traceExporterEndpoint = exporterEndpoint.endsWith(\"/\") ? exporterEndpoint + \"v1/traces\" : exporterEndpoint + \"/v1/traces\";\r\n\r\n const otlpExporterConfiguration = {\r\n url: traceExporterEndpoint,\r\n headers: headersObj,\r\n compression: \"gzip\" as CompressionAlgorithm,\r\n };\r\n\r\n return[new BatchSpanProcessor(new OTLPTraceExporter(otlpExporterConfiguration))];\r\n }\r\n }\r\n\r\n private static GetSampler(clientSettings: ClientSettings) {\r\n const tracesSampler = clientSettings.extensions[\"OTEL_TRACES_SAMPLER\"];\r\n const tracesSamplerArg = clientSettings.extensions[\"OTEL_TRACES_SAMPLER_ARG\"];\r\n\r\n switch (tracesSampler) {\r\n case \"always_on\":\r\n return new AlwaysOnSampler();\r\n case \"always_off\":\r\n return new AlwaysOffSampler();\r\n case \"traceidratio\":\r\n const ratio = Number.parseFloat(tracesSamplerArg ?? \"1\");\r\n return new TraceIdRatioBasedSampler(ratio);\r\n case \"parentbased_always_on\":\r\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\r\n case \"parentbased_always_off\":\r\n return new ParentBasedSampler({ root: new AlwaysOffSampler() });\r\n case \"parentbased_traceidratio\":\r\n const ratio2 = Number.parseFloat(tracesSamplerArg ?? \"1\");\r\n return new ParentBasedSampler({ root: new TraceIdRatioBasedSampler(ratio2) });\r\n default:\r\n return new AlwaysOnSampler();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the active context that contains the current navigation span.\r\n * This is used by the HttpInterceptor to ensure HttpClient requests are\r\n * properly associated with the current navigation span.\r\n * @returns The active context, or null if no navigation span exists\r\n */\r\n public getActiveContext(): any {\r\n if (this._activeNavigationSpan) {\r\n // Create a context with the active navigation span\r\n return trace.setSpan(context.active(), this._activeNavigationSpan);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the OpenTelemetry tracer instance for creating spans\r\n * @returns The tracer instance or undefined if not initialized\r\n */\r\n public getTracer(): Tracer {\r\n return this._tracer;\r\n }\r\n}\r\n","import { Component, ContentChild, TemplateRef, computed, effect, input, model, resource, signal, untracked } from \"@angular/core\";\r\nimport { FormControl, FormGroup, Validators } from \"@angular/forms\";\r\nimport { Router } from \"@angular/router\";\r\nimport { ProblemDetails, PropertyType, Resource, Template, Templates } from \"@wertzui/ngx-hal-client\";\r\nimport { ValdemortConfig } from \"ngx-valdemort\";\r\nimport { MessageService } from \"primeng/api\";\r\nimport { ConfirmDialogModule } from \"primeng/confirmdialog\";\r\nimport { SkeletonModule } from \"primeng/skeleton\";\r\nimport { TabsModule } from \"primeng/tabs\";\r\nimport { RestWorldFormComponent } from \"../../components/restworld-form/restworld-form.component\";\r\nimport { RestWorldIdNavigationComponent } from \"../../components/restworld-id-navigation/restworld-id-navigation.component\";\r\nimport { AfterSubmitOkEvent, AfterSubmitRedirectEvent } from \"../../models/events\";\r\nimport { RestWorldClientCollection } from \"../../services/restworld-client-collection\";\r\nimport { NgTemplateOutlet } from \"@angular/common\";\r\nimport { ProblemService } from \"../../services/problem.service\";\r\nimport { ButtonDirective } from \"primeng/button\";\r\nimport { Tooltip } from \"primeng/tooltip\";\r\n\r\n/**\r\n* Component for editing a resource in the RESTworld application.\r\n* This component loads the forms resource from the API and renders a tab view where every template of the forms resource is rendered as a tab.\r\n* Every template becomes one `RestworldFormComponent` in the tab view.\r\n* It also allows adding extra tabs to the view.\r\n* An ID navigation form is also rendered at the top right of the view.\r\n* @example\r\n* <rw-edit apiName=\"api\" rel=\"rel\" uri=\"/api/rel/1\"></rw-edit>\r\n* @example\r\n* <rw-edit apiName=\"api\" rel=\"rel\" uri=\"/api/rel/1\">\r\n* <ng-template #extraTabs>\r\n* <p-tabPanel header=\"Extra tab\">\r\n* <p>Some extra content</p>\r\n* </p-tabPanel>\r\n* </ng-template>\r\n* </rw-edit>\r\n*/\r\n@Component({\r\n selector: \"rw-edit\",\r\n templateUrl: \"./restworld-edit-view.component.html\",\r\n styleUrls: [\"./restworld-edit-view.component.css\"],\r\n standalone: true,\r\n imports: [RestWorldIdNavigationComponent, SkeletonModule, TabsModule, RestWorldFormComponent, ConfirmDialogModule, NgTemplateOutlet, ButtonDirective, Tooltip]\r\n})\r\nexport class RESTworldEditViewComponent {\r\n @ContentChild(\"extraTabs\", { static: false })\r\n /**\r\n * A reference to an optional template that can be used to add extra tabs to the view.\r\n */\r\n public extraTabsRef?: TemplateRef<unknown>;\r\n public idNavigationForm = new FormGroup<{\r\n id: FormControl<number | null>\r\n }>({\r\n id: new FormControl(null, Validators.compose([Validators.min(1), Validators.max(Number.MAX_SAFE_INTEGER)]))\r\n });\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _messageService: MessageService,\r\n private readonly _problemService: ProblemService,\r\n private readonly _router: Router,\r\n valdemortConfig: ValdemortConfig) {\r\n valdemortConfig.errorClasses = \"p-error text-sm\";\r\n }\r\n\r\n public get PropertyType() {\r\n return PropertyType;\r\n }\r\n\r\n /**\r\n * The relation to load the resource from.\r\n */\r\n public readonly rel = input.required<string>();\r\n\r\n /**\r\n * The URI of the resource to load.\r\n */\r\n public uri = input.required<string>();\r\n /**\r\n * The name of the API to load the resource from.\r\n */\r\n public apiName = input.required<string>();\r\n public readonly newHref = computed(() => this.resource.value()?.findLink('new')?.href);\r\n public templates = resource({\r\n params: () => ({ apiName: this.apiName(), resource: this.resource.value() }),\r\n loader: ({ params }) => this.loadTemplatesInternal(params.apiName, params.resource)\r\n });\r\n\r\n public resource = resource({\r\n params: () => ({ apiName: this.apiName(), uri: this.uri() }),\r\n loader: async ({ params }) => {\r\n const client = this._clients.getClient(params.apiName);\r\n const resourceResponse = await client.getSingleByUri(params.uri);\r\n this._problemService.checkResponseDisplayErrorsAndThrow(resourceResponse);\r\n\r\n return resourceResponse.body;\r\n }\r\n });\r\n\r\n public displayTab = model(\"Loading\");\r\n\r\n async afterSubmit($event: AfterSubmitOkEvent | AfterSubmitRedirectEvent) {\r\n if ($event.status == 201) {\r\n await this._router.navigate([\"edit\", this.apiName(), this.rel(), $event.location])\r\n }\r\n }\r\n\r\n async afterDelete(): Promise<void> {\r\n await this._router.navigate([\"list\", this.apiName(), this.rel()])\r\n }\r\n\r\n public createNew(): Promise<boolean> {\r\n return this._router.navigate([\"edit\", this.apiName(), this.rel(), this.newHref()]);\r\n }\r\n\r\n private async loadTemplatesInternal(apiName: string, resource: Resource | undefined): Promise<Template[]> {\r\n if (!apiName || !resource)\r\n return [];\r\n try {\r\n const client = this._clients.getClient(apiName);\r\n const templatesOrProblemDetails = await client.getAllTemplates(resource);\r\n\r\n // Check if we got ProblemDetails instead of Templates\r\n if (ProblemDetails.isProblemDetails(templatesOrProblemDetails)) {\r\n this._messageService.add({\r\n severity: \"error\",\r\n summary: \"Error\",\r\n detail: `Error from API: ${templatesOrProblemDetails.title} - ${templatesOrProblemDetails.detail}`,\r\n data: templatesOrProblemDetails,\r\n sticky: true\r\n });\r\n return [];\r\n }\r\n\r\n // Process the templates\r\n const templates = templatesOrProblemDetails as Templates;\r\n const templateArray = Object.values(templates).filter((t): t is Template => t !== undefined);\r\n if (templateArray.length > 0)\r\n this.displayTab.set(templateArray[0].title!);\r\n\r\n return templateArray;\r\n } catch (e: unknown) {\r\n if (e instanceof Error)\r\n this._messageService.add({ severity: \"error\", summary: \"Error\", detail: \"Error while loading the templates from the API. \" + e.message, data: e, sticky: true });\r\n else\r\n this._messageService.add({ severity: \"error\", summary: \"Error\", detail: \"Error while loading the templates from the API. \" + e, data: e, sticky: true });\r\n\r\n return [];\r\n }\r\n }\r\n}\r\n","<div class=\"grid\">\r\n <div class=\"col-12 md:col-10\">\r\n <h1>Edit resource</h1>\r\n </div>\r\n <div class=\"col-12 md:col-2 align-items-center justify-content-end flex\">\r\n <rw-id-navigation [apiName]=\"apiName()\" [rel]=\"rel()\"></rw-id-navigation>\r\n @if (newHref()) {\r\n <button pButton pRipple type=\"button\" icon=\"fas fa-plus\" class=\"p-button-success mr-3\" (click)=\"createNew()\" pTooltip=\"Create new\"></button>\r\n }\r\n </div>\r\n</div>\r\n\r\n<p-tabs [(value)]=\"displayTab\">\r\n <p-tablist>\r\n @if (templates.isLoading()) {\r\n <p-tab value=\"Loading\">Loading</p-tab>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tab [value]=\"template.title ?? i\">{{template.title}}</p-tab>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tab value=\"Extra\">Extra</p-tab>\r\n }\r\n }\r\n </p-tablist>\r\n <p-tabpanels>\r\n @if (templates.isLoading()) {\r\n <p-tabpanel value=\"Loading\">\r\n @for(i of [1, 2, 3, 4, 5]; track i) {\r\n <div class=\"grid field\">\r\n <p-skeleton class=\"col-12 mb-2 md:col-2 md:mb-0\" height=\"39px\"></p-skeleton>\r\n <div class=\"col-12 md:col-10\">\r\n <p-skeleton class=\"w-full\" height=\"39px\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n <div class=\"grid\">\r\n <div class=\"col\">\r\n <div class=\"flex justify-content-end w-full\">\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n <p-skeleton width=\"120px\" height=\"39px\" class=\"mx-2\"></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n </p-tabpanel>\r\n }\r\n @else {\r\n @for (template of templates.value(); track template; let i = $index) {\r\n <p-tabpanel [value]=\"template.title ?? i\">\r\n <rw-form\r\n [template]=\"template\"\r\n [apiName]=\"apiName()\"\r\n [rel]=\"rel()\"\r\n (afterDelete)=\"afterDelete()\"\r\n (afterSubmit)=\"afterSubmit($event)\"\r\n ></rw-form>\r\n </p-tabpanel>\r\n }\r\n @if (extraTabsRef) {\r\n <p-tabpanel value=\"Extra\">\r\n <ng-container *ngTemplateOutlet=\"extraTabsRef\"></ng-container>\r\n </p-tabpanel>\r\n }\r\n }\r\n </p-tabpanels>\r\n</p-tabs>\r\n\r\n<p-confirmDialog></p-confirmDialog>\r\n","import { Component, computed, effect, input, linkedSignal, model, resource } from '@angular/core';\r\nimport { PagedListResource, ProblemDetails, Resource, ResourceDto, ResourceOfDto, Template, type PropertyDto, type SimpleValue } from '@wertzui/ngx-hal-client';\r\nimport { ConfirmationService, MenuItem, MessageService } from 'primeng/api';\r\nimport { RestWorldClientCollection } from '../../services/restworld-client-collection';\r\nimport { AvatarGenerator } from '../../services/avatar-generator';\r\nimport { Router } from '@angular/router';\r\nimport { ODataParameters } from '../../models/o-data';\r\nimport { RestWorldTableComponent } from \"../../components/restworld-table/restworld-table.component\";\r\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\r\nimport { ProblemService } from \"../../services/problem.service\";\r\n\r\n/**\r\n * A component that displays a list of resources from a RESTworld API.\r\n * This component is meant to be used in conjunction with the `RESTworldEditViewComponent`, but can also be used with any other component if a custom `editLink` is provided.\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [editLink]=\"'/edit'\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [createButtonMenu]=\"[{label: 'Create new', icon: 'fas fa-plus', routerLink: ['/edit', 'api', 'rel', 'new']}]\" [editLink]=\"'/edit'\"></rw-list>\r\n * @example\r\n * <rw-list apiName=\"api\" rel=\"rel\" [createButtonMenu]=\"[{label: 'Create new', icon: 'fas fa-plus', routerLink: ['/edit', 'api', 'rel', 'new']}]\" [editLink]=\"'/edit'\">\r\n * <ng-template pTemplate=\"header\">\r\n * <div class=\"p-d-flex p-ai-center\">\r\n * <div class=\"p-mr-2\">\r\n * <i class=\"fas fa-search\"></i>\r\n * </div>\r\n * <div class=\"p-inputgroup\">\r\n * <input pInputText type=\"text\" placeholder=\"Search...\" (input)=\"load({$search: $event.target.value})\">\r\n * </div>\r\n * </div>\r\n * </ng-template>\r\n * </rw-list>\r\n *\r\n */\r\n@Component({\r\n selector: 'rw-list',\r\n templateUrl: './restworld-list-view.component.html',\r\n styleUrls: ['./restworld-list-view.component.css'],\r\n standalone: true,\r\n imports: [RestWorldTableComponent, ConfirmDialogModule]\r\n})\r\nexport class RESTworldListViewComponent<TListDto extends ResourceDto & Record<string, unknown>> {\r\n /**\r\n * An array of menu items to be displayed in the create button dropdown menu.\r\n * That is the menu at the top right of the list.\r\n */\r\n public readonly createButtonMenu = input<MenuItem[]>();\r\n public isLoading = computed(() => this.listResource.isLoading() || this.searchTemplate.isLoading());\r\n public readonly filter = model<string | undefined>(undefined, { alias: \"$filter\" });\r\n public readonly orderby = model<string | undefined>(undefined, { alias: \"$orderby\" });\r\n public readonly skip = model<number | undefined>(undefined, { alias: \"$skip\" });\r\n public readonly top = model<number | undefined>(undefined, { alias: \"$top\" });\r\n\r\n public readonly oDataParameters = linkedSignal(() => {\r\n const parameters: ODataParameters = {\r\n $filter: this.filter(),\r\n $orderby: this.orderby(),\r\n $skip: this.skip(),\r\n $top: this.top()\r\n };\r\n return parameters;\r\n });\r\n\r\n /**\r\n * The URL for the edit link of the RESTworld list view.\r\n * Use it if you want to use a custom edit view instead of the default `RESTworldEditViewComponent`.\r\n * @param value The new value for the edit link URL.\r\n */\r\n public readonly editLink = input(\"/edit\", { transform: (value) => value ?? \"/edit\" });\r\n\r\n public readonly headerMenu = computed(() => [\r\n {\r\n icon: \"fas fa-plus\",\r\n styleClass: \"p-button-success\",\r\n routerLink: [this.editLink(), this.apiName(), this.rel(), this.newHref()],\r\n items: this.createButtonMenu()\r\n }\r\n ]);\r\n\r\n public readonly rowMenu = computed<(row: ResourceOfDto<TListDto>, openedByRightClick: boolean) => MenuItem[]>(() => (row, openedByRightClick) => {\r\n return [\r\n {\r\n icon: \"fas fa-edit\",\r\n label: openedByRightClick ? \"View / Edit\" : undefined,\r\n tooltip: !openedByRightClick ? \"View / Edit\" : undefined,\r\n tooltipPosition: \"left\",\r\n routerLink: [this.editLink(), this.apiName(), this.rel(), row._links?.self[0].href]\r\n }, {\r\n icon: \"fas fa-trash-alt\",\r\n label: openedByRightClick ? \"Delete\" : undefined,\r\n tooltip: !openedByRightClick ? \"Delete\" : undefined,\r\n tooltipPosition: \"left\",\r\n styleClass: \"p-button-danger\",\r\n command: () => this.showDeleteConfirmatioModal(row)\r\n }\r\n ];\r\n });\r\n\r\n private static readonly _emptylistResource = new PagedListResource({ _embedded: { items: [] }, _links: { self: [] } });\r\n\r\n private static readonly _emptySearchTemplate: Template<ReadonlyArray<PropertyDto<SimpleValue, string, string>>> = new Template({ properties: [] });\r\n\r\n constructor(\r\n private readonly _clients: RestWorldClientCollection,\r\n private readonly _confirmationService: ConfirmationService,\r\n private readonly _messageService: MessageService,\r\n public readonly avatarGenerator: AvatarGenerator,\r\n private readonly _router: Router,\r\n private readonly _problemService: ProblemService) {\r\n this.listResource.set(RESTworldListViewComponent._emptylistResource);\r\n this.searchTemplate.set(RESTworldListViewComponent._emptySearchTemplate);\r\n effect(() => console.log((this.rel())));\r\n }\r\n\r\n /**\r\n * Sets the name of the API to load and triggers a reload of the data.\r\n * @param value The name of the API to load.\r\n */\r\n public readonly apiName = input<string>();\r\n /**\r\n * Sets the rel value for the RESTWorld list view component.\r\n * @param value The new rel value to set.\r\n */\r\n public readonly rel = input<string>();\r\n\r\n public readonly newHref = computed(() => this.listResource.value()?.findLink('new')?.href);\r\n public readonly items = computed(() => this.listResource.value()?._embedded.items || []);\r\n\r\n public createNew(): Promise<boolean> {\r\n return this._router.navigate([this.editLink, this.apiName, this.rel, this.newHref]);\r\n }\r\n\r\n public async delete(resource: Resource): Promise<void> {\r\n const client = this._client();\r\n if (client === undefined) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'No client found for the API.' });\r\n return;\r\n }\r\n\r\n\r\n const response = await client.delete(resource);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, undefined, \"Error while deleting the resource from the API.\", \"Error\")) {\r\n this._messageService.add({ severity: 'success', summary: 'Deleted', detail: 'The resource has been deleted.' });\r\n\r\n this.listResource.reload();\r\n }\r\n }\r\n\r\n public readonly listResource = resource({\r\n params: () => ({ oDataParameters: this.oDataParameters(), rel: this.rel() }),\r\n loader: async ({ params }) => {\r\n const client = this._client();\r\n if (params.rel === undefined || client === undefined)\r\n return RESTworldListViewComponent._emptylistResource;\r\n\r\n const response = await client.getList<TListDto>(params.rel, params.oDataParameters);\r\n if (this._problemService.checkResponseAndDisplayErrors(response, undefined, \"Error while loading the resources from the API.\", \"Error\")) {\r\n return response.body;\r\n }\r\n\r\n return RESTworldListViewComponent._emptylistResource;\r\n },\r\n });\r\n\r\n public readonly totalRecords = computed(() => {\r\n const top = this.top();\r\n const listResource = this.listResource.value();\r\n const rowsPerPage = top ?? listResource?._embedded.items.length ?? 0;\r\n const totalPages = listResource?.totalPages ?? 1;\r\n const totalRecords = totalPages * rowsPerPage;\r\n return totalRecords;\r\n });\r\n\r\n public readonly searchTemplate = resource({\r\n params: () => ({ resource: this.listResource.value() }),\r\n loader: async ({ params }) => {\r\n const client = this._client();\r\n if (params.resource === undefined || client === undefined)\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n \r\n // We only want to load the template once\r\n const currentSearchTemplate = this.searchTemplate.value() as Template<ReadonlyArray<PropertyDto<SimpleValue, string, string>>> | undefined;\r\n if (currentSearchTemplate !== undefined && currentSearchTemplate !== RESTworldListViewComponent._emptySearchTemplate)\r\n return currentSearchTemplate;\r\n \r\n // return RESTworldListViewComponent._emptySearchTemplate;\r\n try {\r\n const templates = await client.getAllTemplates(params.resource);\r\n if (ProblemDetails.isProblemDetails(templates)) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `No templates found in the API response.`, data: templates });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n\r\n const searchTemplate = templates[\"Search\"];\r\n if (searchTemplate === undefined) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: `No \"Search\" template found in the API response.`, data: templates });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n \r\n return searchTemplate;\r\n }\r\n catch (e: unknown) {\r\n this._messageService.add({ severity: 'error', summary: 'Error', detail: 'Error while loading the resources from the API. ' + e, data: e });\r\n return RESTworldListViewComponent._emptySearchTemplate;\r\n }\r\n }\r\n });\r\n\r\n public showDeleteConfirmatioModal(resource: Resource) {\r\n this._confirmationService.confirm({\r\n message: 'Do you really want to delete this resource?',\r\n header: 'Confirm delete',\r\n icon: 'far fa-trash-alt',\r\n accept: () => this.delete(resource)\r\n });\r\n }\r\n\r\n private readonly _client = computed(() => {\r\n const apiName = this.apiName();\r\n if (apiName === undefined)\r\n return undefined;\r\n\r\n return this._clients.getClient(apiName);\r\n });\r\n}\r\n","@let search = searchTemplate.value();\r\n@let api = apiName();\r\n@if (search && api) {\r\n <rw-table\r\n [apiName]=\"api\"\r\n [searchTemplate]=\"search\"\r\n [rows]=\"items()\"\r\n [headerMenu]=\"headerMenu()\"\r\n [rowMenu]=\"rowMenu()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [isLoading]=\"isLoading()\"\r\n >\r\n </rw-table>\r\n}\r\n<p-confirmDialog></p-confirmDialog>\r\n","import { type HttpInterceptor, type HttpRequest, type HttpHandler, type HttpEvent, HttpEventType, type HttpResponse, HTTP_INTERCEPTORS } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { context, type Attributes, SpanKind, trace, propagation, SpanStatusCode } from \"@opentelemetry/api\";\r\nimport { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL, ATTR_URL_PATH, ATTR_URL_QUERY, ATTR_URL_SCHEME, ATTR_CLIENT_ADDRESS, ATTR_CLIENT_PORT, ATTR_HTTP_REQUEST_HEADER, ATTR_SERVICE_NAME, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_HTTP_RESPONSE_HEADER } from \"@opentelemetry/semantic-conventions\";\r\nimport { type Observable, tap, finalize } from \"rxjs\";\r\nimport { OpenTelemetryService } from \"./opentelemetry.service\";\r\n\r\n/**\r\n * This is an HttpInterceptor that ensures all HttpClient requests\r\n * are properly associated with the current navigation span.\r\n */\r\n\r\n@Injectable()\r\nexport class OpenTelemetryHttpInterceptor implements HttpInterceptor {\r\n constructor(private readonly _telemetryService: OpenTelemetryService) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n // Get the active context from the OpenTelemetryService\r\n const activeContext = this._telemetryService.getActiveContext();\r\n\r\n // If we have an active navigation context, create a child span for this HTTP request\r\n if (activeContext && this._telemetryService.getTracer()) {\r\n // Execute within the active context to ensure proper parenting\r\n return context.with(activeContext, () => {\r\n // Extract span information from the request\r\n const url = new URL(request.url, window.location.origin);\r\n const method = request.method;\r\n const spanName = `${method} ${url.pathname}`;\r\n\r\n // Get tracer from the telemetry service to create a span\r\n const tracer = this._telemetryService.getTracer();\r\n\r\n // Create attributes for the span, handling null values from headers\r\n const contentLength = request.headers.get('Content-Length');\r\n const contentType = request.headers.get('Content-Type');\r\n\r\n const attributes: Attributes = {\r\n [ATTR_HTTP_REQUEST_METHOD]: method,\r\n [ATTR_URL_FULL]: request.url,\r\n [ATTR_URL_PATH]: url.pathname,\r\n [ATTR_URL_QUERY]: url.search.replace('?', ''),\r\n [ATTR_URL_SCHEME]: url.protocol.replace(':', ''),\r\n \"url.host\": url.host,\r\n \"http.user_agent\": navigator.userAgent,\r\n [ATTR_CLIENT_ADDRESS]: window.location.href,\r\n [ATTR_CLIENT_PORT]: window.location.port,\r\n [ATTR_HTTP_REQUEST_HEADER(\"accept\")]: request.headers.get('Accept') ?? undefined,\r\n [ATTR_HTTP_REQUEST_HEADER(\"accept-language\")]: request.headers.get('Accept-Language') ?? undefined,\r\n \"http.request.body.size\": contentLength ?? undefined,\r\n [ATTR_HTTP_REQUEST_HEADER(\"content-type\")]: contentType ?? undefined,\r\n [ATTR_SERVICE_NAME]: 'ngx-restworld-client'\r\n };\r\n\r\n // Start a new span for this HTTP request\r\n const span = tracer.startSpan(spanName, {\r\n kind: SpanKind.CLIENT,\r\n attributes\r\n });\r\n\r\n // Create a context with the current span\r\n const spanContext = trace.setSpan(context.active(), span);\r\n\r\n // Create a carrier object for W3C trace context headers\r\n const carrier: Record<string, string> = {};\r\n\r\n // Inject trace context headers into the carrier\r\n propagation.inject(spanContext, carrier);\r\n\r\n // Clone the request with the added W3C trace context headers\r\n let headers = request.headers;\r\n Object.entries(carrier).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n\r\n // Create the traced request with the W3C headers\r\n const tracedRequest = request.clone({ headers });\r\n\r\n // Use with() to make this span active during request execution\r\n return context.with(spanContext, () => {\r\n // Handle the request and observe the response\r\n return next.handle(tracedRequest).pipe(\r\n // Use operators to capture response or error before completing the span\r\n tap({\r\n next: (event: HttpEvent<any>) => {\r\n if (event.type === HttpEventType.Response) {\r\n const response = event as HttpResponse<any>;\r\n const responseAttrs: Record<string, string | number | boolean> = {\r\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status\r\n };\r\n\r\n // Only add response header values if they exist\r\n const respContentLength = response.headers.get('Content-Length');\r\n const respContentType = response.headers.get('Content-Type');\r\n\r\n if (respContentLength) responseAttrs[\"http.response.body.size\"] = respContentLength;\r\n if (respContentType) responseAttrs[ATTR_HTTP_RESPONSE_HEADER(\"content-type\")] = respContentType;\r\n\r\n // Add response attributes to the span\r\n span.setAttributes(responseAttrs);\r\n span.setStatus({\r\n code: response.ok ? SpanStatusCode.OK : SpanStatusCode.ERROR\r\n });\r\n\r\n // End the span when we get the full response\r\n span.end();\r\n }\r\n },\r\n error: (error: Error) => {\r\n // Record the error and end the span\r\n span.setStatus({\r\n code: SpanStatusCode.ERROR,\r\n message: error.message || 'Http request failed'\r\n });\r\n span.recordException(error);\r\n span.end();\r\n }\r\n }),\r\n // Make sure the span ends even if the observable completes without going through our tap handlers\r\n finalize(() => {\r\n if (span) {\r\n // Only end if not already ended in the tap handlers\r\n try {\r\n span.end();\r\n } catch (e) {\r\n // Ignore errors from ending an already-ended span\r\n }\r\n }\r\n })\r\n );\r\n });\r\n });\r\n }\r\n\r\n // No active context, just proceed with the request without tracing\r\n return next.handle(request);\r\n }\r\n}\r\n\r\n/**\r\n * Provider for the OpenTelemetry HTTP interceptor.\r\n * This interceptor ensures that HttpClient requests are properly\r\n * associated with the current navigation span.\r\n */\r\nexport const OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER = {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: OpenTelemetryHttpInterceptor,\r\n multi: true\r\n};\r\n","import { EnvironmentProviders, inject, provideAppInitializer, type Provider, type Type } from \"@angular/core\";\r\nimport { OpenTelemetryService } from \"./services/opentelemetry.service\";\r\nimport { SettingsService } from \"./services/settings.service\";\r\nimport { AvatarGenerator } from \"./services/avatar-generator\";\r\nimport { NgHttpCachingStrategy, provideNgHttpCaching, withNgHttpCachingLocalStorage, type NgHttpCachingConfig } from \"ng-http-caching\";\r\nimport { OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER } from \"./services/openTelemetryHttpInterceptor\";\r\n\r\n/**\r\n * Povides the RESTworld functionality to the application.\r\n * This includes the RestWorldClientCollection, the SettingsService and the OpenTelemetryService.\r\n * You need to call this function in your main.ts in the providers array of the bootstrapApplication function.\r\n * @param ngHttpCachingConfig An optional configuration for caching http requests. Will be merged with the default configuration if provided.\r\n * The default configuration is this:\r\n * ```typescript\r\n * {\r\n * allowedMethod: [\"ALL\"],\r\n * checkResponseHeaders: true,\r\n * cacheStrategy: NgHttpCachingStrategy.DISALLOW_ALL,\r\n * store: withNgHttpCachingLocalStorage(),\r\n * }\r\n * ```\r\n */\r\nexport function provideRestWorld(ngHttpCachingConfig?: NgHttpCachingConfig): (EnvironmentProviders | Provider)[] {\r\n const defaultCachingConfig = {\r\n allowedMethod: [\"ALL\"],\r\n checkResponseHeaders: true,\r\n cacheStrategy: NgHttpCachingStrategy.DISALLOW_ALL,\r\n store: withNgHttpCachingLocalStorage(),\r\n }\r\n\r\n const mergedCachingConfig = { ...defaultCachingConfig, ...ngHttpCachingConfig };\r\n\r\n const restWorldInitializer = provideAppInitializer(async () => {\r\n const settingsService = inject(SettingsService);\r\n const opentelemetryService = inject(OpenTelemetryService);\r\n await settingsService.ensureInitialized();\r\n await opentelemetryService.initialize();\r\n });\r\n\r\n const cachingProviders = provideNgHttpCaching(mergedCachingConfig);\r\n\r\n const allProviders = [\r\n restWorldInitializer,\r\n cachingProviders,\r\n OPENTELEMETRY_HTTP_INTERCEPTOR_PROVIDER\r\n ];\r\n\r\n return allProviders;\r\n}\r\n\r\n/**\r\n * Provide a custom avatar generator to the application.\r\n * You can use this functionality to provide your own implementation of the AvatarGenerator.\r\n */\r\nexport function provideCustomAvatarGenerator(generator: Type<any>): Provider {\r\n return { provide: AvatarGenerator, useClass: generator };\r\n}\r\n","/*\r\n * Public API Surface of ngx-restworld-client\r\n */\r\n\r\nexport * from \"./lib/constants/link-names\";\r\n\r\nexport * from \"./lib/components/restworld-avatar/restworld-avatar.component\";\r\nexport * from \"./lib/components/restworld-displays/restworld-displays\";\r\nexport * from \"./lib/components/restworld-file/restworld-file.component\";\r\nexport * from \"./lib/components/restworld-form/restworld-form.component\";\r\nexport * from \"./lib/components/restworld-id-navigation/restworld-id-navigation.component\";\r\nexport * from \"./lib/components/restworld-image/restworld-image.component\";\r\nexport * from \"./lib/components/restworld-inputs/restworld-inputs\";\r\nexport * from \"./lib/components/restworld-label/restworld-label.component\";\r\nexport * from \"./lib/components/restworld-menu-button/restworld-menu-button.component\";\r\nexport * from \"./lib/components/restworld-table/restworld-table.component\";\r\nexport * from \"./lib/components/restworld-tri-state-checkbox/restworld-tri-state-checkbox.component\";\r\nexport * from \"./lib/components/restworld-validation-errors/restworld-validation-errors.component\";\r\n\r\nexport * from \"./lib/constants/link-names\";\r\n\r\nexport * from \"./lib/models/api-url\";\r\nexport * from \"./lib/models/client-settings\";\r\nexport * from \"./lib/models/o-data\";\r\nexport * from \"./lib/models/restworld-image\";\r\nexport * from \"./lib/models/restworld-options\";\r\nexport * from \"./lib/models/special-properties\";\r\nexport * from \"./lib/models/templating\";\r\n\r\nexport * from \"./lib/pipes/as.pipe\";\r\nexport * from \"./lib/pipes/clr-format.pipe\";\r\nexport * from \"./lib/pipes/property-type-format.pipe\";\r\nexport * from \"./lib/pipes/safe-url.pipe\";\r\n\r\nexport * from \"./lib/services/avatar-generator\";\r\nexport * from \"./lib/services/options.service\";\r\nexport * from \"./lib/services/odata.service\";\r\nexport * from \"./lib/services/odata-filter-parser\";\r\nexport * from \"./lib/services/odata-visitor\";\r\nexport * from \"./lib/services/opentelemetry.service\";\r\nexport * from \"./lib/services/problem.service\";\r\nexport * from \"./lib/services/restworld-client-collection\";\r\nexport * from \"./lib/services/restworld-client\";\r\nexport * from \"./lib/services/settings.service\";\r\n\r\nexport * from \"./lib/util/debounce\";\r\n\r\nexport * from \"./lib/views/restworld-edit-view/restworld-edit-view.component\";\r\nexport * from \"./lib/views/restworld-list-view/restworld-list-view.component\";\r\n\r\nexport * from \"./lib/provide-restworld\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.AvatarGenerator","i1.ClrFormatPipe","i1","i1.ProblemService","i2.RestWorldClientCollection","i1.OptionsService","i2","i5","i3","i4","i3.OptionsService","i4.FormControlProperty","i4.PropertyControlStatus","i4.PropertySelectAttributes","i4.PropertyAttributes","i4.DefaultPropertyValueAccessor","i4.PropertyInputNumberAttributes","i1.RestWorldClientCollection","i4.ProblemService","i6","i7","i1.SettingsService","i3.ProblemService","i8","i3.AvatarGenerator","i5.ProblemService","i1.OpenTelemetryService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG;IACS;AAAZ,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACf,CAAC,EAPW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;ACArB;;AAEG;MAIU,eAAe,CAAA;AAChB,IAAA,OAAO,WAAW,GAAyB,IAAI,GAAG,EAAmB;IACrE,OAAO,aAAa,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC;AAEhD;;;;;AAKG;IACI,qBAAqB,GAA8C,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;;AAG3F,IAAA,OAAO,kBAAkB,CAC7B,IAAY,EACZ,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,aAAa,GAAG,EAAE,EAClB,aAAa,GAAG,GAAG,EAAA;AAEnB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,MAAM;AAExB,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AACxC,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;QAClD,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,QACI,MAAM;aACL,IAAI,GAAG,GAAG,CAAC;YACZ,IAAI;aACH,CAAC,IAAI,IAAI,aAAa,GAAG,aAAa,CAAC,IAAI,aAAa,CAAC;YAC1D,KAAK;aACJ,CAAC,IAAI,IAAI,YAAY,GAAG,YAAY,CAAC,IAAI,YAAY,CAAC;AACvD,YAAA,IAAI;IAEZ;IAEQ,OAAO,0BAA0B,CAAC,KAAa,EAAA;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACpC,QAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AAChB,gBAAA,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC9B,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;gBACxC,OAAO,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;YACzC;QACJ;aAAO;YACH,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;QACxC;AAEA,QAAA,OAAO,KAAK;IAChB;IAEQ,OAAO,8BAA8B,CAAC,IAAY,EAAA;;AAEtD,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AAClB,YAAA,OAAO,IAAI,CAAC,WAAW,EAAE;QAC7B;;QAGA,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,aAAa,CAAC;AACnE,QAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;QAC5E;;AAGA,QAAA,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI;aAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7E,aAAA,IAAI,EAAE;AACX,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C;;QAGA,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;IAC7C;AAEA;;;;;AAKG;IACI,MAAM,aAAa,CAAC,WAAmB,EAAA;QAC1C,IAAI,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AAE1D,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC;YACjD,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;QACzD;AAEA,QAAA,OAAO,OAAO;IAClB;AAEA;;;;;;;AAOG;IACI,MAAM,aAAa,CAAC,WAAmB,EAAA;AAC1C,QAAA,IAAI,CAAC,WAAW;AACZ,YAAA,OAAO,EAAE;AAEb,QAAA,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,EAAE;QAEb,MAAM,IAAI,GAAG,eAAe,CAAC,0BAA0B,CAAC,WAAW,CAAC;QACpE,MAAM,QAAQ,GAAG,eAAe,CAAC,8BAA8B,CAAC,IAAI,CAAC;AAErE,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;AAKG;IACI,MAAM,aAAa,CAAC,WAAmB,EAAA;AAC1C,QAAA,IAAI,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;AACrC,YAAA,OAAO,SAAS;QAEpB,MAAM,eAAe,GAAG,SAAS;QACjC,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,CAAC,WAAW,CAAC;AAEvE,QAAA,MAAM,KAAK,GAAG;AACV,YAAA,kBAAkB,EAAE,eAAe;AACnC,YAAA,OAAO,EAAE,eAAe;SAC3B;AAED,QAAA,OAAO,KAAK;IAChB;uGArIS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA;;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA;;;ACFD;;;;;;AAMG;MAQU,wBAAwB,CAAA;AAWZ,IAAA,UAAA;AAVrB;;AAEG;AACa,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAU;IAC/B,KAAK,GAAG,QAAQ,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,4EAAC;IAC9E,KAAK,GAAG,QAAQ,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,4EAAC;IAC9E,KAAK,GAAG,QAAQ,CAAC,YAAY,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,4EAAC;AAC9E,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,8EAAC;AAE3D,IAAA,WAAA,CACqB,UAA2B,EAAA;QAA3B,IAAA,CAAA,UAAU,GAAV,UAAU;IAE/B;uGAbS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,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,qMCpBrC,4OAOW,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWG,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,kbAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;2FAEvC,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACI,WAAW,EAAA,UAAA,EAGT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,4OAAA,EAAA;;;AEfrD;;AAEG;AACG,MAAO,iBAAkB,SAAQ,QAA8B,CAAA;AACjE,IAAA,cAAc;AACjB;AAED;;AAEG;AACG,MAAO,mBAAwJ,SAAQ,QAAuD,CAAA;AAEnO;AAAA;;ACXD;;;;;;AAMG;MAQU,uBAAuB,CAAA;AAClC;;;AAGI;AACK,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AAE/C,IAAA,IAAW,YAAY,GAAA;AACrB,QAAA,OAAO,YAAY;IACrB;uGATW,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,UAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBpC,0OAMC,EAAA,MAAA,EAAA,CAAA,kEAAA,CAAA,EAAA,aAAA,EDUkB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAEtE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,UAAA,EAGR,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,QAAA,EAAA,0OAAA,EAAA,MAAA,EAAA,CAAA,kEAAA,CAAA,EAAA;;;AERnF;;;;;AAKG;MACU,aAAa,CAAA;AACd,IAAA,OAAgB,cAAc,GAAG,aAAa,CAAC,iBAAiB,EAAE;AAElE,IAAA,OAAO,iBAAiB,GAAA;;AAE5B,QAAA,OAAO,SAAS,CAAC,OAAO,IAAI,SAAS;IACzC;IAEO,SAAS,CAAC,KAAU,EAAE,MAAe,EAAA;QACxC,IAAI,MAAM,KAAK,SAAS;AACpB,YAAA,OAAO,KAAK;AAEhB,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC;IAC1I;uGAbS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACCD;;;;AAIG;MACU,sBAAsB,CAAA;AAwCK,IAAA,cAAA;AAvC5B,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACvD,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,MAAM,EAAE,MAAM;AACtB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAChB,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7D,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAChB,IAAA,OAAgB,gBAAgB,GAAG,IAAI,GAAG,CAAuB;AACrE,QAAA,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;AACzB,QAAA,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1B,QAAA,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC9B,QAAA,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;AAC5B,QAAA,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACzB,QAAA,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AACzB,QAAA,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3B,QAAA,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC9B,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC;AACrE,QAAA,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3B,QAAA,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1B,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC;AACrE,QAAA,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC;AACzH,QAAA,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;AAC5B,QAAA,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3B,QAAA,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3B,QAAA,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1B,QAAA,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,GAAG,sBAAsB,CAAC,WAAW,GAAG,GAAG,CAAC;AAC1H,QAAA,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC9B,QAAA,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAC3B,QAAA,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1B,QAAA,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;AAChC,QAAA,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;AAC5B,QAAA,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC;AAC/B,QAAA,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;AACnC,KAAA,CAAC;AAEF,IAAA,WAAA,CAAoC,cAA6B,EAAA;QAA7B,IAAA,CAAA,cAAc,GAAd,cAAc;IAClD;IAEO,SAAS,CAAC,KAAU,EAAE,IAAmB,EAAA;QAC5C,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACxG,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;IACvD;uGA9CS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACPD;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BE;AA+BK,MAAM,iCAAiC,GAAQ;AAClD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC;AAC/C,IAAA,KAAK,EAAE,IAAI;;AAEf;;;AAGG;AAiDG,MAAO,gBACT,SAAQ,aAAa,CAAA;AAErB;;;AAGG;IACM,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAO;AAC7B;;;AAGG;IACM,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAC/B;;;AAGG;AACM,IAAA,QAAQ,GAAG,KAAK,CAAsB,SAAS,+EAAC;AACzD;;;AAGG;IACM,cAAc,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACzC;;;AAGG;IACM,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACpC;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAkB,SAAS,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AACrF;;;AAGG;IACM,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AAClC;;;AAGG;IACM,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAEX;AACX;;;AAGG;IACM,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAEhB;AACX;;;AAGG;AACM,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,iFAAC;AACvC;;;AAGG;AACM,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,iFAAC;AACvC;;;AAGG;IACM,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAqB;AAC1C;;;AAGG;IACM,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAe;AAC3C;;;AAGG;IACM,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsB;AACnD;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAmB,SAAS,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvF;;;AAGG;IACM,QAAQ,GAAG,KAAK,CAAmB,SAAS,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACvF;;;AAGG;IACM,SAAS,GAAG,KAAK,CAAmB,SAAS,iFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/E,IAAA,KAAK,GAAG,KAAK,CAAiB,IAAI,4EAAC;AAC5C;;;AAGG;AACH,IAAA,OAAO,GAAG,KAAK,CAAwB,UAAU,8EAAC;AAClD;;;;AAIG;IACH,QAAQ,GAAG,MAAM,EAAuB;AACxC;;;;AAIG;IACH,OAAO,GAAG,MAAM,EAAS;AACzB;;;;AAIG;IACH,MAAM,GAAG,MAAM,EAAS;AAExB,IAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAmB,OAAO,CAAC;AAErD,IAAA,cAAc,GAAG,QAAQ,CAAC,OAAO;AACtC,QAAA,wBAAwB,EAAE,IAAI;AAC9B,QAAA,gCAAgC,EAAE,IAAI,CAAC,KAAK,EAAE;AAC9C,QAAA,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,kBAAkB,EACd,IAAI,CAAC,OAAO,EAAE,KAAK,QAAQ;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,QAAQ;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,QAAQ;AAC3C,QAAA,+BAA+B,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AACxD,QAAA,+BAA+B,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,OAAO;AAC3D,KAAA,CAAC,qFAAC;AAEH;;;AAGG;IACM,oBAAoB,GAAG,YAAY,CAAmB,cAAc,4FAAI,WAAW,EAAE,KAAK,EAAA,CAAG;AAE7F,IAAA,SAAS,GAAG,eAAe,CAAC,aAAa,gFAAC;AAEnD,IAAA,qBAAqB;AAErB,IAAA,aAAa,GAAa,MAAK,EAAG,CAAC;AAEnC,IAAA,cAAc,GAAa,MAAK,EAAG,CAAC;IAEpC,OAAO,GAAY,KAAK;AAExB,IAAA,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC;IAE9B,kBAAkB,GAAA;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE;AAClB,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ;oBAC1C;AACJ,gBAAA,KAAK,cAAc;AACf,oBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ;oBAC1C;;AAEZ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,aAAa;AAEjB;;;;AAIK;QACL,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAmB,SAAS,EAAE,IAAI,EAAE;AACrE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,IAAI,EAAE,IAAI;AACb,SAAA,CAAC;QAEF,MAAM,iBAAiB,GACnB,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAEvE,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAEjC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACxE;AAEQ,IAAA,YAAY,CAAC,YAA4B,EAAA;QAC7C,QAAQ,YAAY;AAChB,YAAA,KAAK,IAAI;AACL,gBAAA,OAAO,KAAK;AAChB,YAAA,KAAK,KAAK;AACN,gBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,GAAG,IAAI;AACxC,YAAA;AACI,gBAAA,OAAO,IAAI;;IAEvB;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAC3B;IACJ;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,WAAW,CAAC,KAAY,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE;IACzB;IAEA,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE;IACjC;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;IAC1B;AAEA,IAAA,gBAAgB,CAAC,EAAY,EAAA;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IAC3B;AAEA,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,GAAY,EAAA;QACzB,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACtB,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;AAC1B,QAAA,CAAC,CAAC;IACN;uGA5OS,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yIAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAJd,CAAC,iCAAiC,EAAE,aAAa,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EA8IxB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtLxC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuCT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAxCS,YAAY,mSAAE,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FA6C3B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhD5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yIAAyI;AACnJ,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;AACrC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,IAAA,CAAA;AACD,oBAAA,SAAS,EAAE,CAAC,iCAAiC,EAAE,aAAa,CAAC;oBAC7D,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACxC,iBAAA;omEAuHyD,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAkBE,cAAc,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEhE,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACtPtD;;AAEG;MAIU,cAAc,CAAA;AACM,IAAA,eAAA;AAA7B,IAAA,WAAA,CAA6B,eAA+B,EAAA;QAA/B,IAAA,CAAA,eAAe,GAAf,eAAe;IAC5C;AAEA;;;AAGG;IACI,OAAO,4BAA4B,CAAC,aAA2B,EAAA;AAClE,QAAA,MAAM,gBAAgB,GAAG,aAAa,IAAI,QAAQ;QAClD,UAAU,CAAC,MAAK;YACZ,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,qCAAqC,CAAC;AACxG,YAAA,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC;gBACpC;AAEJ,YAAA,MAAM,UAAU,GAAG,uBAAuB,CAAC,CAAC,CAAC;AAC7C,YAAA,UAAU,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACtE,CAAC,EACG,GAAG,CAAC;IACZ;AAEQ,IAAA,OAAO,aAAa,CAAC,OAAoC,EAAE,WAAmB,EAAA;QAClF,IAAI,WAAW,KAAK,EAAE;AAClB,YAAA,OAAO,OAAO;QAElB,IAAI,OAAO,YAAY,gBAAgB;AACnC,YAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;AAExC,QAAA,IAAI,OAAO,YAAY,gBAAgB,EAAE;YACrC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1C,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;AACvB,gBAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtC;AAEA,QAAA,OAAO,OAAO;IAClB;AAEA;;;;AAIG;IACI,SAAS,CAAC,OAAwB,EAAE,SAAkB,EAAA;AACzD,QAAA,IAAI,CAAC,SAAS;YACV;;AAGJ,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM;;AAG7C,QAAA,IAAI,cAAc;QAClB,IAAI,CAAC,cAAc,EAAE;;AAEjB,YAAA,cAAc,GAAG,CAAC,SAAS,CAAC;QAChC;AAAO,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;;AAEtC,YAAA,cAAc,GAAG,CAAC,GAAG,cAAc,EAAE,SAAS,CAAC;QACnD;aAAO;;AAEH,YAAA,cAAc,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC;QAChD;;AAGA,QAAA,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACpE;AAEA;;;;;;;AAOG;IACI,6BAA6B,CAAI,QAA0C,EAAE,SAAqB,EAAE,aAAA,GAAwB,OAAO,EAAE,YAAA,GAAuB,OAAO,EAAA;QACtK,IAAI,QAAQ,CAAC,EAAE;AACX,YAAA,OAAO,IAAI;QAEf,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChD,YAAA,IAAI,SAAS;gBACT,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;YAE1D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC;QACjE;aACK;YACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/G;AAEA,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;;;;AAQG;IACI,kCAAkC,CAAI,QAA0C,EAAE,SAAqB,EAAE,aAAA,GAAwB,OAAO,EAAE,YAAA,GAAuB,OAAO,EAAA;QAC3K,IAAI,QAAQ,CAAC,EAAE;YACX;QAEJ,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChD,YAAA,IAAI,SAAS;gBACT,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;YAE1D,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC;QACzE;aACK;YACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC;QACrE;IACJ;AAEA;;;;;AAKG;AACI,IAAA,YAAY,CAAC,cAA+B,EAAE,gBAAwB,OAAO,EAAE,eAAuB,OAAO,EAAA;AAChH,QAAA,MAAM,OAAO,GAAG,cAAc,EAAE,KAAK,IAAI,YAAY;AACrD,QAAA,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,IAAI,aAAa;QAEtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACnG;AAEA;;;;;AAKG;AACI,IAAA,oBAAoB,CAAC,cAA+B,EAAE,gBAAwB,OAAO,EAAE,eAAuB,OAAO,EAAA;AACxH,QAAA,MAAM,OAAO,GAAG,cAAc,EAAE,KAAK,IAAI,YAAY;AACrD,QAAA,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,IAAI,aAAa;QAEtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,MAAM,CAAA,CAAE,CAAC;IAC5C;AAEA;;;;;AAKG;AACI,IAAA,uBAAuB,CAAC,cAA8B,EAAE,SAAoB,EAAE,aAA2B,EAAA;;AAE5G,QAAA,IAAI,cAAc,CAAC,QAAQ,CAAO,EAAE;;YAEhC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC;AAEhD,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAO,CAAC,EAAE;gBAC9E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;;gBAE5D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;oBAClC,IAAI,CAAC,KAAK,EAAE;AAChB,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAA8B,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC;gBAErG,IAAI,WAAW,EAAE;;AAEb,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC;oBACzC,WAAW,CAAC,aAAa,EAAE;gBAC/B;;AAGA,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;YAC3C;YAEA,SAAS,CAAC,aAAa,EAAE;QAC7B;AAEA,QAAA,cAAc,CAAC,4BAA4B,CAAC,aAAa,CAAC;IAC9D;uGA/KS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,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,cAFX,MAAM,EAAA,CAAA;;2FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACJD;;;AAGG;MACU,eAAe,CAAA;AAKZ,IAAA,UAAA;AACA,IAAA,QAAA;AALJ,IAAA,aAAa;AACb,IAAA,aAAa;IAErB,WAAA,CACY,UAAqB,EACrB,QAA0B,EAAA;QAD1B,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAChB;AAEJ;;AAEG;AACH,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;IAC1B;AAEQ,IAAA,OAAO,cAAc,CAAC,eAAwC,EAAE,YAAqC,EAAE,iBAA0B,EAAA;AACrI,QAAA,IAAI,CAAC,YAAY;AACb,YAAA,OAAO,eAAe;AAC1B,QAAA,IAAI,CAAC,eAAe;AAChB,YAAA,OAAO,YAAY;QAEvB,IAAI,eAAe,GAAG,eAAe;QAErC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,iBAAiB,EAAE;gBAChD,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AAClD,gBAAA,IAAI,iBAAiB;oBACjB,eAAe,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC;YACrE;QACJ;AAEA,QAAA,OAAO,eAAe;IAC1B;AAEQ,IAAA,OAAO,qBAAqB,CAChC,OAAgB,EAChB,MAAe,EACf,WAAoB,EAAA;AAEpB,QAAA,IAAI,OAAO;YACP,OAAO,IAAI,WAAW,CAAC;AACnB,gBAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,IAAI,sBAAsB,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE;AAC7D,gBAAA,cAAc,EAAE,CAAA,EAAG,WAAW,IAAI,kBAAkB,CAAA,IAAA,EAAO,OAAO,CAAA;AACrE,aAAA,CAAC;QAEN,OAAO,IAAI,WAAW,CAAC;AACnB,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,IAAI,sBAAsB,CAAA,CAAE;AAC/C,YAAA,cAAc,EAAE,CAAA,EAAG,WAAW,IAAI,kBAAkB,CAAA;AACvD,SAAA,CAAC;IACN;AAEQ,IAAA,OAAO,wBAAwB,CACnC,OAAgB,EAChB,MAAe,EAAA;AAEf,QAAA,IAAI,OAAO;YACP,OAAO,IAAI,WAAW,CAAC;AACnB,gBAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,IAAI,sBAAsB,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE;gBAC7D,cAAc,EAAE,CAAA,EAAA,EAAK,OAAO,CAAA;AAC/B,aAAA,CAAC;QAEN,OAAO,IAAI,WAAW,CAAC;AACnB,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,IAAI,sBAAsB,CAAA,CAAE;AAClD,SAAA,CAAC;IACN;AAEA;;;;;;AAMG;IACI,MAAM,MAAM,CAAC,QAA2C,EAAA;QAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1C,YAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAA,yBAAA,EAA4B,QAAQ,CAAC,IAAI,CAAA,CAAE,GAAG,yBAAyB;AACvG,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,YAAY,CAAA,CAAE,CAAC;QAChF;AACA,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI;QAE3B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC;IACpD;AAEA;;;;;;;AAOG;AACI,IAAA,MAAM,uBAAuB,CAAC,QAAkB,EAAE,SAA4D,EAAA;AACjH,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM;QAC3B,IAAI,GAAG,KAAK,SAAS;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AAE5E,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS;QAE3C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC;IAC3C;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,WAAW,CAAC,GAAW,EAAE,SAAkB,EAAA;AACpD,QAAA,IAAI,MAAM,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAE5E,IAAI,SAAS,KAAK,SAAS;YACvB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;AAEjD,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;AAEzD,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;;;AAUG;AACI,IAAA,MAAM,uBAAuB,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;YAC3C,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChD,gBAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,QAAQ,CAAC,OAAO,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,mBAAmB,QAAQ,CAAA,CAAE,CAAC;YAClJ;YACA,IAAI,CAAC,QAAQ,CAAC,IAAI;AACd,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kCAAA,EAAqC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA,cAAA,EAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA,qBAAA,CAAuB,CAAC;AAC5I,YAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI;YAClC,IAAI,CAAC,eAAe,EAAE;QAC1B;IACJ;AAEA;;;;;AAKG;IACI,MAAM,WAAW,CAAC,QAAkB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,EAAE;AACxC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACzD,QAAA,OAAO,gBAAgB;IAC3B;AAEA;;;;;AAKG;IACI,mBAAmB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;AAEtF,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM;IACpC;AAEA;;;;;;;;;AASG;IACI,MAAM,mBAAmB,CAA+B,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAE,KAAc,EAAA;AAC7H,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAChE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AAErB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAW,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;AAExF,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;;;;;AAYG;AACI,IAAA,MAAM,wBAAwB,CAA+B,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAA;AAClH,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAW,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;QAE5E,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK;AAClG,YAAA,OAAO,QAAQ;QAEnB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;QAC3C,IAAI,YAAY,GAAG,QAAQ;AAE3B,QAAA,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE;;YAExD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI;AAChD,YAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS;AACrD,YAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI;YAC/B,IAAI,QAAQ,EAAE;AACV,gBAAA,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAW,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC;AAE/E,gBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI;AAC5F,oBAAA,OAAO,YAAY;;gBAGvB,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpE;QACJ;;AAGA,QAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS;AAErC,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;AAQG;IACI,MAAM,eAAe,CAAC,QAAkB,EAAA;QAC3C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AAEtD,QAAA,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1I,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE9B,YAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5B,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,IAAG;oBAClD,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;wBAChD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAA,qBAAA,EAAwB,QAAQ,CAAC,GAAG,CAAA,CAAE;oBACzE;AACA,oBAAA,OAAO,CAAA,MAAA,EAAS,QAAQ,CAAC,MAAM,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,OAAA,EAAU,QAAQ,CAAC,GAAG,EAAE;AACnF,gBAAA,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;gBAGb,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,IAAG;oBAC/C,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChD,wBAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM;oBAC/B;oBACA,OAAO,QAAQ,CAAC,MAAM;AAC1B,gBAAA,CAAC,CAAC;;AAGF,gBAAA,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;AAC3C,gBAAA,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG;AAE/D,gBAAA,MAAM,iBAAiB,GAAG;oBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,EAAE;oBACnE,MAAM,EAAE,CAAA,uDAAA,EAA0D,cAAc,CAAA,CAAE;AAClF,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,KAAK,EAAE,8BAA8B;AACrC,oBAAA,IAAI,EAAE;iBACT;AAED,gBAAA,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC;YAChD;;AAGA,YAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,CAAC,CAAC;YAC9C,IAAI,cAAc,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;gBAC3D,OAAO,mBAAmB,CAAC,IAAI;YACnC;;;AAIA,YAAA,MAAM,iBAAiB,GAAG;AACtB,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE;AAC3D,gBAAA,MAAM,EAAE,CAAA,sCAAA,EAAyC,mBAAmB,CAAC,GAAG,CAAA,CAAE;gBAC1E,MAAM,EAAE,mBAAmB,CAAC,MAAM;gBAClC,KAAK,EAAE,mBAAmB,CAAC,UAAU;AACrC,gBAAA,IAAI,EAAE;aACT;AAED,YAAA,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC;QAChD;QAEA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,IAAK,QAAQ,CAAC,IAAsB,CAAC,UAAU,CAAC,CAAc;AAEnI,QAAA,OAAO,aAAa;IACxB;AAEA;;;;;AAKG;IACI,MAAM,OAAO,CAAC,GAAW,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,gCAAgC,CAAC;AAChH,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC/E;AAEA;;;;;;;;AAQG;AACI,IAAA,eAAe,CAAC,GAAW,EAAE,IAAa,EAAE,KAAc,EAAA;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC;QAE/C,MAAM,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAE/D,QAAA,IAAI,CAAC,IAAI;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,qDAAA,EAAwD,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA,gBAAA,EAAmB,IAAI,CAAA,EAAA,CAAI,CAAC;AAEnI,QAAA,OAAO,IAAI;IACf;AAEA;;;;;;;AAOG;IACI,gBAAgB,CAAC,GAAW,EAAE,KAAc,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC;QAEtF,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC5B,YAAA,MAAM,KAAK,CAAC,CAAA,qDAAA,EAAwD,OAAO,CAAA,EAAA,CAAI,CAAC;AAEpF,QAAA,OAAO,KAAK;IAChB;AAEA;;;;;;;;;AASG;IACI,MAAM,OAAO,CAA+B,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAE,KAAc,EAAA;AACjH,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAChE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AAErB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAW,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;AAE5E,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;AAQG;IACI,MAAM,YAAY,CAAC,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAE,KAAc,EAAA;AACxF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAChE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AAErB,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;AAEvE,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;AAQG;AACI,IAAA,MAAM,YAAY,CAA+B,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAA;AACtG,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC/C,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtF,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;AAEtF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAA8D,SAAS,GAAE,eAAe,CAAC,uBAA8C,GAAE,eAAe,CAAC;AAElM,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;AAOG;AACI,IAAA,MAAM,iBAAiB,CAAC,GAAW,EAAE,UAAc,EAAE,OAAqB,EAAA;AAC7E,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC/C,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;AAClG,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;AAEtF,QAAA,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAEvJ,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;;AASG;IACI,MAAM,SAAS,CAAC,GAAW,EAAE,EAAU,EAAE,OAAqB,EAAE,KAAc,EAAA;AACjF,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AACrB,YAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC;AAExE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;AAC5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;AAElD,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;AAOG;AACI,IAAA,MAAM,cAAc,CAAS,GAAW,EAAE,OAAqB,EAAA;AAClE,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtF,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;AACtF,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAA0C,GAAG,EAAE,eAAe,CAAC,cAAc,EAAE,eAAe,CAAC;AAExI,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;AAQG;IACI,MAAM,kBAAkB,CAAC,GAAW,EAAE,UAAc,EAAE,IAAU,EAAE,OAAqB,EAAA;AAC1F,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;AAC/C,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;AAC/F,QAAA,MAAM,eAAe,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC;AAEtF,QAAA,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAE9J,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;;;AAQG;IACI,MAAM,IAAI,CAAS,QAA2B,EAAA;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1C,YAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAA,yBAAA,EAA4B,QAAQ,CAAC,IAAI,CAAA,CAAE,GAAG,yBAAyB;AACvG,YAAA,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,CAAA,CAAE,CAAC;QAC9E;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,CAAA,yBAAA,EAA4B,QAAQ,CAAC,IAAI,CAAA,4BAAA,CAA8B,CAAC;QAC5F;AAEA,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI;QACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;AAC1C,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAE3E,QAAA,IAAI,QAAQ;QACZ,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;gBACN,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAA4B,GAAG,EAAE,QAAQ,GAAE,eAAe,CAAC,cAAsB,GAAE,MAAM,CAAC;gBAC7H;AACJ,YAAA,KAAK,MAAM;gBACP,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAA4B,GAAG,EAAE,QAAQ,GAAE,eAAe,CAAC,cAAsB,GAAE,MAAM,CAAC;gBAC9H;AACJ,YAAA;AACI,gBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,MAAM,CAAA,mFAAA,CAAqF,CAAC;;AAGxH,QAAA,OAAO,QAAQ;IACnB;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,MAAM,CAAC,QAAkB,EAAE,UAAc,EAAA;AAClD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE;AAC7C,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,gCAAgC,CAAC;AAE7G,QAAA,IAAI,QAAQ;QACZ,QAAQ,MAAM;AACV,YAAA,KAAK,KAAK;AACN,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAsB,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBACrH;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAsB,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBACtH;AACJ,YAAA;AACI,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAsB,GAAG,EAAE,eAAe,CAAC,kBAAkB,EAAE,MAAM,CAAC;;AAGjH,QAAA,OAAO,QAAQ;IACnB;IAEQ,UAAU,CAAC,GAAW,EAAE,KAAc,EAAA;;AAE1C,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AACjB,YAAA,OAAO,GAAG;;AAGd,QAAA,IAAI,CAAC,KAAK;AACN,YAAA,KAAK,GAAG,IAAI,CAAC,aAAa;;AAG9B,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;AAEjC,QAAA,OAAO,OAAO;IAClB;AAEQ,IAAA,MAAM,aAAa,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC;AACxG,QAAA,OAAO,QAAQ;IACnB;IAEQ,eAAe,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM;AACjD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS;;YAE9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;IAC3C;AAEA;;;;;;;;;AASG;AACI,IAAA,MAAM,gBAAgB,CAAC,GAAW,EAAE,OAAqB,EAAA;QAC5D,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;AAEhE,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;;YAEhF,IAAI,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACxD,OAAO,CAAC,gBAAgD,CAAC;YAC7D;;AAGA,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;gBACjC,MAAM,EAAE,CAAA,sCAAA,EAAyC,GAAG,CAAA,CAAE;gBACtD,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,KAAK,EAAE,gBAAgB,CAAC,UAAU;AAClC,gBAAA,IAAI,EAAE;aACT;AAED,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;;YAG5D,MAAM,aAAa,GAAG,EAAE,GAAG,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAkC;YACnG,OAAO,CAAC,aAAa,CAAC;QAC1B;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;AAExB,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;gBACjC,MAAM,EAAE,CAAA,cAAA,EAAiB,GAAG,CAAA,UAAA,CAAY;AACxC,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,IAAI,EAAE;aACT;AAED,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,iBAAiB,CAAC;YAE5D,MAAM,aAAa,GAAG,EAAE,GAAG,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAkC;YACnG,OAAO,CAAC,aAAa,CAAC;QAC1B;QAEA,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAClD;AAEA;;;;;;;;;;;AAWG;AACI,IAAA,MAAM,oBAAoB,CAAC,GAAW,EAAE,OAAqB,EAAA;QAChE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;AAEhE,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAChF,IAAI,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACxD,OAAO,gBAAgB,CAAC,IAAI;YAChC;;AAGA,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;gBACjC,MAAM,EAAE,CAAA,sCAAA,EAAyC,GAAG,CAAA,CAAE;gBACtD,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,KAAK,EAAE,gBAAgB,CAAC,UAAU;AAClC,gBAAA,IAAI,EAAE;aACT;AACD,YAAA,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC;QAChD;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;;AAExB,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;gBACjC,MAAM,EAAE,CAAA,cAAA,EAAiB,GAAG,CAAA,UAAA,CAAY;AACxC,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,IAAI,EAAE;aACT;AACD,YAAA,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC;QAChD;QAEA,OAAO,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;IACtD;AAEA;;;;;;;;;;;;AAYG;AACI,IAAA,MAAM,gBAAgB,CAAC,GAAW,EAAE,aAAqB,EAAE,OAAqB,EAAA;QACnF,MAAM,yBAAyB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC;;AAG/E,QAAA,IAAI,cAAc,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;AAC5D,YAAA,OAAO,yBAAyB;QACpC;QAEA,MAAM,SAAS,GAAG,yBAAsC;AACxD,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC;AAEzC,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;;AAE7C,YAAA,MAAM,iBAAiB,GAAG;gBACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;gBACjC,MAAM,EAAE,CAAA,wBAAA,EAA2B,aAAa,CAAA,kCAAA,EAAqC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;AAChH,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,IAAI,EAAE;aACT;AACD,YAAA,OAAO,IAAI,cAAc,CAAC,iBAAiB,CAAC;QAChD;AAEA,QAAA,OAAO,QAAQ;IACnB;AACH;;AC9tBD;;;AAGG;MAIU,yBAAyB,CAAA;AASd,IAAA,UAAA;AARH,IAAA,QAAQ;AAIzB;;;AAGG;AACH,IAAA,WAAA,CAAoB,UAAqB,EAAA;QAArB,IAAA,CAAA,UAAU,GAAV,UAAU;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;AAEA;;;;AAIG;AACI,IAAA,cAAc,CAAC,IAAY,EAAA;AAC9B,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpD;AAEA;;;;;AAKG;AACI,IAAA,MAAM,sBAAsB,CAAC,IAAY,EAAE,OAAyB,EAAA;AACvE,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAE/B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;AAC5D,QAAA,MAAM,MAAM,CAAC,uBAAuB,EAAE;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM;AAC5B,QAAA,OAAO,MAAM;IACjB;AAEA;;;;;;AAMG;AACI,IAAA,SAAS,CAAC,IAAY,EAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM;AACP,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAA,SAAA,CAAW,CAAC;AAEhE,QAAA,OAAO,MAAM;IACjB;AAEA,IAAA,IAAW,GAAG,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ;IACxB;uGAvDS,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFtB,MAAM,EAAA,CAAA;;2FAET,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACJD;;;;;AAKG;MACU,cAAc,CAAA;AAsEF,IAAA,eAAA;AACA,IAAA,QAAA;AACD,IAAA,OAAA;AACA,IAAA,QAAA;AACC,IAAA,eAAA;AACA,IAAA,SAAA;AACA,IAAA,WAAA;IA3EL,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,WAA8E,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IACtK,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAA8E,KAAK,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAE5K,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,8EAAC;AAChD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,8EAAC;AACjD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,IAAI,QAAQ,kFAAC;AACrE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,IAAI,OAAO,iFAAC;AAEjE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,8EAAC;AAClE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAA2D,CAAC,IAAI,EAAE,CAAC,oFAAC;AAE/K,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AAErC,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AACvC,YAAA,OAAO,EAAE;AAEb,QAAA,QAAQ,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC;AACrD,IAAA,CAAC,qFAAC;AAEc,IAAA,MAAM,GAAG,MAAM,CAAqB,SAAS,6EAAC;IACtD,WAAW,GAAuB,SAAS;AACnC,IAAA,KAAK,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;AACzG,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAI;AACzB,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,YAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc;;AAG5C,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC3D,OAAO,OAAO,CAAC,MAAwB;;;YAI3C,IAAI,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;gBACjD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAA,KAAA,EAAQ,cAAc,GAAG;;;AAI3D,YAAA,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAgC;gBACrE,IAAI,YAAY,KAAK,SAAS;AAC1B,oBAAA,OAAO,EAAoB;AAE/B,gBAAA,OAAO,YAAY;YACvB;AAEA,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM;AAEzB,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI;YACvC,IAAI,CAAC,YAAY,EAAE;AACf,gBAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAA,wCAAA,CAA0C,CAAC;AAC5H,gBAAA,OAAO,EAAoB;YAC/B;YAEA,MAAM,kBAAkB,GAAG,IAAI,WAAW,CAAC,EAAC,CAAC,oBAAoB,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,oBAAoB,CAAC,QAAQ,GAAG,MAAM,EAAC,CAAC;YAC9H,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAe,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,kBAAkB,CAAC;AACjI,YAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAA,oEAAA,EAAuE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAA,CAAA,CAAG,CAAC;YAE5K,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;AAC9C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC;AAE9F,YAAA,OAAO,aAAa;AACxB,QAAA,CAAC,GACH;AAEF,IAAA,WAAA,CACqB,eAA+B,EAC/B,QAAmC,EACpC,OAAuB,EACvB,QAA2B,EAC1B,eAA8I,EAC9I,SAAgI,EAChI,WAAkI,EAAA;QANlI,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,WAAW,GAAX,WAAW;IAChC;IAEQ,OAAO,wBAAwB,CAAC,KAAc,EAAA;QAClD,MAAM,SAAS,GAAG,GAAG;QACrB,MAAM,GAAG,GAAG,EAAE;AACd,QAAA,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI;AAErH,QAAA,OAAO,SAAS;IACpB;IAEQ,cAAc,CAAC,KAAiC,EAAE,KAAyD,EAAA;AAC/G,QAAA,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;AACpE,QAAA,IAAI,SAAS;AACT,YAAA,OAAO,SAAS;AAEpB,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AACrC,YAAA,OAAO,SAAS;AAEpB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,EAAkB;IACnF;AAEA;;;;AAIG;AACI,IAAA,SAAS,CAAC,WAA8E,EAAA;AAC3F,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,IAAI,IAAI,GAAG,WAAuC;AAElD,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;YAC/F,MAAM,KAAK,GAAG,WAA4E;AAC1F,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;QACzD;AAEA,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AACxE,YAAA,OAAO,EAAE;AAEb,QAAA,OAAO,IAAI,CAAC,WAAiC,CAAW,IAAI,EAAE;IAClE;AAEA;;;;AAIG;AACI,IAAA,QAAQ,CAAC,WAA8E,EAAA;AAC1F,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;YAC9F,MAAM,KAAK,GAAG,WAA4E;AAC1F,YAAA,OAAO,KAAK;QAChB;QAEA,MAAM,IAAI,GAAG,WAA2B;AACxC,QAAA,OAAO,IAAI,CAAC,UAAgC,CAAuD;IACvG;AAEA;;;AAGG;IACI,MAAM,qBAAqB,CAAC,MAA0B,EAAA;AACzD,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3B;AAEQ,IAAA,+BAA+B,CAAC,QAAoC,EAAE,cAAoE,EAAE,QAAwB,EAAA;AACxK,QAAA,IAAI,CAAC,QAAQ;AACT,YAAA,OAAO,QAAQ;;QAGnB,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErG,QAAA,OAAO,aAAa;IACxB;AAEQ,IAAA,eAAe,CAAC,WAA8E,EAAA;AAClG,QAAA,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;AACjD,YAAA,OAAO,EAAE;QAEb,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AACvC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YACxC,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AACvD,gBAAA,KAAK,IAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG;QAC9B;AAEA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,iBAAiB,CAAC,WAA8E,EAAA;QACpG,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ;AACpF,YAAA,OAAO,EAAE;AAEb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW;AACrC,aAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5J,aAAA,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,KAAK,GAAG,IAAI,CAAA,EAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,GAAG,CAAA,EAAA,EAAK,cAAc,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;AAE5I,QAAA,OAAO,OAAO;IAClB;AACH;AAED;;;;;AAKG;MAIU,cAAc,CAAA;AAEF,IAAA,eAAA;AACA,IAAA,QAAA;IAFrB,WAAA,CACqB,eAA+B,EAC/B,QAAmC,EAAA;QADnC,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAC7B;IAEO,UAAU,CACb,OAAuB,EACvB,QAA2B,EAC3B,YAA2I,EAC3I,QAAsI,EACtI,UAAwI,EAAA;QACxI,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC;IACzH;uGAbS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,yBAAA,EAAA,CAAA,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,cAFX,MAAM,EAAA,CAAA;;2FAET,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACnMD;;;;;;;AAOG;MAQU,mCAAmC,CAAA;AAC5C;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAoD;AAC7E,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,OAAO,MAAM;YACT,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,mCAAmC,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAA6B,MAAM,IAAI,cAAc,CAAC,EAAE,GAAI,QAAQ,CAAC,UAAU,CAAC,OAAuB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7P,YAAA,mCAAmC,CAAC,2BAA2B,CAAC,QAAQ,CAAC;AACjF,IAAA,CAAC,gFAAC;AACF;;AAEE;IACc,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAoD;IAE1E,OAAO,2BAA2B,CAAC,QAAmB,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ;AACT,YAAA,OAAO,EAAE;AAEb,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU;AACpC,aAAA,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AACxH,aAAA,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,KAAoB,CAAC,CAAC;IACrE;AAEQ,IAAA,QAAS,GAAG,CAAS,QAA8B,EAAE,QAA2B,EAAA;AACpF,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,EAAE;AACpB,YAAA,MAAM,QAAQ,CAAC,CAAC,CAAC;QACrB;IACJ;IAEQ,OAAO,OAAO,CAAI,iBAA+D,EAAA;AACrF,QAAA,IAAI,CAAC,iBAAiB;AAClB,YAAA,OAAO,SAAS;AAEpB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;AAChC,YAAA,OAAO,iBAAiB;AAE5B,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAM,EAAE,CAAC,CAAC;IAC5F;uGAhDS,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BhD,ipBAeA,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDwUa,iCAAiC,CAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA5TjC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAP/C,SAAS;+BACI,uBAAuB,EAAA,UAAA,EAGrB,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,CAAC,MAAM,iCAAiC,CAAC,CAAC,EAAA,QAAA,EAAA,ipBAAA,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA;;AAqDlE;;;;;;;;AAQG;MAQU,yBAAyB,CAAA;AAClC;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;AAEG;AACa,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAoC,oFAAC;AACpH;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AACtD;;AAEE;IACc,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAoN;AAEjP,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,OAAO,mBAAgD;IAC3D;uGA3BS,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EE9FtC,w7BAkBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MFyHa,iCAAiC,kKA+FjC,+BAA+B,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAoC/B,+BAA+B,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAnP/B,mCAAmC,CAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAmEnC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EAGV,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,CAAC,MAAM,iCAAiC,CAAC,EAAE,UAAU,CAAC,MAAM,+BAA+B,CAAC,EAAE,UAAU,CAAC,MAAM,+BAA+B,CAAC,EAAE,mCAAmC,CAAC,EAAA,QAAA,EAAA,w7BAAA,EAAA;;AAgC7M;;;;;;;AAOG;MAQU,iCAAiC,CAAA;AAC1C;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;;;;AAMG;IACa,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA0G;AAC1I;;;;;;AAMG;IACa,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA0G;AAC5H,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAQ,8EAAC;AAClE;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AACtC,IAAA,cAAc,GAAG,KAAK,CAAC,EAA0D,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,KAAgH,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAyD,GAAG;AAEzT,IAAA,cAAc;AAE9B,IAAA,WAAA,CACI,cAA8B,EAAA;QAE9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;IACrI;uGArCS,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EG3I9C,qOAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EHsIc,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAER,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EAGnB,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,qOAAA,EAAA;;AA0CtB;;;;;;AAMG;MAQU,gCAAgC,CAAA;AACzC;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;AAEG;AACa,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAoC,oFAAC;AACpH;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AACtD;;AAEE;IACK,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAoN;AAExO,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;uGAvBS,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EIjM7C,qWAMA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EJyLc,uBAAuB,2EAjGxB,yBAAyB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAmGzB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,IAAI,EAAA,OAAA,EACP,CAAC,uBAAuB,EAAE,yBAAyB,CAAC,EAAA,QAAA,EAAA,qWAAA,EAAA;;AA4BjE;;;;;;;AAOG;MAQU,+BAA+B,CAAA;AACxC;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAIrC;AACJ;;AAEE;IACc,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA+B;uGAnBnD,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EK1O5C,wRAMM,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MLiVO,iCAAiC,CAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA7GjC,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;+BACI,mBAAmB,EAAA,UAAA,EAGjB,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,CAAC,MAAM,iCAAiC,CAAC,CAAC,EAAA,QAAA,EAAA,wRAAA,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA;;AAwBlE;;;;;;AAMG;MAQU,+BAA+B,CAAA;AAChC,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACvD,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,MAAM,EAAE,MAAM;AACtB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAChB,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7D,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAExB;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;AAEG;IACa,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAC7G;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AACtD;;AAEE;IACc,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAe;AAE3B,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,KAAK,CAAC;AACtD,YAAA,OAAO,SAAS;AAEpB,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM;AACrC,YAAA,OAAO,CAAC;AAEZ,QAAA,OAAO,SAAS;AACpB,IAAA,CAAC,oFAAC;AAEF,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,IAAW,iBAAiB,GAAA;AACxB,QAAA,OAAO,iBAAiB;IAC5B;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,+BAA+B,CAAC,WAAW;IACtD;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,+BAA+B,CAAC,WAAW;IACtD;uGA1DS,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EM9Q5C,qqBAmBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ENyPc,wBAAwB,wEAA0B,gBAAgB,EAAA,QAAA,EAAA,yIAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAArD,sBAAsB,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,CAAA;;2FAEjD,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAP3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,UAAA,EAGjB,IAAI,EAAA,OAAA,EACP,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,qqBAAA,EAAA;;AA+DhH;;;;AAIG;MAQU,iCAAiC,CAAA;AAC1C;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;;AAIG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAY;AACrD;;AAEE;IACc,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAuB;uGAhB3C,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjC,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EOvV9C,uMAEC,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EP+LY,gCAAgC,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAsJhC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EAGnB,IAAI,EAAA,OAAA,EACP,CAAC,gCAAgC,CAAC,EAAA,QAAA,EAAA,uMAAA,EAAA;;;AQlV/C;;;;AAIG;MAKU,WAAW,CAAA;AACA,IAAA,aAAA;AAApB,IAAA,WAAA,CAAoB,aAA2B,EAAA;QAA3B,IAAA,CAAA,aAAa,GAAb,aAAa;IACjC;AAEA;;;;;AAKG;AACI,IAAA,SAAS,CAAC,GAAY,EAAA;QACzB,IAAI,OAAO,GAAG,KAAK,QAAQ;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAA,kBAAA,CAAoB,CAAC;QAE9D,OAAO,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAC,GAAG,CAAC;IACjE;uGAfS,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACLD;;;;;;;;AAQG;MAaU,sBAAsB,CAAA;AACvB,IAAA,QAAQ;AAChB;;;;AAIC;AACe,IAAA,MAAM,GAAG,KAAK,CAAC,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAS,KAAK,CAAC,IAAI,EAAE,GAAG;AAEzE;;AAEC;AACe,IAAA,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAS,KAAK,CAAC,IAAI,UAAU,GAAG;AAE3E,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxC;;AAEG;AACI,IAAA,GAAG,GAAG,MAAM,CAAqB,SAAS,0EAAC;AAElD,IAAA,UAAU,CAAC,GAAY,EAAA;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACrB;AACA,IAAA,gBAAgB,CAAC,EAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;IACA,iBAAiB,GAAA;;IAEjB;AACA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC;AAEO,IAAA,WAAW,CAAC,KAAwB,EAAA;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,MAAK;YACjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAgB,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,QAAA,CAAC;AAED,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;IAC9B;IAEO,UAAU,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B;uGA/CS,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,8TAPpB,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC,0BCxBN,8yBAcA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,07BAAE,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA;;2FAE5C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAZlC,SAAS;+BACI,SAAS,EAAA,UAAA,EAGP,IAAI,EAAA,SAAA,EACL,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE;AACV,yBAAA,CAAC,WACO,CAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,8yBAAA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA;;;AEnB1D;;;;;;;AAOG;MASU,kCAAkC,CAAA;AAC3C;;;AAGG;IACa,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAgB;AAC5B,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,IAAI,IAAI,2EAAC;IACpD,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,6EAAC;AACvF;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAyC;AAEzE,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;uGAhBS,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,kVCtB/C,8hEAiBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGc,yBAAyB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,uFAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAD7D,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAR9C,SAAS;+BACI,sBAAsB,EAAA,UAAA,EAGpB,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,yBAAyB,EAAE,wBAAwB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,8hEAAA,EAAA;;;AEpBjF;;;;;;AAMG;AACI,MAAM,QAAQ,GAAG,CAAC,EAAY,EAAE,iBAAiB,GAAG,GAAG,KAAI;AAC9D,IAAA,IAAI,SAA6B;IACjC,OAAO,UAAqB,GAAG,IAAW,EAAA;AACtC,QAAA,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;AAC9B,QAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;AAChF,IAAA,CAAC;AACL;;ACFA;;;AAGG;MAaU,uBAAuB,CAAA;AAChB,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAErC;AACY,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,GAAG,QAAQ,CAAC,WAAqB,GAAG,SAAS;AAClI,IAAA,CAAC,6EAAC;AACc,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,UAAU,IAAI,QAAQ,iFAAC;AAClF,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI;AAC3C,IAAA,CAAC,0EAAC;AACc,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,WAAW,IAAI,CAAC,kFAAC;;;AAG7E,IAAA,eAAe,GAAG,KAAK,CAAC,SAAS,sFAAC;AAClC,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,cAAc,qFAAC;AAC9E,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,wBAAwB,+FAAC;AAClG,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,OAAO,8EAAC;AAChE,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,gBAAgB,uFAAC;AAClF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,eAAe,sFAAC;AAChF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,gBAAgB,uFAAC;AAClF,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,eAAe,sFAAC;AAChF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,mBAAmB,0FAAC;AACxF,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,kBAAkB,yFAAC;AACtF,IAAA,OAAO,GAAG,YAAY,CAAC,MAAM,8EAAC;AAC9B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,WAAW,GAAG,YAAY,CAAC,UAAU,kFAAC;AACtC,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACzG,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,MAAM,6EAAC;AAC9D,IAAA,aAAa,GAAG,YAAY,CAAC,qBAAqB,oFAAC;AACnD,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,YAAY,mFAAC;AAC1E,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,eAAe,sFAAC;AAChF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,mBAAmB,0FAAC;AACxF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,aAAa,oFAAC;AAC5E,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,cAAc,qFAAC;AAC9E,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,aAAa,oFAAC;AAC5E,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,YAAY,mFAAC;AAEnF,IAAA,iBAAiB,GAAG,KAAK,CAAC,KAAK,wFAAC;AAC/B,IAAA,cAAc;AACN,IAAA,aAAa,GAAG,MAAM,CAAmB,SAAS,oFAAC;AACnD,IAAA,GAAG,GAAG,MAAM,CAAqB,SAAS,0EAAC;AAEnD,IAAA,QAAQ;AAEhB,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrF,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,eAAe,IAAI,SAAS,CAAC,CAAC;;;;QAKnG,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MACrD,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC,IAAG,EAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC,CAAC;IACP;IAEO,kBAAkB,GAAA;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE;IAC1B;IAEO,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;IACrC;AAEO,IAAA,mBAAmB,CAAC,KAAwB,EAAA;QAC/C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS;IACnD;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/B;AAEO,IAAA,YAAY,CAAC,KAAwB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,cAAc,EAAE;IACzB;AAEO,IAAA,gBAAgB,CAAC,EAAa,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACtB;IAEO,iBAAiB,GAAA;;IAExB;AAEO,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IACjC;IAEO,cAAc,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC;AAEO,IAAA,UAAU,CAAC,GAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;IACrB;uGAtGS,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,0lBAPrB,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE;aACV,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EA6BqC,MAAM,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,SAAA,EAEF,UAAU,mFAGR,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1DtE,grFAsDA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7B2B,YAAY,yuBAAE,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,8BAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,+BAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,cAAA,EAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,45BAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,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,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAhH,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA;;2FAEZ,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;+BACI,UAAU,EAAA,UAAA,EAGR,IAAI,EAAA,SAAA,EACL,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE;AACV,yBAAA,CAAC,EAAA,OAAA,EACO,CAAC,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,grFAAA,EAAA,MAAA,EAAA,CAAA,kKAAA,CAAA,EAAA;yXA4BpF,MAAM,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAEF,UAAU,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGR,qBAAqB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AElDhE,SAAU,qBAAqB,CAAgB,MAAgE,EAAE,KAAQ,EAAA;AAC7H,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAA,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;;AAE1B;AAEA;;;;AAIG;MAIU,6BAA6B,CAAA;IACtB,mBAAmB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;IACxC,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;AAEvD,IAAA,WAAA,CACY,WAAwB,EAAA;;AAGhC,QAAA,WAAW,CAAC,iBAAiB,GAAG,GAAG;QAEnC,MAAM,CAAC,MAAK;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACxE,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,8FAA8F,CAAC;gBAC7G;YACJ;YAEA,MAAM,OAAO,GAAG,WAAW;YAC3B,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAA,2FAAA,EAA8F,QAAQ,CAAC,IAAI,CAAA,kCAAA,CAAoC,CAAC;gBAC9J;YACJ;AAEA,YAAA,OAAO,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,QAAQ;AACxC,YAAA,OAAO,CAAC,iBAAiB,GAAG,CAAC;YAC7B,IAAI,QAAQ,CAAC,IAAI;gBACb,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;YACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;AACrC,gBAAA,OAAO,CAAC,IAAI,GAAG,SAAS;YAC5B;iBACK,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE;gBAC1C,OAAO,CAAC,iBAAiB,GAAG,6BAA6B,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC;YACnG;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,OAAO,qBAAqB,CAAC,KAAc,EAAA;QAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ;AAClE,YAAA,OAAO,CAAC;QAEZ,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,EAAE;YAC5C,KAAK,IAAI,EAAE;AACX,YAAA,KAAK,EAAE;QACX;AAEA,QAAA,OAAO,KAAK;IAChB;uGA/CS,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uEAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uEAAuE;AACpF,iBAAA;;0BAMQ;;AA6CT;;;;;;;;;;;AAWG;MAIU,wBAAwB,CAAA;AACjC;;AAEG;IACa,mBAAmB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;IACxC,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;IAEvD,WAAA,CACwB,MAAe,EACf,WAAyB,EAAA;QAE7C,MAAM,CAAC,MAAK;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACxE,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,sFAAsF,CAAC;gBACrG;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;YAChC,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAA,mFAAA,EAAsF,QAAQ,CAAC,IAAI,CAAA,kBAAA,CAAoB,CAAC;gBACtI;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,WAAW;YACrC,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAA,mFAAA,EAAsF,QAAQ,CAAC,IAAI,CAAA,8CAAA,CAAgD,CAAC;gBAClK;YACJ;AAEA,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ;AACnD,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO;AAChD,YAAA,OAAO,CAAC,WAAW,GAAG,WAAW;AACjC,YAAA,OAAO,CAAC,WAAW,GAAG,UAAU;AAChC,YAAA,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ;YACpC,OAAO,CAAC,QAAQ,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU;AACjD,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI;AACrB,YAAA,OAAO,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC;;AAEtE,YAAA,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AAE/C,YAAA,IAAI,OAAO,YAAY,MAAM,EAAE;;AAE3B,gBAAA,qBAAqB,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC;AACzF,gBAAA,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,yBAAyB,GAAG,EAAE;YACnF;AACK,iBAAA,IAAI,OAAO,YAAY,WAAW,EAAE;;AAErC,gBAAA,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,yBAAyB,GAAG,EAAE;AAC/E,gBAAA,OAAO,CAAC,OAAO,GAAG,MAAM;AACxB,gBAAA,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,QAAQ;AACzC,gBAAA,OAAO,CAAC,aAAa,GAAG,IAAI;YAChC;AACJ,QAAA,CAAC,CAAC;IACN;uGAtDS,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oIAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,oIAAoI;AACjJ,iBAAA;;0BASQ;;0BAAQ;;0BACR;;0BAAQ;;AAiDjB;;;;;;;;;;AAUG;MAIU,kBAAkB,CAAA;AAKN,IAAA,UAAA;AACA,IAAA,QAAA;IALL,mBAAmB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;IACxC,kBAAkB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAa;IAEvD,WAAA,CACqB,UAAsB,EACtB,QAAmB,EAAA;QADnB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAEzB,MAAM,CAAC,MAAK;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACxE,IAAI,CAAC,QAAQ,EAAE;gBACX;YACJ;AAEA,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AACnD,YAAA,IAAI,EAAE,aAAa,YAAY,WAAW,CAAC;gBACvC;AAEJ,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC9D,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;YAChE,IAAI,QAAQ,CAAC,WAAW;AACpB,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,WAAqB,CAAC;YAC5F,IAAI,QAAQ,CAAC,IAAI;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC;YACpE,IAAI,QAAQ,CAAC,GAAG;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7E,IAAI,QAAQ,CAAC,GAAG;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7E,IAAI,QAAQ,CAAC,IAAI;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/E,IAAI,QAAQ,CAAC,QAAQ;gBACjB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC;AACjE,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE;;;gBAGnB,IAAI,aAAa,YAAY,mBAAmB;oBAC5C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;;oBAEjE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;YAC3D;YACA,IAAI,QAAQ,CAAC,IAAI;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/E,IAAI,QAAQ,CAAC,IAAI;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/E,IAAI,QAAQ,CAAC,SAAS;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzF,IAAI,QAAQ,CAAC,SAAS;AAClB,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC7F,QAAA,CAAC,CAAC;IACN;uGAjDS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,4CAA4C;AACzD,iBAAA;;AAqDD;;;;;AAKG;AAUG,MAAO,mBAA6E,SAAQ,eAAe,CAAA;AAC7F,IAAA,mBAAmB,GAAG,KAAK,CAAC,QAAQ,yFAAa;IAEzD,cAAc,GAAG,KAAK;AAE9B,IAAA,WAAA,CACoC,MAAwB,EACb,UAAuC,EACjC,eAAsD,EACxD,cAAsC,EAAA;QAErF,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC;QAEhE,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAC3C,IAAI,CAAC,QAAQ,EAAE;gBACX;YACJ;AAEA,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC7B,QAAA,CAAC,CAAC;IACN;AAEgB,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAG9C,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI;AAC3C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC9B;AAEA,QAAA,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;IAC9B;AAhCS,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAOI,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EACb,mBAAmB,yCACnB,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AATxC,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,0DAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAPjB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AACrD,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0DAA0D;AACpE,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,SAAS;AAClB,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AACrD,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;0BAOQ;;0BAAY;;0BAAQ;;0BACpB;;0BAAY;;0BAAQ,MAAM;2BAAC,aAAa;;0BACxC;;0BAAY;;0BAAQ,MAAM;2BAAC,mBAAmB;;0BAC9C;;0BAAY;;0BAAQ,MAAM;2BAAC,iBAAiB;;AAoC/C,MAAO,4BAA6B,SAAQ,oBAAoB,CAAA;uGAAzD,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,SAAA,EAR1B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,4BAA4B,CAAC;AAC3D,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAVxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6GAA6G;AACvH,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,kCAAkC,CAAC;AAC3D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAcK,MAAO,6BAA8B,SAAQ,4BAA4B,CAAA;uGAAlE,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,SAAA,EAR3B;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAVzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2CAA2C;AACrD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC;AAC5D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAeK,MAAO,2BAA4B,SAAQ,0BAA0B,CAAA;uGAA9D,2BAA2B,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,SAAA,EARzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,6CAA6C;AACvD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAcK,MAAO,0BAA2B,SAAQ,kBAAkB,CAAA;uGAArD,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,SAAA,EARxB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AACzD,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wCAAwC;AAClD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC,CAAC;AACzD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAcK,MAAO,2BAA4B,SAAQ,mBAAmB,CAAA;uGAAvD,2BAA2B,EAAA,IAAA,EAAA,IAAA,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,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,SAAA,EARzB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yCAAyC;AACnD,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;AAIM,MAAM,mBAAmB,GAAG;AAC/B,IAAA,sBAAsB,EAAE,aAAa;AACrC,IAAA,oBAAoB,EAAE,WAAW;AACjC,IAAA,qBAAqB,EAAE,YAAY;AACnC,IAAA,kBAAkB,EAAE,SAAS;AAC7B,IAAA,kBAAkB,EAAE,SAAS;AAC7B,IAAA,oBAAoB,EAAE,WAAW;AACjC,IAAA,oBAAoB,EAAE,WAAW;CACpC;AAMK,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AACtD,IAAA,WAAA,CAAoB,EAAa,EAAA;QAC7B,KAAK,CAAC,EAAE,CAAC;IACb;uGAHS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAJjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,IAAI,EAAE;AACT,iBAAA;;0BAEgB;;MASJ,cAAc,CAAA;uGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YA7Hd,mBAAmB,EA6CnB,4BAA4B,EAa5B,6BAA6B,EAc7B,2BAA2B,EAa3B,0BAA0B,EAa1B,2BAA2B,EAiB3B,qBAAqB,EA9PrB,wBAAwB,EAwExB,kBAAkB,EAzIlB,6BAA6B,EAsUgP,mBAAmB,CAAA,EAAA,OAAA,EAAA,CA1HhS,mBAAmB,EA6CnB,4BAA4B,EAa5B,6BAA6B,EAc7B,2BAA2B,EAa3B,0BAA0B,EAa1B,2BAA2B,EAiB3B,qBAAqB,EA9PrB,wBAAwB,EAwExB,kBAAkB,EAzIlB,6BAA6B,EAuUgP,mBAAmB,CAAA,EAAA,CAAA;wGAEhS,cAAc,EAAA,OAAA,EAAA,CAH+P,mBAAmB,EACnB,mBAAmB,CAAA,EAAA,CAAA;;2FAEhS,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;oBAC1S,OAAO,EAAE,CAAC,mBAAmB,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,mBAAmB,CAAC;AAC7S,iBAAA;;;AC1UD;;;;AAIG;MACU,YAAY,CAAA;AACb,IAAA,QAAQ,GAAkC,IAAI,GAAG,EAAE;AACnD,IAAA,QAAQ;AACR,IAAA,YAAY;AACZ,IAAA,KAAK;AAEL,IAAA,OAAO,sBAAsB,CAAC,SAAiB,EAAE,YAAgD,EAAA;AACrG,QAAA,IAAI,YAAY,YAAY,IAAI,EAAE;YAC9B,QAAQ,SAAS;gBACb,KAAK,eAAe,CAAC,MAAM;oBACvB,OAAO,eAAe,CAAC,OAAO;gBAClC,KAAK,eAAe,CAAC,UAAU;oBAC3B,OAAO,eAAe,CAAC,WAAW;gBACtC,KAAK,eAAe,CAAC,SAAS;oBAC1B,OAAO,eAAe,CAAC,WAAW;gBACtC,KAAK,eAAe,CAAC,qBAAqB;oBACtC,OAAO,eAAe,CAAC,WAAW;gBACtC,KAAK,eAAe,CAAC,YAAY;oBAC7B,OAAO,eAAe,CAAC,UAAU;gBACrC,KAAK,eAAe,CAAC,wBAAwB;oBACzC,OAAO,eAAe,CAAC,UAAU;;QAE7C;AAEA,QAAA,OAAO,SAAS;IACpB;IAEQ,OAAO,iBAAiB,CAAC,IAAkB,EAAA;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAA0B;QAC5C,QAAQ,IAAI;YACR,KAAK,iBAAiB,CAAC,MAAM;YAC7B,KAAK,iBAAiB,CAAC,OAAO;AAC1B,gBAAA,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM;YAC9B,KAAK,iBAAiB,CAAC,IAAI;YAC3B,KAAK,iBAAiB,CAAC,KAAK;YAC5B,KAAK,iBAAiB,CAAC,KAAK;YAC5B,KAAK,iBAAiB,CAAC,KAAK;YAC5B,KAAK,iBAAiB,CAAC,KAAK;gBACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACpC,KAAK,iBAAiB,CAAC,IAAI;YAC3B,KAAK,iBAAiB,CAAC,QAAQ;YAC/B,KAAK,iBAAiB,CAAC,cAAc;YACrC,KAAK,iBAAiB,CAAC,QAAQ;YAC/B,KAAK,iBAAiB,CAAC,SAAS;AAC5B,gBAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7B,KAAK,iBAAiB,CAAC,OAAO;YAC9B,KAAK,iBAAiB,CAAC,MAAM;YAC7B,KAAK,iBAAiB,CAAC,MAAM;gBACzB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AACtC,YAAA;AACI,gBAAA,QAAQ,IAAI,CAAC,GAAG;AACZ,oBAAA,KAAK,MAAM;AACP,wBAAA,OAAO,IAAI;AACf,oBAAA;AACI,wBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;;;IAG3G;IAEQ,OAAO,yBAAyB,CAAC,IAAW,EAAA;AAChD,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;AACrB,YAAA,KAAK,YAAY;gBACb,OAAO,eAAe,CAAC,WAAW;AACtC,YAAA,KAAK,UAAU;gBACX,OAAO,eAAe,CAAC,QAAQ;AACnC,YAAA,KAAK,cAAc;gBACf,OAAO,eAAe,CAAC,YAAY;AACvC,YAAA,KAAK,UAAU;gBACX,OAAO,eAAe,CAAC,SAAS;AACpC,YAAA;gBACI,MAAM,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,CAAE,CAAC;;IAEnE;AAEA;;;;;AAKG;IACI,KAAK,CAAC,IAAW,EAAE,YAAsB,EAAA;QAC5C,IAAI,YAAY,EAAE;AACd,YAAA,MAAM,WAAW,GAAG,eAAe,CAC/B,MAAM,CAAC,WAAW,CACd,MAAM,CAAC,OAAO,CAAC,SAAS;AACnB,iBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAM,CAAC,GAAG,EAAE,CAAC,IAAW,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAA,CAAE,CAAC,CAAqC,CAC3H,CACR,EAAE,IAAI,CAAC;YACZ,WAAW,CAAC,IAAI,CAAC;QACrB;QAEA,MAAM,KAAK,GAAG,eAAe,CAAC;YAC1B,gBAAgB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;YAC3G,mBAAmB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC;YAClH,qBAAqB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC;YACtH,yBAAyB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,wBAAwB,CAAC;YACtI,oBAAoB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC;YAClH,wBAAwB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,qBAAqB,CAAC;YAClI,aAAa,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC;AAC1G,YAAA,eAAe,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;AACrE,YAAA,OAAO,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,iBAAiB,CAAC,IAAoB,CAAC;YAC3F,aAAa,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrD,YAAY,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,QAAQ,GAAG,IAAI;YACnD,mBAAmB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,qBAAqB,EAAE;AAClE,YAAA,oBAAoB,EAAE,CAAC,IAAW,KAAK,IAAI,CAAC,yBAAyB,CAAC,IAAiC,EAAE,KAAK,CAAC;SAClH,EAAE,IAAI,CAAC;QAER,KAAK,CAAC,IAAI,CAAC;QAEX,OAAO,IAAI,CAAC,QAAQ;IACxB;AAEQ,IAAA,YAAY,CAAC,YAAgC,EAAE,KAAyC,EAAE,SAAiB,EAAA;QAC/G,IAAI,YAAY,KAAK,SAAS;YAC1B,MAAM,KAAK,CAAC,CAAA,kCAAA,EAAqC,KAAK,uBAAuB,SAAS,CAAA,wBAAA,CAA0B,CAAC;QAErH,SAAS,GAAG,YAAY,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9C,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF;aACK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACpF,YAAA,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACnC;aACK;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QACjE;IACJ;IAEQ,qBAAqB,GAAA;;AAEzB,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAC/B;;QAGJ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YACtD;AAEJ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS;YACpB;;QAGJ,KAAK,MAAM,CAAC,IAAI,MAAM;AAClB,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;IAClC;;IAGQ,yBAAyB,CAAC,IAA+B,EAAE,KAA4B,EAAA;AAC3F,QAAA,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU;YACzC,KAAK,CAAC,SAAS,CAAC;QACpB,MAAM,SAAS,GAAG,YAAY,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;IAC/D;AACH;;AC7KD;;AAEG;MACU,iBAAiB,CAAA;AAEnB,IAAA,OAAO,WAAW,CAAC,MAA0B,EAAE,UAA0E,EAAA;AAC5H,QAAA,IAAI,CAAC,MAAM;AACP,YAAA,OAAO,EAAE;;;AAIb,QAAA,MAAM,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,MAAM,CAAC;QACzD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;AAGlC,QAAA,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,CAAC;AAE9D,QAAA,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;IACtC;AAEQ,IAAA,OAAO,uBAAuB,CAAC,OAAsC,EAAE,UAA0E,EAAA;QACrJ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AAChC,YAAA,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;gBACxB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO;AACxC,gBAAA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAC9D,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/E;YACJ;QACJ;IACJ;IAEQ,OAAO,sBAAsB,CAAC,KAAa,EAAA;;QAE/C,MAAM,KAAK,GAAG,2BAA2B;;QAGzC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAE3D,QAAA,OAAO,MAAM;IACjB;AACH;;ACvCD;;AAEG;MAIU,YAAY,CAAA;AACrB;;;;;AAKG;AACI,IAAA,OAAO,uBAAuB,CAAC,QAA+C,EAAE,MAAsB,EAAA;AACzG,QAAA,IAAI,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,SAAS;AAC7C,YAAA,OAAO,SAAS;;QAGpB,IAAI,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;YAC1C,OAAO,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;QAE7D,MAAM,aAAa,GAAG,YAAY,CAAC,mBAAmB,CAClD,MAAM,CAAC,SAAS,CACnB;AACD,QAAA,MAAM,eAAe,GAAG,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;QAElF,QAAQ,aAAa;AACjB,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,cAAc;AACnB,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,UAAU;gBACX,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,CAAA,EAAA,EAAK,eAAe,CAAA,CAAA,CAAG;AACnE,YAAA;gBACI,OAAO,CAAA,EAAG,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAA,CAAA,EAAI,eAAe,CAAA,CAAE;;IAEzE;AAEA;;;;;AAKG;AACI,IAAA,OAAO,4BAA4B,CAAC,QAA+C,EAAE,OAAyB,EAAA;QACjH,MAAM,MAAM,GAAG;AACV,aAAA,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC;aAC1D,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACf,IAAI,CAAC,CAAA,CAAA,EAAI,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA,CAAA,CAAG,CAAC;QAErC,IAAI,MAAM,KAAK,EAAE;AACb,YAAA,OAAO,SAAS;QAEpB,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG;IACxB;AAEA;;;;;AAKG;AACI,IAAA,OAAO,8BAA8B,CAAC,KAAyB,EAAE,UAAiE,EAAA;AACrI,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO;AAClC,QAAA,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;AACtD,YAAA,OAAO,SAAS;QAEpB,MAAM,MAAM,GAAG;AACV,aAAA,GAAG,CAAC,QAAQ,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAmC,EAAE,CAAC;aACtG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;AACnC,aAAA,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,4BAA4B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAQ,CAAC;aAC1E,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aACf,IAAI,CAAC,OAAO,CAAC;QAElB,IAAI,MAAM,KAAK,EAAE;AACb,YAAA,OAAO,SAAS;QAEpB,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG;IACxB;AAEA;;;;AAIG;AACI,IAAA,OAAO,mCAAmC,CAAC,MAA0B,EAAE,UAA0E,EAAA;QACpJ,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC;AAEjE,QAAA,OAAO,OAAO;IAClB;AAEA;;;;AAIG;IACI,OAAO,+BAA+B,CAAC,KAAyB,EAAA;AACnE,QAAA,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,OAAO,KAAK,CAAC;iBACR,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM,CAAA,CAAE;iBACrD,IAAI,CAAC,IAAI,CAAC;QACnB;AAEA,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACjB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;AACtE,YAAA,OAAO,GAAG,KAAK,CAAC,SAAS,CAAA,CAAA,EAAI,KAAK,EAAE;QACxC;AAEA,QAAA,OAAO,SAAS;IACpB;AAEA;;;;;AAKG;AACI,IAAA,OAAO,yBAAyB,CAAC,KAAqB,EAAE,MAAe,EAAA;AAC1E,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;QAE/B,IAAI,eAAe,GAAG,EAAqB;AAC3C,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,CAAC;AAC7D,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAC;AAC/D,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,IAAA,CAAM,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,CAAC;AAEzD,QAAA,IAAI,MAAM;AACN,YAAA,eAAe,CAAC,OAAO,GAAG,MAAM;AACpC,QAAA,IAAI,OAAO;AACP,YAAA,eAAe,CAAC,QAAQ,GAAG,OAAO;QACtC,IAAI,GAAG,EAAE;YACL,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;AAC3B,gBAAA,eAAe,CAAC,IAAI,GAAG,SAAS;QACxC;QACA,IAAI,IAAI,EAAE;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACxC,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;AAC5B,gBAAA,eAAe,CAAC,KAAK,GAAG,UAAU;QAC1C;AAEA,QAAA,OAAO,eAAe;IAC1B;AAEA;;;;;AAKG;AACI,IAAA,OAAO,kCAAkC,CAAC,KAAyB,EAAE,QAAmB,EAAA;AAC3F,QAAA,MAAM,eAAe,GAAG;YACpB,OAAO,EAAE,YAAY,CAAC,8BAA8B,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC;AACjF,YAAA,QAAQ,EAAE,YAAY,CAAC,+BAA+B,CAAC,KAAK,CAAC;AAC7D,YAAA,IAAI,EAAE,YAAY,CAAC,2BAA2B,CAAC,KAAK,CAAC;AACrD,YAAA,KAAK,EAAE,YAAY,CAAC,4BAA4B,CAAC,KAAK;SACzD;AAED,QAAA,OAAO,eAAe;IAC1B;AAEA;;;;AAIG;IACI,OAAO,4BAA4B,CAAC,KAAyB,EAAA;QAChE,OAAO,KAAK,CAAC,KAAK;IACtB;AAEA;;;;AAIG;IACI,OAAO,2BAA2B,CAAC,KAAyB,EAAA;AAC/D,QAAA,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI;IACvD;AAEQ,IAAA,OAAO,qBAAqB,CAAC,QAA+C,EAAE,KAAc,EAAE,MAAgB,EAAA;AAClH,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AACrC,YAAA,OAAO,MAAM;QAEjB,MAAM,IAAI,GAAG,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC;QAE1D,QAAQ,IAAI;YACR,KAAK,YAAY,CAAC,IAAI;AAClB,gBAAA,OAAO,QAAS,KAAc,CAAC,WAAW,EAAE,iBAAiB;YACjE,KAAK,YAAY,CAAC,aAAa;AAC3B,gBAAA,OAAO,QAAS,KAAc,CAAC,WAAW,EAAE,iBAAiB;YACjE,KAAK,YAAY,CAAC,cAAc;AAC5B,gBAAA,OAAO,QAAS,KAAc,CAAC,WAAW,EAAE,uBAAuB;YACvE,KAAK,YAAY,CAAC,IAAI;AAClB,gBAAA,OAAO,QAAS,KAAc,CAAC,WAAW,EAAE,iBAAiB;YACjE,KAAK,YAAY,CAAC,QAAQ;AACtB,gBAAA,OAAO,QAAS,KAAc,CAAC,WAAW,EAAE,iBAAiB;YACjE,KAAK,YAAY,CAAC,IAAI;YACtB,KAAK,YAAY,CAAC,MAAM;YACxB,KAAK,YAAY,CAAC,QAAQ;YAC1B,KAAK,YAAY,CAAC,KAAK;gBACnB,OAAO,EAAE,GAAG,KAAK;YACrB,KAAK,YAAY,CAAC,OAAO;AACrB,gBAAA,OAAO,EAAE,IAAK,KAAgB,GAAG,GAAG,CAAC;AACzC,YAAA;AACI,gBAAA,OAAO,CAAA,CAAA,EAAI,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG;;IAEtH;AAEQ,IAAA,OAAO,mBAAmB,CAAC,QAA+C,EAAE,MAAsB,EAAA;AACtG,QAAA,IAAI,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,SAAS;AAC7C,YAAA,OAAO,SAAS;AAEpB,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;QAChC,IAAI,OAAO,KAAK,SAAS;YACrB,MAAM,KAAK,CAAC,CAAA,SAAA,EAAY,QAAQ,CAAC,IAAI,CAAA,eAAA,CAAiB,CAAC;QAE3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,gBAAgB;QAC5D,MAAM,aAAa,GAAG,YAAY,CAAC,mBAAmB,CAClD,MAAM,CAAC,SAAS,CACnB;;AAGD,QAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAChB,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;YACxF,OAAO,CAAA,EAAG,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAA,CAAA,EAAI,eAAe,CAAA,CAAE;QACjE;;QAGA,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;AACnD,YAAA,OAAO,SAAS;QAEpB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC1E,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAE/F,QAAA,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,EAAG,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAA,CAAE,CAAC;QACtE,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAEjD,OAAO,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,CAAG;IACrC;IAEQ,OAAO,mBAAmB,CAAC,SAAkB,EAAA;QACjD,QAAQ,SAAS;YACb,KAAK,eAAe,CAAC,WAAW;AAC5B,gBAAA,OAAO,YAAY;YACvB,KAAK,eAAe,CAAC,QAAQ;AACzB,gBAAA,OAAO,UAAU;YACrB,KAAK,eAAe,CAAC,YAAY;AAC7B,gBAAA,OAAO,cAAc;YACzB,KAAK,eAAe,CAAC,SAAS;AAC1B,gBAAA,OAAO,UAAU;YACrB,KAAK,eAAe,CAAC,MAAM;AACvB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,UAAU;AAC3B,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,EAAE;AACnB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,SAAS;AAC1B,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,qBAAqB;AACtC,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,YAAY;AAC7B,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,wBAAwB;AACzC,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,EAAE;AACnB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,MAAM;AACvB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,MAAM;AACvB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,KAAK;AACtB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,UAAU;AAC3B,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,WAAW;AAC5B,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,OAAO;AACxB,gBAAA,OAAO,IAAI;YACf,KAAK,eAAe,CAAC,WAAW;AAC5B,gBAAA,OAAO,IAAI;AACf,YAAA;AACI,gBAAA,MAAM,KAAK,CAAC,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAE,CAAC;;IAEzD;AAEQ,IAAA,OAAO,eAAe,CAAC,QAA+C,EAAE,KAAc,EAAA;AAC1F,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,IAAI,OAAO,KAAK,KAAK,QAAQ;AACzB,gBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AAC/D,gBAAA,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,OAAQ,CAAS,CAAC,QAAQ,CAAC,OAAQ,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC;gBAC9I,OAAO,YAAY,CAAC,IAAI;YAE5B,OAAO,YAAY,CAAC,MAAM;QAC9B;QAEA,OAAO,QAAQ,CAAC,IAAK;IACzB;uGAjSS,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,MAAM;AACrB,iBAAA;;;ACPD;;;;;AAKG;MAQU,4BAA4B,CAAA;AAMV,IAAA,OAAA;AAL7B;;AAEG;AACa,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAc;AAEpD,IAAA,WAAA,CAA6B,OAAe,EAAA;QAAf,IAAA,CAAA,OAAO,GAAP,OAAO;IAEpC;IAEA,OAAO,CAAC,KAAiB,EAAE,IAAc,EAAA;AACvC,QAAA,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO;AAC5E,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;QAC7D;AACK,aAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACxB,IAAI,eAAe,EAAE;gBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE;oBACvD,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;oBAC7C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACxC,iBAAA,CAAC;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;AAC3C,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;YAC5B;iBACK;gBACH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;oBACrC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;oBAC7C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;oBACvC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5B,iBAAA,CAAC;YACJ;QACF;AACK,aAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9B;IACF;uGAxCW,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,6MCpBzC,ukCA8BA,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,sbAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE/C,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;+BACI,gBAAgB,EAAA,UAAA,EAGd,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,ukCAAA,EAAA,MAAA,EAAA,CAAA,gDAAA,CAAA,EAAA;;;AEX7D;;;AAGG;MAOU,0CAA0C,CAAA;AA4BtB,IAAA,YAAA;AA3B7B;;;AAGG;AACa,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,sFAAkB;AACnE;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AACtD;;AAEG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;AAEG;AACa,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAsC;AAE5D,IAAA,IAAI,GAAG,QAAQ,CAAY,MAAM,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,2EAAC;IAE/F,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC;AACpD,QAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAA8C,CAAC;AAC5E,KAAA,CAAC,+EAAC;AAEK,IAAA,6BAA6B;AAErC,IAAA,WAAA,CAA6B,YAAyB,EAAA;QAAzB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACrC,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,6BAA6B,EAAE,WAAW,EAAE;AACjD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChD,YAAA,IAAI,CAAC,6BAA6B,GAAG,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvG,YAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,cAAc,CAAC,KAAyC,EAAA;AAC5D,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,GAAG,KAAK;IACzC;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,6BAA6B,EAAE,WAAW,EAAE;IACrD;uGA9CS,0CAA0C,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0CAA0C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBvD,6HAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDUc,uBAAuB,oDAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,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;;2FAI7C,0CAA0C,EAAA,UAAA,EAAA,CAAA;kBANtD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,OAAA,EACjC,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,6HAAA,EAAA;;;AEE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;MAaU,uBAAuB,CAAA;AAwOX,IAAA,iBAAA;AACA,IAAA,YAAA;AAxOrB,IAAA,MAAM,CAAC,MAAqC,EAAA;QACxC,IAAI,IAAI,CAAC,IAAI,EAAE;YACX;AAEJ,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC;;AAGlC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;YAC3B;QAEJ,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7B,YAAA,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,aAAa,EAAE;AACzC,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;gBAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK;gBAClC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK;AAClC,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC;gBACjC,IAAI,MAAM,KAAK,MAAM;oBACjB;AACJ,gBAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;AACvC,oBAAA,OAAO,CAAC,CAAC,GAAG,KAAK;AACrB,gBAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;oBACvC,OAAO,CAAC,GAAG,KAAK;gBACpB,IAAI,MAAM,GAAG,MAAM;AACf,oBAAA,OAAO,CAAC,CAAC,GAAG,KAAK;gBACrB,IAAI,MAAM,GAAG,MAAM;oBACf,OAAO,CAAC,GAAG,KAAK;YACxB;AACA,YAAA,OAAO,CAAC;AACZ,QAAA,CAAC,CAAC;IAEN;IACgB,YAAY,GAAG,YAAY;AAC3C;;;AAGG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;;;;;AAOG;IACa,cAAc,GAAG,KAAK,CAAmH,MAAM,EAAE,qFAAC;AAClJ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,WAAW,CAAS,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,uFAAC;AACvK,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,8EAAC;AAC7G,IAAA,WAAW,GAAG,SAAS,CAAc,aAAa,kFAAC;AACnD,IAAA,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAQ,OAAO,CAAC;AACjD,IAAA,gBAAgB,GAAG,MAAM,CAAa,EAAE,uFAAC;IACzC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,MAAM,EAAE,IAAI;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACP,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,gBAAgB,IAAI,EAAE,qFAAC;AAC5F;;;;;AAKG;IACa,YAAY,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;AAChC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,gBAAgB;AAC1D,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS;AACjG,YAAA,OAAO,EAAE;QAEb,OAAO,YAAY,CAAC,mCAAmC,CAAC,MAAM,EAAE,UAAU,CAAC;AAC/E,IAAA,CAAC,8EAAC;AACF;;;;;AAKG;AACa,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,OAAiG,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACrK;;;AAGG;AACa,IAAA,UAAU,GAAG,KAAK,CAAa,EAAE,iFAAC;IAClC,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAChJ;;;AAGG;AACa,IAAA,SAAS,GAAG,KAAK,CAAC,KAAK,gFAAC;AAExC;;;;;;AAMG;AACa,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,2EAAC;AAElC;;;;;;;AAOG;AACa,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,gFAAC;AACvB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,QAAQ;QAC/C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ;AACxE,YAAA,OAAO,SAAS;AAEpB,QAAA,OAAO;aACF,KAAK,CAAC,GAAG;aACT,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;aACjB,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;aACpB,GAAG,CAAC,CAAC,IAAG;AACL,YAAA,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,YAAA,MAAM,aAAa,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;YAC9D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;AACjD,QAAA,CAAC,CAAC;AACV,IAAA,CAAC,oFAAC;AACc,IAAA,eAAe,GAAG,KAAK,CAAkB,EAAE,sFAAC;AAC5C,IAAA,sBAAsB,GAAG,KAAK,CAAC,IAAI,6FAAC;AACpD;;AAEG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChD;;;;;;;;;;AAUE;IACc,OAAO,GAAG,KAAK,CAA8D,MAAM,EAAE,8EAAC;AACtF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE;AAC3F,IAAA,CAAC,+EAAC;AACF;;;;;AAKG;IACa,aAAa,GAAG,KAAK,CAA+C,MAAM,EAAE,oFAAC;AAC7E,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sFAAC;AACvG;;;;AAIG;AACa,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAe;AACpC,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,IAAI,CAAC,4FAAC;AACzF;;;AAGG;IACa,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACzG;;;AAGG;IACa,kBAAkB,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACxD;;;AAGG;AACa,IAAA,YAAY,GAAG,KAAK,CAAS,MAAM,mFAAC;AACpD;;;AAGG;AACa,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,iFAAC;AACjD;;;;AAIG;AACa,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,oFAAY;AAC3D;;AAEG;AACa,IAAA,YAAY,GAAG,KAAK,CAAc,EAAE,mFAAC;AACrD;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK,CAA+B,IAAI,oFAAC;AACzD,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,qFAAC;AACxJ;;AAEG;AACa,IAAA,mBAAmB,GAAG,KAAK,CAAC,IAAI,0FAAC;AACjD;;AAEG;AACa,IAAA,uBAAuB,GAAG,KAAK,CAAC,IAAI,8FAAC;AACrD;;;AAGG;AACa,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,iFAAC;AAC9C;;AAEG;IACa,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA0B;AAC5C,IAAA,YAAY,GAAG,KAAK,CAAC,CAAC,mFAAC;AACvB,IAAA,kBAAkB,GAAG,KAAK,CAAC,EAAE,yFAAC;;AAG7B,IAAA,uBAAuB;AACvB,IAAA,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACrD,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAEhB,sBAAsB,GAAG,KAAK;IAC9B,gBAAgB,GAA+D,EAAE;IAEzF,WAAA,CACqB,iBAAmC,EACnC,YAAyB,EAC1C,MAAc,EACd,cAA8B,EAC9B,aAAsB,EACtB,aAA4B,EAAA;QALX,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAK7B,IAAI,CAAC,uBAAuB,GAAG;AAC3B,YAAA,IAAI,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAChJ,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACtJ,YAAA,IAAI,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAChJ,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACzJ,YAAA,IAAI,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACzJ;AAED,QAAA,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;;QAG7D,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAExB,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI;gBAC1D;YAEJ,SAAS,CAAC,KAAK,EAAE;YAEjB,MAAM,WAAW,GAAG;iBACf,GAAG,CAAC,CAAC,IAAG;gBACL,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,YAAY,CAAc;AAC1F,gBAAA,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AACvB,gBAAA,OAAO,SAAS;AACpB,YAAA,CAAC,CAAC;YAEN,KAAK,MAAM,OAAO,IAAI,WAAW;AAC7B,gBAAA,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC/B,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,YAAW;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC9B;AAEJ,YAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACpD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;;AAG9C,YAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAC9B,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;gBAClC,MAAM,sBAAsB,GAAG,YAAY,CAAC,yBAAyB,CAAC,cAAc,EAAE,kBAAkB,CAAC;gBACzG,MAAM,gBAAgB,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,sBAAsB,EAAE;AAC1E,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC1C;YACJ;;YAGA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,eAAe,EAAE,kBAAkB,CAAC;AACnF,YAAA,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;AACxF,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,mBAAmB,CAAC,kBAA0B,EAAA;AACjD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,SAAS;AACV,YAAA,OAAO,SAAS;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;AAE5D,QAAA,OAAO,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC;IACnC;AAEO,IAAA,gBAAgB,CAAC,kBAA0B,EAAA;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI;AACL,YAAA,OAAO,kBAAkB;AAC7B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,CAAC,YAAY;AACb,YAAA,OAAO,kBAAkB;QAC7B,OAAO,kBAAkB,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;IACzD;AAEO,IAAA,IAAI,CAAC,KAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC;;AAEvC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE;AAChD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YACzD;QAEJ,MAAM,UAAU,GAAG,YAAY,CAAC,kCAAkC,CAAC,KAAK,EAAE,cAAc,CAAC;QACzF,YAAY,CAAC,mCAAmC,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,gBAAgB,CAAC;AACrG,QAAA,IAAI,iBAAiB,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,IAAI,iBAAiB,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,IAAI,iBAAiB,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,iBAAiB,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;AACpM,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;IAC5C;IAEO,eAAe,CAAC,KAAiB,EAAE,GAAc,EAAA;AACpD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;QACtC,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,WAAW,KAAK,SAAS;YAC5D;AAEJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACpD,QAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QAEvB,KAAK,CAAC,eAAe,EAAE;IAC3B;AAEO,IAAA,cAAc,CAAC,MAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,YAAA,OAAO,KAAK;QAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AAEvD,QAAA,OAAO,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ;IAC5G;AAEO,IAAA,kBAAkB,CAAC,QAA2D,EAAA;AACjF,QAAA,IAAI,CAAC,QAAQ;YACT,OAAO,gBAAgB,CAAC,IAAI;AAEhC,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI;QAClC,QAAQ,YAAY;YAChB,KAAK,YAAY,CAAC,MAAM;YACxB,KAAK,YAAY,CAAC,OAAO;YACzB,KAAK,YAAY,CAAC,QAAQ;YAC1B,KAAK,YAAY,CAAC,KAAK;gBACnB,OAAO,gBAAgB,CAAC,OAAO;YACnC,KAAK,YAAY,CAAC,IAAI;gBAClB,OAAO,gBAAgB,CAAC,OAAO;YACnC,KAAK,YAAY,CAAC,IAAI;YACtB,KAAK,YAAY,CAAC,aAAa;YAC/B,KAAK,YAAY,CAAC,cAAc;gBAC5B,OAAO,gBAAgB,CAAC,IAAI;AAChC,YAAA;AACI,gBAAA,OAAO,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI;;IAEtI;AAEO,IAAA,kBAAkB,CAAC,QAA+C,EAAA;QACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC1D,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC;IACzD;AAEO,IAAA,mBAAmB,CAAC,QAA+C,EAAA;AACtE,QAAA,QAAQ,QAAQ,CAAC,IAAI;YACjB,KAAK,YAAY,CAAC,MAAM;YACxB,KAAK,YAAY,CAAC,OAAO;YACzB,KAAK,YAAY,CAAC,QAAQ;AACtB,gBAAA,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC;YAC/D,KAAK,YAAY,CAAC,KAAK;AACnB,gBAAA,OAAO,CAAC;AACZ,YAAA;AACI,gBAAA,OAAO,SAAS;;IAE5B;AAEQ,IAAA,kBAAkB,CAAC,WAAuC,EAAE,eAA2C,EAAE,YAAoB,EAAA;AACjI,QAAA,IAAI,CAAC,WAAW;YACZ;QAEJ,IACI,eAAe,KAAK,SAAS;AAC7B,YAAA,eAAe,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS;AACvD,YAAA,WAAW,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS,EAAE;;;AAGrD,YAAA,WAAW,CAAC,KAAK,GAAG,IAAI;QAC5B;AACK,aAAA,IACD,WAAW,CAAC,SAAS,KAAK,eAAe,CAAC,SAAS;aAClD,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,KAAK,IAAI,CAAC;AACjE,YAAA,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE;;;YAG5B,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;QAChJ;IACJ;AAEQ,IAAA,mBAAmB,CAAC,OAAoE,EAAA;AAC5F,QAAA,IAAI,CAAC,OAAO;YACR;AAEJ,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,KAAI;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACtD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvB,gBAAA,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,YAAY,CAAC,CAAC;YAC1J;iBACK;gBACD,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,YAAY,CAAC;YACzG;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/D;IAEQ,sBAAsB,CAC1B,GAAM,EACN,MAAS,EAAA;AAET,QAAA,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,EAAG,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC,CACrB;IACxD;uGAjbS,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAJ,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,CAAA,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,g2HC7DpC,+lIA4FA,EAAA,MAAA,EAAA,CAAA,kdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDjCc,WAAW,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,4BAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAA,IAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,qBAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,eAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAE,4BAA4B,CAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAmB,uBAAuB,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAG,yBAAyB,qHAAE,mBAAmB,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAL,IAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAA,IAAA,CAAA,kBAAA,CAAA,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,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAE,iBAAiB,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,IAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAE,0CAA0C,+HAL9L,CAAC;AACZ,gBAAA,OAAO,EAAE,gBAAgB;AACzB,gBAAA,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjC,gBAAA,UAAU,EAAE,CAAC,SAAwB,KAAK,SAAS;aACtD,CAAC,EAAA,CAAA;;2FAGO,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAZnC,SAAS;+BACI,UAAU,EAAA,UAAA,EAGR,IAAI,EAAA,aAAA,EACD,CAAC;AACZ,4BAAA,OAAO,EAAE,gBAAgB;AACzB,4BAAA,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjC,4BAAA,UAAU,EAAE,CAAC,SAAwB,KAAK,SAAS;yBACtD,CAAC,EAAA,OAAA,EACO,CAAC,WAAW,EAAE,4BAA4B,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,0CAA0C,EAAE,0CAA0C,CAAC,EAAA,QAAA,EAAA,+lIAAA,EAAA,MAAA,EAAA,CAAA,kdAAA,CAAA,EAAA;AAqDrM,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,cAAA,EAAA,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,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,aAAa,sEACT,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,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,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,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,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,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,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,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,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,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,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,yBAAA,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,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,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAgYpE,IAAK,gBAMJ;AAND,CAAA,UAAK,gBAAgB,EAAA;AACjB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACjB,CAAC,EANI,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;AE9crB;;AAEG;MAEmB,2BAA2B,CAAA;AAC7C;;;AAGG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAAa;AAEtD;;AAEG;AACa,IAAA,sBAAsB,GAAG,KAAK,CAAC,KAAK,6FAAC;IAErC,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA+B;uGAZ1C,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,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,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADhD;;AAgBD;;AAEG;AAEG,MAAgB,mCAAqI,SAAQ,2BAAsC,CAAA;AACrM;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;uGANhC,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,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,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBADxD;;AAUD;;;;;;AAMG;AAQG,MAAO,6BAA+H,SAAQ,mCAA8C,CAAA;uGAArL,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,kGCjF1C,6PAIA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDuMa,uBAAuB,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MA5HqB,uBAAuB,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAD7D,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAPzC,SAAS;+BACI,iBAAiB,EAAA,aAAA,EAGZ,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,6PAAA,EAAA;;AAKjF;;;;;;;AAOG;AAQG,MAAO,iCAAmN,SAAQ,mCAA8C,CAAA;AAiD7P,IAAA,YAAA;AACA,IAAA,iBAAA;AAjDL,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,OAAO,sFAAC;IACpE,cAAc,GAAG,QAAQ,CAAC,MAAO,IAAI,CAAC,iBAAiB,CAAC,OAA0B,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAA8B,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAChJ,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,gFAAC;IAE7E,IAAI,GAAG,QAAQ,CAC3B,KAAK;;AAED,IAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;AAE/D,IAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC,CAC9E,EACD,EAAE,YAAY,EAAE,EAAE,EAAE,CACvB;AAGM,IAAA,kBAAkB;AACT,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;AAC3C,QAAA,IAAI,UAAU;AACV,YAAA,OAAO,EAAE;QAEb,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,UAAU,EAAE,iCAAiC;AAC7C,gBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,sBAAsB;AACjC;SAChB;AACL,IAAA,CAAC,iFAAC;IACc,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAQ,EAAE,kBAA2B,KAAI;QAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;AAC3C,QAAA,IAAI,UAAU;AACV,YAAA,OAAO,EAAE;QAEb,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,kBAAkB,GAAG,QAAQ,GAAG,SAAS;gBAChD,OAAO,EAAE,CAAC,kBAAkB,GAAG,QAAQ,GAAG,SAAS;AACnD,gBAAA,eAAe,EAAE,MAAM;AACvB,gBAAA,UAAU,EAAE,mCAAmC;gBAC/C,OAAO,EAAE,MAAM,IAAI,CAAC,wBAAwB,CAAC,GAAG;AACvC;SAChB;AACL,IAAA,CAAC,8EAAC;IAGF,WAAA,CACqB,YAAyB,EACzB,iBAAmC,EAAA;AAEpD,QAAA,KAAK,EAAE;QAHU,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAGtC;AAEQ,IAAA,2BAA2B,CAAC,QAAoB,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ;AACT,YAAA,OAAO,EAAE;AAEb,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU;AACpC,aAAA,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AACxH,aAAA,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,KAAoB,CAAC,CAAC;IACrE;IAEO,sBAAsB,GAAA;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAE9C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS;aAC7C,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/B,aAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,QAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC;AAEjD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAgB;AACpF,QAAA,iBAAiB,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE;AAC9C,QAAA,MAAM,cAAc,GAAG,IAAI,QAAQ,CAAC,iBAAiB,CAAC;AAEtD,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AACjG,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAI,EAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACpH;AAEO,IAAA,wBAAwB,CAAC,GAAQ,EAAA;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzC;uGApFS,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,yNEnG9C,oUAYA,EAAA,MAAA,EAAA,CAAA,gXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MFqFc,cAAc,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAE,mBAAmB,iXAAmB,uBAAuB,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,WAAA,EAAA,MAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,EAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EADxE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAP7C,SAAS;+BACI,qBAAqB,EAAA,aAAA,EAGhB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,WACtE,CAAC,cAAc,EAAE,mBAAmB,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,CAAC,EAAA,QAAA,EAAA,oUAAA,EAAA,MAAA,EAAA,CAAA,gXAAA,CAAA,EAAA;;sBAiBxF,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;AAwEtD;;;;;;;;AAQG;AASG,MAAO,uBAAyH,SAAQ,mCAA8C,CAAA;AACxL,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,IAAW,mBAAmB,GAAA;AAC1B,QAAA,OAAO,mBAAgD;IAC3D;uGAPS,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EG3MpC,4gCAoBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MHkNa,+BAA+B,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAgJ/B,6BAA6B,CAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAmC7B,6BAA6B,CAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAtT7B,iCAAiC,CAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAsGwJ,kCAAkC,mHAAE,WAAW,CAAA,EAAA,CAAA,EAAA,aAAA,EADlO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBARnC,SAAS;+BACI,UAAU,EAAA,UAAA,EAGR,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,UAAU,CAAC,MAAM,+BAA+B,CAAC,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC,EAAE,iCAAiC,EAAE,kCAAkC,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,4gCAAA,EAAA;;AAYtP;;;;;;;;AAQG;AASG,MAAO,+BAAuP,SAAQ,mCAA8C,CAAA;AAqDjS,IAAA,iBAAA;AApDrB;;;AAGG;AACa,IAAA,aAAa,GAAG,KAAK,CAAC,KAAK,oFAAC;AAC5C;;;;;;AAMG;IACa,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA0G;AAC1I;;;;;;AAMG;IACa,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA0G;AAE5H,IAAA,uBAAuB,GAAG,YAAY,CAAuC,sBAAsB,8FAAC;AACpG,IAAA,qBAAqB,GAAG,YAAY,CAAuC,oBAAoB,4FAAC;AAChG,IAAA,WAAW,GAAG,SAAS,CAAc,WAAW,kFAAC;AACjE;;AAEG;IACI,QAAQ,GAAG,MAAM,EAAqC;IACtD,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,CAAC;AACxD,IAAA,cAAc;AAEb,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAyB;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAA+H;AACjL,IAAA,CAAC,mFAAC;IAEe,MAAM,GAAG,QAAQ,CAC9B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAChC,oBAAoB,EAAE,EACtB,SAAS,CAAC,WAAW,IACjB;UACM,WAAW,CAAC,YAAY,CAAC,IAAI,CAC3B,YAAY,CAAC,CAAC,CAAC,EACf,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC;AACnC,UAAE,KAAK,CACd,CACJ,CACJ;IAED,WAAA,CACqB,iBAAmC,EACpD,cAA8B,EAAA;AAE9B,QAAA,KAAK,EAAE;QAHU,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QAIlC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;IAC7H;AAEO,IAAA,gBAAgB,CAAC,KAAwB,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,aAAc,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IACnF;IAEO,MAAM,yBAAyB,CAAC,KAAsD,EAAA;QACzF,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE;QAEtD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YACtC;QAEJ,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE;AACtC,YAAA,MAAM,UAAU,GAAI,KAAK,CAAC,aAA4B;AACtD,YAAA,IAAI,UAAU,CAAC,SAAS,KAAK,iBAAiB,EAAE;;AAG5C,gBAAA,IAAI,MAAM,GAAG,KAAK,CAAC;qBACd,KAAK,CAAC,GAAG;qBACT,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;qBACpB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;qBACjB,GAAG,CAAC,CAAC,IAAG;oBACL,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AACxF,gBAAA,CAAC,CAAC;AAEN,gBAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAC9B;gBAEJ,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3E,MAAM,MAAM,GAAG;AACX,sBAAE,CAAA,EAAG,OAAO,CAAC,UAAU,CAAA,KAAA,EAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA;sBAC7C,YAAY,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,GAAA,EAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;AAEzG,gBAAA,KAAK,OAAO,EAAE,IAAI,EAAE,IAAI;oBACpB,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,MAAM,CAAC;gBAE3D,IAAI,YAAY,EAAE;oBACd,MAAM,cAAc,GAAG;AAClB,yBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,yBAAA,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAA+B,CAAC,CAAC;oBAClE,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC5C,oBAAA,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE;gBACrC;YACJ;iBACK;;gBAGD,IAAI,MAAM,GAAG,CAAA,SAAA,EAAY,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA,EAAA,CAAI;gBACjJ,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1F,oBAAA,MAAM,GAAG,CAAA,CAAA,EAAI,OAAO,CAAC,UAAU,CAAA,IAAA,EAAO,KAAK,CAAC,MAAM,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,CAAG;AAEzE,gBAAA,KAAK,OAAO,EAAE,IAAI,EAAE,IAAI;oBACpB,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAC/D;QACJ;IACJ;IAEQ,0BAA0B,CAAC,MAAiC,EAAE,OAAgB,EAAA;QAClF,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,OAAO,MAAM,KAAK,QAAQ;AAClD,YAAA,OAAO,MAAM;AAEjB,QAAA,IAAI,OAAO;YACP,OAAO,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAG;AAE/B,QAAA,OAAO,MAAM,CAAC,WAAW,EAAE;IAC/B;uGA7HS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,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,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyBa,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EI/PpE,s/KA0GA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EJ0Hc,MAAM,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,8YAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,KAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,mBAAA,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,oIAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EADjG,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,UAAA,EAGjB,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,s/KAAA,EAAA,MAAA,EAAA,CAAA,sOAAA,CAAA,EAAA;ydAyBpB,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CACxB,oBAAoB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAC1D,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAuGpE;;;;;;;AAOG;AASG,MAAO,6BAA+M,SAAQ,mCAA8C,CAAA;AAIzP,IAAA,iBAAA;AAHd,IAAA,cAAc,GAAG,YAAY,CAAuB,aAAa,qFAAC;AAEzE,IAAA,WAAA,CACqB,iBAAmC,EAAA;AAEpD,QAAA,KAAK,EAAE;QAFU,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAGtC;AAEgB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAyB;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAmB;AACrE,IAAA,CAAC,qFAAC;uGAZO,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,6NKtX1C,irBAaA,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,ML2ea,+BAA+B,CAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MApIqB,mBAAmB,2ZAAE,gBAAgB,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EADnF,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBARzC,SAAS;+BACI,iBAAiB,EAAA,UAAA,EAGf,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,UAAU,CAAC,MAAM,+BAA+B,CAAC,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,irBAAA,EAAA,MAAA,EAAA,CAAA,kLAAA,CAAA,EAAA;wIAGxC,aAAa,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAc5E;;;;;;AAMG;AAcG,MAAO,6BAA+H,SAAQ,2BAAsC,CAAA;AAC9K,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AACvD,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,MAAM,EAAE,IAAI;AACpB,SAAA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACf,IAAA,OAAgB,WAAW,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7D,SAAA,kBAAkB;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI;AAClB,SAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAEP,IAAA,WAAW,GAAG,SAAS,CAAqD,cAAc,kFAAC;AAC3F,IAAA,aAAa,GAAG,SAAS,CAAuB,iBAAiB,oFAAC;AAGnF,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE;IACX;AACA,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,YAAY,KAAK,SAAS;AAC1B,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;aAC3B,IAAI,UAAU,KAAK,SAAS;AAC7B,YAAA,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,GAAG;IAC5C;AACA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,YAAY,KAAK,SAAS;AAC1B,YAAA,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC;aAChC,IAAI,UAAU,KAAK,SAAS;AAC7B,YAAA,UAAU,CAAC,aAAa,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,EAAE,CAAE,KAAK,CAAC,MAAiD,CAAC,KAAK,CAAC;IACxH;AACA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,YAAY,KAAK,SAAS;AAC1B,YAAA,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC;aACjC,IAAI,UAAU,KAAK,SAAS;AAC7B,YAAA,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,EAAE,EAAE;IACzD;AACA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACjC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE;QACrC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,gBAAgB,KAAK,SAAS;AACzE,YAAA,YAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACxC,aAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,UAAU;gBACV,UAAU,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC;;AAE7D,gBAAA,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC;QAC5D;IACJ;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;AAEA,IAAA,IAAW,iBAAiB,GAAA;AACxB,QAAA,OAAO,iBAAiB;IAC5B;AAEA,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,6BAA6B,CAAC,WAAW;IACpD;;;;;AAOA,IAAA,IAAW,UAAU,GAAA;QACjB,OAAO,6BAA6B,CAAC,WAAW;IACpD;uGA7ES,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,8DAR3B,CAAC;AACR,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,gBAAA,KAAK,EAAE;AACV,aAAA,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkB+D,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EMvatF,+8LAmGA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ENoTc,UAAU,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,yIAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,kLAAE,sBAAsB,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,mBAAA,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,4BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,qBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,kBAAA,EAAA,QAAA,EAAA,4CAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,6BAAA,EAAA,QAAA,EAAA,uEAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,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,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,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,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAD7H,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAbzC,SAAS;+BACI,iBAAiB,EAAA,UAAA,EAGf,IAAI,EAAA,SAAA,EACL,CAAC;AACR,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC;AAC5D,4BAAA,KAAK,EAAE;AACV,yBAAA,CAAC,EAAA,aAAA,EACa,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,+8LAAA,EAAA,MAAA,EAAA,CAAA,0KAAA,CAAA,EAAA;AAehD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,cAAc,2FAC1C,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAkEtF;;;;;;AAMG;MASU,+BAA+B,CAAA;AACxC;;;;AAIG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;;;AAIG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAA6B;uGAZ7D,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EOxf5C,qKAGA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EP8Ea,6BAA6B,iDAoavB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,CAAA;;2FAGtE,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,IAAI,EAAA,aAAA,EACD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,EAAA,OAAA,EACtE,CAAC,6BAA6B,CAAC,EAAA,QAAA,EAAA,qKAAA,EAAA;;;AQve5C;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAQU,sBAAsB,CAAA;AA4GV,IAAA,QAAA;AACA,IAAA,oBAAA;AACA,IAAA,eAAA;AACA,IAAA,YAAA;AACA,IAAA,WAAA;AACA,IAAA,eAAA;AAhHrB;;AAEG;IACa,WAAW,GAAG,MAAM,EAAQ;AAC5C;;AAEG;IACa,WAAW,GAAG,MAAM,EAAiD;AACrF;;AAEE;AACc,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,kFAAC;AACzC;;AAEE;AACc,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,kFAAC;AACzC;;AAEE;AACc,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,kFAAC;AACzC;;AAEG;AACa,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClD;;AAEG;IACa,SAAS,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS;AAC7B,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,SAAS;AACpC,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,KAAK;AAC/B,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS;QAC9B,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,SAAS;QACxC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS;AAC/C,QAAA,CAAC,IAAI,CAAC,SAAS,EAAE,gFAAC;AACtB;;AAEG;IACa,SAAS,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS;AAC7B,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,SAAS;AACpC,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,KAAK,SAAS;AACnC,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AACnH,QAAA,CAAC,IAAI,CAAC,SAAS,EAAE,gFAAC;AACtB;;AAEG;IACa,SAAS,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS;AAC7B,QAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,SAAS;QACpC,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,QAAA,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,gFAAC;AACnC;;AAEG;AACa,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,gFAAC;AAC1F,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;AACzC;;AAEG;AACa,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAU;AAC9C;;AAEE;AACc,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,iFAAC;AACxC;;AAEE;AACc,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,iFAAC;AACxC;;AAEE;AACc,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,iFAAC;AACxC;;AAEG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,8EAA2B;AACpE;;AAEG;IACa,YAAY,GAAG,MAAM,EAAO;AAE5C;;AAEE;AACc,IAAA,UAAU,GAAG,YAAY,CAAuB,SAAS,iFAAC;AAC1E;;AAEE;AACc,IAAA,gBAAgB,GAAG,YAAY,CAAuB,eAAe,uFAAC;AACtF;;AAEE;AACc,IAAA,eAAe,GAAG,YAAY,CAAuB,cAAc,sFAAC;AACpF;;AAEE;AACc,IAAA,UAAU,GAAG,YAAY,CAAuB,SAAS,iFAAC;AAEzD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,8EAAC;AAE1E,IAAA,6BAA6B;IAErC,WAAA,CACqB,QAAmC,EACnC,oBAAyC,EACzC,eAA+B,EAC/B,YAAyB,EACzB,WAAoC,EACpC,eAA+B,EAAA;QAL/B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,eAAe,GAAf,eAAe;;QAE5B,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,6BAA6B,EAAE,WAAW,EAAE;AACjD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,CAAC,6BAA6B,GAAG,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;AAC5C,QAAA,CAAC,CAAC;IACV;AAEO,IAAA,MAAM,MAAM,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB;AAEJ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,SAAS,KAAK,SAAS;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AAErD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,QAAQ,KAAK,SAAS;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;;AAGpD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAyE,CAAC;QAChJ,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;AAC/G,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAC3B;IACJ;AAEO,IAAA,MAAM,MAAM,GAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,SAAS,IAAI,QAAQ,KAAK,SAAS;YACpC;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI;AACA,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAO,CAAC;AAC/D,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAChF,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAM,CAA4B,CAAC;YACpG;QACJ;QACA,OAAO,CAAU,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA,2BAAA,EAA8B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1I,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClB;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;IAEO,0BAA0B,GAAA;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,EAAE,6CAA6C;AACtD,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM;AAC5B,SAAA,CAAC;IACN;AAEO,IAAA,MAAM,MAAM,GAAA;AACf,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEhC,QAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YACzB,SAAS,CAAC,gBAAgB,EAAE;AAE5B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAClB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACrB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,MAAM,EAAE,8CAA8C;AACzD,iBAAA,CAAC;gBAEF,cAAc,CAAC,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBAC3E;YACJ;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;YACtE;AAEJ,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAExB,QAAA,IAAI;AACA,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC;AAEvE,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,iCAAiC,CAAC,EAAE;YACjH;AACK,iBAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;gBAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;oBACnC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,mFAAmF,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBAC5L;gBACJ;AAEA,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;gBAE/G,IAAI,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE;AACpD,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAClE;iBACK;AACD,gBAAA,MAAM,gBAAgB,GAAI,QAAQ,CAAC,IAAsB;gBACzD,MAAM,WAAW,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAM,CAA4B;AACnG,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAE9B,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;AAE3G,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC3E;QACJ;QACA,OAAO,CAAU,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA,2BAAA,EAA8B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1I,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClB;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;uGAtOS,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAW,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAU,cAAA,EAAA,CAAA,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,SAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,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,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CnC,64FAiDA,EAAA,MAAA,EAAA,CAAA,uRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJc,mBAAmB,ucAAE,kCAAkC,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,+BAA+B,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,8FAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9J,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cAGP,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,EAAE,kCAAkC,EAAE,+BAA+B,EAAE,qBAAqB,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,64FAAA,EAAA,MAAA,EAAA,CAAA,uRAAA,CAAA,EAAA;AA2FxG,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,CAAA,EAAA,IAAA,EAAAH,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAAX,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAAU,cAAA,EAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,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,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,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,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,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,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAIH,eAAe,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAIhB,cAAc,uEAInB,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE1I7E;;;;;AAKG;MAQU,8BAA8B,CAAA;AAkBlB,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,OAAA;AACA,IAAA,MAAA;AApBL,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;AAClC,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAU;AAC9C;;;AAGG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;IAEpC,gBAAgB,GAAG,IAAI,SAAS,CAEpC;AACC,QAAA,EAAE,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC7G,KAAA,CAAC;AAEM,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,8EAAC;AAEzE,IAAA,WAAA,CACqB,QAAmC,EACnC,eAA+B,EAC/B,OAAe,EACf,MAAsB,EAAA;QAHtB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,MAAM,GAAN,MAAM;IAC3B;AAEO,IAAA,MAAM,YAAY,GAAA;AACrB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG;AACJ,YAAA,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC;AAExG,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,0CAA0C,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YACnG;QACJ;QACA,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK;AAE5D,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAE3B,QAAA,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAW,GAAG,EAAE,EAAE,OAAO,EAAE,CAAA,MAAA,EAAS,cAAc,CAAA,CAAE,EAAE,CAAC;AAC1F,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,cAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,iDAAiD,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC5I;QACJ;AAEA,QAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;YACrH;QACJ;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAI,SAAS,KAAK,SAAS;YACvB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;AAEtE,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAElG,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;IACjC;uGAxDS,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,0cCvB3C,0UAMA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDec,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,uUAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,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,CAAA,EAAA,CAAA;;2FAErD,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAP1C,SAAS;+BACI,kBAAkB,EAAA,UAAA,EAGhB,IAAI,EAAA,OAAA,EACP,CAAC,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,0UAAA,EAAA;;;MErBtD,gBAAgB,CAAA;AACG,IAAA,OAAA;AAAiC,IAAA,OAAA;IAA7D,WAAA,CAA4B,OAAe,EAAkB,OAAgB,EAAA;QAAjD,IAAA,CAAA,OAAO,GAAP,OAAO;QAA0B,IAAA,CAAA,OAAO,GAAP,OAAO;AAChE,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,CAAA,gCAAA,CAAkC,CAAC;IAC3F;AACH;;ACHD;;;;;AAKG;MAKU,MAAM,CAAA;AACf;;;;;;AAMG;IACH,SAAS,CAAiB,KAAQ,EAAE,IAA+B,EAAA;AAC/D,QAAA,OAAO,KAAU;IACrB;uGAVS,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA;;2FAAN,MAAM,EAAA,UAAA,EAAA,CAAA;kBAJlB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACLD;;;AAGG;MAIU,eAAe,CAAA;AAOZ,IAAA,QAAA;IANJ,OAAO,SAAS;IAEhB,WAAW,GAAG,KAAK;IACnB,YAAY,GAAG,KAAK;AAE5B,IAAA,WAAA,CACY,QAAmC,EAAA;QAAnC,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACpB;AAEA,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,eAAe,CAAC,SAAS;IACpC;IAEQ,aAAa,uBAAuB,GAAA;AACxC,QAAA,IAAI,eAAe,CAAC,SAAS,KAAK,SAAS,EAAE;AACzC,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;AACzC,YAAA,MAAM,QAAQ,GAAmB,MAAM,QAAQ,CAAC,IAAI,EAAE;AACtD,YAAA,eAAe,CAAC,SAAS,GAAG,QAAQ;QACxC;IACJ;AAEA;;;AAGK;AACE,IAAA,MAAM,iBAAiB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW;YACrC;AAEJ,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAExB,QAAA,MAAM,eAAe,CAAC,uBAAuB,EAAE;AAC/C,QAAA,MAAM,IAAI,CAAC,6CAA6C,EAAE;AAE1D,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC7B;AAEQ,IAAA,MAAM,6CAA6C,GAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO;YACvB;QAEJ,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,aAAA,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChH;uGA7CS,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFZ,MAAM,EAAA,CAAA;;2FAET,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACCD;;;;;;;;;AASG;MAIU,oBAAoB,CAAA;AAMR,IAAA,gBAAA;AACA,IAAA,OAAA;AANb,IAAA,OAAO;IACP,qBAAqB,GAAgB,IAAI;IACzC,mBAAmB,GAAkB,IAAI;IAEjD,WAAA,CACqB,gBAAiC,EACjC,OAAe,EAAA;QADf,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,OAAO,GAAP,OAAO;;QAGxB,IAAI,CAAC,OAAO,CAAC;aACR,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC;AACpD,aAAA,SAAS,CAAC,CAAC,KAAU,KAAI;AACtB,YAAA,IAAI,CAAC,oBAAoB,CAAE,KAAuB,CAAC,iBAAiB,CAAC;AACzE,QAAA,CAAC,CAAC;;AAGN,QAAA,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAK;YACzC,IAAI,CAAC,wBAAwB,EAAE;AACnC,QAAA,CAAC,CAAC;IACN;AAEA;;;;AAIG;IACK,yBAAyB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;;AAE5B,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC;;;AAIjF,YAAA,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAK;;;;;AAM5B,gBAAA,MAAc,CAAC,mBAAmB,GAAG,aAAa;AACvD,YAAA,CAAC,CAAC;QACN;IACJ;AAEA;;;;;AAKG;AACK,IAAA,oBAAoB,CAAC,GAAW,EAAA;;QAEpC,IAAI,SAAS,GAAG,SAAS;AACzB,QAAA,IAAI;AACA,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnD,YAAA,SAAS,GAAG,MAAM,CAAC,QAAQ;QAC/B;QAAE,OAAO,CAAC,EAAE;AACR,YAAA,SAAS,GAAG,GAAG,CAAC;QACpB;;AAGA,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,EAAE;YACxC;QACJ;;AAGA,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;;AAGpC,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,OAAO;QACX;;AAGA,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAC/C,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAE,EAC5B;YACI,IAAI,EAAE,QAAQ,CAAC,QAAQ;AACvB,YAAA,UAAU,EAAE;AACR,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;AACtC,gBAAA,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACnC,kBAAkB,EAAE,SAAS,CAAC;AACjC;AACJ,SAAA,CACJ;;QAGD,IAAI,CAAC,yBAAyB,EAAE;IACpC;AAEA,IAAA,MAAM,UAAU,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;AAE/C,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACrD,QAAA,IAAI,CAAC,cAAc;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,UAAU;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAEjE,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC;QAC/D,MAAM,cAAc,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,cAAc,CAAC;QAC7E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,cAAc,CAAC;AAEjE,QAAA,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;AACnC,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,cAAc,EAAE,cAAc;AAC9B,YAAA,QAAQ,EAAE,QAAQ;AACrB,SAAA,CAAC;QAEF,QAAQ,CAAC,QAAQ,CAAC;;YAEd,cAAc,EAAE,IAAI,mBAAmB,EAAE;AAC5C,SAAA,CAAC;;QAGF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,2BAA2B,CAAC;;QAG9D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/C;IACJ;AAEA;;;;AAIG;IACI,wBAAwB,GAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE;AAChC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC;IACJ;IAEQ,OAAO,WAAW,CAAC,cAA8B,EAAA;QACrD,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC,UAAU,CAAC,0BAA0B,CAAC;AAEhF,QAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,CAAC;QAE3C,IAAI,kBAAkB,EAAE;YACpB;iBACK,KAAK,CAAC,GAAG;AACT,iBAAA,GAAG,CAAC,CAAC,SAAiB,KAAI;AACvB,gBAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,gBAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK;AACpC,YAAA,CAAC,CAAC;QACV;AAEA,QAAA,IAAI,WAAW;AACX,YAAA,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,WAAW;AAExD,QAAA,OAAO,QAAQ;IACnB;IAEQ,OAAO,iBAAiB,CAAC,cAA8B,EAAA;QAC3D,MAAM,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,6BAA6B,CAAC;QACjF,MAAM,eAAe,GAAG,cAAc,CAAC,UAAU,CAAC,4BAA4B,CAAC;AAE/E,QAAA,IAAI,CAAC,gBAAgB;YACjB,OAAM,CAAC,IAAI,mBAAmB,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;aACzD;YACD,IAAI,UAAU,GAAG,EAAE;YACnB,IAAI,eAAe,EAAE;AACjB,gBAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAC3B;qBACK,KAAK,CAAC,GAAG;AACT,qBAAA,GAAG,CAAC,CAAC,MAAc,KAAI;AACpB,oBAAA,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,oBAAA,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;gBACvB,CAAC,CAAC,CAAC;YACf;YAEA,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,GAAG,YAAY;AAE/H,YAAA,MAAM,yBAAyB,GAAG;AAC9B,gBAAA,GAAG,EAAE,qBAAqB;AAC1B,gBAAA,OAAO,EAAE,UAAU;AACnB,gBAAA,WAAW,EAAE,MAA8B;aAC9C;YAED,OAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACpF;IACJ;IAEQ,OAAO,UAAU,CAAC,cAA8B,EAAA;QACpD,MAAM,aAAa,GAAG,cAAc,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACtE,MAAM,gBAAgB,GAAG,cAAc,CAAC,UAAU,CAAC,yBAAyB,CAAC;QAE7E,QAAQ,aAAa;AACjB,YAAA,KAAK,WAAW;gBACZ,OAAO,IAAI,eAAe,EAAE;AAChC,YAAA,KAAK,YAAY;gBACb,OAAO,IAAI,gBAAgB,EAAE;AACjC,YAAA,KAAK,cAAc;gBACf,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,IAAI,GAAG,CAAC;AACxD,gBAAA,OAAO,IAAI,wBAAwB,CAAC,KAAK,CAAC;AAC9C,YAAA,KAAK,uBAAuB;gBACxB,OAAO,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,eAAe,EAAE,EAAE,CAAC;AAClE,YAAA,KAAK,wBAAwB;gBACzB,OAAO,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,EAAE,CAAC;AACnE,YAAA,KAAK,0BAA0B;gBAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,IAAI,GAAG,CAAC;AACzD,gBAAA,OAAO,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;AACjF,YAAA;gBACI,OAAO,IAAI,eAAe,EAAE;;IAExC;AAEA;;;;;AAKG;IACI,gBAAgB,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;;AAE5B,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC;QACtE;AAEA,QAAA,OAAO,IAAI;IACf;AAEA;;;AAGG;IACI,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO;IACvB;uGAhPS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFjB,MAAM,EAAA,CAAA;;2FAET,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACPD;;;;;;;;;;;;;;;;AAgBE;MAQW,0BAA0B,CAAA;AAad,IAAA,QAAA;AACA,IAAA,eAAA;AACA,IAAA,eAAA;AACA,IAAA,OAAA;AAXd,IAAA,YAAY;IACZ,gBAAgB,GAAG,IAAI,SAAS,CAEpC;AACC,QAAA,EAAE,EAAE,IAAI,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC7G,KAAA,CAAC;IAEF,WAAA,CACqB,QAAmC,EACnC,eAA+B,EAC/B,eAA+B,EAC/B,OAAe,EAChC,eAAgC,EAAA;QAJf,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,OAAO,GAAP,OAAO;AAExB,QAAA,eAAe,CAAC,YAAY,GAAG,iBAAiB;IACpD;AAEA,IAAA,IAAW,YAAY,GAAA;AACnB,QAAA,OAAO,YAAY;IACvB;AAEA;;AAEE;AACc,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAU;AAE9C;;AAEE;AACK,IAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,yEAAU;AACrC;;AAEE;AACK,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,6EAAU;IACzB,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,8EAAC;IAC/E,SAAS,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5E,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAA,CACrF;IAEK,QAAQ,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EACtB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5D,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;YACtD,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;AAChE,YAAA,IAAI,CAAC,eAAe,CAAC,kCAAkC,CAAC,gBAAgB,CAAC;YAEzE,OAAO,gBAAgB,CAAC,IAAI;AAChC,QAAA,CAAC,GACH;AAEK,IAAA,UAAU,GAAG,KAAK,CAAC,SAAS,iFAAC;IAEpC,MAAM,WAAW,CAAC,MAAqD,EAAA;AACnE,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;YACtB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtF;IACJ;AAEA,IAAA,MAAM,WAAW,GAAA;QACb,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACrE;IAEO,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtF;AAEQ,IAAA,MAAM,qBAAqB,CAAC,OAAe,EAAE,QAA8B,EAAA;AAC/E,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AACrB,YAAA,OAAO,EAAE;AACb,QAAA,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;YAC/C,MAAM,yBAAyB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC;;AAGxE,YAAA,IAAI,cAAc,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE;AAC5D,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACrB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,mBAAmB,yBAAyB,CAAC,KAAK,CAAA,GAAA,EAAM,yBAAyB,CAAC,MAAM,CAAA,CAAE;AAClG,oBAAA,IAAI,EAAE,yBAAyB;AAC/B,oBAAA,MAAM,EAAE;AACX,iBAAA,CAAC;AACF,gBAAA,OAAO,EAAE;YACb;;YAGA,MAAM,SAAS,GAAG,yBAAsC;YACxD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAoB,CAAC,KAAK,SAAS,CAAC;AAC5F,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC;AAEhD,YAAA,OAAO,aAAa;QACxB;QAAE,OAAO,CAAU,EAAE;YACjB,IAAI,CAAC,YAAY,KAAK;AAClB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;AAEhK,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAE5J,YAAA,OAAO,EAAE;QACb;IACJ;uGAzGS,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAW,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAb,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,ysBC1CvC,6/FAsEA,EAAA,MAAA,EAAA,CAAA,6HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED9Bc,8BAA8B,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,KAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,GAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,6PAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,qRAAE,OAAO,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAEpJ,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cAGP,IAAI,EAAA,OAAA,EACP,CAAC,8BAA8B,EAAE,cAAc,EAAE,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,6/FAAA,EAAA,MAAA,EAAA,CAAA,6HAAA,CAAA,EAAA;;sBAG7J,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AEhChD;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAQU,0BAA0B,CAAA;AA8Dd,IAAA,QAAA;AACA,IAAA,oBAAA;AACA,IAAA,eAAA;AACD,IAAA,eAAA;AACC,IAAA,OAAA;AACA,IAAA,eAAA;AAlErB;;;AAGE;IACc,gBAAgB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAc;IAC/C,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,gFAAC;IACnF,MAAM,GAAG,KAAK,CAAqB,SAAS,8EAAI,KAAK,EAAE,SAAS,EAAA,CAAG;IACnE,OAAO,GAAG,KAAK,CAAqB,SAAS,+EAAI,KAAK,EAAE,UAAU,EAAA,CAAG;IACrE,IAAI,GAAG,KAAK,CAAqB,SAAS,4EAAI,KAAK,EAAE,OAAO,EAAA,CAAG;IAC/D,GAAG,GAAG,KAAK,CAAqB,SAAS,2EAAI,KAAK,EAAE,MAAM,EAAA,CAAG;AAE7D,IAAA,eAAe,GAAG,YAAY,CAAC,MAAK;AAChD,QAAA,MAAM,UAAU,GAAoB;AAChC,YAAA,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;AAClB,YAAA,IAAI,EAAE,IAAI,CAAC,GAAG;SACjB;AACD,QAAA,OAAO,UAAU;AACrB,IAAA,CAAC,sFAAC;AAEF;;;;AAIG;AACa,IAAA,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,GAAG;AAErE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM;AACxC,QAAA;AACI,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,UAAU,EAAE,kBAAkB;YAC9B,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACzE,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB;AAC/B;AACJ,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAEc,OAAO,GAAG,QAAQ,CAA4E,MAAM,CAAC,GAAG,EAAE,kBAAkB,KAAI;QAC5I,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,kBAAkB,GAAG,aAAa,GAAG,SAAS;gBACrD,OAAO,EAAE,CAAC,kBAAkB,GAAG,aAAa,GAAG,SAAS;AACxD,gBAAA,eAAe,EAAE,MAAM;gBACvB,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;aACrF,EAAE;AACC,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,kBAAkB,GAAG,QAAQ,GAAG,SAAS;gBAChD,OAAO,EAAE,CAAC,kBAAkB,GAAG,QAAQ,GAAG,SAAS;AACnD,gBAAA,eAAe,EAAE,MAAM;AACvB,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,OAAO,EAAE,MAAM,IAAI,CAAC,0BAA0B,CAAC,GAAG;AACrD;SACJ;AACL,IAAA,CAAC,8EAAC;IAEM,OAAgB,kBAAkB,GAAG,IAAI,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AAE9G,IAAA,OAAgB,oBAAoB,GAAsE,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAElJ,WAAA,CACqB,QAAmC,EACnC,oBAAyC,EACzC,eAA+B,EAChC,eAAgC,EAC/B,OAAe,EACf,eAA+B,EAAA;QAL/B,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,eAAe,GAAf,eAAe;QAChB,IAAA,CAAA,eAAe,GAAf,eAAe;QACd,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;QAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,CAAC,kBAAkB,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,0BAA0B,CAAC,oBAAoB,CAAC;AACxE,QAAA,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAC/C;AAEA;;;AAGG;IACa,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;AACzC;;;AAGG;IACa,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;IAErB,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,8EAAC;AAC1E,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,4EAAC;IAEjF,SAAS,GAAA;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvF;IAEO,MAAM,MAAM,CAAC,QAAkB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;AAC7B,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;YACzG;QACJ;QAGA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,iDAAiD,EAAE,OAAO,CAAC,EAAE;AACrI,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC;AAE/G,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QAC9B;IACJ;IAEgB,YAAY,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EACnC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5E,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;YAC7B,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;gBAChD,OAAO,0BAA0B,CAAC,kBAAkB;AAExD,YAAA,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAW,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC;AACnF,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,QAAQ,EAAE,SAAS,EAAE,iDAAiD,EAAE,OAAO,CAAC,EAAE;gBACrI,OAAO,QAAQ,CAAC,IAAI;YACxB;YAEA,OAAO,0BAA0B,CAAC,kBAAkB;AACxD,QAAA,CAAC,GACH;AAEc,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC9C,QAAA,MAAM,WAAW,GAAG,GAAG,IAAI,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AACpE,QAAA,MAAM,UAAU,GAAG,YAAY,EAAE,UAAU,IAAI,CAAC;AAChD,QAAA,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW;AAC7C,QAAA,OAAO,YAAY;AACvB,IAAA,CAAC,mFAAC;AAEc,IAAA,cAAc,GAAG,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EACrC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;AACvD,QAAA,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAI;AACzB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;YAC7B,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;gBACrD,OAAO,0BAA0B,CAAC,oBAAoB;;YAG1D,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAmF;YAC1I,IAAI,qBAAqB,KAAK,SAAS,IAAI,qBAAqB,KAAK,0BAA0B,CAAC,oBAAoB;AAChH,gBAAA,OAAO,qBAAqB;;AAGhC,YAAA,IAAI;gBACA,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/D,gBAAA,IAAI,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;oBAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA,uCAAA,CAAyC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBACrI,OAAO,0BAA0B,CAAC,oBAAoB;gBAC1D;AAEA,gBAAA,MAAM,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC1C,gBAAA,IAAI,cAAc,KAAK,SAAS,EAAE;oBAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA,+CAAA,CAAiD,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;oBAC7I,OAAO,0BAA0B,CAAC,oBAAoB;gBAC1D;AAEA,gBAAA,OAAO,cAAc;YACzB;YACA,OAAO,CAAU,EAAE;gBACf,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC1I,OAAO,0BAA0B,CAAC,oBAAoB;YAC1D;AACJ,QAAA,CAAC,GACH;AAEK,IAAA,0BAA0B,CAAC,QAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,EAAE,6CAA6C;AACtD,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ;AACrC,SAAA,CAAC;IACN;AAEiB,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,IAAI,OAAO,KAAK,SAAS;AACrB,YAAA,OAAO,SAAS;QAEpB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;AAC3C,IAAA,CAAC,8EAAC;uGAtLO,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,yBAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAkB,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAf,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAgB,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,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,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,aAAA,EAAA,GAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1CvC,wbAeA,EAAA,MAAA,EAAA,CAAA,qEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDyBc,uBAAuB,6gBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oDAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,KAAA,EAAA,YAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE7C,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cAGP,IAAI,EAAA,OAAA,EACP,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,wbAAA,EAAA,MAAA,EAAA,CAAA,qEAAA,CAAA,EAAA;;;AEjC3D;;;AAGG;MAGU,4BAA4B,CAAA;AACR,IAAA,iBAAA;AAA7B,IAAA,WAAA,CAA6B,iBAAuC,EAAA;QAAvC,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IAA0B;IAExE,SAAS,CAAC,OAAyB,EAAE,IAAiB,EAAA;;QAElD,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE;;QAG/D,IAAI,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE;;AAErD,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAK;;AAEpC,gBAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxD,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;gBAC7B,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAA,CAAE;;gBAG5C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;;gBAGjD,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAEvD,gBAAA,MAAM,UAAU,GAAe;oBAC3B,CAAC,wBAAwB,GAAG,MAAM;AAClC,oBAAA,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG;AAC5B,oBAAA,CAAC,aAAa,GAAG,GAAG,CAAC,QAAQ;AAC7B,oBAAA,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAC7C,oBAAA,CAAC,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;oBAChD,UAAU,EAAE,GAAG,CAAC,IAAI;oBACpB,iBAAiB,EAAE,SAAS,CAAC,SAAS;AACtC,oBAAA,CAAC,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC3C,oBAAA,CAAC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AACxC,oBAAA,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;AAChF,oBAAA,CAAC,wBAAwB,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,SAAS;oBAClG,wBAAwB,EAAE,aAAa,IAAI,SAAS;oBACpD,CAAC,wBAAwB,CAAC,cAAc,CAAC,GAAG,WAAW,IAAI,SAAS;oBACpE,CAAC,iBAAiB,GAAG;iBACxB;;AAGD,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;oBACpC,IAAI,EAAE,QAAQ,CAAC,MAAM;oBACrB;AACH,iBAAA,CAAC;;AAGF,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;;gBAGzD,MAAM,OAAO,GAA2B,EAAE;;AAG1C,gBAAA,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;;AAGxC,gBAAA,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO;AAC7B,gBAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;oBAC7C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACrC,gBAAA,CAAC,CAAC;;gBAGF,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;;AAGhD,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,MAAK;;AAElC,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI;;AAElC,oBAAA,GAAG,CAAC;AACA,wBAAA,IAAI,EAAE,CAAC,KAAqB,KAAI;4BAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;gCACvC,MAAM,QAAQ,GAAG,KAA0B;AAC3C,gCAAA,MAAM,aAAa,GAA8C;AAC7D,oCAAA,CAAC,8BAA8B,GAAG,QAAQ,CAAC;iCAC9C;;gCAGD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gCAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAE5D,gCAAA,IAAI,iBAAiB;AAAE,oCAAA,aAAa,CAAC,yBAAyB,CAAC,GAAG,iBAAiB;AACnF,gCAAA,IAAI,eAAe;oCAAE,aAAa,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,GAAG,eAAe;;AAG/F,gCAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;gCACjC,IAAI,CAAC,SAAS,CAAC;AACX,oCAAA,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,cAAc,CAAC;AAC1D,iCAAA,CAAC;;gCAGF,IAAI,CAAC,GAAG,EAAE;4BACd;wBACJ,CAAC;AACD,wBAAA,KAAK,EAAE,CAAC,KAAY,KAAI;;4BAEpB,IAAI,CAAC,SAAS,CAAC;gCACX,IAAI,EAAE,cAAc,CAAC,KAAK;AAC1B,gCAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI;AAC7B,6BAAA,CAAC;AACF,4BAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;4BAC3B,IAAI,CAAC,GAAG,EAAE;wBACd;qBACH,CAAC;;oBAEF,QAAQ,CAAC,MAAK;wBACV,IAAI,IAAI,EAAE;;AAEN,4BAAA,IAAI;gCACA,IAAI,CAAC,GAAG,EAAE;4BACd;4BAAE,OAAO,CAAC,EAAE;;4BAEZ;wBACJ;oBACJ,CAAC,CAAC,CACL;AACL,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC,CAAC;QACN;;AAGA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC/B;uGA1HS,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAO,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA5B,4BAA4B,EAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC;;AA8HD;;;;AAIG;AACI,MAAM,uCAAuC,GAAG;AACnD,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,QAAQ,EAAE,4BAA4B;AACtC,IAAA,KAAK,EAAE;CACV;;AC5ID;;;;;;;;;;;;;;AAcG;AACG,SAAU,gBAAgB,CAAC,mBAAyC,EAAA;AACtE,IAAA,MAAM,oBAAoB,GAAG;QACrB,aAAa,EAAE,CAAC,KAAK,CAAC;AACtB,QAAA,oBAAoB,EAAE,IAAI;QAC1B,aAAa,EAAE,qBAAqB,CAAC,YAAY;QACjD,KAAK,EAAE,6BAA6B,EAAE;KACzC;IAEL,MAAM,mBAAmB,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,mBAAmB,EAAE;AAE/E,IAAA,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,YAAW;AAC1D,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/C,QAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACzD,QAAA,MAAM,eAAe,CAAC,iBAAiB,EAAE;AACzC,QAAA,MAAM,oBAAoB,CAAC,UAAU,EAAE;AAC3C,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,mBAAmB,CAAC;AAElE,IAAA,MAAM,YAAY,GAAG;QACjB,oBAAoB;QACpB,gBAAgB;QAChB;KACH;AAED,IAAA,OAAO,YAAY;AACvB;AAEA;;;AAGG;AACG,SAAU,4BAA4B,CAAC,SAAoB,EAAA;IAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC5D;;ACxDA;;AAEG;;ACFH;;AAEG;;;;"}