@sebgroup/green-angular 7.1.0 → 7.2.0-rc.20260112142904472

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":"sebgroup-green-angular-v-angular.mjs","sources":["../../../../libs/angular/src/v-angular/account-number/account-number.pipe.ts","../../../../libs/angular/src/v-angular/account-number/account-number.module.ts","../../../../libs/angular/src/v-angular/alert/alert.models.ts","../../../../libs/angular/src/v-angular/alert/alert.component.ts","../../../../libs/angular/src/v-angular/alert/alert.component.html","../../../../libs/angular/src/v-angular/alert/alert.module.ts","../../../../libs/angular/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.ts","../../../../libs/angular/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.ts","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.component.ts","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.component.html","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.module.ts","../../../../libs/angular/src/v-angular/button/button.component.ts","../../../../libs/angular/src/v-angular/button/button.component.html","../../../../libs/angular/src/v-angular/button/button.module.ts","../../../../libs/angular/src/v-angular/card/card.component.ts","../../../../libs/angular/src/v-angular/card/card.module.ts","../../../../libs/angular/src/v-angular/core/core.globals.ts","../../../../libs/angular/src/v-angular/core/core.utils.ts","../../../../libs/angular/src/v-angular/character-countdown/character-countdown.directive.ts","../../../../libs/angular/src/v-angular/character-countdown/character-countdown.module.ts","../../../../libs/angular/src/v-angular/checkbox/checkbox.component.ts","../../../../libs/angular/src/v-angular/checkbox/checkbox.component.html","../../../../libs/angular/src/v-angular/checkbox/checkbox.module.ts","../../../../libs/angular/src/v-angular/datepicker/models/dates.ts","../../../../libs/angular/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.ts","../../../../libs/angular/src/v-angular/datepicker/datepicker.utils.ts","../../../../libs/angular/src/v-angular/datepicker/directives/calendar-date.directive.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/is-disabled.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/date-thook.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/matches.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.models.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.globals.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.html","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.module.ts","../../../../libs/angular/src/v-angular/datepicker/index.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.utils.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.pipes.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.html","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.module.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.directive.ts","../../../../libs/angular/src/v-angular/external-link/external-link.directive.ts","../../../../libs/angular/src/v-angular/external-link/external-link.module.ts","../../../../libs/angular/src/v-angular/i18n/i18n.module.ts","../../../../libs/angular/src/v-angular/i18n/i18n.test.module.ts","../../../../libs/angular/src/v-angular/info-circle/info-circle.component.ts","../../../../libs/angular/src/v-angular/info-circle/info-circle.component.html","../../../../libs/angular/src/v-angular/info-circle/info-circle.module.ts","../../../../libs/angular/src/v-angular/input/input.component.ts","../../../../libs/angular/src/v-angular/input/input.component.html","../../../../libs/angular/src/v-angular/input/input.module.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask-format.pipe.ts","../../../../libs/angular/src/v-angular/input-mask/config.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.directive.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.module.ts","../../../../libs/angular/src/v-angular/input-mask/constants.ts","../../../../libs/angular/src/v-angular/modal/modal.globals.ts","../../../../libs/angular/src/v-angular/modal/dialog/dialog.component.ts","../../../../libs/angular/src/v-angular/modal/dialog/dialog.component.html","../../../../libs/angular/src/v-angular/modal/fold-out/keyboard-key.enum.ts","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.component.ts","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.component.html","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.directive.ts","../../../../libs/angular/src/v-angular/modal/slide-out/slide-out.component.ts","../../../../libs/angular/src/v-angular/modal/slide-out/slide-out.component.html","../../../../libs/angular/src/v-angular/modal/modal.module.ts","../../../../libs/angular/src/v-angular/pagination/pagination.component.ts","../../../../libs/angular/src/v-angular/pagination/pagination.component.html","../../../../libs/angular/src/v-angular/pagination/pagination.module.ts","../../../../libs/angular/src/v-angular/radio/radio.component.ts","../../../../libs/angular/src/v-angular/radio/radio.component.html","../../../../libs/angular/src/v-angular/radio/radio-group/radio-group.component.ts","../../../../libs/angular/src/v-angular/radio/radio-group/radio-group.component.html","../../../../libs/angular/src/v-angular/radio/radio.module.ts","../../../../libs/angular/src/v-angular/slug/slug.pipe.ts","../../../../libs/angular/src/v-angular/slug/slug.module.ts","../../../../libs/angular/src/v-angular/table/table.directive.ts","../../../../libs/angular/src/v-angular/table/table.tools.ts","../../../../libs/angular/src/v-angular/table/tr-thook.pipe.ts","../../../../libs/angular/src/v-angular/table/table.component.ts","../../../../libs/angular/src/v-angular/table/table.component.html","../../../../libs/angular/src/v-angular/table/table.module.ts","../../../../libs/angular/src/v-angular/table/index.ts","../../../../libs/angular/src/v-angular/tabs/tab.directive.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.html","../../../../libs/angular/src/v-angular/tabs/tabs.module.ts","../../../../libs/angular/src/v-angular/tabs/index.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/toast/toast.models.ts","../../../../libs/angular/src/v-angular/toast/toast-message.service.ts","../../../../libs/angular/src/v-angular/toast/toast.component.ts","../../../../libs/angular/src/v-angular/toast/toast.component.html","../../../../libs/angular/src/v-angular/toast/toast.module.ts","../../../../libs/angular/src/v-angular/toast/index.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.styles.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.directive.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.module.ts","../../../../libs/angular/src/v-angular/v-angular.module.ts","../../../../libs/angular/src/v-angular/sebgroup-green-angular-v-angular.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'\n\nexport const enum SchemaType {\n IBAN = 'iban',\n BBAN = 'bban',\n}\n\nexport type AccountNumberSchema = 'iban' | 'bban'\n\nconst evaluateValueSchema = (value: string): AccountNumberSchema => {\n const countryCodePattern = /^[a-zA-Z]{2}/\n const hasCountryCode = countryCodePattern.test(value)\n return hasCountryCode ? SchemaType.IBAN : SchemaType.BBAN\n}\n\nexport const bbanPattern = /(\\d{4})(\\d{2})(\\d{3})/\nexport const ibanPattern = /[a-zA-Z0-9]{1,4}/g\n\n/**\n * Formats account number according to bban or iban standard, and adds non-breakable whitespace (\\u00A0) between number groups.\n *\n * Example:\n * BBAN format: 'XXXX XX XXX <XXXX>'\n * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'\n *\n * @param value - account number value to format.\n * @param schema - accepts either 'iban' or 'bban'. If undefined, schema will be evaluated to 'iban' if value starts with 2 letters.\n * @returns - formatted value, or original value if schema could not be determined\n */\nexport const formatAccountNumber = (\n value: string,\n schema?: AccountNumberSchema,\n): string => {\n // evalue value schema to 'iban' or 'bban'\n if (!schema) schema = evaluateValueSchema(value)\n\n // if schema 'iban', return formatted value\n if (schema === SchemaType.BBAN)\n return value.replace(bbanPattern, '$1\\u00A0$2\\u00A0$3\\u00A0')\n\n // if schema 'iban', remove all white-spaces and other separators from the value\n const trimmedValue = value.replace(/\\s|-/g, '')\n if (schema === SchemaType.IBAN)\n return trimmedValue.replace(ibanPattern, (match: string, offset: number) =>\n offset ? `\\u00A0${match}` : match,\n )\n\n // return untouched value if unable to determine schema\n return value\n}\n\n/**\n * Pipe for formatting account number according to bban or iban standard, and adds non-breakable whitespace (\\u00A0) between number groups.\n *\n * BBAN format: 'XXXX XX XXX <XXXX>'\n * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'\n */\n@Pipe({\n name: 'accountNumber',\n standalone: true,\n})\nexport class AccountNumberPipe implements PipeTransform {\n transform = (value: string, schema?: AccountNumberSchema): string =>\n formatAccountNumber(value, schema)\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { AccountNumberPipe } from './account-number.pipe'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, AccountNumberPipe],\n exports: [AccountNumberPipe],\n})\nexport class NggvAccountNumberPipeModule {}\n","export interface AlertMessage {\n type: AlertType\n titleText?: string\n bodyText?: string\n linkText?: string\n actionText?: string\n}\n\nexport enum AlertType {\n Success = 'success',\n Information = 'information',\n Warning = 'warning',\n Danger = 'danger',\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core'\n\nimport { AlertType } from './alert.models'\n\n@Component({\n selector: 'nggv-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n standalone: false\n})\nexport class AlertComponent {\n @Input() type: AlertType = AlertType.Success\n @Input() title?: string\n @Input() body?: string\n @Input() linkText?: string\n @Input() linkHref?: string\n @Input() actionText?: string\n @Input() closable = false\n\n @Output() closeAlert = new EventEmitter()\n @Output() clickLink = new EventEmitter()\n @Output() clickAction = new EventEmitter()\n\n onClose(e: Event): void {\n this.closeAlert.emit(e)\n }\n\n onLink(e: Event): void {\n this.clickLink.emit(e)\n }\n\n onAction(e: Event): void {\n this.clickAction.emit(e)\n }\n}\n","<div class=\"alert-container\" role=\"alert\" [ngClass]=\"type\">\n <ng-container [ngSwitch]=\"type\">\n <ng-container\n *ngSwitchCase=\"'success'\"\n [ngTemplateOutlet]=\"checkMark\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"'information'\"\n [ngTemplateOutlet]=\"infoSquare\"\n ></ng-container>\n <ng-container\n *ngSwitchDefault\n [ngTemplateOutlet]=\"exclamationSquare\"\n ></ng-container>\n </ng-container>\n <div>\n <h3 *ngIf=\"title\">{{ title }}</h3>\n <p *ngIf=\"body\">\n {{ body }}&nbsp;<a\n *ngIf=\"linkText\"\n [href]=\"linkHref\"\n (click)=\"onLink($event)\"\n >{{ linkText }}</a\n >\n </p>\n </div>\n <button\n *ngIf=\"closable && !actionText\"\n class=\"close\"\n type=\"button\"\n (click)=\"onClose($event)\"\n >\n <i></i>\n </button>\n <footer *ngIf=\"actionText && !closable\">\n <button type=\"button\" (click)=\"onAction($event)\">\n {{ actionText }}\n </button>\n </footer>\n</div>\n\n<ng-template #checkMark>\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n</ng-template>\n<ng-template #infoSquare>\n <i>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"#333333\"\n />\n </svg>\n </i>\n</ng-template>\n<ng-template #exclamationSquare>\n <i>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { AlertComponent } from './alert.component'\n\n@NgModule({\n declarations: [AlertComponent],\n imports: [CommonModule],\n exports: [AlertComponent],\n})\nexport class NggvAlertModule {}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { Observable, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n@Injectable() // Workaround for Compodoc https://github.com/compodoc/compodoc/issues/984\n@Component({\n template: '',\n standalone: false\n}) // Required with Angular ivy compiler\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class NggvBaseControlValueAccessorComponent\n implements AfterViewInit, OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /** Custom template for displaying the content of the label.\n * Specified by nesting an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @ContentChild('labelTpl', { read: TemplateRef })\n labelContentTpl?: TemplateRef<undefined>\n\n /** Custom template for displaying value when the input is locked.\n * Specified by nesting an `<ng-template #lockedTpl let-state>Custom locked content state: {{ state }}</ng-template>`.\n */\n @ContentChild('lockedTpl', { read: TemplateRef })\n lockedTpl?: TemplateRef<undefined>\n\n /** Reference to the native child input element. */\n @ViewChild('input', { read: ElementRef }) inputRef?: ElementRef\n\n /* ATTRIBUTES */\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n /** Name of the child input element. */\n @Input() name?: string\n /**\n * Label of the child input element using the default template.\n * Can be overwritten by specifying an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @Input() label?: string\n /** Role of the child input element. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles */\n @Input() role?: string\n /** Value of the child input element. Mostly used in conjunction with radio and checkboxes. */\n @Input() value: any\n /** An error string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() error?: string\n /** @deprecated Only one error should be shown under each field. */\n @Input() errorList?: string[]\n /** @deprecated Icon is always added before error. */\n @Input() withErrorIcon?: boolean = false\n /** Description of the child input element. Both visibly and as `aria-label`. */\n @Input() description?: string\n /** Determines if the label used to display the \"description\" text will be rendered to DOM */\n @Input() descriptionIsVisible = true\n /** If set to true, the browser will try to automatically set focus to the child input element. */\n @Input() autofocus = false\n /** Deafult value of the child input element. Used when resetting child element. */\n @Input() defaultValue?: any\n /** If passed, the component will listen for updates and will reset its value. */\n @Input() reset?: Observable<any>\n /** Adds (Optional) to input label. */\n @Input() optional?: boolean | null | undefined\n\n private _locked: boolean | null | undefined = undefined\n /** Hides the input borders and displays current value as a text. */\n @Input() set locked(value: boolean | null | undefined) {\n this._locked = value\n this.cdr.detectChanges()\n }\n get locked(): boolean | null | undefined {\n return this._locked\n }\n /** If set to true, using a controls disabled state will display input as locked. */\n @Input() displayDisabledAsLocked?: boolean | null | undefined\n\n /* STATES */\n\n private _required: boolean | null | undefined = undefined\n /** Override the required flag of the component. */\n @Input() set required(value: boolean | null | undefined) {\n this._required = value\n }\n /** Child input element is considered required and changes default label template accordingly. */\n get required(): boolean | null | undefined {\n // if required is set => return required\n if (this._required !== undefined) return this._required\n\n // if required can be determined from the control => return control.required\n if (this.ngControl?.control?.validator) {\n const validator = this.ngControl?.control?.validator(\n {} as AbstractControl,\n )\n // returns true for any error that starts with required\n return Object.keys(validator ?? {}).some((key) =>\n key.startsWith('required'),\n )\n }\n\n return\n }\n\n private _invalid: boolean | undefined = undefined\n /** Override the invalid state of the component. */\n @Input() set invalid(value: boolean) {\n this._invalid = value\n }\n /** The component has the invalid state, usually decorating the elements red and shows the first error. */\n get invalid(): boolean {\n if (this._invalid === true || this._invalid === false) return this._invalid\n return (\n !!this.ngControl?.control?.invalid && this.ngControl?.control?.touched\n )\n }\n\n private _valid: boolean | undefined = undefined\n /** Override the valid state of the component. */\n @Input() set valid(value: boolean) {\n this._valid = value\n }\n /** The component has the valid state, usually decorating the elements green. */\n get valid(): boolean {\n if (this._valid === true || this._valid === false) return this._valid\n return !!this.ngControl?.control?.valid && this.ngControl?.control?.touched\n }\n\n /** The component has the focused state, updated by the child input element's focus state. */\n @Input() focused = false\n\n private _disabled: boolean | undefined = undefined\n /** Override the disabled state of the component. */\n @Input() set disabled(value: boolean) {\n this._disabled = value\n }\n /** The component has the disabled state, usually muting the colors and removes interaction. */\n get disabled(): boolean {\n if (this._disabled === true || this._disabled === false)\n return this._disabled\n return !!this.ngControl?.control?.disabled\n }\n\n /* TRIGGERS */\n\n /** Emits focus events triggered by the child elements. */\n @Output() readonly nggvFocus = new EventEmitter()\n /** Emits focus events triggered by the child elements. */\n @Output() readonly nggvBlur = new EventEmitter()\n\n /* VALUE HANDLERS */\n\n private _state: any = null\n /** @internal */\n protected onChange = (_: any) => {\n // do nothing\n }\n /** @internal */\n protected onTouched = () => {\n // do nothing\n }\n /** @internal */\n protected onValidatorChange: () => void = () => null\n\n /* OTHER VARIABLES */\n scope: string | undefined\n\n /* LIFE CYCLE VARIABLES */\n\n private _onDestroy$ = new Subject<boolean>()\n\n /**\n * Creates a new BaseControlValueAccessorComponent.\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param translocoScope optional TranslocoScope provided if component is used within a scope.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this\n }\n\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngOnInit(): void {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValidators(\n Validators.compose([this.ngControl.control.validator, this.validate]),\n )\n }\n\n // if reset observable has been passed, subscribe after updates\n this.reset?.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n // reset value of controller\n this.state = this.defaultValue\n this.onChange(this.state)\n this.cdr.detectChanges()\n },\n })\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngAfterViewInit(): void {\n // if default value is set, then don't alter it. Otherwise, use\n // current value of controller after initiation as default value\n this.defaultValue = this.defaultValue ?? this.ngControl?.value\n }\n\n ngOnDestroy(): void {\n this._onDestroy$.next(true)\n this._onDestroy$.complete()\n }\n\n detectChanges(): void {\n this.cdr.detectChanges()\n }\n\n /** @internal */\n onFocus(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.focused = true\n this.nggvFocus.emit(event)\n }\n\n /** @internal */\n onBlur(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.onTouched()\n this.focused = false\n this.nggvBlur.emit(event)\n }\n\n /** Sets the focus on the actual input element. */\n setFocus() {\n if (this.inputRef) this.inputRef.nativeElement.focus()\n }\n\n // ----------------------------------------------------------------------------\n // CONTROL VALUE ACCESSOR\n // ----------------------------------------------------------------------------\n\n /** Internal state/value that the native input element has. */\n get state() {\n return this._state\n }\n\n /** Internal state/value that the native input element has. */\n set state(value) {\n if (typeof value === 'undefined') value = null\n this._state = value\n }\n\n /** Writes a new value to the child input element. */\n writeValue(value: any): void {\n this.state = value\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (_: any) => object): void {\n this.onChange = fn\n }\n\n /** Registers a callback function that is called when the child input element triggers on blur. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n /** Function that is called by the forms API when the control status changes to or from 'DISABLED'. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n\n // if displayDisabledAsLocked is enabled - update locked state based on disabled state\n if (this.displayDisabledAsLocked) {\n this.locked = isDisabled\n }\n }\n\n // ----------------------------------------------------------------------------\n // VALIDATORS\n // ----------------------------------------------------------------------------\n\n /** Method that performs synchronous validation against the provided control. Used for internal validation. */\n validate(_control: AbstractControl): { [name: string]: any } | null {\n return null\n }\n\n /** Registers a callback function to call when the validator inputs change. */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /** Returns the first entry in an error object. */\n get firstError(): { code: string; params: any } | null {\n const errors: ValidationErrors | null = this.ngControl.errors\n if (!errors) return null\n const code: string = Object.keys(errors)[0]\n return { code, params: errors[code] }\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { NggvBaseControlValueAccessorComponent } from './base-control-value-accessor.component'\n\n@NgModule({\n declarations: [NggvBaseControlValueAccessorComponent],\n imports: [],\n exports: [NggvBaseControlValueAccessorComponent],\n})\nexport class NggvBaseControlValueAccessorModule {}\n","import { Component, HostBinding, Input } from '@angular/core'\n\ntype Breadcrumb = {\n /** Title shown for the breadcrumb link. */\n title: string\n /** The link which is redirected to when clicked. Can be relative with external set to `false`. */\n href: string\n /** Flags this link to be either internal using router link or external using browser location. */\n external?: boolean\n}\n\n@Component({\n selector: 'nggv-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n standalone: false\n})\nexport class NggvBreadcrumbsComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'breadcrumbs'\n\n /** List of breadcrumbs to present. */\n @Input() breadcrumbs!: Breadcrumb[]\n}\n","<nav aria-label=\"Breadcrumbs\">\n <ol class=\"gds-breadcrumbs\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let i = index\">\n <li [attr.aria-current]=\"i === breadcrumbs.length - 1\">\n <a\n [routerLink]=\"breadcrumb.href\"\n [external]=\"!!breadcrumb.external\"\n *ngIf=\"i < breadcrumbs.length - 1; else currentPageRef\"\n >{{ breadcrumb.title }}</a\n >\n <ng-template #currentPageRef>\n <span>{{ breadcrumb.title }}</span>\n </ng-template>\n </li>\n <li class=\"icon\" *ngIf=\"i < breadcrumbs.length - 1\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.22817 5.19072L8.60942 5.80947C8.46255 5.95635 8.46255 6.19385 8.60942 6.34072L14.2563 12.0001L8.60942 17.6595C8.46255 17.8063 8.46255 18.0438 8.60942 18.1907L9.22817 18.8095C9.37505 18.9563 9.61255 18.9563 9.75942 18.8095L16.3032 12.2657C16.45 12.1188 16.45 11.8813 16.3032 11.7345L9.75942 5.19072C9.61255 5.04385 9.37505 5.04385 9.22817 5.19072Z\"\n fill=\"#000\"\n />\n </svg>\n </li>\n </ng-container>\n </ol>\n</nav>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { NggvExternalLinkDirectiveModule } from '@sebgroup/green-angular/src/v-angular/external-link'\nimport { NggvBreadcrumbsComponent } from './breadcrumbs.component'\n\n@NgModule({\n declarations: [NggvBreadcrumbsComponent],\n imports: [CommonModule, NggvExternalLinkDirectiveModule, RouterModule],\n exports: [NggvBreadcrumbsComponent],\n})\nexport class NggvBreadcrumbsModule {}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\nexport type ButtonTypes = 'button' | 'submit' | 'reset' | 'link'\n\nexport enum ButtonStyle {\n Primary,\n Secondary,\n Alternative,\n Delete,\n DeleteConfirm,\n Ghost,\n GhostDark,\n Link,\n}\n\n/**\n * Buttons allow users to take action with a single tap.\n * https://designlibrary.sebgroup.com/components/component-button\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'nggv-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n standalone: false\n})\nexport class NggvButtonComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnChanges\n{\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'button'\n /** Type of button to one of button|submit|reset|link, where link creates an anchor tag. */\n @Input() type: ButtonTypes = 'button'\n /** Style of the button to one of Primary|Secondary|Alternative|Delete|DeleteConfirm|Ghost|GhostDark|Link. */\n @Input() buttonStyle: ButtonStyle =\n this.type === 'link' ? ButtonStyle.Link : ButtonStyle.Primary\n /** Size of the button to be smaller. */\n @Input() small = false\n /** Where the button should link to if {@link ButtonTypes} is set to link. */\n @Input() href?: string\n\n /** @internal Determines if the the href property should use internal routing. */\n external = false\n /** @internal The classes determined by the buttonStyle and small properties. */\n buttonClasses: { [className: string]: boolean } = {}\n\n /** Emits click events triggered by the button or link.\n * Use instead of click to avoid triggering events on disabled buttons and links.\n */\n @Output() nggvClick = new EventEmitter()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n static buttonStyleClasses(type: ButtonStyle, small: boolean) {\n return {\n small: small,\n primary: type === ButtonStyle.Primary || type === ButtonStyle.Delete,\n secondary: type === ButtonStyle.Secondary,\n tertiary: type === ButtonStyle.Alternative || type === ButtonStyle.Link,\n danger: type === ButtonStyle.Delete || type === ButtonStyle.DeleteConfirm,\n ghost: type === ButtonStyle.GhostDark,\n 'ghost-light': type === ButtonStyle.Ghost,\n }\n }\n\n ngOnInit() {\n super.ngOnInit()\n if (this.href) this.external = /^\\w+:\\/\\/.+$/.test(this.href)\n this.buttonClasses = NggvButtonComponent.buttonStyleClasses(\n this.buttonStyle,\n this.small,\n )\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.buttonStyle || changes.small) {\n this.buttonClasses = NggvButtonComponent.buttonStyleClasses(\n this.buttonStyle,\n this.small,\n )\n }\n }\n\n /** @internal */\n onClick(event: Event) {\n if (this.disabled) return\n this.nggvClick.emit(event)\n }\n}\n","<button\n #input\n [ngClass]=\"buttonClasses\"\n [id]=\"id + '-button'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [type]=\"type\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"description\"\n (click)=\"onClick($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n *ngIf=\"type !== 'link'\"\n>\n <ng-container *ngTemplateOutlet=\"contentRef\"></ng-container>\n</button>\n\n<a\n #input\n [ngClass]=\"buttonClasses\"\n role=\"button\"\n [id]=\"id + '-link'\"\n [routerLink]=\"href\"\n [external]=\"external\"\n [attr.aria-label]=\"description\"\n (click)=\"onClick($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n *ngIf=\"type === 'link'\"\n>\n <ng-container *ngTemplateOutlet=\"contentRef\"></ng-container>\n</a>\n\n<ng-template #contentRef>\n <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { NggvExternalLinkDirectiveModule } from '@sebgroup/green-angular/src/v-angular/external-link'\nimport { NggvButtonComponent } from './button.component'\n\n@NgModule({\n declarations: [NggvButtonComponent],\n imports: [CommonModule, NggvExternalLinkDirectiveModule, RouterModule],\n exports: [NggvButtonComponent],\n})\nexport class NggvButtonModule {}\n","import { Component } from '@angular/core'\n\n@Component({\n selector: 'nggv-card',\n template: ` <ng-content></ng-content> `,\n styleUrls: ['./card.component.scss'],\n standalone: false\n})\nexport class NggvCardComponent {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvCardComponent } from './card.component'\n\n@NgModule({\n declarations: [NggvCardComponent],\n imports: [CommonModule],\n exports: [NggvCardComponent],\n})\nexport class NggvCardModule {}\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n nggv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.nggv) {\n window.nggv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import { Injectable } from '@angular/core'\n\nexport interface Option<K, V> {\n key: K\n label: V\n disabled?: boolean\n}\n\nexport interface OptionGroup<T extends Option<any, any>> {\n label: string\n options: T[]\n disabled?: boolean\n}\n\nexport type OptionBase<T extends Option<any, any>> = T | OptionGroup<T>\n\n@Injectable()\nexport class DropdownUtils<\n K = string | null,\n V = string,\n T extends Option<K, V> = Option<K, V>,\n> {\n public flattenOptions(\n options: OptionBase<T>[] | undefined,\n mustHaveLabel: boolean,\n ): T[] {\n if (!options) return [] as T[]\n return options.reduce((acc, current) => {\n if (this.isGroup(current))\n return acc.concat(this.flattenOptions(current.options, mustHaveLabel))\n if (!current.disabled && !(mustHaveLabel && !current.label))\n acc.push(current) // skip disabled\n return acc\n }, [] as T[])\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n public isGroup(option: OptionBase<T>): option is OptionGroup<T> {\n return 'options' in option\n }\n\n public deepEqual(original: any, change: any): boolean {\n if (original === change) return true\n\n // breaks early if either original or change is a primitive value\n if (\n typeof original !== 'object' ||\n typeof change !== 'object' ||\n original == null ||\n change == null\n )\n return false\n\n const keysOriginal = Object.keys(original)\n const keysChange = Object.keys(change)\n\n if (keysOriginal.length !== keysChange.length) return false\n\n for (const key of keysOriginal) {\n if (!keysChange.includes(key)) return false\n\n switch (true) {\n case Array.isArray(original[key]) && Array.isArray(change[key]):\n if (\n JSON.stringify(original[key].sort()) !==\n JSON.stringify(change[key].sort())\n )\n return false\n break\n case typeof original[key] === 'function':\n case typeof change[key] === 'function':\n if (original[key].toString() !== change[key].toString()) return false\n break\n default:\n if (!this.deepEqual(original[key], change[key])) return false\n }\n }\n\n return true\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n selector: '[nggvCharacterCountdown]',\n standalone: false\n})\nexport class CharacterCountdownDirective {\n @Input('nggvCharacterCountdown')\n set maxlength(value: number | undefined) {\n if (!!value && !Number.isNaN(value)) {\n this._maxlength = value\n this.updateContext()\n if (!this.isViewCreated) {\n this.viewContainerRef.createEmbeddedView(this.templateRef, this.context)\n this.isViewCreated = true\n }\n } else {\n if (this.isViewCreated) {\n this.viewContainerRef.clear()\n this.isViewCreated = false\n }\n }\n }\n\n @Input('nggvCharacterCountdownCurrentLength')\n set currentLength(value: number) {\n this._currentLength = value ?? 0\n this.updateContext()\n }\n\n private _maxlength: number = Number.MAX_SAFE_INTEGER\n private _currentLength = 0\n private isViewCreated = false\n private context = { charactersLeft: 0 }\n\n constructor(\n private readonly viewContainerRef: ViewContainerRef,\n private readonly templateRef: TemplateRef<any>,\n ) {}\n\n updateContext() {\n this.context.charactersLeft = this.calculateCharactersLeft(\n this._maxlength,\n this._currentLength,\n )\n }\n\n calculateCharactersLeft = (max: number, current: number): number =>\n max - current\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { CharacterCountdownDirective } from './character-countdown.directive'\n\n@NgModule({\n declarations: [CharacterCountdownDirective],\n imports: [CommonModule],\n exports: [CharacterCountdownDirective],\n})\nexport class NggvCharacterCountdownDirectiveModule {}\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n Optional,\n Output,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Checkboxes allow a user to toggle an option on or off, or make multiple choices in a set of available options.\n * https://designlibrary.sebgroup.com/components/component-checkbox\n */\n@Component({\n selector: 'nggv-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n standalone: false\n})\nexport class NggvCheckboxComponent extends NggvBaseControlValueAccessorComponent {\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'checkbox'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the checkbox\n */\n @Input() size: 'small' | 'large' = 'large'\n\n @Input() optionalLabel = 'Optional'\n\n @Output() readonly valueChange: EventEmitter<string> =\n new EventEmitter<string>()\n\n constructor(\n @Self()\n @Optional()\n public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = !this.state\n this.onTouched()\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (checked: any) => any) {\n // Override default to update registry\n this.onChange = (checked) => {\n const output = checked ? this.value : null\n fn(output)\n this.valueChange.emit(output)\n }\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\">\n <div\n [id]=\"id + '-checkbox'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n <ng-container *ngIf=\"!labelContentTpl\">\n {{ label }}\n </ng-container>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div>\n <!-- CHECKBOX FIELD -->\n <label\n [id]=\"id + '-label'\"\n [attr.for]=\"id + '-checkbox'\"\n class=\"form-control\"\n *transloco=\"let t; read: scope\"\n >\n <input\n #input\n type=\"checkbox\"\n [id]=\"id + '-checkbox'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n <!-- LABEL -->\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n <span\n *ngIf=\"\n optional === true || (required !== true && optional !== false)\n \"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n <span>{{ label }}</span>\n </ng-container>\n </ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-checkbox'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n </ng-container>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvCheckboxComponent } from './checkbox.component'\n\n@NgModule({\n declarations: [NggvCheckboxComponent],\n imports: [CommonModule, NggvI18nModule, NggCoreWrapperModule],\n exports: [NggvCheckboxComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvCheckboxModule {}\n","import {\n createMask,\n InputmaskOptions,\n} from '@sebgroup/green-angular/src/v-angular/input-mask'\n\n/**\n * Helper function to generate InputmaskOptions by requested locale.\n * @param locale - requested locale. If not given, it'll use the browsers locale\n * @returns InputmaskOptions with date settings\n */\nexport const getLocaleDateMask = (\n dateCharacters?: DateCharacters,\n locale?: string,\n): InputmaskOptions<Date> => {\n // If no locale has been passed, use browser language\n if (!locale) locale = navigator.language\n\n const format = getLocaleDateString(locale).toLowerCase()\n\n return getFormatDateMask(format, dateCharacters)\n}\n\nexport const getLocaleDateString = (locale?: string) =>\n locale && dateFormats[locale] ? dateFormats[locale] : 'yyyy-MM-dd'\nconst dateFormats: Record<string, string> = {\n 'af-ZA': 'yyyy/MM/dd',\n 'am-ET': 'dd/MM/yyyy',\n 'ar-AE': 'dd/MM/yyyy',\n 'ar-BH': 'dd/MM/yyyy',\n 'ar-DZ': 'dd-MM-yyyy',\n 'ar-EG': 'dd/MM/yyyy',\n 'ar-IQ': 'dd/MM/yyyy',\n 'ar-JO': 'dd/MM/yyyy',\n 'ar-KW': 'dd/MM/yyyy',\n 'ar-LB': 'dd/MM/yyyy',\n 'ar-LY': 'dd/MM/yyyy',\n 'ar-MA': 'dd-MM-yyyy',\n 'ar-OM': 'dd/MM/yyyy',\n 'ar-QA': 'dd/MM/yyyy',\n 'ar-SA': 'dd/MM/yyyy',\n 'ar-SY': 'dd/MM/yyyy',\n 'ar-TN': 'dd-MM-yyyy',\n 'ar-YE': 'dd/MM/yyyy',\n 'arn-CL': 'dd-MM-yyyy',\n 'as-IN': 'dd-MM-yyyy',\n 'az-Cyrl-AZ': 'dd.MM.yyyy',\n 'az-Latn-AZ': 'dd.MM.yyyy',\n 'ba-RU': 'dd.MM.yyyy',\n 'be-BY': 'dd.MM.yyyy',\n 'bg-BG': 'dd.MM.yyyy',\n 'bn-BD': 'dd-MM-yyyy',\n 'bn-IN': 'dd-MM-yyyy',\n 'bo-CN': 'yyyy/MM/dd',\n 'br-FR': 'dd/MM/yyyy',\n 'bs-Cyrl-BA': 'dd.MM.yyyy',\n 'bs-Latn-BA': 'dd.MM.yyyy',\n 'ca-ES': 'dd/MM/yyyy',\n 'co-FR': 'dd/MM/yyyy',\n 'cs-CZ': 'dd.MM.yyyy',\n 'cy-GB': 'dd/MM/yyyy',\n 'da-DK': 'dd.MM.yyyy',\n 'de-AT': 'dd.MM.yyyy',\n 'de-CH': 'dd.MM.yyyy',\n 'de-DE': 'dd.MM.yyyy',\n 'de-LI': 'dd.MM.yyyy',\n 'de-LU': 'dd.MM.yyyy',\n 'dsb-DE': 'dd.MM.yyyy',\n 'dv-MV': 'dd/MM/yyyy',\n 'el-GR': 'dd/MM/yyyy',\n en: 'MM/dd/yyyy',\n 'en-029': 'MM/dd/yyyy',\n 'en-AU': 'dd/MM/yyyy',\n 'en-BZ': 'dd/MM/yyyy',\n 'en-CA': 'dd/MM/yyyy',\n 'en-GB': 'dd/MM/yyyy',\n 'en-IE': 'dd/MM/yyyy',\n 'en-IN': 'dd-MM-yyyy',\n 'en-JM': 'dd/MM/yyyy',\n 'en-MY': 'dd/MM/yyyy',\n 'en-NZ': 'dd/MM/yyyy',\n 'en-PH': 'MM/dd/yyyy',\n 'en-SG': 'dd/MM/yyyy',\n 'en-TT': 'dd/MM/yyyy',\n 'en-US': 'MM/dd/yyyy',\n 'en-ZA': 'yyyy/MM/dd',\n 'en-ZW': 'MM/dd/yyyy',\n 'es-AR': 'dd/MM/yyyy',\n 'es-BO': 'dd/MM/yyyy',\n 'es-CL': 'dd-MM-yyyy',\n 'es-CO': 'dd/MM/yyyy',\n 'es-CR': 'dd/MM/yyyy',\n 'es-DO': 'dd/MM/yyyy',\n 'es-EC': 'dd/MM/yyyy',\n 'es-ES': 'dd/MM/yyyy',\n 'es-GT': 'dd/MM/yyyy',\n 'es-HN': 'dd/MM/yyyy',\n 'es-MX': 'dd/MM/yyyy',\n 'es-NI': 'dd/MM/yyyy',\n 'es-PA': 'MM/dd/yyyy',\n 'es-PE': 'dd/MM/yyyy',\n 'es-PR': 'dd/MM/yyyy',\n 'es-PY': 'dd/MM/yyyy',\n 'es-SV': 'dd/MM/yyyy',\n 'es-US': 'MM/dd/yyyy',\n 'es-UY': 'dd/MM/yyyy',\n 'es-VE': 'dd/MM/yyyy',\n 'et-EE': 'dd.MM.yyyy',\n 'eu-ES': 'yyyy/MM/dd',\n 'fa-IR': 'MM/dd/yyyy',\n 'fi-FI': 'dd.MM.yyyy',\n 'fil-PH': 'MM/dd/yyyy',\n 'fo-FO': 'dd-MM-yyyy',\n 'fr-BE': 'dd/MM/yyyy',\n 'fr-CA': 'yyyy-MM-dd',\n 'fr-CH': 'dd.MM.yyyy',\n 'fr-FR': 'dd/MM/yyyy',\n 'fr-LU': 'dd/MM/yyyy',\n 'fr-MC': 'dd/MM/yyyy',\n 'fy-NL': 'dd-MM-yyyy',\n 'ga-IE': 'dd/MM/yyyy',\n 'gd-GB': 'dd/MM/yyyy',\n 'gl-ES': 'dd/MM/yyyy',\n 'gsw-FR': 'dd/MM/yyyy',\n 'gu-IN': 'dd-MM-yyyy',\n 'ha-Latn-NG': 'dd/MM/yyyy',\n 'he-IL': 'dd/MM/yyyy',\n 'hi-IN': 'dd-MM-yyyy',\n 'hr-BA': 'dd.MM.yyyy.',\n 'hr-HR': 'dd.MM.yyyy',\n 'hsb-DE': 'dd.MM.yyyy',\n 'hu-HU': 'yyyy.MM.dd.',\n 'hy-AM': 'dd.MM.yyyy',\n 'id-ID': 'dd/MM/yyyy',\n 'ig-NG': 'dd/MM/yyyy',\n 'ii-CN': 'yyyy/MM/dd',\n 'is-IS': 'dd.MM.yyyy',\n 'it-CH': 'dd.MM.yyyy',\n 'it-IT': 'dd/MM/yyyy',\n 'iu-Cans-CA': 'dd/MM/yyyy',\n 'iu-Latn-CA': 'dd/MM/yyyy',\n 'ja-JP': 'yyyy/MM/dd',\n 'ka-GE': 'dd.MM.yyyy',\n 'kk-KZ': 'dd.MM.yyyy',\n 'kl-GL': 'dd-MM-yyyy',\n 'km-KH': 'yyyy-MM-dd',\n 'kn-IN': 'dd-MM-yyyy',\n 'ko-KR': 'yyyy.MM.dd',\n 'kok-IN': 'dd-MM-yyyy',\n 'ky-KG': 'dd.MM.yyyy',\n 'lb-LU': 'dd/MM/yyyy',\n 'lo-LA': 'dd/MM/yyyy',\n 'lt-LT': 'yyyy.MM.dd',\n 'lv-LV': 'yyyy.MM.dd.',\n 'mi-NZ': 'dd/MM/yyyy',\n 'mk-MK': 'dd.MM.yyyy',\n 'ml-IN': 'dd-MM-yyyy',\n 'mn-MN': 'yyyy.MM.dd',\n 'mn-Mong-CN': 'yyyy/MM/dd',\n 'moh-CA': 'MM/dd/yyyy',\n 'mr-IN': 'dd-MM-yyyy',\n 'ms-BN': 'dd/MM/yyyy',\n 'ms-MY': 'dd/MM/yyyy',\n 'mt-MT': 'dd/MM/yyyy',\n 'nb-NO': 'dd.MM.yyyy',\n 'ne-NP': 'MM/dd/yyyy',\n 'nl-BE': 'dd/MM/yyyy',\n 'nl-NL': 'dd-MM-yyyy',\n 'nn-NO': 'dd.MM.yyyy',\n 'nso-ZA': 'yyyy/MM/dd',\n 'oc-FR': 'dd/MM/yyyy',\n 'or-IN': 'dd-MM-yyyy',\n 'pa-IN': 'dd-MM-yyyy',\n 'pl-PL': 'dd.MM.yyyy',\n 'prs-AF': 'dd/MM/yyyy',\n 'ps-AF': 'dd/MM/yyyy',\n 'pt-BR': 'dd/MM/yyyy',\n 'pt-PT': 'dd-MM-yyyy',\n 'qut-GT': 'dd/MM/yyyy',\n 'quz-BO': 'dd/MM/yyyy',\n 'quz-EC': 'dd/MM/yyyy',\n 'quz-PE': 'dd/MM/yyyy',\n 'rm-CH': 'dd/MM/yyyy',\n 'ro-RO': 'dd.MM.yyyy',\n 'ru-RU': 'dd.MM.yyyy',\n 'rw-RW': 'MM/dd/yyyy',\n 'sa-IN': 'dd-MM-yyyy',\n 'sah-RU': 'MM.dd.yyyy',\n se: 'yyyy-MM-dd',\n 'se-FI': 'dd.MM.yyyy',\n 'se-NO': 'dd.MM.yyyy',\n 'se-SE': 'yyyy-MM-dd',\n 'si-LK': 'yyyy-MM-dd',\n 'sk-SK': 'dd.MM.yyyy',\n 'sl-SI': 'dd.MM.yyyy',\n 'sma-NO': 'dd.MM.yyyy',\n 'sma-SE': 'yyyy-MM-dd',\n 'smj-NO': 'dd.MM.yyyy',\n 'smj-SE': 'yyyy-MM-dd',\n 'smn-FI': 'dd.MM.yyyy',\n 'sms-FI': 'dd.MM.yyyy',\n 'sq-AL': 'yyyy-MM-dd',\n 'sr-Cyrl-BA': 'dd.MM.yyyy',\n 'sr-Cyrl-CS': 'dd.MM.yyyy',\n 'sr-Cyrl-ME': 'dd.MM.yyyy',\n 'sr-Cyrl-RS': 'dd.MM.yyyy',\n 'sr-Latn-BA': 'dd.MM.yyyy',\n 'sr-Latn-CS': 'dd.MM.yyyy',\n 'sr-Latn-ME': 'dd.MM.yyyy',\n 'sr-Latn-RS': 'dd.MM.yyyy',\n sv: 'yyyy-MM-dd',\n 'sv-FI': 'dd.MM.yyyy',\n 'sv-SE': 'yyyy-MM-dd',\n 'sw-KE': 'MM/dd/yyyy',\n 'syr-SY': 'dd/MM/yyyy',\n 'ta-IN': 'dd-MM-yyyy',\n 'te-IN': 'dd-MM-yyyy',\n 'tg-Cyrl-TJ': 'dd.MM.yyyy',\n 'th-TH': 'dd/MM/yyyy',\n 'tk-TM': 'dd.MM.yyyy',\n 'tn-ZA': 'yyyy/MM/dd',\n 'tr-TR': 'dd.MM.yyyy',\n 'tt-RU': 'dd.MM.yyyy',\n 'tzm-Latn-DZ': 'dd-MM-yyyy',\n 'ug-CN': 'yyyy-MM-dd',\n 'uk-UA': 'dd.MM.yyyy',\n 'ur-PK': 'dd/MM/yyyy',\n 'uz-Cyrl-UZ': 'dd.MM.yyyy',\n 'uz-Latn-UZ': 'dd/MM yyyy',\n 'vi-VN': 'dd/MM/yyyy',\n 'wo-SN': 'dd/MM/yyyy',\n 'xh-ZA': 'yyyy/MM/dd',\n 'yo-NG': 'dd/MM/yyyy',\n 'zh-CN': 'yyyy/MM/dd',\n 'zh-HK': 'dd/MM/yyyy',\n 'zh-MO': 'dd/MM/yyyy',\n 'zh-SG': 'dd/MM/yyyy',\n 'zh-TW': 'yyyy/MM/dd',\n 'zu-ZA': 'yyyy/MM/dd',\n}\nexport const getFormatDateMask = (\n format: string,\n dateCharacters?: DateCharacters,\n) => {\n const separators = [' ', '.', '-', '/']\n const separator =\n separators.find((operator) => format.indexOf(operator) > -1) ?? '-'\n const dateObjects = format.split(separator)\n const year: { key: string; index: number } = { key: 'year', index: 0 },\n month: { key: string; index: number } = { key: 'month', index: 1 },\n day: { key: string; index: number } = { key: 'day', index: 2 }\n\n dateObjects.forEach((dateObject, index) => {\n switch (dateObject[0]) {\n case 'y':\n year.index = index\n break\n case 'm':\n month.index = index\n break\n case 'd':\n day.index = index\n break\n }\n })\n const placeholder = setDateFormatCharacters(format, dateCharacters)\n\n return createMask<Date>({\n alias: 'datetime',\n inputFormat: format,\n placeholder,\n parser: (value: string) => {\n const values = value.split(separator)\n const y = +values[year.index]\n const m = +values[month.index] - 1\n const d = +values[day.index]\n return new Date(y, m, d)\n },\n onBeforeMask(initialValue: string) {\n if (!initialValue || typeof initialValue !== 'string') return ''\n // If initialValues is in dateTime format, remove seconds that present after the \"T\"\n if (initialValue.includes('T')) initialValue = initialValue.split('T')[0]\n // initialValue should always be in yyyy-mm-dd no matter if set from control, via datepicker or manually with keyboard\n const values = initialValue.split('-')\n const datePartsInOrder = [year, month, day].sort(\n (a, b) => a.index - b.index,\n )\n // \"Insert\" correct values for the year/month/day, then join to string with separator\n return datePartsInOrder\n .map(({ key }) => {\n const [yearValue, monthValue, dateValue] = values\n if (key === 'year') return yearValue\n if (key === 'month') return monthValue\n return dateValue\n })\n .join(separator)\n },\n })\n}\n\nexport interface DateCharacters {\n year: string\n month: string\n day: string\n}\nexport const setDateFormatCharacters = (\n format: string,\n dateCharacters?: DateCharacters,\n) => {\n if (!dateCharacters) return format\n format = format.replace(/y/g, dateCharacters.year)\n format = format.replace(/m/g, dateCharacters.month)\n format = format.replace(/d/g, dateCharacters.day)\n return format\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms'\nimport {\n TRANSLOCO_SCOPE,\n TranslocoScope,\n TranslocoService,\n} from '@jsverse/transloco'\nimport { Observable, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\nimport type { InputmaskOptions } from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport {\n DateCharacters,\n getFormatDateMask,\n getLocaleDateMask,\n getLocaleDateString,\n setDateFormatCharacters,\n} from '../models/dates'\n\n@Directive() // Required with Angular ivy compiler\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class DateControlValueAccessorComponent\n implements\n AfterViewInit,\n OnInit,\n OnChanges,\n OnDestroy,\n ControlValueAccessor,\n Validator\n{\n /** Custom template for displaying the content of the label.\n * Specified by nesting an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @ContentChild('labelTpl', { read: TemplateRef })\n labelContentTpl?: TemplateRef<undefined>\n\n /** Custom template for displaying value when the input is locked.\n * Specified by nesting an `<ng-template #lockedTpl let-selectedDate>Custom locked content date: {{ selectedDate }}</ng-template>`.\n */\n @ContentChild('lockedTpl', { read: TemplateRef })\n lockedTpl?: TemplateRef<undefined>\n\n /** Reference to the native child input element. */\n @ViewChild('input', { read: ElementRef }) inputRef?: ElementRef\n\n /* ATTRIBUTES */\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).ngv?.nextId(\n 'datepicker',\n )\n /** Name of the child input element. */\n @Input() name?: string\n /** Label of the child input element using the default template.\n * Can be overwritten by specifying an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @Input() label?: string\n /** Text shown before input has a written value. Default current date format by locale of transloco */\n @Input() set placeholder(value: string | undefined) {\n this._placeholder = value\n ? setDateFormatCharacters(value, this.dateCharacters)\n : value\n this.defaultPlaceholder = value\n ? setDateFormatCharacters(value, this.dateCharacters)\n : value\n }\n get placeholder() {\n return this._placeholder\n }\n private _placeholder: string | undefined\n defaultPlaceholder?: string\n /** What characters to use in date placeholder, e.g. {year: 'Y', month: 'M', day: 'D'} */\n @Input() dateCharacters?: DateCharacters\n /** Role of the child input element. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles */\n @Input() role?: string\n /** Value of the child input element. Mostly used in conjunction with radio and checkboxes. */\n @Input() value: any\n /** An error string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() error?: string\n /** A list of errors string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() errorList?: string[]\n /** Adds an icon before each error message. */\n @Input() withErrorIcon?: boolean = false\n /** Description of the child input element. Both visibly and as `aria-label`. */\n @Input() description?: string\n /** If set to true, the browser will try to automatically set focus to the child input element. */\n @Input() autofocus = false\n /** Default value of the child input element. */\n @Input() defaultValue?: any\n /** If passed, the component will listen for updates and will reset its value. */\n @Input() reset?: Observable<any>\n /** Adds (Optional) to input label. */\n @Input() optional?: boolean | null | undefined\n /**\n * Settings for input mask for dates based on locale\n * @see {@link getLocaleDateMask} use this tool to generate settings for `dateInputMask`\n */\n @Input() set dateInputMask(dateMask: InputmaskOptions<Date>) {\n // Hide input field\n this.showInputDateSrc.next(false)\n this.cdr.detectChanges()\n this._dateInputMask = dateMask\n\n // Show input field to reload input-mask settings upon update\n setTimeout(() => {\n this.showInputDateSrc.next(true)\n this.cdr.detectChanges()\n }, 200)\n }\n get dateInputMask(): InputmaskOptions<Date> {\n return this._dateInputMask\n }\n private _dateInputMask!: InputmaskOptions<Date>\n\n private _locked: boolean | null | undefined = undefined\n /** Hides the input borders and displays current value as a text. */\n @Input() set locked(value: boolean | null | undefined) {\n this._locked = value\n this.cdr.detectChanges()\n }\n get locked(): boolean | null | undefined {\n return this._locked\n }\n /** If set to true, using a controls disabled state will display input as locked. */\n @Input() displayDisabledAsLocked?: boolean | null | undefined\n\n /* STATES */\n\n private _required: boolean | null | undefined = undefined\n /** Override the required flag of the component. */\n @Input() set required(value: boolean | null | undefined) {\n this._required = value\n }\n /** Child input element is considered required and changes default label template accordingly. */\n get required(): boolean | null | undefined {\n // if required is set => return required\n if (this._required !== undefined) return this._required\n\n // if required can be determined from the control => return control.required\n if (this.ngControl?.control?.validator) {\n const validator = this.ngControl?.control?.validator(\n {} as AbstractControl,\n )\n return validator && validator.required\n }\n\n return\n }\n\n private _invalid: boolean | undefined = undefined\n /** Override the invalid state of the component. */\n @Input() set invalid(value: boolean) {\n this._invalid = value\n }\n /** The component has the invalid state, usually decorating the elements red and shows the first error. */\n get invalid(): boolean {\n if (this._invalid === true || this._invalid === false) return this._invalid\n return (\n !!this.ngControl?.control?.invalid && this.ngControl?.control?.touched\n )\n }\n\n private _valid: boolean | undefined = undefined\n /** Override the valid state of the component. */\n @Input() set valid(value: boolean) {\n this._valid = value\n }\n /** The component has the valid state, usually decorating the elements green. */\n get valid(): boolean {\n if (this._valid === true || this._valid === false) return this._valid\n return !!this.ngControl?.control?.valid && this.ngControl?.control?.touched\n }\n\n /** The component has the focused state, updated by the child input element's focus state. */\n @Input() focused = false\n /** The component has the disabled state, usually muting the colors and removes interaction. */\n @Input() disabled = false\n /** Locale for using correct language in the datepicker. */\n @Input() locale: string | undefined\n /** Date format used for placeholder and input mask. Should be in lower case {year: 'y', month: 'm', day: 'd'} */\n @Input() dateFormat: string | undefined\n /** Date locale used for placeholder and input mask. */\n @Input() dateLocale: string | undefined\n\n /** Toggler for showing or hiding the input field */\n protected showInputDateSrc = new Subject<boolean>()\n\n /* TRIGGERS */\n\n /** Emits focus events triggered by the child elements. */\n @Output() readonly ngvFocus = new EventEmitter()\n /** Emits focus events triggered by the child elements. */\n @Output() readonly ngvBlur = new EventEmitter()\n\n /* VALUE HANDLERS */\n /** @internal */\n protected onChange = (_: any): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n /** @internal */\n protected onTouched = (): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n /** @internal */\n protected onValidatorChange: () => void = () => null\n private _state: any = null\n\n /* OTHER VARIABLES */\n scope: string | undefined\n /** @internal */\n // warningIcon = faTriangleExclamation;\n\n /* LIFE CYCLE VARIABLES */\n private _onDestroy$ = new Subject<true>()\n\n /**\n * Creates a new BaseControlValueAccessorComponent.\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected elementRef: ElementRef,\n protected cdr: ChangeDetectorRef,\n private _transloco: TranslocoService,\n ) {\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this\n }\n\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n static parseDateLike(value: any): null | undefined | string {\n try {\n // if value is type of string,\n if (value && typeof value === 'string') value = new Date(value)\n switch (true) {\n // remove instances where the value will not correctly be parsed to a date string\n case value == null:\n case value?.toString() === 'Invalid Date':\n return null\n // if value-as-date is a valid date object, parse the value to YYYY-MM-DD format\n case typeof value?.getMonth === 'function':\n return new Intl.DateTimeFormat('sv-SE').format(value)\n default:\n return value as string\n }\n } catch (_e) {\n return\n }\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngOnInit(): void {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValidators(\n Validators.compose([this.ngControl.control.validator, this.validate]),\n )\n }\n\n this._transloco.langChanges$.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n if (!this.locale && !this.dateFormat) {\n return this.updatePlaceholderAndMask()\n }\n },\n })\n\n // if reset observable has been passed, subscribe after updates\n this.reset?.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n // reset value of controller\n this.updateValue('')\n },\n })\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngAfterViewInit(): void {\n // if default value is set, then don't alter it. Otherwise, use\n // current value of controller after initiation as default value\n this.defaultValue = this.defaultValue ?? this.ngControl?.value\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.defaultValue?.currentValue) {\n this.updateValue(changes.defaultValue.currentValue)\n }\n\n if (\n changes.locale?.currentValue &&\n !this.dateFormat &&\n !changes.dateFormat?.currentValue\n ) {\n this.updatePlaceholderAndMask()\n }\n\n if (changes.dateFormat?.currentValue) {\n this.updateFormat()\n }\n\n if (changes.dateCharacters?.currentValue) {\n if (this.dateFormat) {\n this.updateFormat()\n } else {\n this.updatePlaceholderAndMask()\n }\n }\n\n if (!!changes.dateLocale?.currentValue && !this.dateFormat) {\n this.updatePlaceholderAndMask()\n }\n }\n\n ngOnDestroy(): void {\n this._onDestroy$.next(true)\n this._onDestroy$.complete()\n }\n\n /** @internal */\n onFocus(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.focused = true\n this.ngvFocus.emit(event)\n }\n\n /** @internal */\n onBlur(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.onTouched()\n this.focused = false\n this.ngvBlur.emit(event)\n }\n\n detectChanges(): void {\n this.cdr.detectChanges()\n }\n\n /** Sets the focus on the actual input element. */\n setFocus() {\n if (this.inputRef) this.inputRef.nativeElement.focus()\n }\n\n /**\n * @internal\n * Update placeholder and input mask to match locale.\n * Order if choice for locale:\n * 1. dateLocale - Used for specifying which locale to be used for formatting date\n * 2. locale - Unless dateLocale is not provided, use locale form current translation\n * 3. transloco.getActiveLang - as last resort, get active language form trnasloco\n * If locale is undefined, transloco.activeLang will be used instead.\n */\n updatePlaceholderAndMask() {\n const locale =\n this.dateLocale ?? this.locale ?? this._transloco.getActiveLang()\n\n this._placeholder = this.defaultPlaceholder\n ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n : setDateFormatCharacters(\n getLocaleDateString(locale).toLowerCase(),\n this.dateCharacters,\n )\n this.dateInputMask = getLocaleDateMask(this.dateCharacters, locale)\n }\n\n updateFormat() {\n if (this.dateFormat) {\n this._placeholder = this.defaultPlaceholder\n ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n : setDateFormatCharacters(\n this.dateFormat.toLowerCase(),\n this.dateCharacters,\n )\n this.dateInputMask = getFormatDateMask(\n this.dateFormat,\n this.dateCharacters,\n )\n }\n }\n\n // ----------------------------------------------------------------------------\n // CONTROL VALUE ACCESSOR\n // ----------------------------------------------------------------------------\n\n /** Internal state/value that the native input element has. */\n get state() {\n return this._state\n }\n\n /**\n * Internal state/value that the native input element has.\n */\n set state(value) {\n this._state = value\n }\n\n /** Writes a new value to the child input element. */\n writeValue(value: any): void {\n this.state = value\n this.onChange(this.state)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = (value) => {\n // ensure emitted value is a string | null | undefined\n const emitValue = DateControlValueAccessorComponent.parseDateLike(value)\n fn(emitValue)\n }\n }\n\n /** Registers a callback function that is called when the child input element triggers on blur. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n /** Function that is called by the forms API when the control status changes to or from 'DISABLED'. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n\n // if displayDisabledAsLocked is enabled - update locked state based on disabled state\n if (this.displayDisabledAsLocked) {\n this.locked = isDisabled\n }\n }\n\n // ----------------------------------------------------------------------------\n // VALIDATORS\n // ----------------------------------------------------------------------------\n\n /** Method that performs synchronous validation against the provided control. Used for internal validation. */\n validate(_control: AbstractControl): { [name: string]: any } | null {\n return null\n }\n\n /** Registers a callback function to call when the validator inputs change. */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /** Returns the first entry in an error object. */\n get firstError(): { code: string; params: Record<string, any> } | null {\n const errors: ValidationErrors | null = this.ngControl.errors\n if (!errors) return null\n const code = Object.keys(errors)[0]\n return { code, params: errors[code] }\n }\n\n private updateValue(value = this.defaultValue) {\n this.state = value\n this.onChange(this.state)\n this.cdr.detectChanges()\n }\n}\n","import { WeekDay } from '@angular/common'\n\nconst weekdays: WeekDay[] = [\n WeekDay.Monday,\n WeekDay.Tuesday,\n WeekDay.Wednesday,\n WeekDay.Thursday,\n WeekDay.Friday,\n WeekDay.Saturday,\n WeekDay.Sunday,\n]\n\nexport const sortWeekDays = (firstDayOfWeek: WeekDay): WeekDay[] => {\n const firstDayIndex = weekdays.indexOf(firstDayOfWeek)\n const weekStart = weekdays.slice(firstDayIndex)\n const weekEnd = weekdays.slice(0, firstDayIndex)\n return weekStart.concat(weekEnd)\n}\n\n/** Sets labels and sort weekday arrays based off of first day of week. */\nexport const getSortedWeekDays = (\n firstDayOfWeek: WeekDay,\n startDate?: Date,\n): Date[] => {\n if (startDate === undefined) startDate = new Date()\n\n // sort weekdays according to firstDayOfWeek\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n // get the date object for the first day of week\n const startDayIndex = sortedWeekdays.indexOf(startDate.getDay())\n const firstOfWeek = new Date(startDate)\n firstOfWeek.setDate(startDate.getDate() - startDayIndex)\n\n // map each day in array to a date object\n return sortedWeekdays.map((_: WeekDay, offset: number) => {\n // set appropriate date\n const weekdayDate = new Date(firstOfWeek)\n weekdayDate.setDate(weekdayDate.getDate() + offset)\n\n // and return value\n return weekdayDate\n })\n}\n\n/** Generate a matrix of dates used to visualize a calendar month. */\nexport const generateDateMatrix = (\n month: number,\n year: number,\n minWeeks = 5,\n firstDayOfWeek: WeekDay,\n): Date[][] => {\n // generate a new matrix with 5 or 6 rows (depending on number of days in that month)\n const matrix: Date[][] = new Array<Date[]>(minWeeks)\n matrix.fill([])\n\n const monthStr = `${month + 1}`.padStart(2, '0')\n const date = new Date(`${year}-${monthStr}-01`)\n const firstDate = firstCalendarDate(date, firstDayOfWeek)\n\n // for each week in that month\n const dateMatrix = matrix.map((_: Date[], weekOffset: number) => {\n const offset = weekOffset * 7\n // update the date with the offset for that week\n const firstOfWeek = new Date(firstDate)\n firstOfWeek.setDate(firstDate.getDate() + offset)\n return getSortedWeekDays(firstDayOfWeek, firstOfWeek)\n })\n\n // check if another row needs to be added (if last dates of month are missing)\n const lastAdded = dateMatrix.slice(-1)[0].slice(-1)[0]\n const lastOfMonth = new Date(lastAdded)\n lastOfMonth.setMonth(month + 1)\n lastOfMonth.setDate(0)\n\n if (isBefore(lastAdded, lastOfMonth)) {\n // add another week row\n const firstOfWeek = new Date(lastAdded)\n firstOfWeek.setDate(lastAdded.getDate() + 1)\n dateMatrix.push(getSortedWeekDays(firstDayOfWeek, firstOfWeek))\n }\n // return final datematrix\n return dateMatrix\n}\n\n/** Returns the first date used in the calendars first button. */\nexport const firstCalendarDate = (\n date: Date,\n firstDayOfWeek: WeekDay,\n): Date => {\n // sort weekdays according to firstDayOfWeek\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n // set date to the first of month\n const firstOfMonth = new Date(date)\n firstOfMonth.setDate(1)\n\n // get the offset\n const offset = sortedWeekdays.indexOf(firstOfMonth.getDay())\n const firstOfWeek = new Date(firstOfMonth)\n // use offset to set date\n firstOfWeek.setDate(1 - offset)\n return firstOfWeek\n}\n\nexport const getDayOffset = (\n from: WeekDay,\n to: WeekDay,\n firstDayOfWeek: WeekDay,\n direction?: 'forward' | 'back',\n): number => {\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n const fromIndex = sortedWeekdays.indexOf(from)\n const toIndex = sortedWeekdays.indexOf(to)\n\n const offset = toIndex - fromIndex\n\n if (direction === 'forward' && offset < 0) return offset + 6\n if (direction === 'back' && offset > 0) return offset - 6\n return offset\n}\n\n/** Returns an array of Dates for each of month. */\nexport const getMonthArray = (): Date[] => {\n const firstDayOfYear = new Date()\n firstDayOfYear.setMonth(0)\n firstDayOfYear.setDate(1)\n\n // create a new array of length 12,\n // and fill it with date objects of 1:st of january\n const monthArray: Date[] = new Array(12).fill(firstDayOfYear)\n\n // map through the array,\n // and create a new instance of the date,\n // changing the month based on index (0 - 11)\n return monthArray.map((d: Date, index: number) => {\n const date = new Date(d)\n date.setMonth(index)\n return date\n })\n}\n\n/** Returns an array of Dates for the current year and the next. */\nexport const getYearArray = (): Date[] => {\n const currentYear = new Date()\n currentYear.setMonth(0)\n currentYear.setDate(1)\n const nextYear = new Date(currentYear)\n nextYear.setFullYear(currentYear.getFullYear() + 1)\n return [currentYear, nextYear]\n}\n\n/** Returns true if the two dates have the same year, month and date values. */\nexport const match = (a: Date | undefined, b: Date | undefined): boolean => {\n if (!a || !b) return false\n if (a.getDate() !== b.getDate()) return false\n if (a.getMonth() !== b.getMonth()) return false\n if (a.getFullYear() !== b.getFullYear()) return false\n return true\n}\n\nexport const afterClosingHours = (closingHours: Date | undefined): boolean => {\n if (!closingHours) return false\n return Date.now() >= closingHours.getTime()\n}\n\n/**\n * Checks if a date is before control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isBefore = (date: Date, controlDate: Date): boolean => {\n // if year values are dissimilar\n if (date.getFullYear() !== controlDate.getFullYear()) {\n return date.getFullYear() < controlDate.getFullYear()\n }\n // if month values are dissimilar\n if (date.getMonth() !== controlDate.getMonth()) {\n return date.getMonth() < controlDate.getMonth()\n }\n // if year and month are equal, check the date\n return date.getDate() < controlDate.getDate()\n}\n\n/**\n * Checks if a date is after control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isAfter = (date: Date, controlDate: Date): boolean => {\n // if year values are dissimilar\n if (date.getFullYear() !== controlDate.getFullYear()) {\n return date.getFullYear() > controlDate.getFullYear()\n }\n // if month values are dissimilar\n if (date.getMonth() !== controlDate.getMonth()) {\n return date.getMonth() > controlDate.getMonth()\n }\n // if year and month are equal, check the date\n return date.getDate() > controlDate.getDate()\n}\n\n/**\n * Checks if a value can be used to initiate a new Date object.\n *\n * @param value any value\n * @returns - true if value can be coersed to a Date.\n */\nexport const isValid = (value: any): boolean => {\n // if value is type of string and can be parsed to a Date\n const date =\n value && typeof value === 'string' && !isNaN(Date.parse(value))\n ? new Date(value)\n : null\n\n switch (true) {\n // if date or value is a valid date object - return valid\n case typeof value?.getMonth === 'function':\n case typeof date?.getMonth === 'function':\n return true\n // if date or value is not a valid date object - return invalid\n case value == null:\n case date?.toString() === 'Invalid Date':\n return false\n default:\n return false\n }\n}\n","import {\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\nexport const enum DateCss {\n notWithinMonth = 'not-within-month',\n selected = 'selected',\n today = 'today',\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[calendarDate]',\n standalone: false,\n})\nexport class CalendarDateDirective implements OnInit, OnChanges {\n @Input() calendarDate!: Date\n @HostBinding('class.' + DateCss.selected) @Input() selected!: boolean\n @HostBinding('class.' + DateCss.notWithinMonth)\n @Input()\n notWithinMonth!: boolean\n @HostBinding('class.' + DateCss.today) isToday = false\n @Input() disabled!: boolean\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement\n }\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnInit() {\n this.isToday = match(new Date(), this.calendarDate)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.disabled?.currentValue) {\n ;(this.nativeElement as HTMLButtonElement).disabled = this.disabled\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { DisableDateConfig } from '../datepicker.models'\nimport {\n afterClosingHours,\n isAfter,\n isBefore,\n match,\n} from '../datepicker.utils'\n\nconst TODAY = new Date()\n\n@Pipe({\n name: 'isDisabled',\n standalone: false\n})\nexport class IsDisabledPipe implements PipeTransform {\n // transform(value: Date, firstValid: Date | undefined, lastValid: Date | undefined, excludeDates: Date[] | undefined, excludeDays: WeekDay[] | undefined): boolean {\n transform(value: Date, config: DisableDateConfig = {}): boolean {\n const { fromDate, toDate, excludeDates, excludeDays, closingTime } = config\n\n // if closingHours was provided and the date matches today - check closingHours (including timezone)\n if (closingTime && match(value, TODAY) && afterClosingHours(closingTime))\n return true\n\n // if fromDate was provided and the date occurs before fromDate date\n if (fromDate && !match(value, fromDate) && isBefore(value, fromDate))\n return true\n\n // if toDate was provided and the date occurs after toDate date\n if (toDate && !match(value, toDate) && isAfter(value, toDate)) return true\n\n // if a list of disallowed days is provided and value matches\n if (\n excludeDays &&\n excludeDays.length &&\n excludeDays.indexOf(value.getDay()) !== -1\n )\n return true\n\n // if a list of disallowed dates is provided\n if (excludeDates && excludeDates.length) {\n return !!excludeDates.find((d: Date) => match(value, d))\n }\n\n // otherwise show date as not disabled\n return false\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n name: 'dateThook',\n standalone: false\n})\nexport class DateThookPipe implements PipeTransform {\n get today(): Date {\n const tmp = new Date()\n const today = new Date(tmp.setHours(0, 0, 0, 0))\n return today\n }\n\n transform(date: Date, isDisabled: boolean): string {\n if (!!date && !isDisabled) {\n // Reset time for target date\n const dateTmp = new Date(date.setHours(0, 0, 0, 0))\n\n // To calculate the time difference of two dates\n const differenceInTime = dateTmp.getTime() - this.today.getTime()\n\n // To calculate the no. of days between two dates\n const differenceInDays = differenceInTime / (1000 * 3600 * 24)\n const absoluteDifferenceInDays = Math.abs(differenceInDays)\n\n const differentiator =\n differenceInDays < 0 ? '-' : differenceInDays === 0 ? '' : '+'\n\n return `today${differentiator}${absoluteDifferenceInDays === 0 ? '' : absoluteDifferenceInDays}`\n }\n\n return 'disabled-date'\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\n@Pipe({\n name: 'matches',\n standalone: false\n})\nexport class MatchesPipe implements PipeTransform {\n transform(value: Date, selected: Date | undefined): boolean {\n return match(value, selected)\n }\n}\n","import { WeekDay } from '@angular/common'\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n} from '@angular/core'\n\nimport {\n generateDateMatrix,\n getDayOffset,\n sortWeekDays,\n} from '../../datepicker.utils'\nimport { CalendarDateDirective } from '../../directives/calendar-date.directive'\n\nimport type { CalendarType, DisableDateConfig } from '../../datepicker.models'\n\n@Component({\n selector: 'nggv-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n standalone: false\n})\nexport class CalendarComponent implements OnChanges {\n @Output() dateClick = new EventEmitter<Date>()\n\n @ViewChildren(CalendarDateDirective)\n dateButtonRefs!: QueryList<CalendarDateDirective>\n\n @Input() year!: number\n @Input() month!: number\n @Input() selected: Date | undefined\n\n // inputs that configure display behaviour\n @Input() locale: string | undefined\n @Input() minCalendarRows = 5\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n @Input() type: CalendarType = 'normal'\n\n // inputs that affects which dates in the calendar should be grayed out\n @Input() set disableDates(value: Date[] | undefined) {\n this.updateDisableDateConfig({ excludeDates: value ?? [] })\n }\n @Input() set disableWeekDays(value: WeekDay[] | undefined) {\n this.updateDisableDateConfig({ excludeDays: value })\n }\n @Input() set firstValid(value: Date | undefined) {\n this.updateDisableDateConfig({ fromDate: value })\n }\n @Input() set lastValid(value: Date | undefined) {\n this.updateDisableDateConfig({ toDate: value })\n }\n @Input() set closingTime(value: Date | undefined) {\n this.updateDisableDateConfig({ closingTime: value })\n }\n\n dateMatrix: Date[][] = [[]]\n disableDateConfig: DisableDateConfig = {}\n\n private lastDayOfWeek: WeekDay = WeekDay.Sunday\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected?.currentValue) {\n this.selected = new Date(changes.selected.currentValue)\n }\n\n if (changes.firstDayOfWeek?.currentValue) {\n this.lastDayOfWeek = sortWeekDays(\n changes.firstDayOfWeek.currentValue,\n ).pop() as WeekDay\n }\n\n if (\n (changes.month?.currentValue !== undefined &&\n changes.month?.currentValue !== null) ||\n !!changes.year?.currentValue ||\n !!changes.firstDayOfWeek?.currentValue ||\n !!changes.minCalendarRows?.currentValue\n ) {\n this.dateMatrix = generateDateMatrix(\n this.month,\n this.year,\n this.minCalendarRows,\n this.firstDayOfWeek,\n )\n }\n }\n\n clickDate(date: Date): void {\n this.dateClick.emit(date)\n }\n\n @HostListener('keydown', ['$event'])\n keyNavigation(event: KeyboardEvent): void {\n let activeElement: HTMLElement | undefined\n if (event.key !== 'Tab')\n activeElement = document.activeElement as HTMLElement\n if (event.key === 'ArrowRight') {\n const nextFocusable = this.getNextFocusable(activeElement)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowLeft') {\n const nextFocusable = this.getPreviousFocusable(activeElement)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n const nextFocusable = this.getElementWithOffset(activeElement, -7)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n const nextFocusable = this.getElementWithOffset(activeElement, 7)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'Enter' || event.key === 'Space') {\n if (activeElement) {\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n )\n if (!dateRef?.disabled) {\n this.dateClick.emit(dateRef?.calendarDate)\n }\n }\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n const nextFocusable = this.firstDayOfWeekElement()\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n const nextFocusable = this.lastDayOfWeekElement()\n if (nextFocusable) nextFocusable.focus()\n }\n }\n\n getElementWithOffset(\n fromElement: HTMLElement | undefined,\n offsetDays: number,\n returnOnlyEnabled = true,\n ): HTMLElement | undefined {\n if (!fromElement) return\n const fromIndex = this.dateButtonRefs\n .toArray()\n .map((ref) => ref.nativeElement)\n .indexOf(fromElement)\n const next = this.dateButtonRefs.get(fromIndex + offsetDays)\n if (!next) return\n if (returnOnlyEnabled && next.disabled)\n return this.getElementWithOffset(next.nativeElement, offsetDays)\n return next.nativeElement\n }\n\n getNextFocusable(\n fromElement: HTMLElement | undefined,\n ): HTMLElement | undefined {\n if (!fromElement) return\n return this.getElementWithOffset(fromElement, 1)\n }\n\n getPreviousFocusable(\n fromElement: HTMLElement | undefined,\n ): HTMLElement | undefined {\n if (!fromElement) return\n return this.getElementWithOffset(fromElement, -1)\n }\n\n firstDayOfWeekElement(): HTMLElement | undefined {\n const activeElement = document.activeElement as HTMLElement\n if (!activeElement) return\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n ) as CalendarDateDirective\n if (dateRef.calendarDate.getDay() === this.firstDayOfWeek) return\n const offset = this.getDayOffset(\n dateRef.calendarDate.getDay(),\n this.firstDayOfWeek,\n 'back',\n )\n const targetElement = this.getElementWithOffset(\n activeElement,\n offset,\n false,\n ) as HTMLButtonElement\n if (targetElement && targetElement.disabled)\n return this.getNextFocusable(targetElement)\n return targetElement\n }\n\n lastDayOfWeekElement(): HTMLElement | undefined {\n const activeElement = document.activeElement as HTMLElement\n if (!activeElement) return\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n ) as CalendarDateDirective\n if (dateRef.calendarDate.getDay() === this.lastDayOfWeek) return\n const offset = this.getDayOffset(\n dateRef.calendarDate.getDay(),\n this.lastDayOfWeek,\n 'forward',\n )\n const targetElement = this.getElementWithOffset(\n activeElement,\n offset,\n false,\n ) as HTMLButtonElement\n if (targetElement && targetElement.disabled)\n return this.getPreviousFocusable(targetElement)\n return targetElement\n }\n\n getDayOffset(\n from: WeekDay,\n to: WeekDay,\n direction?: 'forward' | 'back',\n ): number {\n return getDayOffset(from, to, this.firstDayOfWeek, direction)\n }\n\n private updateDisableDateConfig(config: Partial<DisableDateConfig>): void {\n this.disableDateConfig = {\n ...this.disableDateConfig,\n ...config,\n }\n }\n}\n","<ng-container *ngFor=\"let weekRow of dateMatrix\">\n <div class=\"nggv-calendar-row\">\n <button\n *ngFor=\"let date of weekRow\"\n class=\"gds-button gds-button-alternative\"\n [attr.data-thook]=\"\n date | dateThook: (date | isDisabled: disableDateConfig)\n \"\n [attr.aria-label]=\"date\"\n [calendarDate]=\"date\"\n [notWithinMonth]=\"!(month === date?.getMonth())\"\n [selected]=\"date | matches: selected\"\n [disabled]=\"date | isDisabled: disableDateConfig\"\n (click)=\"clickDate(date)\"\n >\n {{ date | date: 'd' : undefined : locale }}\n </button>\n </div>\n</ng-container>\n","import { formatDate, WeekDay } from '@angular/common'\nimport { Injectable } from '@angular/core'\n\nexport type CalendarType = 'normal' | 'extended'\n\nexport const enum Month {\n January,\n February,\n March,\n April,\n May,\n June,\n July,\n August,\n September,\n October,\n November,\n December,\n}\n\nexport interface DisableDateConfig {\n fromDate?: Date | undefined\n toDate?: Date | undefined\n excludeDates?: Date[] | undefined\n excludeDays?: WeekDay[] | undefined\n closingTime?: Date | undefined\n}\n\n@Injectable()\nexport class CalendarMonth {\n year: number\n month: number\n id: string\n _date: Date\n\n constructor(date?: Date) {\n this._date = date ? new Date(date) : new Date()\n this._date.setDate(1)\n this._date.setHours(0, 0, 0, 0)\n this.year = this._date.getFullYear()\n this.month = this._date.getMonth()\n this.id = formatDate(this._date, 'yyyyMM', 'en')\n }\n\n /** Creates an instance based of input year and month. */\n static fromObject(obj: { year: number; month: number }): CalendarMonth {\n const objectDate = new Date(obj.year, obj.month, 1)\n return new CalendarMonth(objectDate)\n }\n\n /** Returns a Date representation for the instance. */\n get date(): Date {\n return new Date(this._date)\n }\n\n /** Returns the string id representing the instance in form of 'yyyyMM'. */\n valueOf() {\n return this.id\n }\n\n /** Returns a new instance for next month. */\n nextMonth(): CalendarMonth {\n const next = this.date\n next.setMonth(this.month + 1)\n return new CalendarMonth(next)\n }\n\n /** Returns a new instance for previous month. */\n previousMonth(): CalendarMonth {\n const previous = this.date\n previous.setMonth(this.month - 1)\n return new CalendarMonth(previous)\n }\n\n /** Returns a new instance for next year. */\n nextYear(): CalendarMonth {\n const nextYear = this.date\n nextYear.setFullYear(nextYear.getFullYear() + 1)\n return new CalendarMonth(nextYear)\n }\n\n /** Returns a new instance for previous year. */\n previousYear(): CalendarMonth {\n const previousYear = this.date\n previousYear.setFullYear(previousYear.getFullYear() - 1)\n return new CalendarMonth(previousYear)\n }\n}\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core'\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'\nimport { Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'\n\nimport { CalendarMonth } from '../../datepicker.models'\nimport { getMonthArray, getYearArray } from '../../datepicker.utils'\n\nimport type { CalendarType } from '../../datepicker.models'\n\nimport '@sebgroup/green-core/components/icon/icons/chevron-left.js'\nimport '@sebgroup/green-core/components/icon/icons/chevron-right.js'\n\n@Component({\n selector: 'nggv-calendar-control',\n templateUrl: './calendar-control.component.html',\n styleUrls: ['./calendar-control.component.scss'],\n standalone: false\n})\nexport class CalendarControlComponent implements OnInit, OnChanges, OnDestroy {\n // nextIcon: IconDefinition = faChevronRight\n // previousIcon: IconDefinition = faChevronLeft\n\n @Output() calendarChange = new EventEmitter<CalendarMonth>()\n\n @Input() activeCalendar!: CalendarMonth\n @Input() locale: string | undefined\n @Input() type: CalendarType = 'normal'\n\n monthArray: Date[] = [] // array used for month dropdown\n yearArray: Date[] = [] // array used for year dropdown\n selectedCalendar: UntypedFormGroup // dropdown form group\n\n private subs: Subscription[] = []\n\n constructor(private fb: UntypedFormBuilder) {\n // initiate form group for dropdown menus\n this.selectedCalendar = this.fb.group({\n year: [],\n month: [],\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes.activeCalendar &&\n !changes.activeCalendar.isFirstChange() &&\n changes.activeCalendar.currentValue.valueOf() !==\n this.selectedCalendar.value.id\n ) {\n this.selectedCalendar.patchValue(changes.activeCalendar.currentValue)\n }\n }\n\n ngOnInit() {\n // populate drowdowns and labels with data\n this.monthArray = getMonthArray()\n this.yearArray = getYearArray()\n\n // subscribe to year and month changes, and emit event to datepicker\n this.subscribeToFormChanges()\n\n // update control to initial value\n if (this.activeCalendar)\n this.selectedCalendar.patchValue(this.activeCalendar)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n viewPreviousMonth() {\n const previousMonth = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).previousMonth()\n this.selectedCalendar.patchValue(previousMonth)\n }\n\n viewNextMonth() {\n const nextMonth = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).nextMonth()\n this.selectedCalendar.patchValue(nextMonth)\n }\n\n viewPreviousYear() {\n const previousYear = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).previousYear()\n this.selectedCalendar.patchValue(previousYear)\n }\n\n viewNextYear() {\n const nextYear = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).nextYear()\n this.selectedCalendar.patchValue(nextYear)\n }\n\n @HostListener('keydown', ['$event'])\n keyNavigation(event: KeyboardEvent): void {\n if (event.key !== 'PageUp' && event.key !== 'PageDown') return\n event.preventDefault()\n if (event.shiftKey) {\n if (event.key === 'PageUp') return this.viewPreviousYear()\n if (event.key === 'PageDown') return this.viewNextYear()\n }\n if (event.key === 'PageUp') return this.viewPreviousMonth()\n if (event.key === 'PageDown') return this.viewNextMonth()\n }\n\n private subscribeToFormChanges(): void {\n // used to quickly check if the yearsArray needs years appended to it\n let existingYears = this.yearArray.map((e) => e.getFullYear())\n const changes = this.selectedCalendar.valueChanges.pipe(\n debounceTime(1), // added due to this issue: https://github.com/angular/angular/issues/13129\n map((value: { year: number; month: number }) =>\n CalendarMonth.fromObject(value),\n ),\n distinctUntilChanged(\n (prev: CalendarMonth, curr: CalendarMonth) =>\n prev.valueOf() === curr.valueOf(),\n ),\n )\n this.subs.push(\n changes.subscribe({\n next: (value: CalendarMonth) => {\n // if you need to append to year array\n if (existingYears.indexOf(value.year) === -1) {\n this.yearArray.push(value.date)\n this.yearArray.sort((a, b) => a.getFullYear() - b.getFullYear())\n existingYears = this.yearArray.map((e) => e.getFullYear())\n }\n this.calendarChange.emit(value)\n },\n }),\n )\n }\n}\n","<button\n *ngIf=\"type === 'normal'\"\n data-thook=\"previous-month\"\n class=\"nggv-prev-button\"\n (click)=\"viewPreviousMonth()\"\n>\n <gds-icon-chevron-left *nggCoreElement></gds-icon-chevron-left>\n</button>\n\n<ng-container [formGroup]=\"selectedCalendar\">\n <select\n class=\"nggv-calendar-select\"\n data-thook=\"select-month\"\n formControlName=\"month\"\n >\n <option\n *ngFor=\"let month of monthArray\"\n class=\"gds-field-dropdown__label\"\n tabindex=\"0\"\n [value]=\"month.getMonth()\"\n >\n {{ month | date: 'MMMM' : undefined : locale }}\n </option>\n </select>\n\n <select\n class=\"nggv-calendar-select\"\n data-thook=\"select-year\"\n formControlName=\"year\"\n >\n <option\n *ngFor=\"let year of yearArray\"\n class=\"gds-field-dropdown__label\"\n tabindex=\"0\"\n [value]=\"year.getFullYear()\"\n >\n {{ year | date: 'yyyy' : undefined : locale }}\n </option>\n </select>\n</ng-container>\n\n<button\n *ngIf=\"type === 'normal'\"\n data-thook=\"next-month\"\n class=\"nggv-next-button\"\n (click)=\"viewNextMonth()\"\n>\n <gds-icon-chevron-right *nggCoreElement></gds-icon-chevron-right>\n</button>\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n ngv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.ngv) {\n window.ngv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import { WeekDay } from '@angular/common'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { CalendarMonth } from '../../datepicker.models'\nimport { getSortedWeekDays, isValid } from '../../datepicker.utils'\n\nimport type { CalendarType } from '../../datepicker.models'\n\n@Component({\n selector: 'nggv-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n standalone: false\n})\nexport class DatepickerComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('calendarTemplate') calendarTemplate: TemplateRef<any> | null =\n null\n\n /** Emits a Date upon selection. */\n @Output() ngvDateChange = new EventEmitter<Date>()\n\n /** Sets first day of week in calendar. Defaults to Monday. */\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n /** Bank holidays. */\n @Input() disableDates: (string | Date)[] = []\n /** Other non selectable dates. */\n @Input() disableWeekDays: WeekDay[] = []\n /** Minimum number of calendar rows shown. */\n @Input() minCalendarRows = 5\n /** Initial date set as selected. */\n @Input() selected: Date | undefined\n /** Set locale for date format. */\n @Input() locale: string | undefined = 'en-US'\n /** Set type of calendar. */\n @Input() type: CalendarType = 'normal'\n /** Sets a from date of which all dates before will be invalid. */\n @Input() firstValid: Date | undefined\n /** Sets a to date of which all dates after will be invalid. */\n @Input() lastValid: Date | undefined\n /** Sets a closing time for today to toggle availability for today's date. */\n @Input() closingTime: Date | undefined\n /**\n * When true, the datepicker will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n /** Needed to determent where to place datepicker if dropdownPosition === 'top' */\n @Input() size: 'small' | 'large' = 'large'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.datepickerPosition\n }\n\n @HostBinding('attr.data-size') get sizeAttr() {\n return this.size\n }\n\n /** @internal */\n activeCalendar!: CalendarMonth /* = new CalendarMonth(new Date()) */\n /** @internal */\n\n /** @internal */\n weekdayArray: Date[] = []\n\n /** @internal */\n disabledDatesForActiveMonth: Date[] = []\n\n // Indicates whether the datepicker should be displayed below ('bottom') or above ('top') the input, based on available space.\n datepickerPosition: 'bottom' | 'top' = 'bottom'\n\n private subs: Subscription[] = []\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.selected &&\n !!changes.selected.currentValue &&\n !changes.selected.isFirstChange()\n ) {\n // set active calendar to match selected date\n const activeCalendar = new CalendarMonth(\n new Date(changes.selected.currentValue),\n )\n this.changeActiveCalendar(activeCalendar)\n }\n\n if (changes.disableDates && !changes.disableDates.isFirstChange()) {\n this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n this.activeCalendar,\n changes.disableDates.currentValue || [],\n )\n }\n }\n\n ngOnInit(): void {\n // initiate week label row\n this.weekdayArray = getSortedWeekDays(this.firstDayOfWeek)\n\n // initiate calendar\n const initDate =\n !!this.selected && isValid(this.selected)\n ? new Date(this.selected)\n : new Date()\n this.activeCalendar = new CalendarMonth(initDate)\n\n if (this.dynamicPosition) this.setDropdownPosition()\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /**\n * @internal\n * Update local calendar variable and changes displayed calendar.\n */\n changeActiveCalendar(calendar: CalendarMonth): void {\n this.activeCalendar = calendar\n this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n calendar,\n this.disableDates,\n )\n }\n\n /**\n * @internal\n * Returns a subset of all disabled dates.\n *\n * @param month current month to filter from\n * @param disableDates master list of all disabled dates\n * @returns a subset with current and adjacent months disabled dates\n */\n getDisabledDatesFor(\n calendar: CalendarMonth,\n disableDates?: (string | Date)[],\n ): Date[] {\n if (!disableDates) disableDates = []\n // sets month to target month\n const targetMonth = calendar.date\n\n // gets previous month from target month\n const previousMonth = calendar.previousMonth().date\n\n // gets next month from target month\n const nextMonth = calendar.nextMonth().date\n\n // checks if two dates are within the same year and month\n const withinSameMonth = (a: Date, b: Date): boolean =>\n a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear()\n\n // filter out disabled dates for current and adjacent months\n return disableDates\n .map((d: Date | string) => new Date(d))\n .filter(\n (d: Date) =>\n withinSameMonth(d, previousMonth) ||\n withinSameMonth(d, targetMonth) ||\n withinSameMonth(d, nextMonth),\n )\n }\n\n /**\n * Handles date-clicks from calendar compoentn. Emits event or changes calendar.\n * @param date date clicked in calendar\n */\n dateClickHandler(date: Date): void {\n // if a date is clicked within the active month, emit date\n if (date.getMonth() === this.activeCalendar.month)\n return this.ngvDateChange.emit(date)\n // else, change active calendar to match the date clicked\n this.selected = date\n this.changeActiveCalendar(new CalendarMonth(date))\n }\n\n setDropdownPosition() {\n const datePicker = this.elementRef.nativeElement\n const parent = datePicker.parentElement\n\n const rect = parent.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const DATEPICKER_HEIGHT = 362 // 6 ROWS OF DATES, TO BE SURE\n let maxDatepickerHeight: number\n\n if (spaceBelow >= DATEPICKER_HEIGHT) {\n this.datepickerPosition = 'bottom'\n maxDatepickerHeight = DATEPICKER_HEIGHT\n } else if (spaceAbove >= DATEPICKER_HEIGHT) {\n this.datepickerPosition = 'top'\n maxDatepickerHeight = DATEPICKER_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.datepickerPosition = 'bottom'\n maxDatepickerHeight = Math.max(spaceBelow - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n } else {\n this.datepickerPosition = 'top'\n maxDatepickerHeight = Math.max(spaceAbove - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n }\n\n this.renderer.setStyle(datePicker, 'max-height', `${maxDatepickerHeight}px`)\n }\n}\n","<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n [activeCalendar]=\"activeCalendar\"\n [locale]=\"locale\"\n [type]=\"type\"\n (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n <span *ngFor=\"let weekday of weekdayArray\">{{\n weekday | date: 'EEE' : undefined : locale\n }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n <ng-container\n *ngTemplateOutlet=\"\n calendarTemplate;\n context: {\n calendar: activeCalendar,\n disableDates: disabledDatesForActiveMonth,\n }\n \"\n >\n </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n <ng-content></ng-content>\n</div>\n\n<ng-template\n #calendarTemplate\n let-calendar=\"calendar\"\n let-disableDates=\"disableDates\"\n>\n <nggv-calendar\n [year]=\"calendar.year\"\n [month]=\"calendar.month\"\n [type]=\"type\"\n [locale]=\"locale\"\n [disableDates]=\"disableDates\"\n [selected]=\"selected\"\n [lastValid]=\"lastValid\"\n [firstValid]=\"firstValid\"\n [closingTime]=\"closingTime\"\n [disableWeekDays]=\"disableWeekDays\"\n [minCalendarRows]=\"minCalendarRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n (dateClick)=\"dateClickHandler($event)\"\n >\n </nggv-calendar>\n</ng-template>\n","import '../../datepicker.globals'\nimport '@sebgroup/green-core/components/icon/icons/calendar.js'\nimport '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { WeekDay } from '@angular/common'\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport {\n TRANSLOCO_SCOPE,\n TranslocoScope,\n TranslocoService,\n} from '@jsverse/transloco'\nimport { fromEvent, Observable, Subject } from 'rxjs'\nimport { startWith, takeUntil } from 'rxjs/operators'\n\nimport { DateControlValueAccessorComponent } from '../../date-control-value-accessor/date-control-value-accessor.component'\n\nimport type { CalendarType } from '../../datepicker.models'\n\n/**\n * Date pickers simplify the task of selecting a date in a visual representation of a calendar.\n * https://designlibrary.sebgroup.com/components/component-datepicker\n *\n * Selector: `nggv-dateinput`\n *\n * When focusing an date element, the calendar allows for navigation using both tab and arrow keys.\n * Pressing 'esc' will close the calendar.\n *\n * Requires TranslocoLocale, but in turn allows for setting locale dynamically:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#manually-setting-locale\n *\n * To configure TranslocoLocale, follow this guide:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#setup\n */\n@Component({\n selector: 'nggv-dateinput,nggv-input[type=date]',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n standalone: false,\n})\nexport class DateInputComponent\n extends DateControlValueAccessorComponent\n implements OnDestroy\n{\n @ViewChild('toggleCalendarButton')\n toggleButtonRef?: ElementRef<HTMLButtonElement>\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'date-input'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Set type of calendar: either 'normal' or 'expanded'. Default is 'normal'. */\n @Input() type: CalendarType = 'normal'\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /**\n * An array of Dates or parsable strings that corresponds with dates that should not be selectable in the calendar.\n * I.e. bank holidays.\n */\n @Input() disableDates: (string | Date)[] = []\n /**\n * An array of weekdays that should not be selectable in the calendar.\n * Can be used together with or instead of @Input() disableDates.\n */\n @Input() disableWeekDays: WeekDay[] = []\n /** Mininum number of rows shown in the calendar. */\n @Input() minRows = 5\n /** Sets a from-date of which all dates before will be invalid. */\n @Input() firstValid: Date | undefined\n /** Sets a to-date of which all dates after will be invalid. */\n @Input() lastValid: Date | undefined\n /** Sets a closing time for today to toggle availability for today's date. */\n @Input() closingTime: Date | undefined\n /** Sets first day of week in calendar. Defaults to Monday. */\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n /** If set to true, it will allow to close the calendar on escape button click. */\n @Input() closeCalendarOnEscape = true\n /** If the date-input should close when scrolling the viewport. Default: false*/\n @Input() closeOnScroll = false\n\n /**\n * Sets the displayed size of the date input field.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n @Input() dynamicPosition = false\n\n /** @internal */\n // calendarIcon: IconDefinition = faCalendarDays;\n\n /** @internal */\n shown = false\n\n /** @internal */\n showInput$ = this.showInputDateSrc.asObservable().pipe(startWith(true))\n\n /** Observable for listening to scrolls when the datepicker is open */\n private documentScroll$: Observable<Event> = fromEvent(document, 'scroll')\n /** Observable for listening to clicks outside of the datepicker. */\n private documentClick$: Observable<Event> = fromEvent(document, 'click')\n /** Subject used for unsubscribe pattern on above observable. */\n private datepickerClosed$ = new Subject<boolean>()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected transloco: TranslocoService,\n protected elementRef: ElementRef,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, elementRef, cdr, transloco)\n // this.showInput$ = this.showInputDateSrc.asObservable()\n }\n\n ngOnDestroy(): void {\n this.datepickerClosed$.next(true)\n this.datepickerClosed$.complete()\n }\n\n /**\n * @internal\n * Called from the datepicker-component when a date button is clicked in the calendar.\n *\n * @param date date object emitted when selecting a date in the datepicker.\n */\n onDateChange(date: Date): void {\n // control value accessor will ensure correct formatting of state\n this.state = DateControlValueAccessorComponent.parseDateLike(date)\n // emit state\n this.onChange(this.state)\n // close datepicker and move focus to datepicker button\n this.setShown(false)\n setTimeout(() => this.toggleButtonRef?.nativeElement.focus(), 1)\n }\n\n /**\n * @internal\n * Called when entering date manually in input field.\n */\n onValueChange(eventTarget: any): void {\n // Will be in the format selected in inputMask\n const value = `${eventTarget.inputmask.undoValue}`\n\n // Use parserfunction from inputMask to parse to a date object since value can be in multiple formats\n // Then ontrol value accessor will ensure correct formatting of state\n const parsedDate = DateControlValueAccessorComponent.parseDateLike(\n this.dateInputMask.parser!(value),\n )\n\n this.state = parsedDate\n\n // emit parsed date\n this.onChange(parsedDate)\n this.onTouched()\n }\n\n /**\n * @internal\n * Listen to 'esc' keypress and closes datepicker if open.\n */\n @HostListener('keydown', ['$event'])\n keyListener(event: KeyboardEvent): void {\n if (this.closeCalendarOnEscape && event.key === 'Escape')\n this.setShown(false)\n }\n\n /** @internal */\n toggleDatepicker(): void {\n this.setShown(!this.shown)\n }\n\n /** To externally trigger the datepicker to close. */\n close(): void {\n this.setShown(false)\n }\n\n /**\n * Set the shown state of the datepicker popup. If true the popup will be visible.\n * If the state is set to false, call onTouched to notify any state listeners\n * @param state the shown state which to set.\n */\n private setShown(state = true): void {\n this.shown = state\n if (!this.shown) {\n // if shown is set to false, stop listening to clicks\n this.datepickerClosed$.next(true)\n return this.onTouched()\n }\n // if shown is set to true, reset unsubscribe variable\n this.datepickerClosed$.next(false)\n\n // start listen to scroll if closeOnScroll is enabled\n if (this.closeOnScroll) {\n this.documentScroll$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n next: () => {\n // if document starts scrolling, close datepicker\n return this.setShown(false)\n },\n })\n }\n\n // start listening for clicks outside the component\n this.documentClick$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n next: (event: Event) => {\n // clicking on a gray date causes the datepicker to reload the calendar dates,\n // and the button element clicked will no longer be considered as a child of the datepicker.\n // but the event target path will still contain the parent element\n // if target has datepicker parent, keep listening\n const eventPath = event.composedPath()\n const hasDatepickerParent = !!eventPath.find(\n (e) => e === this.elementRef.nativeElement,\n )\n if (hasDatepickerParent) return\n // else the click is considered to be outside, close datepicker\n return this.setShown(false)\n },\n })\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n [dynamicPosition]=\"dynamicPosition\"\n [size]=\"size\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { CalendarControlComponent } from './components/calendar-control/calendar-control.component'\nimport { CalendarComponent } from './components/calendar/calendar.component'\nimport { DateInputComponent } from './components/date-input/date-input.component'\nimport { DatepickerComponent } from './components/datepicker/datepicker.component'\nimport { CalendarDateDirective } from './directives/calendar-date.directive'\nimport { DateThookPipe } from './pipes/date-thook.pipe'\nimport { IsDisabledPipe } from './pipes/is-disabled.pipe'\nimport { MatchesPipe } from './pipes/matches.pipe'\n\n@NgModule({\n declarations: [\n CalendarComponent,\n CalendarDateDirective,\n IsDisabledPipe,\n DateThookPipe,\n CalendarControlComponent,\n DatepickerComponent,\n DateInputComponent,\n MatchesPipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TranslocoModule,\n NggvInputMaskModule,\n NggCoreWrapperModule,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n exports: [DateInputComponent, DatepickerComponent],\n})\nexport class NggvDatepickerModule {}\n","/*\n * Public API Surface of date-picker\n */\nexport * from './date-control-value-accessor/date-control-value-accessor.component'\nexport * from './components/calendar/calendar.component'\nexport * from './components/calendar-control/calendar-control.component'\nexport * from './components/date-input/date-input.component'\nexport * from './components/datepicker/datepicker.component'\nexport * from './directives/calendar-date.directive'\nexport * from './pipes/is-disabled.pipe'\nexport * from './pipes/matches.pipe'\nexport * from './models/dates'\nexport * from './datepicker.models'\nexport * from './datepicker.globals'\nexport * from './datepicker.module'\nexport * from './datepicker.utils'\n","/* eslint-disable no-console */\nimport { Observable, throwError, timer } from 'rxjs'\nimport { finalize, mergeMap } from 'rxjs/operators'\n\nimport { APIFile, LocalFile } from './drag-drop.models'\n\n/**\n * Helper to extend the base file with {@link APIFile} defaults\n * @param file file base that will be extended with {@link APIFile} defaults\n * @param data extra data to override defaults\n */\nexport const extendFile = (\n file: File | undefined,\n ...data: Array<Partial<Omit<LocalFile, 'raw'> & APIFile>>\n): LocalFile & APIFile => {\n return Object.assign(\n {\n id: file ? btoa(file.name) : '',\n fileName: file ? file.name : 'na',\n status: '',\n statusReasonInformation: null,\n principal: '',\n uploadDate: (file\n ? new Date(file.lastModified)\n : new Date()\n ).toISOString(),\n registrarId: '',\n registrarName: '',\n progress: 0,\n uploadState: 'local',\n uploadRequests: undefined,\n raw: file,\n } as LocalFile & APIFile,\n ...data,\n )\n}\n\n/**\n * Checks if file matches allowed mime types\n * @param type file mime type\n * @param accept allowed mime types\n */\nexport const verifyAccept = (type: string, accept?: string) => {\n if (!accept) return true\n const regex = new RegExp(accept.replace(/\\*/g, '.*').replace(/\\s*,\\s*/g, '|'))\n return regex.test(type)\n}\n\n/**\n * Determines if browser supports drag and drop\n */\nexport const isDragDropAvailable = () => {\n const div = document.createElement('div')\n return (\n ('draggable' in div || ('ondragstart' in div && 'ondrop' in div)) &&\n 'FormData' in window &&\n 'FileReader' in window\n )\n}\n\n/**\n * Pick only specified keys from a given object\n * @param keys keys to pick from a given object\n * @param object to extract keys from\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const copy: any = {}\n keys.forEach((key) => {\n copy[key] = object[key]\n })\n return copy\n}\n\n/**\n * Will retry running the observable when an error occurs to a maximum limit, increasing delay between executions.\n * @param options specifies number of retries, scaling duration and statuses to exclude\n */\nexport const retryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 1000,\n excludedStatusCodes = [],\n }: {\n maxRetryAttempts?: number\n scalingDuration?: number\n excludedStatusCodes?: number[]\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1\n // if maximum number of retries have been met\n // or response is a status code we don't wish to retry, throw error\n if (\n retryAttempt > maxRetryAttempts ||\n excludedStatusCodes.find((e) => e === error.status)\n ) {\n return throwError(() => error)\n }\n console.warn(\n `Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`,\n )\n return timer(retryAttempt * scalingDuration)\n }),\n finalize(() =>\n console.warn(\n `Failed after ${maxRetryAttempts} retry attempts, standing down.`,\n ),\n ),\n )\n }\n","import {\n inject,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n Pipe,\n PipeTransform,\n} from '@angular/core'\n\n@Pipe({\n name: 'value', pure: false,\n standalone: false\n})\nexport class ValuePipe implements PipeTransform {\n constructor(private readonly differs: KeyValueDiffers) {}\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem((r: KeyValueChangeRecord<K, V>) => {\n this.values.push(r.currentValue)\n })\n }\n return this.values\n }\n}\n\n/**\n * Stand-alone version of existing value pipe.\n *\n * Impure flag needed due to keep track of changes in complex values (such as objects or arrays).\n */\n@Pipe({\n name: 'valueImpure',\n pure: false,\n standalone: true,\n})\nexport class ValueImpurePipe implements PipeTransform {\n private readonly differs = inject(KeyValueDiffers)\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem(\n ({ currentValue }: KeyValueChangeRecord<K, V>) => {\n this.values.push(currentValue)\n },\n )\n }\n return this.values\n }\n}\n","/* eslint-disable no-console */\nimport { HttpEventType } from '@angular/common/http'\nimport {\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { timer } from 'rxjs'\nimport { filter, retryWhen, switchMap, take, tap } from 'rxjs/operators'\n\nimport {\n DialogEvent,\n NggvDialogComponent,\n} from '@sebgroup/green-angular/src/v-angular/modal'\nimport {\n extendFile,\n isDragDropAvailable,\n pick,\n retryStrategy,\n verifyAccept,\n} from './drag-drop.utils'\n\nimport type {\n APIFile,\n EventStateChange,\n FileService,\n LocalFile,\n StateMap,\n UploadState,\n} from './drag-drop.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cloud-upload.js'\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\nimport '@sebgroup/green-core/components/icon/icons/checkmark.js'\n\nexport type DragDropState = 'normal' | 'over' | 'uploading' | 'done'\n\n@Component({\n selector: 'nggv-drag-drop',\n templateUrl: './drag-drop.component.html',\n styleUrls: ['./drag-drop.component.scss'],\n standalone: false\n})\nexport class NggvDragDropComponent implements OnInit, OnDestroy {\n /** @internal */\n @ViewChild('deleteModalRef') deleteModalRef!: NggvDialogComponent\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'drag-drop'\n\n /** Allowing selecting or dropping multiple files. */\n @Input() service: FileService | undefined\n\n /** Mime types allowed. */\n @Input() accept?: string\n\n /** Disables deletion or cancellation during defined states [local | uploading | aborted | uploaded | validating | error | deleted | done]. */\n @Input() disableRemove: UploadState[] = []\n\n /** File size limit in mega bytes. */\n @Input() fileLimit: number = 250 * 1024 * 1024\n\n /** Allowing selecting or dropping multiple files. */\n @Input() multiple = true\n\n /** Determines if list should be shown under upload, disabling list disables multiple upload. */\n @Input() list = true\n\n /** Frequency of requests which to send to the API requesting status updates. */\n @Input() throttle = 5000\n\n /** Maximum number of attempts to request a status update from the API if service is unreachable. */\n @Input() retryAttempts = 5\n\n /** If selection of multiple file should be possible with a checkbox.\n * @experimental work in progress and should not yet be used.\n * @internal\n */\n @Input() selectable = false\n\n /** Allows multiple values from `apiFile.status` to be mapped to a single file upload state. */\n @Input() stateMap: StateMap = {\n local: 'local',\n uploading: 'uploading',\n aborted: 'aborted',\n uploaded: 'uploaded',\n validating: 'validating',\n error: 'error',\n deleted: 'deleted',\n done: 'done',\n }\n\n /** Statuses allowed to be fetch during the initial load. Used to hide \"done\" states from list. */\n @Input() fetchStatuses: string[] = []\n\n /** Statuses allowed be shown when status is \"rejected\". Will fallback to generic message. `null` allows all. */\n @Input() errorCodes: string[] | null = null\n\n /** Event triggered on initialization and every time the \"uploadState\" for a file changes. */\n @Output() stateChange = new EventEmitter<EventStateChange>()\n\n /** Event triggered when view details is clicked. */\n @Output() detailsClick = new EventEmitter<LocalFile & APIFile>()\n\n /** @internal */\n isDragDropAvailable = isDragDropAvailable()\n /** @internal */\n componentState: DragDropState = 'normal'\n /** @internal */\n files: Map<string, LocalFile & APIFile> = new Map()\n /** @internal */\n lastFile: (LocalFile & APIFile) | undefined\n /** @internal */\n selected: string[] = []\n /** @internal */\n loading = false\n /** @internal */\n markedForDeletion: APIFile | undefined\n\n /**\n * Initialize the component and warn if service is not defined. Will also fetch files for the list if enabled.\n */\n ngOnInit() {\n if (!this.service) {\n return console.error(\n 'Drag and drop component will not work without the [service] property defined!',\n )\n }\n\n if (this.list) {\n this.service.fetchFiles(this.fetchStatuses).subscribe((apiFiles) => {\n for (const apiFile of apiFiles) {\n const extendedFile = extendFile(undefined, apiFile, {\n progress: 100,\n uploadState: this.determineUploadState(apiFile.status),\n internalStatusReasonCode: this.fallbackError(\n apiFile.internalStatusReasonCode,\n ),\n })\n this.files.set(extendedFile.id, extendedFile)\n this.stateChange.emit(\n pick(\n extendedFile,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n extendedFile.uploadState === 'uploaded' ||\n extendedFile.uploadState === 'validating'\n ) {\n this.checkValidity(extendedFile, this.throttle)\n }\n }\n })\n }\n }\n\n /** Destroy all event listeners and polling running */\n ngOnDestroy() {\n this.files.forEach((file) => {\n file.uploadRequests?.unsubscribe()\n if (file.uploadState === 'uploading') {\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n }\n })\n }\n\n /** @internal Warn user trying to leave page before all uploads are done. Custom message only works in older browsers. */\n @HostListener('window:beforeunload', ['$event'])\n onBeforeUnload(event: Event) {\n if (!this.allUploadingDone(this.files)) {\n const confirmationMessage = `You still have files uploading, are you sure you want to leave this page?`\n ;((event as any) || (window.event as any)).returnValue =\n confirmationMessage\n return confirmationMessage\n }\n return\n }\n\n /* Drag & Drop Events */\n\n /** @internal Event handler for when a file is held over the drop area */\n onDragEnter(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n // Update the visual state\n this.componentState = 'over'\n }\n\n /** @internal Event handler for when a file leaves the drop area */\n onDragLeave(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n }\n\n /** @internal Event handler for when a file is dropped on the drop area or when `input` files are selected */\n onDrop(event: DragEvent | Event): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n\n let files: FileList | undefined\n\n // Determine if files are from the drop event or input element\n if (event instanceof DragEvent && event.dataTransfer) {\n files = event.dataTransfer.files\n } else if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n files = event.target.files\n }\n\n if (files) {\n const extendedFiles = Array.from(files, (file) => {\n let abort = false\n let statusCode: string | null = null\n // Check if file size is larger than limit\n if (file.size > this.fileLimit) {\n abort = true\n statusCode = 'MFEFHM003'\n }\n // Check if file type is not acceptable\n if (!verifyAccept(file.type, this.accept)) {\n abort = true\n statusCode = 'MFEFHM002'\n }\n // Add default values expected by the API\n const extendedFile = extendFile(file, {\n internalStatusReasonCode: statusCode,\n uploadState: (abort ? 'aborted' : 'local') as UploadState,\n })\n\n // Emit initial local upload event\n this.stateChange.emit({\n uploadState: 'local',\n fileName: extendedFile.fileName,\n })\n\n if (abort) {\n // Emit aborted upload event\n this.stateChange.emit({\n uploadState: 'aborted',\n fileName: extendedFile.fileName,\n status: 'aborted',\n internalStatusReasonCode: statusCode,\n })\n }\n\n return extendedFile\n })\n\n // Append to previous files\n let i = 0\n for (const file of extendedFiles) {\n // If multiple or list is false append only file then break loop\n if ((!this.multiple || !this.list) && i >= 1) break\n this.lastFile = file\n this.files.set(file.id, file)\n i++\n }\n\n // Clear file input so that same file can be uploaded\n if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n event.target.value = ''\n }\n\n this.onSubmit()\n }\n }\n\n /** @internal Event trigger for when delete button is pressed */\n onRemove(id: string, state: UploadState): void {\n // Only allow removal in certain states\n if (!this.service || this.disableRemove.includes(state)) return\n const file = this.files.get(id)\n if (!file) return\n // Skip confirmation for aborted and deleted files\n if (\n file.uploadState === 'error' ||\n file.uploadState === 'aborted' ||\n file.uploadState === 'deleted'\n ) {\n this.onConfirmRemove({ original: undefined, payload: file })\n } else {\n this.markedForDeletion = file\n this.deleteModalRef.open()\n }\n }\n\n /** @internal */\n onConfirmRemove(event: DialogEvent<LocalFile & APIFile>) {\n const { payload: file } = event\n if (!file || !this.service) return\n\n // Abort upload and set local state to aborted to inform user\n switch (file.uploadState) {\n case 'local':\n case 'uploading':\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n break\n\n // Remove file from service then set local state to aborted to inform user\n case 'uploaded':\n case 'validating':\n this.service\n .removeFile(file.id)\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Abort regardless of response from server\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM005'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n })\n break\n\n // Remove file from service then locally for \"completed\" states\n case 'error':\n case 'done':\n ;(this.service.removeFileFor\n ? this.service.removeFileFor(file)\n : this.service.removeFile(file.id)\n )\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Remove regardless of response from server\n this.files.delete(file.id)\n const event = pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n )\n event.uploadState = 'deleted'\n this.stateChange.emit(event)\n })\n break\n\n // Just remove the file locally to clean up\n case 'aborted':\n case 'deleted':\n default:\n this.files.delete(file.id)\n this.stateChange.emit({\n ...pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n uploadState: 'deleted',\n })\n break\n }\n }\n\n /** @internal Event handler for when the files should be uploaded */\n onSubmit() {\n if (!this.files || !this.service) return\n // If list is not enabled update the component state to show progress\n if (!this.list) this.componentState = 'uploading'\n this.loading = true\n this.files.forEach((file) => {\n // Filter out all files that aren't currently considered local\n if (!file.raw || file.uploadState !== 'local') return\n file.uploadRequests = this.service!.uploadFile(file.raw!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.UploadProgress:\n // Update upload progress\n if (file.uploadState !== 'uploading') {\n file.uploadState = 'uploading'\n this.stateChange.emit(pick(file, 'uploadState', 'fileName'))\n }\n file.progress = Math.round(\n (100 * event.loaded) / (event.total || 100),\n )\n file.uploadState = 'uploading'\n break\n\n case HttpEventType.Response:\n if (event.body?.id) {\n // Remove old file id\n this.files.delete(file.id)\n // Update file with information from the API\n Object.assign(file, event.body)\n file.progress = 100\n file.uploadState = this.determineUploadState(file.status)\n // Update with new file id\n this.files.set(file.id, file)\n }\n\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n file.uploadState === 'uploaded' ||\n file.uploadState === 'validating'\n ) {\n this.checkValidity(file, this.throttle)\n } else this.setComponentStateDone()\n this.loading = false\n break\n }\n },\n error: (error) => {\n console.warn(error)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n // todo: wrong\n file.statusReasonInformation = [\n { originatorId: 'local', reason: 'dragDrop.error.MFEFHM001' },\n ]\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n this.loading = false\n },\n })\n })\n }\n\n /**\n * @internal\n * Using the state map convert `apiFile.state` to one of {@link UploadState}\n * @param apiState the state given by the file to be used for mapping\n */\n determineUploadState(apiState: string): UploadState {\n // Reverse so that later states override earlier\n const stateEntries = Object.entries(this.stateMap).reverse()\n for (const [uploadState, apiStates] of stateEntries) {\n if (this.uploadStateIsArray(apiStates)) {\n if (apiStates.includes(apiState)) return uploadState as any\n } else {\n if (apiStates === apiState) return uploadState as any\n }\n }\n return 'error'\n }\n\n /** @internal */\n uploadStateIsArray(state: string | string[]): state is string[] {\n return Array.isArray(state)\n }\n\n /** @internal used for translation templating parameters */\n translateParams(file: LocalFile & APIFile) {\n return { ...file, fileLimit: (this.fileLimit / 1024 / 1024).toFixed(3) }\n }\n\n /**\n * Poll the status endpoint to determine when file is valid\n * @param file file used to check state and update\n * @param delay how long each interval should wait before sending a request\n */\n private checkValidity(file: LocalFile & APIFile, delay: number) {\n if (!this.service) return\n file.uploadRequests = timer(0, delay)\n .pipe(\n switchMap(() => {\n const asyncFetchStatus =\n this.service && this.service.fetchStatusFor\n ? this.service.fetchStatusFor(file)\n : this.service!.fetchStatus(file.id)\n return asyncFetchStatus\n }),\n retryWhen(\n retryStrategy({\n maxRetryAttempts: this.retryAttempts,\n }),\n ),\n tap((fileStatus) => {\n // Continuously update file state to show step progress\n if (fileStatus) {\n // Emit event when status changes\n if (file.status !== fileStatus.status) {\n file.status = fileStatus.status\n file.internalStatusReasonCode = this.fallbackError(\n fileStatus.internalStatusReasonCode,\n )\n file.statusReasonInformation = fileStatus.statusReasonInformation\n file.uploadState = this.determineUploadState(fileStatus.status)\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n }\n }\n }),\n // Remove validation state\n filter(\n (apiFile) =>\n !!apiFile &&\n this.determineUploadState(apiFile.status) !== 'uploaded' &&\n this.determineUploadState(apiFile.status) !== 'validating',\n ),\n // Take first state after validation\n take(1),\n )\n .subscribe({\n next: () => {\n if (this.allValidationDone(this.files)) {\n this.setComponentStateDone()\n }\n },\n error: (err) => {\n console.warn(err)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM001'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n this.setComponentStateDone()\n },\n })\n }\n\n private fallbackError(code: string | null | undefined): string | null {\n if (this.errorCodes == null || (code && this.errorCodes.includes(code))) {\n return code ?? null\n } else {\n return 'MFEFHM001'\n }\n }\n\n /**\n * Check so that no files are still validating\n */\n private allValidationDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'validating',\n )\n }\n\n /**\n * Check so that no files are still uploading\n */\n private allUploadingDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'uploading',\n )\n }\n\n /**\n * Helper to update the component state to done and then back to normal\n */\n private setComponentStateDone() {\n if (!this.list) this.componentState = 'done'\n setTimeout(() => {\n if (this.componentState === 'done') this.componentState = 'normal'\n }, 3000)\n }\n}\n","<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { HttpClientModule } from '@angular/common/http'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvModalModule } from '@sebgroup/green-angular/src/v-angular/modal'\nimport { NggvDragDropComponent } from './drag-drop.component'\nimport { ValuePipe } from './drag-drop.pipes'\n\n@NgModule({\n imports: [\n HttpClientModule,\n TranslocoModule,\n NggvModalModule,\n NggCoreWrapperModule,\n CommonModule,\n ],\n declarations: [ValuePipe, NggvDragDropComponent],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: 'dragDrop',\n },\n ],\n exports: [NggvDragDropComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDragDropModule {}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'\n\n@Component({\n selector: 'nggv-typeahead-highlight',\n templateUrl: './typeahead-highlight.component.html',\n styleUrls: ['./typeahead-highlight.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadHighlightComponent implements OnChanges {\n /** The text that is displayed in the dropdown list */\n @Input() textContent?: string\n /** The substring that should be highlighted within textContent */\n @Input() textToHighlight?: string\n\n prefix?: string // Substring before the match\n match?: string // The match\n suffix?: string // Substring after the match\n\n text = ''\n input = ''\n\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n allowedNonMatchingChars = new RegExp(/\\s/)\n\n ngOnChanges(changes: SimpleChanges) {\n const { textContent, textToHighlight } = changes\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`\n this.updateValues()\n }\n\n private updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('')\n const splittedInput = this.input.toLocaleLowerCase().split('')\n\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput)\n\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = ''\n return\n }\n this.prefix = this.text.substring(0, start)\n this.match = this.text.substring(start, end)\n this.suffix = this.text.substring(end)\n }\n\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n private getHighlightedPart(\n splittedText: string[],\n splittedInput: string[],\n ): { start: number; end: number } {\n let start = -1\n let end = -1\n\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1) break\n\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i\n end = start + t\n break\n }\n if (splittedText[t + i] === splittedInput[matches]) matches++\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue // Ignore whitespace, continue\n else break // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end }\n }\n}\n","<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span\n >{{ suffix || '' }}\n</ng-container>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { filter, fromEvent, Subject, Subscription, takeUntil } from 'rxjs'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n@Component({\n selector: 'nggv-dropdown-list',\n templateUrl: './dropdown-list.component.html',\n styleUrls: ['./dropdown-list.component.scss'],\n standalone: false\n})\nexport class NggvDropdownListComponent implements OnInit, OnChanges {\n @Input() set expanded(state: boolean) {\n this.setExpanded(state)\n }\n get expanded(): boolean {\n return this._expanded\n }\n @Input() state: any\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n @Input() optionContentTpl: TemplateRef<OptionBase<any>> | undefined\n @Input() groupLabelTpl: TemplateRef<OptionBase<any>> | undefined\n\n /** @internal List of references to the option elements. */\n @ViewChildren('optionRefs') optionRefs:\n | QueryList<ElementRef<HTMLLIElement>>\n | undefined\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.dropdownPosition\n }\n\n @Input() options!: any[]\n\n @Input() textToHighlight?: string\n\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n @Input() onlyEmitDistinctChanges = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n @Output() closed = new EventEmitter<void>()\n\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n @Output() afterClose = new EventEmitter<void>()\n \n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n dropdownPosition: 'bottom' | 'top' = 'bottom'\n\n private dropdownUtils: DropdownUtils<string | null, string, any> =\n new DropdownUtils<string | null, string, any>()\n private _expanded = false\n private closed$ = new Subject<boolean>()\n public selectedValue?: Option<string, any>\n\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n protected onClickSubscription: Subscription | undefined\n /** Subscribe to to keyboard events only when list is open. */\n private onKeyDownSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n private _flattenedOptions: any[] = []\n\n constructor(\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer: Renderer2,\n private elRef: ElementRef,\n ) {\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n ngOnInit(): void {\n if (this.state)\n this.activeIndex = this.options.findIndex(\n (option) => option.key === this.state.key,\n )\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption()\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option: any): boolean {\n return 'options' in option\n }\n\n /** @internal */\n updateState(option: any, event: Event) {\n if (option.disabled) return\n\n if (\n !this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)\n ) {\n this.selectedValue = option\n this.state = option\n this.selectedValueChanged.emit(option)\n }\n\n this.setExpanded(false)\n event.stopPropagation()\n }\n\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded\n\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition()\n }\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\n this.afterClose.emit()\n this.onClickSubscription?.unsubscribe()\n this.onKeyDownSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n // to trigger gc removal\n this.onKeyDownSubscription = undefined\n this.onKeyUpSubscription = undefined\n }\n }\n\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(\n this.options,\n !this.optionContentTpl,\n )\n this.activeIndex = this.getActiveIndex()\n this.state = this._flattenedOptions[this.activeIndex]\n this.scrollToResult(this.state)\n }\n\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex(): number {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex(\n (option) =>\n option.key != null && option.key === this.selectedValue?.key,\n )\n if (selectedIndex > -1) return selectedIndex\n }\n return this._flattenedOptions.findIndex((option) => option.key != null)\n }\n\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem: HTMLElement) {\n return elem.offsetWidth < elem.scrollWidth\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): any {\n return group\n }\n\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace) return true\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault()\n event.stopPropagation()\n return false\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n }\n return false\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n this.setExpanded(false)\n this.closed.emit()\n }\n return false\n }\n return true\n }\n\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace)) return\n let option\n\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false)\n this.closed.emit()\n break\n\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n break\n\n case 'Home': // Move to the first option\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0) this.activeIndex--\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n }\n }\n\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyUp(event))\n }\n\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyDown(event))\n }\n\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option: any, focusElement?: boolean) {\n if (!this.optionRefs || !option) return\n const optionRef = this.optionRefs.find(\n (li) => li.nativeElement.id === this.id + '-option-' + option.key,\n )\n const offset = this.scrollOffset\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop\n\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n scrollIntoView(optionRef.nativeElement, {\n scrollMode: 'if-needed',\n block: 'nearest',\n })\n\n delta -= window.scrollY || document.documentElement.scrollTop\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset)\n }\n if (focusElement) {\n optionRef.nativeElement.focus()\n }\n }, 0)\n }\n }\n\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement\n // dropdown trigger\n const dropdownInput = dropdown.parentElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = dropdownInput.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const MIN_HEIGHT = 100\n const DROPDOWN_MAX_HEIGHT = 500\n let maxDropdownHeight\n\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n } else {\n this.dropdownPosition = 'top'\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n }\n}\n","<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + state?.key : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + option.key\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subscription } from 'rxjs'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n OptionGroup,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\n@Component({\n selector: 'nggv-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n standalone: false\n})\nexport class NggvDropdownComponent<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n extends NggvBaseControlValueAccessorComponent\n implements OnDestroy, OnChanges\n{\n /** Custom template for displaying options and groups. */\n @ContentChild('selectedTpl', { read: TemplateRef }) selectedContentTpl:\n | TemplateRef<OptionBase<T>>\n | undefined\n @ContentChild('optionTpl', { read: TemplateRef }) optionContentTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n @ContentChild('groupLabelTpl', { read: TemplateRef }) groupLabelTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the dropdown.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n /** Text shown before an option is selected. */\n @Input() placeholder?: string\n /** Specific value for aria-label. If not provided, label/labelTpl will be used. */\n @Input() ariaLabel?: string\n /** If the dropdown should close when scrolling the viewport. Default: false */\n @Input() closeOnScroll = false\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n @Input() set options(value: OptionBase<T>[]) {\n // update options\n this._options = value\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null)\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n }\n\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0]\n this.updateModel(onlyOption)\n return\n }\n\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value)\n if (!this.allowControlNullishOption && !matchingOption) return\n\n // Update local state\n this.writeValue(this.ngControl?.value)\n }\n\n get options(): OptionBase<T>[] {\n return this._options\n }\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n @Input() allowControlNullishOption = true\n\n /** Text to highlight in option */\n @Input() textToHighlight?: string\n\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n @Input() selectOnSingleOption = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n @Input() onlyHandleDistinctChanges = true\n\n /**\n * Emits changes of the expanded state of the dropdown\n */\n @Output() expandedChange = new EventEmitter<boolean>()\n\n /** @internal nullish option. */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.placeholder ?? '\\u00A0' }\n }\n\n /** The current expanded state of the dropdown options. */\n public expanded = false\n /** The current option selected based on numeric index. */\n public activeIndex = -1\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n private onClickSubscription: Subscription | undefined\n /** Subscribe if dropdown expanded to listen to scroll outside to close dropdown. */\n private onScrollSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n protected dropdownUtils: DropdownUtils<K, V, T>,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue\n // remove nullish option\n const hasNullishOption =\n this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1)\n return\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n return\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onScrollSubscription?.unsubscribe()\n }\n\n /** @internal override to correctly set state from form value */\n writeValue(value: any): void {\n const options = this.dropdownUtils.flattenOptions(this._options, false)\n this.state = options.find((option) => option.key === value)\n }\n\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n\n /** @internal */\n onSelectChange(option: T) {\n if (option.disabled) return\n this.updateModel(option)\n this.setExpanded(false)\n }\n\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n this.keyEvent = event\n }\n\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onScrollSubscription?.unsubscribe()\n }\n },\n })\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n private updateModel(value: T) {\n this.state = value\n this.onChange(value.key)\n }\n\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded)\n this.cdr.detectChanges()\n }\n\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state\n this.expandedChange.emit(this.expanded)\n if (this.expanded) {\n this.subscribeToOutsideClickEvent()\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent()\n }\n }\n if (!this.expanded) this.onTouched()\n }\n\n /* TYPE CASTS */\n\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option: any): T {\n return option\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): OptionGroup<T> {\n return group\n }\n\n /* TYPE CHECKS */\n\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option: OptionBase<T>): option is OptionGroup<T> {\n return !('options' in option)\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper dropdown-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n [onlyEmitDistinctChanges]=\"onlyHandleDistinctChanges\"\n [selectWithSpace]=\"selectWithSpace\"\n [dynamicPosition]=\"true\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subject, takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component'\n\n// Use dropdownList template and combine stylesheets\n@Component({\n selector: 'nggv-typeahead-dropdown-list',\n templateUrl: '../../dropdown-list/dropdown-list.component.html',\n styleUrls: [\n '../typeahead-dropdown-list/typeahead-dropdown-list.component.scss',\n '../../dropdown-list/dropdown-list.component.scss',\n ],\n standalone: false\n})\nexport class NggvTypeaheadDropdownListComponent\n extends NggvDropdownListComponent\n implements OnInit, OnDestroy\n{\n @Input() hostComponent!: NggvInputComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n private _destroy$ = new Subject<boolean>()\n\n constructor(\n @SkipSelf()\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer2: Renderer2,\n private element: ElementRef,\n ) {\n super(translocoScope, renderer2, element)\n }\n\n ngOnInit(): void {\n this.handleSelectedValueChanges()\n this.handleFocusChanges()\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n private subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setExpanded(false)\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n\n /** @Internal Update state of the host-input to reflect the selected value */\n private handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`\n }\n })\n }\n\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n private handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state) this.hostComponent.nggvInput.emit('')\n this.setExpanded(true)\n this.subscribeToOutsideClickEvent()\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n override setExpanded(expanded = true) {\n super.setExpanded(expanded)\n\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(\n this.element.nativeElement,\n 'width',\n `${this.hostComponent.element.nativeElement.offsetWidth}px`,\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../../dropdown.component'\n\n@Component({\n selector: 'nggv-typeahead-input',\n templateUrl: './typeahead-input.component.html',\n styleUrls: ['./typeahead-input.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadInputComponent\n extends NggvInputComponent\n implements OnInit, OnDestroy\n{\n /** Reference to the host dropdown */\n @Input() hostComponent!: NggvDropdownComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n get dropdownButton(): HTMLElement {\n return this.hostComponent.inputRef?.nativeElement\n }\n\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n expanded = false\n\n /** Used to determine the height of the inputin html */\n buttonHeight?: number\n\n /** @internal Used to determine wether the input has been moved or not */\n inputMoved = false\n\n constructor(\n public element: ElementRef,\n private renderer2: Renderer2,\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr, element)\n super.ngOnInit()\n }\n\n ngOnInit() {\n this.autocomplete = 'off'\n this.debounceTime = 0\n this.hostComponent.selectOnSingleOption = false\n\n this.handleExpandedChange()\n }\n\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault()\n }\n }\n\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n private moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(\n this.dropdownButton.querySelector('button'),\n this.element.nativeElement,\n )\n this.inputMoved = true\n }\n }, 0)\n }\n\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n private handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state\n\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved) this.moveInput()\n\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32 // Default to 2em;\n\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus())\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`\n this.setInput(formattedValue, false)\n } else this.setInput('', true)\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n private setInput(input: string, triggerFilter: boolean) {\n this.state = input\n if (triggerFilter) {\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n }\n}\n","<ng-container>\n <div\n class=\"input-wrapper\"\n [ngClass]=\"{ expanded: expanded, collapsed: !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@NgModule({\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n})\nexport class NggvTypeaheadModule {}\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component'\nimport { NggvDropdownComponent } from './dropdown.component'\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module'\n\n@NgModule({\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDropdownModule {}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Host,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef,\n} from '@angular/core'\nimport {\n distinctUntilChanged,\n from,\n OperatorFunction,\n Subject,\n Subscription,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs'\n\nimport { Option, OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../dropdown.component'\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@Directive({\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n})\nexport class NggvTypeaheadDirective<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n implements OnInit, OnDestroy\n{\n /** Function that filter the inputvalue */\n @Input() set nggvTypeahead(value: OperatorFunction<string, T[]> | undefined) {\n this.typeaheadFunction = value\n\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe()\n this.inputSubscription$ = undefined\n this.handleInputChanges()\n }\n }\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n @Input() allowUnselect = true\n\n /** Custom label for the unselect option */\n @Input() unselectLabel?: string\n\n /** Custom label for the empty option */\n @Input() emptyOptionLabel?: string\n\n /** Emits the entered string the user has written in the input */\n @Output() filterPhraseChange = new EventEmitter<string>()\n\n /** Forward text inputs to apply the filter function*/\n @HostListener('nggvInput', ['$event']) onNggvInput(event: any) {\n this.inputValue$.next(event)\n }\n\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown\n }\n\n /** Predefined options */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.unselectLabel || '\\u00A0' }\n }\n\n get emptyOption(): OptionBase<any> {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n }\n }\n\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName\n }\n\n dropdownListComponent!: ComponentRef<NggvTypeaheadDropdownListComponent>\n inputComponent!: ComponentRef<NggvTypeaheadInputComponent>\n\n private typeaheadFunction?: OperatorFunction<string, T[]>\n private inputValue$ = new Subject<any>()\n private inputSubscription$?: Subscription\n private onDestroy$ = new Subject<boolean>()\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private element: ElementRef,\n @Optional() @Host() private hostDropdown: NggvDropdownComponent,\n @Optional() @Host() private hostInput: NggvInputComponent,\n ) {}\n\n ngOnInit() {\n this.handleInputChanges()\n\n if (this.hostIsDropdown) this.createInput()\n else this.createDropdownList()\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next(true)\n this.onDestroy$.complete()\n }\n\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n private handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(\n takeUntil(this.onDestroy$),\n distinctUntilChanged(),\n tap((inputValue) => this.filterPhraseChange.emit(inputValue)),\n this.typeaheadFunction ? this.typeaheadFunction : () => from([]),\n withLatestFrom(this.inputValue$),\n )\n .subscribe(([filteredValues, input]) =>\n this.setOptions(filteredValues, input),\n )\n\n // Trigger the pipe when this function have been called\n this.inputValue$.next('')\n }\n\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n private createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadInputComponent,\n )\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown)\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter)\n this.inputComponent.setInput('resultFormatter', this.resultFormatter)\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue))\n }\n\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n private createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadDropdownListComponent,\n )\n this.dropdownListComponent.setInput('hostComponent', this.hostInput)\n }\n\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n private setOptions(filteredValues: T[], input: string) {\n if (!filteredValues) return\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish =\n this.allowUnselect &&\n !input &&\n !(\n Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null\n )\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption]\n } else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues)\n }\n\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false\n this.hostDropdown.options = this.formatOptions(filteredValues)\n this.hostDropdown.textToHighlight = `${input || ''}`\n this.hostDropdown.onlyHandleDistinctChanges = false\n this.hostDropdown.selectWithSpace = false\n this.hostDropdown.detectChanges()\n return\n }\n\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput(\n 'options',\n this.formatOptions(filteredValues),\n )\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`)\n }\n }\n\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n private formatOptions(options: T[]): OptionBase<any>[] {\n if (!options) return []\n if (!this.resultFormatter) return options\n return options.map((value) =>\n value?.label ? this.resultFormatter?.(value) : value,\n )\n }\n}\n","import { Directive, Input, OnInit } from '@angular/core'\nimport { RouterLink } from '@angular/router'\n\n/** Directive overrides routerLink attribute to allow external links. */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'a[routerLink]',\n standalone: false\n})\nexport class NggvExternalLinkDirective implements OnInit {\n /** If set to true, links will trigger a location change rather than an internal history push. */\n @Input() external = false\n\n /**\n * Creates a new ExternalLinkDirective\n * @param link extracted routerLink metadata\n */\n constructor(protected link: RouterLink) {}\n\n ngOnInit() {\n if (!this.external) return\n this.link.onClick = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n window.location.href = this.link['routerLink']?.toString() || ''\n return false\n }\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvExternalLinkDirective } from './external-link.directive'\n\n@NgModule({\n declarations: [NggvExternalLinkDirective],\n imports: [CommonModule],\n exports: [NggvExternalLinkDirective],\n})\nexport class NggvExternalLinkDirectiveModule {}\n","import { Inject, Injectable, isDevMode, NgModule } from '@angular/core'\nimport {\n HashMap,\n provideTransloco,\n provideTranslocoMissingHandler,\n TRANSLOCO_TRANSPILER,\n TranslocoLoader,\n TranslocoMissingHandler,\n TranslocoMissingHandlerData,\n TranslocoModule,\n TranslocoTranspiler,\n} from '@jsverse/transloco'\nimport { delay, lastValueFrom, of } from 'rxjs'\n\nimport defaultLang from './i18n.json'\n\n@Injectable()\nexport class NggvMissingHandler implements TranslocoMissingHandler {\n constructor(\n @Inject(TRANSLOCO_TRANSPILER) private transpiler: TranslocoTranspiler,\n ) {}\n handle(key: string, _: TranslocoMissingHandlerData, params: HashMap) {\n const keyWithoutLocale = key.charAt(2) === '.' ? key.substring(3) : key\n const withoutScope = keyWithoutLocale.replace(\n /^((?:\\w+)(?<!label|heading|button|alt|link|title|href|fieldhelp|error|text|image|list)(?:\\.))/,\n '',\n )\n const transpileParams = {\n value: defaultLang[keyWithoutLocale as keyof typeof defaultLang],\n params,\n translation: {},\n key: keyWithoutLocale,\n }\n const transpiledKey = this.transpiler.transpile(transpileParams)\n return transpiledKey || withoutScope\n }\n}\n\nconst en = {\n 'error.fieldinputmask': 'Invalid value pattern',\n 'error.fieldrequired': 'Field must have content',\n 'error.fieldmaxlength':\n 'Field content should not be longer than {{requiredLength}} characters',\n 'label.defaultlabel': 'Label',\n 'label.maxlength': 'characters left',\n 'label.optional': 'Optional',\n}\n\nconst sv = {\n 'error.fieldinputmask': 'Icke giltigt tecken mönster',\n 'error.fieldrequired': 'Fältet får inte lämnas tomt',\n 'error.fieldmaxlength':\n 'Fältinnehållet måste vara längre än {{requiredLength}} tecken',\n 'label.maxlength': 'tecken kvar',\n}\nclass TranslocoInlineLoader implements TranslocoLoader {\n getTranslation(lang: string) {\n if (lang === 'sv') {\n return lastValueFrom(of(sv).pipe(delay(1500)))\n }\n return lastValueFrom(of(en).pipe(delay(500)))\n }\n}\n\n@NgModule({\n providers: [\n provideTransloco({\n config: {\n availableLangs: ['en', 'sv'],\n defaultLang: 'en',\n // Remove this option if your application doesn't support changing language in runtime.\n reRenderOnLangChange: true,\n prodMode: !isDevMode(),\n },\n loader: TranslocoInlineLoader,\n }),\n provideTranslocoMissingHandler(NggvMissingHandler),\n ],\n exports: [TranslocoModule],\n})\nexport class NggvI18nModule {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule, Pipe, PipeTransform } from '@angular/core'\nimport {\n HashMap,\n Translation,\n TRANSLOCO_FALLBACK_STRATEGY,\n TRANSLOCO_INTERCEPTOR,\n TRANSLOCO_MISSING_HANDLER,\n TRANSLOCO_TRANSPILER,\n TranslocoConfig,\n TranslocoFallbackStrategy,\n TranslocoInterceptor,\n TranslocoMissingHandler,\n TranslocoTranspilerFunction,\n} from '@jsverse/transloco'\n\n@Pipe({\n name: 'transloco',\n standalone: false\n})\nexport class TranslocoMockPipe implements PipeTransform {\n transform = (value: number): number => value\n}\n\nexport class TranslocoMockTranspiler implements TranslocoTranspilerFunction {\n transpile = (..._args: string[]) => ''\n}\n\nexport class TranslocoMockMissingHandler implements TranslocoMissingHandler {\n handle = (key: string, _: TranslocoConfig, _params: HashMap) => key\n}\n\nexport class TranslocoMockStrategy implements TranslocoFallbackStrategy {\n getNextLangs = (_failedLang: string): any => ''\n}\n\nexport class TranslocoMockInterceptor implements TranslocoInterceptor {\n preSaveTranslation(translation: Translation, _lang: string): Translation {\n return translation\n }\n\n preSaveTranslationKey(_key: string, value: string, _lang: string): string {\n return value\n }\n}\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TranslocoMockPipe],\n exports: [TranslocoMockPipe],\n providers: [\n {\n provide: TRANSLOCO_TRANSPILER,\n useClass: TranslocoMockTranspiler,\n },\n {\n provide: TRANSLOCO_INTERCEPTOR,\n useClass: TranslocoMockInterceptor,\n },\n {\n provide: TRANSLOCO_FALLBACK_STRATEGY,\n useClass: TranslocoMockStrategy,\n },\n {\n provide: TRANSLOCO_MISSING_HANDLER,\n useClass: TranslocoMockMissingHandler,\n deps: [TRANSLOCO_TRANSPILER],\n },\n ],\n})\nexport class NggvI18nTestModule {}\n","import '@sebgroup/green-core/components/icon/icons/circle-info.js'\n\nimport { Component, HostBinding, Input } from '@angular/core'\n\n/**\n * A button that will present an explanation to a problem/question.\n * https://designlibrary.sebgroup.com/components/component-contextual-help-button\n */\n@Component({\n selector: 'nggv-info-circle',\n templateUrl: './info-circle.component.html',\n styleUrls: ['./info-circle.component.scss'],\n standalone: false\n})\nexport class NggvInfoCircleComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'info'\n\n /**\n * Text to display in tooltip when mouse hovers over icon.\n */\n @Input() info!: string\n\n // /** @internal */\n // infoCircle: IconDefinition = faInfoCircle\n}\n","<svg [nggvTooltip]=\"info\">\n <path\n d=\"M10.75 11H12L12 16.25M21.25 12C21.25 17.1086 17.1086 21.25 12 21.25C6.89137 21.25 2.75 17.1086 2.75 12C2.75 6.89137 6.89137 2.75 12 2.75C17.1086 2.75 21.25 6.89137 21.25 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n fill=\"none\"\n />\n <path\n d=\"M11.375 8C11.375 8.34518 11.6548 8.625 12 8.625C12.3452 8.625 12.625 8.34518 12.625 8C12.625 7.65482 12.3452 7.375 12 7.375C11.6548 7.375 11.375 7.65482 11.375 8Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n stroke-width=\"0.25\"\n />\n</svg>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvInfoCircleComponent } from './info-circle.component'\n\n@NgModule({\n declarations: [NggvInfoCircleComponent],\n imports: [CommonModule, NggCoreWrapperModule, NggvTooltipModule],\n exports: [NggvInfoCircleComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvInfoCircleModule {}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n} from '@angular/core'\nimport { NgControl, UntypedFormControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { Subject } from 'rxjs'\nimport { debounceTime, takeUntil } from 'rxjs/operators'\n\nimport type { InputmaskOptions } from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Input fields allow users to add and edit text.\n * https://designlibrary.sebgroup.com/components/component-input\n */\n@Component({\n selector: 'nggv-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: false\n})\nexport class NggvInputComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /**\n * Adding .gds-form-item as a class to host element\n */\n @HostBinding('class') class = 'gds-form-item'\n /**\n * Adding .gds-form-item--small class based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'input'\n /**\n * Type of input field. Should avoid types that modify field too much such as range.\n */\n @Input() type = 'text'\n /**\n * Text shown before input has a written value.\n */\n @Input() placeholder?: string\n /**\n * If set to \"on\", hint for form autofill feature.\n */\n @Input() autocomplete = 'on'\n /**\n * If set to true, the value will not be editable.\n */\n @Input() readonly = false\n /**\n * If set to true, enables the Angular template-driven email validator.\n */\n @Input() email = false\n /**\n * Minimum value required for numeric input types.\n */\n @Input() min = 0\n /**\n * Maximum value required for numeric input types.\n */\n @Input() max = Number.MAX_SAFE_INTEGER\n /**\n * Incremental values that are valid for numeric input types.\n */\n @Input() step = 1\n /**\n * Minimum length (number of characters) of value.\n */\n @Input() set minLength(length: number) {\n this._minlength = length\n }\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n }\n get minlength(): number {\n return this._minlength\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.writeValue(this.state)\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.writeValue(this.state)\n }\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Wether to show label that tells how many characters are still left to be entered. Will only be set if maxLength is also set */\n private _showCharacterCountDown = true\n @Input() set showCharacterCountdown(option: boolean) {\n this._showCharacterCountDown = option\n }\n get showCharacterCountdown(): boolean {\n return this._showCharacterCountDown && this.hasMaxLength\n }\n\n /** Pattern the value must match to be valid. */\n @Input() pattern = ''\n /** Amount of time to wait until emitting (nggvINput) event */\n @Input() debounceTime = 500\n\n /** Settings for input mask if requested */\n private _inputMask!: InputmaskOptions<any>\n @Input() set inputMask(newInputMask: InputmaskOptions<any>) {\n // Hide input field\n this.hideInput$.next(true)\n this.cdr.detectChanges()\n this._inputMask = newInputMask\n\n // Show input field to reload input-mask settings upon update\n setTimeout(() => {\n this.hideInput$.next(false)\n this.cdr.detectChanges()\n }, 200)\n }\n get inputMask(): InputmaskOptions<any> {\n return this._inputMask\n }\n\n /** Emits every time the value of the inner input field changes, independantly of updates on the formcontroller */\n @Output() nggvInput = new EventEmitter<any>()\n\n private _formControl = new UntypedFormControl()\n get control(): UntypedFormControl {\n return (this.ngControl?.control as UntypedFormControl) ?? this._formControl\n }\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n /** Toggler for showing or hiding the input field */\n hideInput$ = new Subject<boolean>()\n\n protected inputChange$ = new Subject<any>()\n protected _destroy$ = new Subject<boolean>()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n public element: ElementRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this.inputChange$\n .pipe(takeUntil(this._destroy$), debounceTime(this.debounceTime))\n .subscribe((inputValue) => {\n this.nggvInput.emit(inputValue)\n })\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n writeValue(value: any) {\n // maxLength will only work with string values\n if (\n value?.length &&\n value.length > this.maxlength &&\n this.control.touched\n ) {\n // cut value to match max length\n this.state = this.cutTextAfterMaxLength(value)\n if (value.length !== this.state.length) {\n this.onChange(this.state)\n }\n // emit value\n } else {\n // update state\n this.state = value\n }\n this.cdr.detectChanges()\n }\n\n cutTextAfterMaxLength(value: any): any {\n if (typeof value === 'string') {\n return value.substring(0, this.maxlength)\n }\n return value\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLInputElement).value\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div\n class=\"form-info description hide-if-empty\"\n *ngIf=\"description && descriptionIsVisible\"\n>\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-container *ngIf=\"!inputMask\">\n {{ state }}\n </ng-container>\n <ng-container *ngIf=\"!!inputMask\">\n {{ state | nggvInputMaskFormat: inputMask }}\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\" [class.nggv-field--error]=\"invalid\">\n <div class=\"input-group-prefix hide-if-empty\">\n <ng-content select=\"[slot='prefix']\"></ng-content>\n </div>\n\n <!-- INPUT FIELD -->\n <div class=\"input-group\" *ngIf=\"!inputMask\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [attr.aria-describedby]=\"id + '-message'\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n title=\"\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n\n <!-- INPUT FIELD WITH MASK -->\n <div\n class=\"input-group\"\n *ngIf=\"!!inputMask && (hideInput$ | async) === false\"\n >\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [attr.aria-describedby]=\"id + '-message'\"\n [nggvInputMask]=\"inputMask\"\n title=\"\"\n [formControl]=\"control\"\n />\n </div>\n\n <div class=\"input-group-suffix hide-if-empty\">\n <ng-content select=\"[slot='suffix']\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"!inputMask && hasMaxLength && showCharacterCountdown\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { NggvInputComponent } from './input.component'\n\n@NgModule({\n declarations: [NggvInputComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvInputMaskModule,\n ReactiveFormsModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvInputComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvInputModule {}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskStatic =\n (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n _Inputmask\n\n@Pipe({\n name: 'nggvInputMaskFormat',\n standalone: false\n})\nexport class InputMaskFormatPipe implements PipeTransform {\n transform<T = any>(value: any, options: InputmaskOptions<T>): any {\n if (!value) return value\n return InputmaskStatic.format(value, options)\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport class InputMaskConfig {\n isAsync = false\n inputSelector = 'input'\n}\n\nexport const INPUT_MASK_CONFIG = new InjectionToken<InputMaskConfig>(\n 'InputMaskConfig',\n)\n","import { isPlatformServer } from '@angular/common'\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n PLATFORM_ID,\n Renderer2,\n Self,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n} from '@angular/forms'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskConstructor =\n (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n _Inputmask\n\n@Directive({\n selector: '[nggvInputMask]',\n standalone: false\n})\nexport class NggvInputMaskDirective<T = any>\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n /** Input settings of directive */\n @Input() nggvInputMask: InputmaskOptions<T> = {}\n\n inputMaskPlugin: Inputmask.Instance | undefined\n nativeInputElement: HTMLInputElement | undefined\n defaultInputMaskConfig = new InputMaskConfig()\n\n private mutationObserver: MutationObserver | undefined\n\n constructor(\n @Optional() @Self() public ngControl: NgControl,\n @Inject(INPUT_MASK_CONFIG) config: InputMaskConfig,\n @Inject(PLATFORM_ID) private platformId: string,\n private elementRef: ElementRef<HTMLInputElement | any>,\n private renderer: Renderer2,\n private ngZone: NgZone,\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this\n }\n this.setNativeInputElement(config)\n }\n\n @HostListener('input', ['$event.target.value'])\n onInput = (_: any) => {\n // Empty method\n }\n\n @HostListener('blur', ['$event.target.value'])\n onTouched = (_: any) => {\n // Empty method\n }\n\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n // Trigger \"onInput\" when pressing delete or backspace, when input is focused\n if (['Delete', 'Backspace'].includes(event.key)) {\n this.elementRef.nativeElement.dispatchEvent(\n new Event('input', {\n bubbles: true,\n cancelable: true,\n }),\n )\n }\n }\n\n ngOnInit() {\n if (this.control) {\n this.control.setValidators(\n this.control.validator\n ? [this.control.validator, this.validate]\n : [this.validate],\n )\n\n this.control.updateValueAndValidity()\n }\n }\n\n ngOnDestroy(): void {\n this.inputMaskPlugin?.remove()\n this.mutationObserver?.disconnect()\n }\n\n initInputMask() {\n if (\n isPlatformServer(this.platformId) ||\n !this.nativeInputElement ||\n !Object.keys(this.nggvInputMask ?? {}).length\n ) {\n return\n }\n\n this.inputMaskPlugin = this.ngZone.runOutsideAngular(() =>\n new InputmaskConstructor(this.inputMaskOptions).mask(\n this.nativeInputElement as HTMLInputElement,\n ),\n )\n\n if (this.control) {\n setTimeout(() => {\n this.control!.updateValueAndValidity()\n })\n }\n }\n\n ngAfterViewInit() {\n this.initInputMask()\n }\n\n get inputMaskOptions(): Inputmask.Options {\n const { parser, ...options } = this.nggvInputMask\n return options\n }\n\n writeValue(value: string): void {\n if (this.nativeInputElement) {\n this.renderer.setProperty(this.nativeInputElement, 'value', value ?? '')\n }\n }\n\n registerOnChange(fn: (_: T | null) => void): void {\n // Use injected parser from settings to modify value\n // of users desire\n this.onInput = (value) => {\n const parser = this.nggvInputMask?.parser\n const newValue = parser && value ? parser(value) : value\n fn(newValue)\n }\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n validate = (control: AbstractControl): { [key: string]: any } | null =>\n !control.value || !this.inputMaskPlugin || this.inputMaskPlugin.isValid()\n ? null\n : { invalidformat: true }\n\n setDisabledState(disabled: boolean): void {\n if (this.nativeInputElement) {\n this.renderer.setProperty(this.nativeInputElement, 'disabled', disabled)\n }\n }\n\n private get control(): AbstractControl | null | undefined {\n return this.ngControl?.control\n }\n\n private setNativeInputElement(config: InputMaskConfig) {\n if (this.elementRef.nativeElement.tagName === 'INPUT') {\n this.nativeInputElement = this.elementRef.nativeElement\n } else {\n this.defaultInputMaskConfig = {\n ...this.defaultInputMaskConfig,\n ...config,\n }\n if (this.defaultInputMaskConfig.isAsync) {\n // Create an observer instance linked to the callback function\n this.mutationObserver = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n const nativeInputElement =\n this.elementRef.nativeElement.querySelector(\n this.defaultInputMaskConfig.inputSelector,\n )\n if (nativeInputElement) {\n this.nativeInputElement = nativeInputElement\n this.mutationObserver?.disconnect()\n this.initInputMask()\n }\n }\n }\n })\n\n // Start observing the target node for configured mutations\n this.mutationObserver.observe(this.elementRef.nativeElement, {\n childList: true,\n subtree: true,\n })\n } else {\n this.nativeInputElement = this.elementRef.nativeElement.querySelector(\n this.defaultInputMaskConfig.inputSelector,\n )\n }\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\nimport { InputMaskFormatPipe } from './input-mask-format.pipe'\nimport { NggvInputMaskDirective } from './input-mask.directive'\n\n@NgModule({\n declarations: [NggvInputMaskDirective, InputMaskFormatPipe],\n exports: [NggvInputMaskDirective, InputMaskFormatPipe],\n providers: [\n {\n provide: INPUT_MASK_CONFIG,\n useClass: InputMaskConfig,\n },\n ],\n})\nexport class NggvInputMaskModule {\n static forRoot(\n config?: Partial<InputMaskConfig>,\n ): ModuleWithProviders<NggvInputMaskModule> {\n return {\n ngModule: NggvInputMaskModule,\n providers: [{ provide: INPUT_MASK_CONFIG, useValue: config }],\n }\n }\n}\n","import { InputmaskOptions } from './input-mask.types'\n\nexport const createMask = <T>(\n options: string | InputmaskOptions<T>,\n): InputmaskOptions<T> =>\n typeof options === 'string' ? { mask: options } : options\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n nggv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.nggv) {\n window.nggv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import {\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core'\n\nimport { DialogButtons } from '../modal.types'\n\nexport interface DialogEvent<T = any> {\n original: Event | undefined\n payload: T | undefined\n}\n\n@Component({\n selector: 'nggv-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss'],\n exportAs: 'dialog',\n standalone: false\n})\nexport class NggvDialogComponent implements OnInit, OnDestroy {\n private configurableFocusTrap: ConfigurableFocusTrap\n\n @ViewChild('dialog') dialogRef: ElementRef | undefined\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dialog'\n /** @internal */\n @HostBinding('class.gds-modal-dialog') baseClass = true\n /** @internal Defines the default visibility state of the dialog. */\n private _shown = false\n @Input() set shown(value: boolean) {\n this._shown = value\n this.enableFocusTrap()\n if (value) {\n this.hideOverflow()\n } else {\n this.resetOverflow()\n }\n }\n get shown() {\n return this._shown\n }\n\n /** @internal */\n @HostBinding('attr.aria-hidden') get ariaHidden() {\n return !this.shown\n }\n /** Defines the default visibility state of the dialog. */\n @Input() initiallyShown = false\n /** Sets modal heading. Will be translated (using transloco) if the string matches a cms key. */\n @Input() heading!: string\n /**\n * Sets modal title. Will be translated (using transloco) if the string matches a cms key.\n * @deprecated - use heading instead.\n */\n @Input() title = 'Attention'\n /** Sets content body and can contain html code. The content body can also be set by nesting children to the dialog tag. */\n @Input() content?: string\n /** Defines if dialog should close on action. */\n @Input() autoClose = true\n /** An array of event payloads that will be added to every click context menu item click. */\n @Input() payload: any = {}\n\n @Input() dialogTitleId!: string\n /** Pass the null if you don't want dialog body to be announced by the screen reader */\n @Input() dialogBodyId!: string | null\n /** It gives an ability for parent component to control if modal should be closed on esc button click. */\n @Input() closeModalOnEscape = true\n /** Aria label for the Close button with \"X\" icon, in the header */\n @Input() closeButtonAriaLabel?: string\n\n _buttons: DialogButtons | undefined\n /** Buttons are defined as a key-value pair where key is one of \"positive|neutral|negative\" and value is the button label. */\n @Input() set buttons(buttons: DialogButtons) {\n this._buttons = buttons\n }\n // /** @internal */\n // closeIcon = faTimes\n\n @Output() nggvCloseEvent = new EventEmitter<DialogEvent>()\n @Output() nggvPositiveEvent = new EventEmitter<DialogEvent>()\n @Output() nggvNeutralEvent = new EventEmitter<DialogEvent>()\n @Output() nggvNegativeEvent = new EventEmitter<DialogEvent>()\n @Output() nggvDangerEvent = new EventEmitter<DialogEvent>()\n\n protected _previous: HTMLElement | undefined\n protected _firstFocusable: HTMLElement | undefined\n protected _lastFocusable: HTMLElement | undefined\n\n constructor(\n private renderer: Renderer2,\n private ref: ElementRef<HTMLElement>,\n private configurableFocusTrapFactory: ConfigurableFocusTrapFactory,\n ) {\n this.configurableFocusTrap = this.configurableFocusTrapFactory.create(\n this.ref.nativeElement,\n )\n }\n\n ngOnInit() {\n this.dialogTitleId =\n this.dialogTitleId ?? 'gds-dialog-title-' + window.nggv?.nextId()\n if (this.dialogBodyId !== null) {\n this.dialogBodyId =\n this.dialogBodyId ?? 'gds-dialog-body-' + window.nggv?.nextId()\n }\n\n this._shown = this.initiallyShown\n if (this.shown) this._limitFocusable()\n }\n\n public onAction(event: Event, action: string) {\n event.preventDefault()\n const emitEvent = {\n original: event,\n payload: this.payload,\n }\n switch (action) {\n case 'positive':\n this.nggvPositiveEvent.emit(emitEvent)\n break\n case 'neutral':\n this.nggvNeutralEvent.emit(emitEvent)\n break\n case 'negative':\n this.nggvNegativeEvent.emit(emitEvent)\n break\n case 'danger':\n this.nggvDangerEvent.emit(emitEvent)\n break\n // case 'close' is handled by if-statement below with call to this.close()\n }\n if (this.autoClose) this.close(event, 'action')\n }\n\n open(opener?: HTMLElement) {\n this._shown = true\n this._previous = opener || (document.activeElement as HTMLElement)\n\n this.enableFocusTrap()\n this.hideOverflow()\n this._limitFocusable()\n return true\n }\n\n protected _limitFocusable() {\n window.setTimeout(() => {\n if (!this.dialogRef) return\n const focusable = this.dialogRef.nativeElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n this._firstFocusable = focusable[0]\n this._lastFocusable = focusable[focusable.length - 1]\n if (this._firstFocusable) this._firstFocusable.focus()\n })\n }\n\n @HostListener('click', ['$event', '\"host\"'])\n @HostListener('document:keydown.escape', ['$event'])\n close(event?: Event, initiator?: string) {\n if (initiator === 'host' && event instanceof MouseEvent) return\n // prevent modal from closing on esc button click when closeModalOnEscape is set to false\n if (!this.closeModalOnEscape) return\n if (this.shown) {\n const emitEvent = {\n original: event,\n payload: this.payload,\n }\n this.nggvCloseEvent.emit(emitEvent)\n }\n\n this.resetOverflow()\n this.disableFocusTrap()\n\n this._shown = false\n window.setTimeout(() => {\n if (this._previous) this._previous.focus()\n this._previous = undefined\n })\n }\n\n @HostListener('keydown', ['$event'])\n focusTrap(event: KeyboardEvent) {\n if (event.key !== 'Tab') return\n if (event.shiftKey) {\n // shift + tab\n if (\n this._lastFocusable &&\n document.activeElement === this._firstFocusable\n ) {\n this._lastFocusable.focus()\n event.preventDefault()\n }\n } else {\n // tab\n if (\n this._firstFocusable &&\n document.activeElement === this._lastFocusable\n ) {\n this._firstFocusable.focus()\n event.preventDefault()\n }\n }\n }\n\n // to prevent background scrolling when modal is open\n private hideOverflow(): void {\n this.renderer.setStyle(document.body, 'overflow', 'hidden')\n }\n\n private resetOverflow(): void {\n this.renderer.removeStyle(document.body, 'overflow')\n }\n\n private enableFocusTrap() {\n if (this.configurableFocusTrap) {\n this.configurableFocusTrap.enabled = true\n this.configurableFocusTrap.focusInitialElementWhenReady()\n }\n }\n\n private disableFocusTrap() {\n if (this.configurableFocusTrap) {\n this.configurableFocusTrap.enabled = false\n }\n }\n\n ngOnDestroy(): void {\n this.configurableFocusTrap?.destroy()\n }\n}\n","<ng-container *ngIf=\"shown\">\n <div class=\"modal-dialog__wrapper\" [class.-active]=\"shown\">\n <div\n class=\"modal-dialog__container\"\n *transloco=\"let t\"\n #dialog\n role=\"dialog\"\n aria-dialog=\"true\"\n [attr.aria-labelledby]=\"dialogTitleId\"\n [attr.aria-describedby]=\"dialogBodyId\"\n >\n <header class=\"modal-dialog__heading\">\n <h3 [attr.id]=\"dialogTitleId\">{{ t(heading || title || '') }}</h3>\n <button\n data-thook=\"dialog-close\"\n (click)=\"onAction($event, 'close')\"\n (keydown.enter)=\"onAction($event, 'close')\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n class=\"nggv-modal-slideout__close\"\n >\n <i></i>\n </button>\n </header>\n <section class=\"modal-dialog__body\" [attr.id]=\"dialogBodyId\">\n <div [innerHtml]=\"content\"></div>\n <ng-content></ng-content>\n </section>\n <footer class=\"modal-dialog__actions\">\n <button\n class=\"danger-confirm\"\n type=\"reset\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.negative || 'negative')\"\n (click)=\"onAction($event, 'negative')\"\n (keydown.enter)=\"onAction($event, 'negative')\"\n *ngIf=\"_buttons && _buttons.negative\"\n >\n {{ t(_buttons.negative) }}\n </button>\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.neutral || 'neutral')\"\n (click)=\"onAction($event, 'neutral')\"\n (keydown.enter)=\"onAction($event, 'neutral')\"\n *ngIf=\"_buttons && _buttons.neutral\"\n >\n {{ t(_buttons.neutral) }}\n </button>\n <button\n class=\"danger\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.danger || 'danger')\"\n (click)=\"onAction($event, 'danger')\"\n (keydown.enter)=\"onAction($event, 'danger')\"\n *ngIf=\"_buttons && _buttons.danger\"\n >\n {{ t(_buttons.danger) }}\n </button>\n <button\n class=\"submit\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.positive || 'positive')\"\n (click)=\"onAction($event, 'positive')\"\n (keydown.enter)=\"onAction($event, 'positive')\"\n *ngIf=\"_buttons && _buttons.positive\"\n >\n {{ t(_buttons.positive) }}\n </button>\n </footer>\n </div>\n <div class=\"nggv-backdrop\"></div>\n </div>\n</ng-container>\n","export enum KeyboardKey {\n Escape = 'Escape',\n Space = 'Space',\n Enter = 'Enter',\n ArrowUp = 'ArrowUp',\n ArrowDown = 'ArrowDown',\n Tab = 'Tab',\n}\n","import '@sebgroup/green-core/components/icon/icons/dot-grid-one-horizontal.js'\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { fromEvent, Subscription } from 'rxjs'\nimport { filter, takeWhile } from 'rxjs/operators'\n\nimport { KeyboardKey } from './keyboard-key.enum'\n\n@Component({\n selector: 'nggv-fold-out',\n templateUrl: './fold-out.component.html',\n styleUrls: ['./fold-out.component.scss'],\n standalone: false\n})\nexport class NggvFoldOutComponent implements OnDestroy, AfterViewInit {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'fold-out'\n\n @ViewChild('foldout', { read: ElementRef }) inputRef?: ElementRef\n @ViewChild('childrenContainer') container?: ElementRef\n\n /** Aligns the dropdown list with the buttons right or left side */\n @Input() alignOptions!: 'left' | 'right'\n /** Option to show text with action button */\n @Input() text?: string\n /** Aria label for the fold-out button */\n @Input() ariaLabel?: string\n /** Sets the width property of the list. Default = fit-content */\n @Input() listWidth: 'fit-content' | 'max-content' | 'min-content' | 'auto' =\n 'fit-content'\n /** Emits when the children container collapses, for components with change detection strategy \"OnPush\" */\n @Output() actionEmitter = new EventEmitter<void>()\n\n /** @internal */\n protected shown = false\n\n private activeIndex = -1\n private firstArrowClick = true\n private ariaFocusAttributeName = 'aria-focus'\n private blurAllElements = (): void => this.children.forEach(this.blurElement)\n private blurElement = (element: HTMLElement): void =>\n element.setAttribute(this.ariaFocusAttributeName, 'false')\n private focusElement = (element: HTMLElement): void =>\n element.setAttribute(this.ariaFocusAttributeName, 'true')\n private getChildIndex = (element: HTMLElement | undefined): number =>\n element ? this.children.indexOf(element) : -1\n\n private onClickSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n\n private get children() {\n return Array.from(\n (this.container?.nativeElement as HTMLElement).children ?? [],\n ) as HTMLElement[]\n }\n\n private get lastChild(): HTMLElement | undefined {\n return this.children[this.children.length - 1] || undefined\n }\n\n private get focusedElement(): HTMLElement | undefined {\n return this.children[this.activeIndex] || undefined\n }\n\n ngAfterViewInit(): void {\n this.blurAllElements()\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n }\n\n /** Toggle display of the option list */\n toggleVisibility(): void {\n this.setVisibility(!this.shown)\n }\n\n setVisibility(setVisibility = true): void {\n if (this.shown === setVisibility) {\n return\n }\n\n this.resetChildren()\n this.shown = setVisibility\n\n if (this.shown) {\n this.subscribeToOutsideClickEvent()\n this.subscribeToKeyDownEvent()\n } else {\n this.onClickSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n this.actionEmitter.emit()\n }\n }\n\n /**\n * Closes the fold-out on click outside.\n */\n private subscribeToOutsideClickEvent(): void {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeWhile(() => this.shown))\n .subscribe({\n next: (event: Event) => {\n if (\n this.shown &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setVisibility(false)\n }\n },\n })\n }\n\n private subscribeToKeyDownEvent(): void {\n if (!this.children.length) {\n return\n }\n\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeWhile(() => this.shown),\n filter((event) =>\n Object.values(KeyboardKey).includes(event.code as KeyboardKey),\n ),\n )\n .subscribe((event) => {\n event.preventDefault()\n event.stopPropagation()\n this.onKeyDown(event)\n })\n }\n\n private onKeyDown(event: KeyboardEvent): void {\n switch (event.code) {\n case KeyboardKey.Escape:\n case KeyboardKey.Tab:\n this.setVisibility(false)\n break\n case KeyboardKey.Enter:\n case KeyboardKey.Space:\n this.takeAction()\n break\n case KeyboardKey.ArrowUp:\n this.handleArrowUpClick()\n break\n case KeyboardKey.ArrowDown:\n this.handleArrowDownClick()\n break\n }\n }\n\n private handleArrowUpClick(): void {\n this.activeIndex = this.firstArrowClick\n ? this.getChildIndex(this.lastChild)\n : this.activeIndex === 0\n ? this.getChildIndex(this.lastChild)\n : this.activeIndex - 1\n\n this.firstArrowClick = false\n this.handleFocus()\n }\n\n private handleArrowDownClick(): void {\n this.activeIndex = this.firstArrowClick\n ? 0\n : (this.activeIndex + 1) % this.children.length\n this.firstArrowClick = false\n this.handleFocus()\n }\n\n private handleFocus(): void {\n this.blurAllElements()\n this.focusElement(this.children[this.activeIndex])\n }\n\n private takeAction(): void {\n if (this.focusedElement) {\n this.focusedElement.click()\n }\n\n this.setVisibility(false)\n }\n\n private resetChildren(): void {\n this.blurAllElements()\n this.activeIndex = -1\n this.firstArrowClick = true\n }\n}\n","<div #foldout>\n <button\n data-thook=\"fold-out-toggle\"\n class=\"fold-out-button\"\n [ngClass]=\"{ 'no-text': !text }\"\n (click)=\"toggleVisibility()\"\n [attr.aria-expanded]=\"shown\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <ng-container *ngTemplateOutlet=\"text ? withText : default\"> </ng-container>\n </button>\n <div\n #childrenContainer\n class=\"nggv-fold-out__popover\"\n [ngClass]=\"{\n 'flex-right': alignOptions === 'right',\n 'list-width-fit-content': listWidth === 'fit-content',\n 'list-width-max-content': listWidth === 'max-content',\n 'list-width-min-content': listWidth === 'min-content',\n 'list-width-auto': listWidth === 'auto',\n }\"\n [class.nggv-fold-out__popover-expanded]=\"shown\"\n (click)=\"toggleVisibility()\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n\n<ng-template #withText>\n {{ text }}\n <gds-icon-dot-grid-one-horizontal\n width=\"24\"\n height=\"24\"\n *nggCoreElement\n ></gds-icon-dot-grid-one-horizontal>\n</ng-template>\n\n<ng-template #default>\n <gds-icon-dot-grid-one-horizontal\n width=\"24\"\n height=\"24\"\n *nggCoreElement\n ></gds-icon-dot-grid-one-horizontal>\n <ng-template></ng-template\n></ng-template>\n","import { Directive, HostBinding } from '@angular/core'\n\n@Directive({\n selector: '[nggvOption]',\n standalone: false\n})\nexport class NggvFoldOutOptionDirective {\n @HostBinding('class.nggv-field-dropdown__options__label') baseClass = true\n}\n","import {\n animate,\n group,\n query,\n style,\n transition,\n trigger,\n} from '@angular/animations'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core'\n\nimport { DialogButtons } from '../modal.types'\n\n/** Modal slide-out component based on vanilla pattern library design.\n * The modal title can be set using the @Input heading, and will automatically be translated if\n * the string matches a cms key.\n * Content can be injected into the body of the slide-out by either setting the @Input content to any type of\n * markdown, or using content projection (adding content between the `nggv-slideout-modal`-start and end tag).\n * If the content needs to stretch outside the normal padded area, add the attribute `slot=\"outside-content\"` to the\n * projected content main element.\n * Test hooks:\n * The modal hook defaults to 'slideout' but is customizeable.\n * The closing button can be selected using 'slideout-close'.\n * The backdrop is selectable using 'slideout-backdrop'.\n */\n@Component({\n selector: 'nggv-slideout-modal',\n templateUrl: './slide-out.component.html',\n styleUrls: ['./slide-out.component.scss'],\n animations: [\n trigger('modalAnimation', [\n transition(':enter', [\n query('.gds-slide-out', style({ transform: 'translateX(100%)' }), {\n optional: true,\n }),\n query('.gds-backdrop, [role=dialog]', style({ opacity: '0' }), {\n optional: true,\n }),\n group([\n query('.gds-slide-out', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),\n query('.gds-backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),\n ]),\n ]),\n transition(':leave', [\n query('.gds-slide-out', style({ transform: 'translateX(0)' }), {\n optional: true,\n }),\n group([\n query('.gds-slide-out', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),\n query('.gds-backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),\n ]),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class NggvSlideOutComponent implements OnInit {\n /** @internal */\n @ViewChild('slideOut') slideOutRef: ElementRef | undefined\n\n /** Sets from which side the modal should open. */\n @Input() side: 'left' | 'right' = 'right'\n /** Defines the default visibility state of the slide-out. */\n private _shown = false\n @Input() set shown(value: boolean) {\n this._shown = value\n if (value) {\n this.hideOverflow()\n } else {\n this.resetOverflow()\n }\n }\n get shown() {\n return this._shown\n }\n /** Defines the default visibility state of the modal. */\n @Input() initiallyShown = false\n /** Sets modal heading. Will be translated (using transloco) if the string matches a cms key. */\n @Input() heading!: string\n /**\n * Sets modal title. Will be translated (using transloco) if the string matches a cms key.\n * @deprecated - use @Input() heading instead.\n */\n @Input() title!: string\n /** Sets content body of the modal and can contain html code. The content body can also be set by nesting children to the modal tag. */\n @Input() content?: string\n /** Sets whether it is possible to close the modal from the top right corner. */\n @Input() closable = true\n /** Allows the modal content to decide the width of the modal. */\n @Input() autoWidth = false\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'slideout'\n\n /** Aria label for the Close button with \"X\" icon, in the header */\n @Input() closeButtonAriaLabel?: string\n\n /** @internal */\n get fromLeft(): boolean {\n return this.side === 'left'\n }\n\n // /** @internal */\n // closeIcon = faTimes;\n\n _buttons: DialogButtons | undefined\n /** Buttons are defined as a key-value pair where key is one of \"positive|neutral|negative\" and value is the button label. */\n @Input() set buttons(buttons: DialogButtons) {\n this._buttons = buttons\n }\n\n /** Will emit true on closing event. */\n @Output() nggvCloseEvent = new EventEmitter<boolean>()\n @Output() nggvPositiveEvent = new EventEmitter<void>()\n @Output() nggvNeutralEvent = new EventEmitter<void>()\n @Output() nggvNegativeEvent = new EventEmitter<void>()\n\n private previous: HTMLElement | undefined\n private firstFocusable: HTMLElement | undefined\n private lastFocusable: HTMLElement | undefined\n\n constructor(\n private host: ElementRef,\n private renderer: Renderer2,\n ) {\n // appends methods for opening and closing modal to native element\n this.host.nativeElement.open = this.open.bind(this)\n this.host.nativeElement.close = this.close.bind(this)\n }\n\n ngOnInit() {\n this._shown = this.initiallyShown\n if (this.shown) this.limitFocusable()\n }\n\n public onAction(event: Event, action: string) {\n event.preventDefault()\n switch (action) {\n case 'positive':\n this.nggvPositiveEvent.emit()\n break\n case 'neutral':\n this.nggvNeutralEvent.emit()\n break\n case 'negative':\n this.nggvNegativeEvent.emit()\n break\n }\n this.close(event, 'action')\n }\n\n /**\n * Called on a modal element. Opens the modal and sets focus to the last focusable element in the modal.\n *\n * @param opener - reference to last focused element before opening modal\n * @returns - true\n */\n open(opener?: HTMLElement): boolean {\n this._shown = true\n this.previous = opener || (document.activeElement as HTMLElement)\n this.hideOverflow()\n this.limitFocusable()\n return true\n }\n\n /**\n * Called on a modal element. Closes the modal and emits a `nggvCloseEvent`. Sets focus to the lats focused element if an element was sent in to open function.\n *\n * @param event\n * @param initiator\n */\n @HostListener('click', ['$event', '\"host\"'])\n @HostListener('document:keydown.escape', ['$event'])\n close(event?: Event, initiator?: string): void {\n if (\n initiator === 'host' &&\n event instanceof MouseEvent &&\n event.target !== event.currentTarget\n )\n return\n\n this.resetOverflow()\n\n if (this.shown && this.closable) {\n this.nggvCloseEvent.emit(this.shown)\n this.shown = false\n window.setTimeout(() => {\n if (this.previous) this.previous.focus()\n this.previous = undefined\n })\n }\n }\n\n /** @internal */\n @HostListener('keydown', ['$event'])\n focusTrap(event: KeyboardEvent) {\n if (event.key !== 'Tab') return\n if (event.shiftKey) {\n // shift + tab\n if (\n this.lastFocusable &&\n document.activeElement === this.firstFocusable\n ) {\n this.lastFocusable.focus()\n event.preventDefault()\n }\n } else {\n // tab\n if (\n this.firstFocusable &&\n document.activeElement === this.lastFocusable\n ) {\n this.firstFocusable.focus()\n event.preventDefault()\n }\n }\n }\n\n private limitFocusable() {\n window.setTimeout(() => {\n if (!this.slideOutRef) return\n const focusable = this.slideOutRef.nativeElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n this.firstFocusable = focusable[0]\n this.lastFocusable = focusable[focusable.length - 1]\n if (this.firstFocusable) this.firstFocusable.focus()\n })\n }\n\n private hideOverflow(): void {\n this.renderer.setStyle(document.body, 'overflow', 'hidden')\n }\n\n private resetOverflow(): void {\n this.renderer.removeStyle(document.body, 'overflow')\n }\n}\n","<ng-container *ngIf=\"shown\">\n <div\n [ngClass]=\"{\n 'gds-slide-out--left': fromLeft,\n 'gds-slide-out--right': !fromLeft,\n }\"\n *transloco=\"let t\"\n [class.-active]=\"shown\"\n [attr.data-thook]=\"thook\"\n [attr.aria-hidden]=\"!shown\"\n [@modalAnimation]\n >\n <div\n #slideOut\n class=\"gds-slide-out\"\n [class.auto-width]=\"autoWidth\"\n [class.entered]=\"shown\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"gds-modal-title\"\n aria-describedby=\"gds-modal-body\"\n >\n <header class=\"gds-slide-out__header\">\n <h3 id=\"gds-modal-title\">\n {{ heading || title || '' }}\n </h3>\n <button\n data-testid=\"modal-close-button\"\n class=\"nggv-modal-slideout__close\"\n (click)=\"this.close()\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <i></i>\n </button>\n </header>\n\n <section id=\"modal-body\">\n <div class=\"gds-slide-out__content hide-if-empty\">\n <div *ngIf=\"content\" [innerHtml]=\"content\"></div>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"[slot='outside-content']\"></ng-content>\n </section>\n\n <footer class=\"modal-dialog__actions\">\n <button\n class=\"danger\"\n type=\"reset\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.negative || 'negative')\"\n (click)=\"onAction($event, 'negative')\"\n (keydown.enter)=\"onAction($event, 'negative')\"\n *ngIf=\"_buttons && _buttons.negative\"\n >\n {{ t(_buttons.negative) }}\n </button>\n\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.neutral || 'neutral')\"\n (click)=\"onAction($event, 'neutral')\"\n (keydown.enter)=\"onAction($event, 'neutral')\"\n *ngIf=\"_buttons && _buttons.neutral\"\n >\n {{ t(_buttons.neutral) }}\n </button>\n\n <button\n class=\"primary\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.positive || 'positive')\"\n (click)=\"onAction($event, 'positive')\"\n (keydown.enter)=\"onAction($event, 'positive')\"\n *ngIf=\"_buttons && _buttons.positive\"\n >\n {{ t(_buttons.positive) }}\n </button>\n </footer>\n </div>\n\n <div\n class=\"nggv-backdrop\"\n data-thook=\"slideout-backdrop\"\n (click)=\"close()\"\n ></div>\n </div>\n</ng-container>\n","import './modal.globals'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvButtonModule } from '@sebgroup/green-angular/src/v-angular/button'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvDialogComponent } from './dialog/dialog.component'\nimport { NggvFoldOutComponent } from './fold-out/fold-out.component'\nimport { NggvFoldOutOptionDirective } from './fold-out/fold-out.directive'\nimport { NggvSlideOutComponent } from './slide-out/slide-out.component'\n\n@NgModule({\n imports: [\n CommonModule,\n NggvButtonModule,\n NggvI18nModule,\n NggCoreWrapperModule,\n ],\n declarations: [\n NggvDialogComponent,\n NggvSlideOutComponent,\n NggvFoldOutComponent,\n NggvFoldOutOptionDirective,\n ],\n exports: [\n NggvDialogComponent,\n NggvSlideOutComponent,\n NggvFoldOutComponent,\n NggvFoldOutOptionDirective,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvModalModule {}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core'\n\nimport '@sebgroup/green-core/components/icon/icons/chevron-left.js'\nimport '@sebgroup/green-core/components/icon/icons/chevron-right.js'\nimport '@sebgroup/green-core/components/icon/icons/arrow-left.js'\n\n/** The Pagination component is used to separate long sets of data so that it is easier for a user to consume information. To change the current page simply click on the page number. */\n@Component({\n selector: 'nggv-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss'],\n standalone: false\n})\nexport class PaginationComponent implements OnChanges {\n /** Total size of pagination */\n @Input() size = 0\n /** Selected page */\n @Input() value = 1\n /** First page text */\n @Input() firstText?: string\n /** Last page text */\n @Input() lastText?: string\n /** Next page text */\n @Input() nextText?: string\n /** Offset per page */\n @Input() offset?: number\n /** Number of pages to display*/\n @Input() pagingLength?: number\n /** Previous page text */\n @Input() previousText?: string\n /** Use first and last navigation buttons*/\n @Input() useFirstAndLast?: boolean = true\n /** Use text-based navigation buttons*/\n @Input() useTextNav?: boolean\n /** Use dot-navigation */\n @Input() useDotNav?: boolean\n /** Use 'Go to page' input field */\n @Input() showGoToPage = true\n /** Element class name */\n @Input() className = ''\n /** Element ID */\n @Input() id?: string\n /** Callback on page change */\n @Output() pageNumberChange: EventEmitter<number> = new EventEmitter<number>()\n\n /** @internal */\n pageNumber = 0\n /** @internal */\n list: Array<number> = []\n /** @internal */\n dotnavList: Array<number> = []\n /** @internal */\n pagingSize = 0\n /** @internal */\n showEllipsisStart = false\n /** @internal */\n showEllipsisEnd = false\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.offset || changes?.size) {\n this.setPagingSize()\n }\n\n if (changes?.pagingLength || changes?.value) {\n this.generateList()\n }\n }\n\n /** @internal */\n setPagingSize() {\n const initialOffset: number = this.offset ? this.offset : 10\n this.pagingSize = Math.ceil(Number(this.size) / initialOffset)\n this.generateList()\n }\n\n /** @internal */\n handleOnChange(value: number): void {\n if (value <= 0) {\n this.pageNumberChange.emit(1)\n } else if (value > this.pagingSize) {\n this.pageNumberChange.emit(this.pagingSize)\n } else {\n this.pageNumberChange.emit(value)\n }\n }\n\n /** @internal */\n handlePageInput(pageInput: string) {\n this.handleOnChange(Number(pageInput))\n }\n\n /**\n * Generates an array of the pages that needs to be displayed\n * It depends on the size, offset, and the current value\n */\n private generateList(): void {\n const genList: Array<number> = []\n const length: number = this.pagingLength ? this.pagingLength : 5\n\n for (let i = 1; i <= this.pagingSize; i++) {\n genList.push(i)\n }\n\n const medianValue: number = Math.ceil(length / 2)\n let start = 0\n let end = this.pagingSize\n\n if (length < this.pagingSize) {\n if (this.pagingSize - this.value < medianValue) {\n start = this.pagingSize - length\n } else if (this.value - medianValue > -1) {\n start = this.value - medianValue\n }\n end = start + length\n }\n if (this.useFirstAndLast) {\n if (start == 0) {\n start = 1\n end = start + length\n }\n\n if (end > this.pagingSize - 1) {\n end = this.pagingSize - 1\n start = Math.max(1, end - length)\n }\n }\n\n this.dotnavList = genList\n const pagingStart = genList[start]\n const pagingEnd = genList[end - 1]\n this.showEllipsisStart = pagingStart > 2\n this.showEllipsisEnd = pagingEnd < this.pagingSize - 1\n this.list = genList.slice(start, end)\n }\n}\n","<div class=\"pagination-wrapper\" [ngClass]=\"className\" [attr.id]=\"id\">\n <nav class=\"custom-pagination\">\n <ng-container *ngIf=\"useDotNav; else numNav\">\n <ul class=\"pagination dotnav\">\n <ng-container *ngFor=\"let num of dotnavList\">\n <li class=\"page-item\" (click)=\"handleOnChange(num)\" [value]=\"num\">\n <span\n class=\"page-dot-link\"\n [ngClass]=\"{ active: value === num }\"\n ></span>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n\n <ng-template #numNav>\n <ul class=\"pagination\">\n <ng-container>\n <li class=\"page-item\" (click)=\"handleOnChange(value - 1)\">\n <button\n class=\"page-link\"\n [attr.title]=\"previousText\"\n [attr.disabled]=\"value === 1 ? 'disabled' : null\"\n >\n <span class=\"nav-action\">\n <ng-container *ngIf=\"useTextNav; else angleLeftIcon\">\n {{ previousText ? previousText : 'Previous' }}\n </ng-container>\n <ng-template #angleLeftIcon>\n <gds-icon-chevron-left\n *nggCoreElement\n ></gds-icon-chevron-left>\n </ng-template>\n </span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"useFirstAndLast\">\n <li class=\"page-item\" (click)=\"handleOnChange(1)\">\n <button\n class=\"page-link\"\n [ngClass]=\"{ active: value === 1 }\"\n [attr.title]=\"firstText\"\n >\n <span class=\"nav-num\">{{ 1 }}</span>\n </button>\n </li>\n\n <li class=\"page-item\" *ngIf=\"showEllipsisStart\">\n <span class=\"page-link\" [attr.title]=\"'...'\">\n <span class=\"nav-num\">...</span>\n </span>\n </li>\n </ng-container>\n\n <ng-container *ngFor=\"let num of list\">\n <li\n class=\"page-item\"\n [ngClass]=\"{ active: value === num }\"\n (click)=\"handleOnChange(num)\"\n value=\"num\"\n >\n <button class=\"page-link\" [ngClass]=\"{ active: value === num }\">\n <span class=\"nav-num\">{{ num }}</span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"useFirstAndLast\">\n <li class=\"page-item\" *ngIf=\"showEllipsisEnd\">\n <span class=\"page-link\" [attr.title]=\"'...'\">\n <span class=\"nav-num\">...</span>\n </span>\n </li>\n\n <li\n class=\"page-item\"\n (click)=\"handleOnChange(pagingSize)\"\n *ngIf=\"pagingSize > 1\"\n >\n <button\n class=\"page-link\"\n [ngClass]=\"{ active: value === pagingSize }\"\n [attr.title]=\"lastText\"\n >\n <span class=\"nav-num\">{{ pagingSize }}</span>\n </button>\n </li>\n </ng-container>\n\n <ng-container>\n <li class=\"page-item\" (click)=\"handleOnChange(value + 1)\">\n <button class=\"page-link\" [attr.title]=\"nextText\">\n <span class=\"nav-action\">\n <ng-container *ngIf=\"useTextNav; else angleRightIcon\">\n {{ nextText ? nextText : 'Next' }}\n </ng-container>\n <ng-template #angleRightIcon>\n <gds-icon-chevron-right\n *nggCoreElement\n ></gds-icon-chevron-right>\n </ng-template>\n </span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"showGoToPage\">\n <li>\n <div class=\"paging-input-wrapper\">\n <div class=\"label-wrapper\">\n <label for=\"pageInput\" *transloco=\"let t\">\n {{ t('label.gotopage') }}\n </label>\n </div>\n <div class=\"input-wrapper\">\n <input\n #pageInput\n data-thook=\"pagination-go-to-input\"\n min=\"1\"\n [max]=\"pagingSize\"\n id=\"pageInput\"\n class=\"gds-field\"\n type=\"number\"\n (keydown.enter)=\"handlePageInput(pageInput.value)\"\n [ngModel]=\"value\"\n />\n <button\n type=\"button\"\n data-thook=\"pagination-go-to-button\"\n (click)=\"handlePageInput(pageInput.value)\"\n >\n <gds-icon-chevron-right\n *nggCoreElement\n ></gds-icon-chevron-right>\n </button>\n </div>\n </div>\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </nav>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { PaginationComponent } from './pagination.component'\n\n@NgModule({\n declarations: [PaginationComponent],\n imports: [\n CommonModule,\n FormsModule,\n NggvI18nModule,\n TranslocoModule,\n NggCoreWrapperModule,\n ],\n exports: [PaginationComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvPaginationModule {}\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** @internal Internal class used to uncheck radio buttons with the matching name. */\n@Injectable()\nexport class NggvRadioControlRegistry {\n private _radios: any[] = []\n\n add(control: NgControl, radio: NggvRadioComponent) {\n this._radios.push([control, radio])\n }\n\n remove(radio: NggvRadioComponent) {\n for (let i = this._radios.length - 1; i >= 0; --i) {\n if (this._radios[i][1] === radio) {\n this._radios.splice(i, 1)\n return\n }\n }\n }\n\n select(radio: NggvRadioComponent) {\n this._radios.forEach((controlPair) => {\n if (this._isSameGroup(controlPair, radio) && controlPair[1] !== radio) {\n controlPair[1].writeValue(radio.value)\n }\n })\n }\n\n private _isSameGroup(\n controlPair: [NgControl, NggvRadioComponent],\n radio: NggvRadioComponent,\n ) {\n if (!controlPair[0].control) return false\n return (\n //@ts-expect-error internal properties not exposed\n controlPair[0]._parent === radio.ngControl._parent &&\n controlPair[1].name === radio.name\n )\n }\n}\n\n/**\n * Use radio buttons when users must select one option in a list with exclusive options out of a set of two or more options.\n * https://designlibrary.sebgroup.com/components/component-radiobutton\n */\n@Component({\n selector: 'nggv-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [NggvRadioControlRegistry],\n standalone: false\n})\nexport class NggvRadioComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'radio'\n /**\n * Sets class on host element based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Syncs a FormControl in an existing FormGroup to a form control element by name.\n */\n @Input() formControlName?: string\n /**\n * Decides if error should be connected to each individual radio button.\n * If true, errors will be shown in nggv-radio-group component.\n * If false, errors will be show below each radio button\n */\n isGroup = false\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param registry internal registry used to uncheck radio buttons with the matching name, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected registry: NggvRadioControlRegistry,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n this.registry.add(this.ngControl, this)\n // Check if nggv-radio-group is present connected to the same formControl\n if (\n Array.from(\n document.querySelectorAll(\n `nggv-radio-group[formcontrolname=${this.name}]`,\n ),\n ).length\n ) {\n this.isGroup = true\n }\n }\n\n ngOnDestroy() {\n this.registry.remove(this)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => any) {\n // Override default to update registry\n this.onChange = () => {\n fn(this.value)\n this.registry.select(this)\n }\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\">\n <div\n [id]=\"id + '-radio'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div>\n <!-- RADIO BUTTON FIELD -->\n <label [attr.for]=\"id + '-radio'\" class=\"form-control\">\n <input\n #input\n type=\"radio\"\n [attr.id]=\"id + '-radio'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- LABEL -->\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"\n labelContentTpl ?? null;\n context: { $implicit: value }\n \"\n ></ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <!-- if no nggv-radio-group is present -->\n @if (!isGroup) {\n <ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-radio'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n </ng-container>\n }\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Creates a wrapper around a group of radio buttons.\n * If there is an error to the form control connected to the radio buttons, it will be shown once below instead of below every individual radio button\n */\n@Component({\n selector: 'nggv-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n standalone: false\n})\nexport class NggvRadioGroupComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit\n{\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'radio-group'\n /**\n * Sets class on host element based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Syncs a FormControl in an existing FormGroup to a form control element by name.\n */\n @Input() formControlName?: string\n /**\n * Sets \"flex-direction\" of parent of radio buttons.\n */\n @Input() direction?: 'row' | 'column' = 'column'\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- RADIO BUTTONS -->\n<div [ngClass]=\"direction === 'column' ? 'direction-column' : 'direction-row'\">\n <ng-content></ng-content>\n</div>\n<!-- ERRORS -->\n<ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"ngControl?.name + '-radio-group'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n size=\"16px\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvRadioGroupComponent } from './radio-group/radio-group.component'\nimport { NggvRadioComponent } from './radio.component'\n\n@NgModule({\n declarations: [NggvRadioComponent, NggvRadioGroupComponent],\n imports: [CommonModule, NggvI18nModule, NggCoreWrapperModule],\n exports: [NggvRadioComponent, NggvRadioGroupComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvRadioModule {}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n/** Pipe used to transform text with special characters into a simple kebab-case id. */\n@Pipe({\n name: 'slug',\n standalone: false\n})\nexport class SlugPipe implements PipeTransform {\n /**\n * Function for executing the transformation to kebab-case id.\n * @param value the text with special characters which to transform.\n */\n transform(value?: string): unknown {\n if (!value) {\n return value\n }\n return value\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-')\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { SlugPipe } from './slug.pipe'\n\n@NgModule({\n declarations: [SlugPipe],\n imports: [CommonModule],\n exports: [SlugPipe],\n})\nexport class NggvSlugPipeModule {}\n","import { Directive, HostBinding, Input, TemplateRef } from '@angular/core'\n\nconst enum ColumnCSSClass {\n Primary = 'gds-table__primary-col',\n Sortable = 'gds-table__sortable-col',\n Numeric = 'gds-table__numeric-col',\n Negative = 'gds-table__negative-col',\n Ascending = 'gds-table__sortable-col--asc',\n Descending = 'gds-table__sortable-col--desc',\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[columnType]',\n standalone: false\n})\nexport class TableDirective {\n @Input() columnType: 'numeric' | 'text' | undefined = 'text'\n @Input() sortable?: boolean\n @Input() sortOrder?: 'desc' | 'asc'\n @Input() value: any\n\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'table'\n\n @HostBinding('class.' + ColumnCSSClass.Numeric) get numericColumn(): boolean {\n return this.columnType === 'numeric'\n }\n\n @HostBinding('class.' + ColumnCSSClass.Sortable) get isSortable(): boolean {\n return !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Ascending)\n get orderAscending(): boolean {\n return this.sortOrder === 'asc' && !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Descending)\n get orderDescending(): boolean {\n return this.sortOrder === 'desc' && !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Negative)\n get negativeValue(): boolean {\n if (!isNaN(this.value)) return +this.value < 0\n return false\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableColumn]',\n standalone: false\n})\nexport class TableTemplateDirective<K = string> {\n @Input() tableColumn!: K\n @Input() tableColumnTarget?: 'th' | 'td' | 'both' = 'both'\n\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableFooter]',\n standalone: false\n})\nexport class TableFooterTemplateDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableAppendableRows]',\n standalone: false\n})\nexport class TableAppendableRowsTemplateDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","const getKeyValue = <T, K extends keyof T>(obj: T, key: K): T[K] => obj[key]\n\nexport const pick = (\n propertyArray: Array<string>,\n object: { [key: string]: unknown },\n): object => {\n if (object instanceof Object) {\n return propertyArray.reduce(\n (acc: object, curr: string) => ({\n ...acc,\n [curr]: getKeyValue(object, curr),\n }),\n {},\n )\n }\n throw Error('The value for argument \"object\" must be an object')\n}\n\nexport const orderByDescending = <T>(\n property: keyof T | string,\n): ((a: any, b: any) => number) => {\n return (a: any, b: any) => {\n if (a[property] > b[property]) return -1\n if (a[property] < b[property]) return 1\n return 0\n }\n}\n\nexport const orderByAscending = <T>(\n property: keyof T | string,\n): ((a: any, b: any) => number) => {\n return (a: any, b: any) => {\n if (a[property] < b[property]) return -1\n if (a[property] > b[property]) return 1\n return 0\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n name: 'trThook',\n standalone: true,\n})\nexport class TrThookPipe implements PipeTransform {\n transform<V>(\n value: V,\n index: number,\n thookFn?: (rowData: V) => string,\n ): string {\n // call thook fn to set thook for active row\n if (thookFn != null) {\n return thookFn(value)\n }\n\n // default thook\n return `table-row-${index}`\n }\n}\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms'\nimport { Subscription } from 'rxjs'\nimport { debounceTime, map } from 'rxjs/operators'\n\nimport {\n TableAppendableRowsTemplateDirective,\n TableFooterTemplateDirective,\n TableTemplateDirective,\n} from './table.directive'\nimport {\n ariaLabelsOrderBy,\n OrderBy,\n TableColumn,\n TableRow,\n} from './table.models'\nimport { orderByAscending, orderByDescending, pick } from './table.tools'\n\nlet staticInitId = 0\n\nfunction objectFromEntries(entryMap: Map<any, any>): { [key: string]: any } {\n const fromEntries: { [key: string]: any } = {}\n for (const [key, value] of entryMap) {\n fromEntries[key] = value\n }\n return fromEntries\n}\n\n/**\n * A table component with built-in sorting and selecting functionality.\n * By default, table cells (i.e. `<td>` elements) and table headers (i.e. `<th>` elements) are populated with text only values.\n *\n * To customize the contents of either the `<td>` or `<th>` elements (like adding color, icons, form fields, extra padding etc.), provide\n * the customized content within a `<ng-template>`-tag, and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableColumn`-attribute to the `<ng-template>`-element, and set the value to the specific column property.\n * Set `tableColumnTarget` to either `th`, `td` or `both` (default) depending on target element type.\n * The entire row from the `@Input() tableData` is available from the context `$implicit` variable.\n *\n * @example\n * <!-- for table cells i.e. td-elements -->\n * <ng-template tableColumn=\"status\" tableColumnTarget=\"td\" let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <!-- my custom status element -->\n * </ng-template>\n *\n * @example\n * <!-- for table headers i.e. th-elements -->\n * <ng-template tableColumn=\"status\" tableColumnTarget=\"th\" let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <!-- my custom status element -->\n * </ng-template>\n *\n * It is possible to add custom rows that are appended below data row. Use `<ng-template>`-tag and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableAppendableRows`-attribute to the `<ng-template>`-element. Any `tr` elements that exist within `<ng-template tableAppendableRows>` and `</ng-template>` tags will be put below data row's `tr` element in the table.\n *\n * @example\n * <!-- custom appended rows -->\n * <ng-template tableAppendableRows let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <tr>\n * <!-- first row's columns -->\n * </tr>\n * <!-- more rows if needed -->\n * </ng-template>\n *\n * If custom styling is needed for data row that has appended rows, you can use data attribute `data-hasrowspan` to distinguish it from data row without appended rows.\n * You can pass your own custom method with conditional logic to define what value will be passed to data-hasrowspan.\n * In addition, hasRowSpan function accepts item from `@Input() tableData` as argument which is of the same type as value passed to context `$implicit` variable.\n * IMPORTANT: use arrow function style for defining function inside component, i.e. `hasRowSpan = (value) => output;`. If regular function will be defined, i.e. `hasRowSpan(value) { return output; }`, binding will not work.\n *\n * @example\n * <!-- inside component\n * class CustomComponent {\n * customHasRowSpanFunction = (item: CustomDataType) => item.appendedRowsData.length > 0 ? true : false;\n * }\n * -->\n * <!-- inside stylesheets\n * [data-hasrowspan=\"true\"] {\n * color: blue;\n * }\n * .appended-row {\n * color: blue;\n * }\n * -->\n * <nggv-table [hasRowSpan]=\"customHasRowSpanFunction\">\n * <!-- custom appended rows -->\n * <ng-template tableAppendableRows let-appendedRowsData=\"$implicit.appendedRowsData\">\n * <tr *ngFor=\"let appendedRowItem of appendedRowsData\" class=\"appended-row\">\n * <td>{{ appendedRowItem }}</td>\n * <!-- other row's columns -->\n * </tr>\n * </ng-template>\n * </nggv-table>\n *\n * In addition, it is possible to add footer for the table. Similarly to adding custom columns, use `<ng-template>`-tag and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableFooter`-attribute to the `<ng-template>`-element. Any elements that exist within `<ng-template tableFooter>` and `</ng-template>` tags will be put to tfoot element inside the table.\n *\n * @example\n * <!-- for table footer i.e. tfoot-element -->\n * <ng-template tableFooter>\n * <tr>\n * <!-- first row's columns -->\n * </tr>\n * <!-- more rows if needed -->\n * </ng-template>\n *\n */\n@Component({\n selector: 'nggv-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: false\n})\nexport class TableComponent<T extends TableRow>\n implements OnInit, OnChanges, AfterContentInit, OnDestroy {\n /**\n * @internal\n * Custom templates defined in the html.\n */\n @ContentChildren(TableTemplateDirective, { descendants: true })\n customTemplates!: QueryList<TableTemplateDirective<keyof T>>\n\n /**\n * @internal\n * Custom appended rows template defined in the html.\n */\n @ContentChild(TableAppendableRowsTemplateDirective)\n appendedRowsTemplate!: TableAppendableRowsTemplateDirective\n\n /**\n * @internal\n * Custom footer template defined in the html.\n */\n @ContentChild(TableFooterTemplateDirective)\n customFooterTemplate!: TableFooterTemplateDirective\n\n /** Emits the table row that was clicked. Works on all columns if not preventDefaultEmit is set for that column. */\n @Output() ngvRowClick = new EventEmitter<T | any>()\n\n /**\n * Emits currently selected and deselected items in the table as key-value pairs.\n * Uses each item`s itemId as key, and a boolean value to describe selected status.\n */\n @Output() ngvRowSelect = new EventEmitter<string[]>()\n\n /**\n * Emits event to signal that the table should be reordered.\n */\n @Output() ngvOrderBy = new EventEmitter<OrderBy<T>>()\n\n /**\n * An array of items describing how the table header should be rendered,\n * together with instructions for how each row should be displayed in that column.\n */\n @Input() tableColumns!: TableColumn<T>[]\n\n /** Data array to display data in the table. Each item <T> in the array represents a row in the table. */\n @Input() tableData!: T[]\n\n /**\n * Property name used to uniquely describe each item (i.e. row) in the data table.\n * Defaults to \\'id\\'.\n * Is required if selectable is true.\n */\n @Input() rowId = 'id'\n\n /**\n * Function's return value is used for data attribute \\'data-hasrowspan\\'.\n * If custom hasRowSpan function is not passed to the table,\n * then this function returns undefined value by default which results in \\'data-hasrowspan\\' attribute being omitted in html\n * (angular omits attributes that contain null or undefined value).\n * IMPORTANT: use arrow function style for defining function inside component, i.e. `hasRowSpan = (value) => output;`. If regular function will be defined, i.e. `hasRowSpan(value) { return output; }`, binding will not work.\n */\n @Input() hasRowSpan: (item: T) => any = (_) => undefined\n\n /**\n * Used to enable/disable the left-side checkbox column.\n * Defaults to true.\n */\n @Input() selectable = true\n\n /**\n * Array of row id's (as defined by rowId property) that should not have a checkbox even if selectable is true.\n */\n @Input() hiddenCheckboxRowIds: string[] = []\n\n /**\n * Used to enable/disable expandable rows.\n * Defaults to false.\n */\n @Input() expandable = false\n\n /**\n * Used to enable/disable the right-side expand icon column.\n * Defaults to true.\n */\n @Input() expandedByDefault = true\n\n /**\n * Property name used to describe the subItems in the data table.\n */\n @Input() subItemsProp = 'subItems'\n\n /**\n * Allow nggv-table to attempt sorting the data in the table. Not recommended if only a subset is loaded or if the dataset is very large.\n * Disabled by default.\n */\n @Input() allowLocalSort = false\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'table-select-all'\n\n /** Function to overwrite generated thook for each row. */\n @Input() trThookFn?: (item: T) => string\n\n /** Aria label for the checkbox in the table header */\n @Input() ariaLabelCheckboxTh?: string\n\n /** Aria label for the checkbox in the table header */\n @Input() ariaLabelCheckboxTr?: string\n\n /** Aria labels for sorting in the table header */\n @Input() ariaLabelsOrderBy?: ariaLabelsOrderBy\n\n /**\n * @internal\n * Internal data structure used to keep track of added content templates used in td elements.\n */\n customRowTemplates = new Map<keyof T, TemplateRef<any>>()\n\n /**\n * @internal\n * Internal data structure used to keep track of added content templates used in th elements.\n */\n customHeaderTemplates = new Map<keyof T, TemplateRef<any>>()\n\n /**\n * @internal\n * Internal data structure used to hold custom appended rows i.e. tr elements (rows).\n */\n appendedRowsTemplateRef!: TemplateRef<any>\n\n /**\n * @internal\n * Internal data structure used to hold tfoot element children i.e. tr elements (rows).\n */\n customFooterTemplateRef!: TemplateRef<any>\n\n /**\n * @internal\n * Incremental id.\n */\n initId!: number\n\n /**\n * @internal\n * FormGroup containing all row id\\'s as controls, and whether these are selected or not as values.\n */\n rowSelectors: UntypedFormGroup = new UntypedFormGroup({})\n\n /**\n * @internal\n * Master selector for selecting or deselecting all row selectors.\n */\n groupSelector: UntypedFormControl = new UntypedFormControl(false)\n\n private selected: string[] = []\n private subs: Subscription[] = []\n\n ngOnChanges(changes: SimpleChanges) {\n // Update selectable or expandable rows if table data or settings change\n if (\n (this.selectable || this.expandable) && changes.tableData?.currentValue ||\n (changes.selectable?.currentValue || changes.expandable?.currentValue) && this.tableData\n ) {\n const wasChanged = this.registerSelectableRows(\n changes.tableData.currentValue,\n )\n if (wasChanged && !this.subs.length) {\n // first time this is run\n const groupSelectorSub = this.groupValueSubscription\n const rowSelectorSub = this.rowValueSubscription\n this.subs.push(groupSelectorSub, rowSelectorSub)\n } else if (wasChanged) {\n this.rowSelectors.updateValueAndValidity()\n }\n }\n\n // sort any incoming data\n if (\n this.allowLocalSort &&\n (changes.tableData?.currentValue || changes.tableColumns?.currentValue)\n ) {\n const orderedByColumn: TableColumn<T> | undefined =\n this.tableColumns?.find((el) => el.order !== undefined)\n if (orderedByColumn) this.sortItemsBy(orderedByColumn)\n }\n }\n\n ngOnInit(): void {\n this.initId = staticInitId++\n }\n\n ngAfterContentInit() {\n // if any custom templates were defined in the template\n if (this.customTemplates.length) {\n // for each template found\n this.customTemplates.map((tableTemplate) => {\n // if target is either 'td' or 'both'\n if (\n ['td', 'both'].includes(tableTemplate.tableColumnTarget as string)\n ) {\n // add to custom row templates\n this.customRowTemplates.set(\n tableTemplate.tableColumn,\n tableTemplate.templateRef,\n )\n }\n // if target is either 'th' or 'both'\n if (\n ['th', 'both'].includes(tableTemplate.tableColumnTarget as string)\n ) {\n // add to custom header templates\n this.customHeaderTemplates.set(\n tableTemplate.tableColumn,\n tableTemplate.templateRef,\n )\n }\n })\n }\n\n // if appended rows' template is defined in the template\n if (this.appendedRowsTemplate) {\n // set templateRef of appended rows' template to variable\n this.appendedRowsTemplateRef = this.appendedRowsTemplate.templateRef\n }\n\n // if custom footer template is defined in the template\n if (this.customFooterTemplate) {\n // set templateRef of table footer to variable\n this.customFooterTemplateRef = this.customFooterTemplate.templateRef\n }\n\n // if expandedByDefault is true, then expand all rows\n if (this.expandedByDefault && this.expandable && this.tableData) {\n this.tableData.forEach((item) => {\n this.toggleRowToExpand(item[this.rowId])\n })\n }\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /**\n * @internal\n * Returns a subscription to the master selector control that either selects or deselects all row controls.\n */\n get groupValueSubscription(): Subscription {\n return this.groupSelector.valueChanges.subscribe({\n next: (value: boolean) => {\n const selectMap = new Map(Object.entries(this.rowSelectorsValue))\n selectMap.forEach((_, key) => selectMap.set(key, value))\n const patchValue = objectFromEntries(selectMap)\n this.rowSelectors.patchValue(patchValue)\n },\n })\n }\n\n /**\n * @internal\n * Returns a subscription to all individual row selectors and update the master selector if all are selected.\n */\n get rowValueSubscription(): Subscription {\n return this.rowSelectors.valueChanges\n .pipe(\n debounceTime(0), // to limit the number of events and to wait for all sub controls to update\n map((val: { [key: string]: boolean }) => {\n // get a filtered array of keys for all rows that are selected\n const selected = Object.keys(val).filter((key) => {\n return val[key] === true && this.rowSelectors.get(key)?.enabled\n })\n // returns an object containing only the filtered keys\n return pick(selected, val)\n }),\n )\n .subscribe({\n next: (value: object) => {\n // the number of selected keys compared to the total number of keys available\n const numberOfSelected = Object.keys(value).length\n const allSelected: boolean =\n numberOfSelected > 0\n ? numberOfSelected === Object.keys(this.rowSelectorsValue).length\n : false\n // update the master selector control\n this.groupSelector.setValue(allSelected, { emitEvent: false })\n // update the array of currently selected id's\n this.selected = Object.keys(value)\n // and emit the updated value\n this.ngvRowSelect.emit(this.selected)\n },\n })\n }\n\n /**\n * @internal\n * Registers or disables row controls for new or removed rows.\n */\n registerSelectableRows(tableData: any[]): boolean {\n if (!tableData) return false\n // Array containing only the id's for each row\n const dataRowIds: string[] = tableData.map((data: any) => data[this.rowId])\n\n // Array containing the id's that have registered controls\n const currentIds: string[] = Object.keys(this.rowSelectorsValue)\n\n // Array containing all ids that lacks a corresponding control (i.e. new rows)\n const newIds: string[] = dataRowIds.filter(\n (id) => currentIds.indexOf(id) === -1,\n )\n\n // Array containing all ids that has a control but is no longer in the data set (i.e. removed rows)\n const removedIds: string[] = currentIds.filter(\n (id) => dataRowIds.indexOf(id) === -1,\n )\n\n // Register new controls for added rows\n if (newIds.length) {\n newIds.forEach((id) => {\n const ctrl = this.rowSelectors.registerControl(\n id,\n new UntypedFormControl(false),\n )\n if (ctrl.disabled) ctrl.enable()\n })\n }\n\n // Set already registered controls to disabled for removed rows\n if (removedIds.length)\n removedIds.forEach((id) => this.rowSelectors.get(id)?.disable())\n\n return newIds.length > 0 || removedIds.length > 0\n }\n\n /**\n * @internal\n * Returns all enabled values unless all rows are disabled.\n */\n get rowSelectorsValue(): any {\n return this.rowSelectors.enabled ? this.rowSelectors.value : {}\n }\n\n toggleSortOrderWithSpace(event: any, column: TableColumn<T>) {\n if (column.sortable) {\n event.preventDefault()\n this.toggleSortOrder(column)\n }\n }\n\n /**\n * @internal\n * Switches sorting order between ascending and descending order for a column.\n * @param column the column to sort rows after.\n */\n toggleSortOrder(column: TableColumn<T>) {\n // check if the table is already sorted by another column than the one provided\n const currentlyOrderedBy = this.tableColumns?.find(\n (el) => el !== column && el.order !== undefined,\n )\n if (currentlyOrderedBy) delete currentlyOrderedBy.order\n column.order = column.order === 'desc' ? 'asc' : 'desc'\n this.sortItemsBy(column)\n }\n\n /** If sortable, reorders the table data using the specified column as ordering attribute. */\n sortItemsBy(column: TableColumn<T>): TableRow[] | undefined {\n if (!column.sortable) return\n // emit re-order event\n this.ngvOrderBy.emit({ property: column.property, order: column.order })\n // if local sort is allowed, reorder data\n if (!this.allowLocalSort || !this.tableData) return\n return this.tableData.sort(\n column.order === 'desc'\n ? orderByDescending(column.property)\n : orderByAscending(column.property),\n )\n }\n\n /**\n * @internal\n * Emits row data for what row was clicked if defaultEmit is allowed.\n */\n propagateItemClick(item: any, preventDefaultEmit?: boolean) {\n if (!preventDefaultEmit) this.ngvRowClick.emit(item)\n\n if (this.expandable && item[this.subItemsProp]) {\n this.toggleRowToExpand(item[this.rowId])\n }\n }\n\n getAriaLabel(column: TableColumn<T>): string | undefined {\n const sortOrder =\n column.order === 'asc'\n ? this.ariaLabelsOrderBy?.desc\n : this.ariaLabelsOrderBy?.asc\n if (!sortOrder) return // no aria labels defined\n return column.ariaLabelSortable?.replace('{{sortOrder}}', sortOrder)\n }\n\n private toggleRowToExpand(id: string): void {\n const row = this.rowSelectors.get(id)\n row?.setValue(!row.value)\n }\n}\n","<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <label\n [attr.for]=\"'cb_header__' + initId\"\n class=\"form-control\"\n id=\"thead-checkbox\"\n >\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <i></i>\n </label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [class.row__expand]=\"expandable\"\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div\n *ngIf=\"!hiddenCheckboxRowIds.includes(item[rowId])\"\n class=\"gds-field-checkbox-wrap\"\n >\n <label\n [attr.for]=\"'cb_row__' + initId + '_' + i\"\n class=\"form-control\"\n >\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <i></i>\n </label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns; let i = index\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"expandable && i === 0; else nonExpandableTemplate\">\n <div\n class=\"gds-item-field-wrap\"\n [ngClass]=\"{ 'no-sub-items': item.subItems.length === 0 }\"\n >\n <span\n *ngIf=\"item.subItems.length > 0\"\n role=\"button\"\n tabindex=\"0\"\n class=\"chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId])?.value\"\n >\n <svg\n width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n <span class=\"gds-item-field-text\">\n {{ item[column.property] }} ({{ item.subItems.length }})\n <div *ngIf=\"column.columnLabel\" class=\"gds-item-field-extra-label\">\n {{ item[column.columnLabel] }}\n </div>\n </span>\n </div>\n </ng-container>\n\n <ng-template #nonExpandableTemplate>\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: item }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </ng-template>\n </td>\n </tr>\n\n <!-- Expanded Sub Items -->\n <ng-container *ngIf=\"expandable && rowSelectors.get(item[rowId])?.value\">\n <tr *ngFor=\"let subItem of item[subItemsProp]\">\n <td\n *ngFor=\"let column of tableColumns\"\n class=\"web-view\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n (click)=\"propagateItemClick(subItem, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: subItem }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ subItem[column.property] }}\n </ng-template>\n </td>\n\n <td\n class=\"mobile-view\"\n [attr.colspan]=\"tableColumns.length\"\n (click)=\"propagateItemClick(subItem)\"\n >\n <dl class=\"mobile-view-field-wrap\">\n <ng-container *ngFor=\"let column of tableColumns\">\n <div\n *ngIf=\"!column.hidePropertyOnMobile\"\n class=\"mobile-view-field\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n >\n <dt *ngIf=\"!column.hideLabelOnMobile\">\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </dt>\n <dd [ngStyle]=\"column.boldTextOnMobile ? { 'font-weight': '500' } : {'font-weight': '400'}\">\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: subItem }\"></ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ subItem[column.property] }}\n </ng-template>\n </dd>\n <ng-content></ng-content>\n </div>\n </ng-container>\n </dl>\n <span\n role=\"button\"\n tabindex=\"0\"\n class=\"nav-chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId])?.value\"\n >\n <svg\n width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n </td>\n </tr>\n </ng-container>\n\n <!-- Custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TableComponent } from './table.component'\nimport {\n TableAppendableRowsTemplateDirective,\n TableDirective,\n TableFooterTemplateDirective,\n TableTemplateDirective,\n} from './table.directive'\nimport { TrThookPipe } from './tr-thook.pipe'\n\n@NgModule({\n declarations: [\n TableComponent,\n TableDirective,\n TableTemplateDirective,\n TableFooterTemplateDirective,\n TableAppendableRowsTemplateDirective,\n ],\n imports: [CommonModule, ReactiveFormsModule, TranslocoModule, TrThookPipe],\n exports: [\n TableComponent,\n TableTemplateDirective,\n TableFooterTemplateDirective,\n TableAppendableRowsTemplateDirective,\n ],\n})\nexport class NggvTableModule {}\n","/*\n * Public API Surface of table\n */\n\nexport * from './table.component'\nexport * from './table.directive'\nexport * from './tr-thook.pipe'\nexport * from './table.models'\nexport * from './table.module'\n","import { Directive, HostBinding, Input } from '@angular/core'\n\n/**\n * Directive that provides the tab container with data about its child tabs.\n * The directive sets its own active state and adds aria attributes.\n *\n * @example\n * <nggv-tabs>\n * <article tab=\"Tab title 1\"> <!-- Content --> </article>\n * <article tab=\"Tab title 2\" [active]=\"true\"> <!-- Content --> </article>\n * <article tab=\"Tab title 3\" disabled> <!-- Content --> </article>\n * <article tab=\"<strong>Tab title 4</strong>\"> <!-- Content --> </article>\n * </nggv-tabs>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tab]',\n standalone: false\n})\nexport class TabDirective {\n /** @internal */\n @HostBinding('class.gds-tabs__panel') baseClass = true\n /** @internal */\n @HostBinding('attr.role') role = 'tabpanel'\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs-panel'\n /** Sets whether this tab should be the active tab on load. */\n @HostBinding('class.-active') @Input() active = false\n /** @internal */\n @HostBinding('attr.hidden') get hidden() {\n return !this.active\n }\n /** Sets the title displayed in the tab list for this child. */\n @Input() tab!: string\n /** Sets whether this tab should be able to be selected. */\n @Input() disabled = false\n /** Identifier used for aria attributes and selection. */\n @Input() id: string | number | undefined // todo: discuss if window.ngv.nextId() should be used\n\n /** @internal */\n @HostBinding('attr.id') get attrId() {\n return `panel-${this.id}`\n }\n\n /** @internal */\n @HostBinding('attr.aria-labelledby') get ariaLabelledby() {\n return `tab-${this.id}`\n }\n}\n","/* eslint-disable no-console */\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\n\nimport { TabDirective } from './tab.directive'\nimport { EventTabChange, Tab } from './tabs.models'\n\n@Component({\n selector: 'nggv-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: false\n})\nexport class TabsComponent\n implements OnChanges, OnInit, AfterContentInit, OnDestroy\n{\n /** @internal */\n @HostBinding('class.gds-tabs') baseClass = true\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs'\n\n /** @internal List of children with a {@link TabDirective}. */\n @ContentChildren(TabDirective) tabRefs: QueryList<TabDirective> =\n new QueryList()\n\n /**\n * List of tabs to generate, this should not be used in conjunction with children that have a {@link TabDirective}.\n * It is useful for generating a list of tabs with links for navigation.\n * If any tab has the link property, a `<router-outlet>` is added below the tabs list.\n */\n @Input() tabs: Tab[] = []\n\n /**\n * Event triggered on initialization and every time the active tab changes.\n * The tab change can be cancelled if event type is set to `'before'` and `cancel()` is called.\n */\n @Output() public ngvTabSwitch = new EventEmitter<EventTabChange>()\n\n /** @internal Adds a `<router-outlet>` below the tabs list. */\n useRouting = false\n\n /** @internal The currently active tab. */\n selectedTab: Tab | undefined\n\n /** @internal If tab switching has started. */\n isSwitching = false\n\n /** @internal */\n protected subs: Subscription[] = []\n\n constructor(protected router: Router) {}\n\n /** @internal */\n static uniqueIds(tabs: Tab[]) {\n const uniqueIds = new Set()\n let offset = 0\n return tabs.map((tab, index) => {\n if (tab.id && !uniqueIds.has(tab.id)) {\n // Id is already unique\n uniqueIds.add(tab.id)\n return { ...tab }\n } else {\n // If no id is set for the tab, use the next available index\n while (uniqueIds.has(index + offset)) offset++\n const id = index + offset\n if (uniqueIds.has(tab.id)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate tab id \"${tab.id}\" found for tab \"${tab.tab}\", de-duplicating using index + offset. New tab id will be ${id}`,\n )\n }\n uniqueIds.add(id)\n return { ...tab, id }\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.tabs.currentValue) {\n // Update tabs on property updates\n this.updateFromInput()\n }\n }\n\n ngOnInit() {\n // Update tabs on route change\n this.subs.push(\n this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n // Skip if already routing to tab\n if (this.isSwitching) return\n const tab = this.tabs.find(({ link }) => link && e.url.endsWith(link))\n if (tab) {\n this.onSelect(tab.id)\n if (tab.disabled) {\n // Fallback to previously selected tab or first tab not disabled\n const fallbackTab = this.selectedTab\n ? this.selectedTab\n : this.tabs.find(({ disabled }) => !disabled)\n if (fallbackTab && fallbackTab.link)\n this.router.navigateByUrl(fallbackTab.link)\n }\n }\n }),\n )\n }\n\n ngAfterContentInit() {\n // Update tabs on view init\n if (this.tabRefs.length) {\n this.updateFromReferences()\n }\n // Update tabs on view child change\n this.subs.push(this.tabRefs.changes.subscribe(this.updateFromReferences))\n }\n\n /** @internal */\n protected updateFromInput = () => {\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n // Determine if router outlet should be used\n this.useRouting = this.tabs.some(({ link }) => link)\n this.updateTabs()\n }\n\n /** @internal */\n protected updateFromReferences = () => {\n this.tabs = this.tabRefs.map((tabRef) => ({\n tab: tabRef.tab,\n id: tabRef.id,\n active: tabRef.active,\n disabled: tabRef.disabled,\n directive: tabRef,\n }))\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n this.tabs.forEach((tab) => {\n if (tab.directive) tab.directive.id = tab.id\n })\n this.updateTabs()\n }\n\n /** @internal */\n protected updateTabs() {\n const url = window.location.href\n // Select tab if its link matches active url\n let selectedTab = this.tabs.find(\n ({ link, disabled }) => link && !disabled && url.endsWith(link),\n )\n // Fallback to first active tab\n if (!selectedTab) selectedTab = this.tabs.find((tab) => tab.active)\n // Fallback to first tab\n if (!selectedTab) selectedTab = this.tabs[0]\n // Select or give up\n if (selectedTab && this.selectedTab !== selectedTab)\n this.onSelect(selectedTab.id)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /** @internal */\n protected activateTab(tab: Tab) {\n // Deactivate all tabs\n this.tabs.forEach((t) => {\n t.active = false\n if (t.directive) t.directive.active = false\n })\n // Activate selected tab\n tab.active = true\n if (tab.directive) tab.directive.active = true\n // Send end event\n this.ngvTabSwitch.emit({ type: 'end', prev: this.selectedTab, next: tab })\n this.selectedTab = tab\n this.isSwitching = false\n }\n\n /** @internal */\n onSelect(id: string | number | undefined) {\n const selectedTab = this.tabs.find((tab) => tab.id === id)\n if (\n selectedTab &&\n !selectedTab.disabled &&\n selectedTab !== this.selectedTab\n ) {\n let cancelled = false\n // Events are synchronous and allow for tab switch to be cancelled if desired\n this.isSwitching = true\n this.ngvTabSwitch.emit({\n type: 'start',\n prev: this.selectedTab,\n next: selectedTab,\n cancel: () => {\n cancelled = true\n },\n })\n if (cancelled) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n return\n }\n if (selectedTab.link) {\n // Navigate and wait for guard accept route\n this.router\n .navigateByUrl(selectedTab.link, { replaceUrl: true })\n .then((changed) => {\n if (changed === false) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n } else this.activateTab(selectedTab)\n })\n } else {\n this.activateTab(selectedTab)\n }\n }\n }\n\n /** @internal */\n onKeyDown(event: KeyboardEvent) {\n const tabElement = event.target as HTMLElement\n if (!tabElement) return false\n const parent = tabElement.parentElement\n switch (event.key) {\n case 'End': // End\n if (parent)\n this.tabFocusHelper(event, parent.lastElementChild as HTMLElement)\n break\n\n case 'Home': // Home\n if (parent)\n this.tabFocusHelper(event, parent.firstElementChild as HTMLElement)\n break\n\n case 'LeftArrow': // Left arrow\n case 'UpArrow': // Up arrow\n this.tabFocusHelper(\n event,\n tabElement.previousElementSibling as HTMLElement,\n )\n break\n\n case 'RightArrow': // Right arrow\n case 'DownArrow': // Down arrow\n this.tabFocusHelper(event, tabElement.nextElementSibling as HTMLElement)\n break\n }\n return true\n }\n\n /** @internal */\n protected tabFocusHelper(event: KeyboardEvent, tabElement: HTMLElement) {\n if (!tabElement || !(tabElement instanceof HTMLElement)) return\n event.preventDefault()\n event.stopPropagation()\n tabElement.focus()\n this.onSelect(tabElement.id.slice(4))\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TabDirective } from './tab.directive'\nimport { TabsComponent } from './tabs.component'\n\n@NgModule({\n declarations: [TabDirective, TabsComponent],\n imports: [CommonModule, TranslocoModule, RouterModule],\n exports: [TabDirective, TabsComponent],\n})\nexport class NggvTabsModule {}\n","/*\n * Public API Surface of tabs\n */\n\nexport * from './tab.directive'\nexport * from './tabs.component'\nexport * from './tabs.models'\nexport * from './tabs.module'\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n standalone: false\n})\nexport class NggvTextareaComponent extends NggvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'textarea'\n\n /**\n * Sets the small class based on the size input.\n */\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n /**\n * Sets the large class based on the size input.\n */\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n /**\n * Sets the displayed size of the textarea.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTextareaComponent } from './textarea.component'\n\n@NgModule({\n declarations: [NggvTextareaComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvTextareaComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvTextareaModule {}\n","import { TemplateRef } from '@angular/core'\n\nexport interface ToastMessage {\n type: MessageType | 'success' | 'information' | 'error' | 'warning'\n translocoScope?: string\n titleText?: string\n bodyText?: string\n template?: TemplateRef<any>\n templateContext?: any\n timeout?: number\n timeoutId?: number\n timeoutStartTime?: number\n}\n\nexport enum MessageType {\n Success = 'success',\n Information = 'information',\n Error = 'error',\n Warning = 'warning',\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { MessageType, ToastMessage } from './toast.models'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastMessageService {\n private messages: ToastMessage[] = []\n private messageSubject = new Subject<ToastMessage[]>()\n\n add(message: ToastMessage): void {\n const {\n type,\n translocoScope,\n titleText,\n template,\n templateContext,\n bodyText,\n timeout,\n } = message\n const newMessage: ToastMessage = {\n type: type ? type : MessageType.Information,\n translocoScope,\n titleText: titleText ?? '',\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n addMessage(\n type: 'success' | 'information' | 'error' | 'warning',\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void\n addMessage(\n type: MessageType,\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void {\n const newMessage: ToastMessage = {\n type,\n translocoScope,\n titleText,\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n removeMessage(message: ToastMessage): void {\n const index = this.getDuplicateMessageIndex(message.titleText ?? '')\n this.removeMessageByIndex(index)\n }\n\n pauseMessageTimeout(message: ToastMessage): void {\n if (message.timeoutStartTime && message.timeout) {\n const remainingTime =\n message.timeoutStartTime - Date.now() + message.timeout * 1000\n\n message.timeout = remainingTime / 1000\n window.clearTimeout(message.timeoutId)\n }\n }\n\n resumeMessageTimeout(message: ToastMessage): void {\n this.setMessageRemoveTimeout(message)\n }\n\n getMessages(): Observable<ToastMessage[]> {\n return this.messageSubject.asObservable()\n }\n\n private getDuplicateMessageIndex(newMessageText: string): number {\n return this.messages.findIndex(\n (message) => message.titleText === newMessageText,\n )\n }\n\n private removeMessageByIndex(id: number): void {\n if (id !== -1) {\n this.messages.splice(id, 1)\n this.messageSubject.next([...this.messages])\n }\n }\n\n private setMessageRemoveTimeout(newMessage: ToastMessage): void {\n if (newMessage.timeout) {\n newMessage.timeoutId = window.setTimeout(\n () => this.removeMessage(newMessage),\n newMessage.timeout * 1000,\n )\n newMessage.timeoutStartTime = Date.now()\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { ToastMessageService } from './toast-message.service'\nimport { ToastMessage } from './toast.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\n\n@Component({\n selector: 'nggv-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [\n trigger('toastAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(100%)' }),\n animate('300ms ease-in', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n animate('300ms ease-out', style({ opacity: 0, transform: 'translateY(100%)' })),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n @Input() closeButtonAriaLabel?: string\n\n private toastMessagesSubscription!: Subscription\n\n messages: ToastMessage[] = []\n\n constructor(private toastMessageService: ToastMessageService) {}\n\n ngOnInit() {\n this.toastMessagesSubscription = this.toastMessageService\n .getMessages()\n .subscribe((messages) => (this.messages = messages))\n }\n\n onMouseEnter(message: ToastMessage) {\n this.toastMessageService.pauseMessageTimeout(message)\n }\n\n onMouseLeave(message: ToastMessage) {\n this.toastMessageService.resumeMessageTimeout(message)\n }\n\n removeMessage(message: ToastMessage) {\n this.toastMessageService.removeMessage(message)\n }\n\n trackByMessageIndex(index: number, message: ToastMessage): number {\n return index;\n }\n\n ngOnDestroy(): void {\n if (this.toastMessagesSubscription) {\n this.toastMessagesSubscription.unsubscribe()\n }\n }\n}\n","<output class=\"messages-container\" aria-live=\"polite\">\n <div\n class=\"message\"\n *ngFor=\"let message of messages; trackBy: trackByMessageIndex\"\n [ngClass]=\"message.type\"\n @toastAnimation\n (mouseenter)=\"onMouseEnter(message)\"\n (mouseleave)=\"onMouseLeave(message)\"\n >\n <div class=\"content\" *transloco=\"let t; read: message.translocoScope\">\n <div class=\"message-type-icon-wrapper\">\n <ng-container *ngIf=\"message.type === 'success'\">\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n </ng-container>\n <ng-container\n *ngIf=\"message.type === 'error' || message.type === 'warning'\"\n >\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n <ng-container *ngIf=\"message.type === 'information'\">\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n </div>\n <div class=\"text-content\">\n @if (message.template) {\n <ng-template\n [ngTemplateOutlet]=\"message.template\"\n [ngTemplateOutletContext]=\"{ $implicit: message.templateContext }\"\n ></ng-template>\n } @else {\n @if (message.titleText) {\n <div>{{ t(message.titleText) }}</div>\n }\n @if (message.bodyText) {\n <div class=\"text-body-content\">\n {{ t(message.bodyText) }}\n </div>\n }\n }\n </div>\n <button\n class=\"close-icon-button\"\n [ngClass]=\"{ information: message.type === 'information' }\"\n (click)=\"removeMessage(message)\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <gds-icon-cross-small\n class=\"close-icon\"\n *nggCoreElement\n ></gds-icon-cross-small>\n </button>\n </div>\n </div>\n</output>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { ToastComponent } from './toast.component'\n\n@NgModule({\n declarations: [ToastComponent],\n imports: [CommonModule, TranslocoModule, NggCoreWrapperModule],\n exports: [ToastComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvToastModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toast-message.service'\nexport * from './toast.component'\nexport * from './toast.models'\nexport * from './toast.module'\n","export const tooltipBoxStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['z-index', '1045'],\n ['border-radius', '.25rem'],\n ['padding', '.5rem 1rem'],\n ['background-color', '#1a1a1a'],\n ['color', '#fff'],\n ['font-size', '0.875rem'],\n ['font-weight', '400'],\n ['line-height', '1.5'],\n ['padding', '0.5rem'],\n ['pointer-events', 'none'],\n])\n\nexport const tooltipArrowTopStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['bottom', '-1rem'],\n ['left', '50%'],\n ['transform', 'translateX(-50%)'],\n ['border-color', '#1a1a1a transparent transparent'],\n])\n\nexport const tooltipArrowBottomStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['top', '-1rem'],\n ['left', '50%'],\n ['transform', 'translateX(-50%)'],\n ['border-color', 'transparent transparent #1a1a1a'],\n])\n\nexport const tooltipArrowLeftStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['right', '-1rem'],\n ['top', '50%'],\n ['transform', 'translateY(-50%)'],\n ['border-color', 'transparent transparent transparent #1a1a1a'],\n])\n\nexport const tooltipArrowRightStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['left', '-1rem'],\n ['top', '50%'],\n ['transform', 'translateY(-50%)'],\n ['border-color', 'transparent #1a1a1a transparent transparent'],\n])\n\nexport const tooltipArrowStyles = {\n top: tooltipArrowTopStyles,\n bottom: tooltipArrowBottomStyles,\n left: tooltipArrowLeftStyles,\n right: tooltipArrowRightStyles,\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core'\n\nimport { tooltipArrowStyles, tooltipBoxStyles } from './tooltip.styles'\n\nexport type Placement = 'top' | 'right' | 'bottom' | 'left'\n\ntype Position = {\n top?: number\n right?: number\n bottom?: number\n left?: number\n}\n\n/**\n * A tooltip is a text label that acts as a helper to a specific item.\n * Recommended to use value `top` or `bottom` with `placement` for responsive design.\n * Dynamic resizing and tooltip position are a work in progress.\n * https://designlibrary.sebgroup.com/components/component-tooltip\n */\n@Directive({\n selector: '[nggvTooltip]',\n standalone: false\n})\nexport class NggvTooltipDirective\n implements AfterViewInit, OnChanges, OnDestroy\n{\n /** The text that will be shown in the tooltip. */\n @Input() nggvTooltip?: string\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'tooltip'\n /** The side of the anchor which the tooltip will be rendered.\n * Recommended `top` and `bottom` for responsive designs as these are more stable.\n */\n @Input() placement: Placement = 'top'\n /** Initial state and subsequent updates on wether the tooltip is visible. */\n @Input() shown = false\n /** How far off from the text the tooltip will be rendered. */\n @Input() offset = 10\n /** How frequently the tooltip will be re-rendered when the page size changes. */\n @Input() resizeThrottle = 50\n /** Id of tooltip element. */\n @Input() tooltipId?: string\n /** Numeric max-width for tooltip. */\n @Input() maxWidth = 343\n\n /** Emits a show event triggered changing visibility state of the tooltip. */\n @Output() nggvShow = new EventEmitter<HTMLElement>()\n /** Emits a hide event triggered changing visibility state of the tooltip. */\n @Output() nggvHide = new EventEmitter<HTMLElement>()\n\n /** @internal */\n protected timeout = 0\n\n /** @internal */\n protected parentElement: HTMLElement\n\n /** @internal */\n protected anchorElement: HTMLElement\n\n /** @internal */\n protected tooltipElement: HTMLElement | undefined\n\n /** @internal */\n protected arrowElement: HTMLElement | undefined\n\n /** @internal Check if changes should trigger a re-render */\n static shouldUpdate(change: SimpleChange) {\n return (\n change &&\n !change.firstChange &&\n change.previousValue !== change.currentValue\n )\n }\n\n constructor(\n private anchorElementRef: ElementRef,\n private renderer: Renderer2,\n ) {\n this.anchorElement = this.anchorElementRef.nativeElement\n this.parentElement = document.body\n }\n\n ngAfterViewInit() {\n // Set a timeout to allow view to fully render before creating tooltip.\n setTimeout(() => (this.shown ? this.show(true) : this.hide(true)))\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NggvTooltipDirective.shouldUpdate(changes.nggvTooltip) ||\n NggvTooltipDirective.shouldUpdate(changes.placement) ||\n NggvTooltipDirective.shouldUpdate(changes.thook)\n ) {\n this.shown ? this.show(true) : this.hide(true)\n }\n\n if (NggvTooltipDirective.shouldUpdate(changes.shown)) {\n this.shown ? this.show() : this.hide()\n }\n\n if (NggvTooltipDirective.shouldUpdate(changes.offset)) {\n this.updatePosition()\n }\n }\n\n ngOnDestroy() {\n this.hide(true)\n }\n\n /** @internal */\n @HostListener('mouseenter')\n @HostListener('focus')\n onMouseEnter() {\n this.show()\n }\n\n /** @internal */\n @HostListener('mouseleave')\n @HostListener('blur')\n @HostListener('keyup.escape')\n onMouseLeave() {\n this.hide()\n }\n\n /** @internal */\n @HostListener('window:resize')\n resize() {\n if (this.timeout) return\n this.timeout = window.setTimeout(() => {\n this.timeout = 0\n this.updatePosition()\n }, this.resizeThrottle)\n }\n\n /**\n * Sets the visibility state of the tooltip to true and creates a new tooltip if it doesn't exist or `recreate` is set.\n * @param recreate if set to true, destroy any existing tooltip and create a new one.\n */\n show(recreate = false) {\n // Require tooltip text to create\n if (!this.nggvTooltip || this.nggvTooltip.length === 0) return\n\n if (recreate || !this.tooltipElement) {\n this.hide(true)\n this.create(this.nggvTooltip)\n } else {\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n }\n\n this.updatePosition()\n this.shown = true\n this.nggvShow.emit(this.tooltipElement)\n }\n\n /**\n * Sets the visibility state of the tooltip to false and destroys an existing tooltip if `destroy` is set.\n * @param destroy if set to true, destroy any existing tooltip.\n */\n hide(destroy = false) {\n if (!this.tooltipElement) return\n if (this.parentElement.contains(this.tooltipElement)) {\n this.renderer.removeChild(this.parentElement, this.tooltipElement)\n }\n if (destroy) this.destroy()\n this.shown = false\n this.nggvHide.emit(this.tooltipElement)\n }\n\n /**\n * @internal\n * Creates a new tooltip with the set placement and a given text as its body.\n * @param text the string to be displayed in the tooltip body.\n */\n create(text: string) {\n this.tooltipElement = this.renderer.createElement('div')\n this.renderer.addClass(this.tooltipElement, 'gds-tooltip')\n this.renderer.setAttribute(this.tooltipElement, 'data-thook', this.thook)\n this.renderer.setAttribute(this.tooltipElement, 'role', 'tooltip')\n if (this.tooltipId) {\n this.renderer.setAttribute(this.tooltipElement, 'id', this.tooltipId)\n }\n // set styling\n Array.from(tooltipBoxStyles.entries()).forEach(([style, value]) => {\n this.renderer.setStyle(this.tooltipElement, style, value)\n })\n const relativeMaxWidth = this.pxToRem(this.maxWidth)\n this.renderer.setStyle(this.tooltipElement, 'max-width', relativeMaxWidth)\n this.renderer.appendChild(\n this.tooltipElement,\n this.renderer.createText(text),\n )\n\n // add tooltip to DOM\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n\n this.arrowElement = this.renderer.createElement('div')\n this.renderer.addClass(\n this.arrowElement,\n `gds-tooltip__arrow-${this.placement}`,\n )\n\n // add arrow to tooltip element\n this.renderer.appendChild(this.tooltipElement, this.arrowElement)\n }\n\n /**\n * @internal\n * Destroys the current tooltip by un-setting variables, should only be used after detaching elements from the DOM.\n */\n destroy() {\n this.tooltipElement = undefined\n this.arrowElement = undefined\n }\n\n /**\n * @internal\n * Recalculates the position of the tooltip.\n */\n updatePosition() {\n if (!this.tooltipElement || !this.arrowElement) return\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n this.parentElement.scrollTop ||\n 0\n const anchorRect = this.anchorElement.getBoundingClientRect()\n const tooltipRect = this.tooltipElement.getBoundingClientRect()\n const arrowRect = this.arrowElement.getBoundingClientRect()\n\n switch (this.placement) {\n case 'top':\n this.alignVertical(\n true,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'bottom':\n this.alignVertical(\n false,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'left':\n this.alignHorizontal(true, scrollPos, anchorRect, tooltipRect.height)\n break\n\n case 'right':\n this.alignHorizontal(false, scrollPos, anchorRect, tooltipRect.height)\n break\n\n default:\n return\n }\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `top` or `bottom`.\n */\n alignVertical(\n above: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n arrowWidth: number,\n ) {\n const width = this.parentElement.clientWidth\n const anchorMidX = anchor.left + anchor.width / 2\n const tooltip: Position = {}\n const arrow: Position = {}\n\n if (above)\n tooltip.top = anchor.top - tooltipHeight - this.offset + scrollPos\n else tooltip.top = anchor.bottom + this.offset + scrollPos\n\n if (anchorMidX < width / 2) {\n tooltip.left = Math.max(0, anchorMidX - tooltipWidth / 2)\n arrow.left = anchorMidX - tooltip.left\n } else {\n tooltip.right = Math.max(0, width - (anchorMidX + tooltipWidth / 2))\n arrow.right = width - anchorMidX - tooltip.right - arrowWidth\n }\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `left` or `right`.\n */\n alignHorizontal(\n before: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipHeight: number,\n ) {\n const width = this.parentElement.clientWidth\n const top = anchor.top + (anchor.height - tooltipHeight) / 2 + scrollPos\n const tooltip: Position = { top }\n const arrow: Position = { top: tooltipHeight / 2 }\n\n if (before) tooltip.right = width - anchor.left + this.offset\n else tooltip.left = anchor.right + this.offset\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Updates the CSS properties for the tooltip position.\n */\n setStyle(tooltip: Position, arrow: Position) {\n // Tooltip\n Object.entries(tooltip).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.tooltipElement, prop, position)\n })\n\n // Arrow\n Object.entries(arrow).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.arrowElement, prop, position)\n })\n\n Array.from(tooltipArrowStyles[this.placement].entries()).forEach(\n ([style, value]) => {\n this.renderer.setStyle(this.arrowElement, style, value)\n },\n )\n }\n\n private pxToRem(value: number): string {\n const fontSizePx = window\n ?.getComputedStyle(this.parentElement)\n ?.getPropertyValue('font-size')\n const fontSizeNumberMatch = fontSizePx?.match(/\\d{1,}/)\n const fontSize = fontSizeNumberMatch ? +fontSizeNumberMatch[0] : 16\n const remValue = value / fontSize\n return `${remValue}rem`\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n declarations: [NggvTooltipDirective],\n exports: [NggvTooltipDirective],\n imports: [NggvI18nModule],\n})\nexport class NggvTooltipModule {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport {\n NggCoreWrapperModule,\n SCOPE_RESOLVER,\n} from '@sebgroup/green-angular/src/lib/shared'\nimport { getScopedTagName } from '@sebgroup/green-core/scoping'\nimport { NggvAlertModule } from './alert'\nimport { NggvBaseControlValueAccessorModule } from './base-control-value-accessor'\nimport { NggvBreadcrumbsModule } from './breadcrumbs'\nimport { NggvButtonModule } from './button'\nimport { NggvCardModule } from './card'\nimport { NggvCharacterCountdownDirectiveModule } from './character-countdown/character-countdown.module'\nimport { NggvCheckboxModule } from './checkbox'\nimport { NggvDatepickerModule } from './datepicker'\nimport { NggvDragDropModule } from './drag-drop'\nimport { NggvDropdownModule } from './dropdown'\nimport { NggvTypeaheadModule } from './dropdown/typeahead/typeahead.module'\nimport { NggvExternalLinkDirectiveModule } from './external-link'\nimport { NggvI18nModule } from './i18n'\nimport { NggvInfoCircleModule } from './info-circle'\nimport { NggvInputModule } from './input'\nimport { NggvInputMaskModule } from './input-mask'\nimport { NggvModalModule } from './modal'\nimport { NggvPaginationModule } from './pagination'\nimport { NggvRadioModule } from './radio'\nimport { NggvSlugPipeModule } from './slug'\nimport { NggvTableModule } from './table'\nimport { NggvTabsModule } from './tabs'\nimport { NggvTextareaModule } from './textarea'\nimport { NggvToastModule } from './toast'\nimport { NggvTooltipModule } from './tooltip'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n exports: [\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n NggvSlugPipeModule,\n NggvAlertModule,\n NggvBaseControlValueAccessorModule,\n NggvBreadcrumbsModule,\n NggvButtonModule,\n NggvCardModule,\n NggvCheckboxModule,\n NggvDatepickerModule,\n NggvDragDropModule,\n NggvDropdownModule,\n NggvExternalLinkDirectiveModule,\n NggvI18nModule,\n NggvInfoCircleModule,\n NggvInputMaskModule,\n NggvInputModule,\n NggvModalModule,\n NggvPaginationModule,\n NggvRadioModule,\n NggvTableModule,\n NggvTabsModule,\n NggvTextareaModule,\n NggvToastModule,\n NggvTooltipModule,\n NggvTypeaheadModule,\n ],\n providers: [\n {\n provide: SCOPE_RESOLVER,\n useValue: { getScopedTagName },\n },\n ],\n})\nexport class NggvModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","NggvExternalLinkDirectiveModule","NggvBaseControlValueAccessorComponent","i2","i4","NggvI18nModule","createMask","i2.CalendarDateDirective","i3.IsDisabledPipe","i4.DateThookPipe","i5.MatchesPipe","i1","i2.CalendarComponent","i3.CalendarControlComponent","i5","i6.DatepickerComponent","NggvInputMaskModule","pick","i5.ValuePipe","NggvModalModule","DropdownUtils","filter","takeUntil","i2.NggvTypeaheadHighlightComponent","i6.NggvDropdownListComponent","i3.NggvTypeaheadHighlightComponent","NggvInputComponent","NggvTooltipModule","distinctUntilChanged","tap","i1.NggvDropdownComponent","i6","NggvCharacterCountdownDirectiveModule","NggvButtonModule","i4.TableDirective","i5.TrThookPipe","i1.ToastMessageService"],"mappings":"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AE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,aAAa,EAAE,YAAY;AAC3B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;CACtB;MACY,iBAAiB,GAAG,CAC/B,MAAc,EACd,cAA+B,KAC7B;IACF,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvC,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;IACrE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;AAC3C,IAAA,MAAM,IAAI,GAAmC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EACpE,KAAK,GAAmC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAClE,GAAG,GAAmC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IAEhE,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,KAAI;AACxC,QAAA,QAAQ,UAAU,CAAC,CAAC,CAAC;AACnB,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;gBAClB;AACF,YAAA,KAAK,GAAG;AACN,gBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;gBACnB;AACF,YAAA,KAAK,GAAG;AACN,gBAAA,GAAG,CAAC,KAAK,GAAG,KAAK;gBACjB;;AAEN,IAAA,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,EAAE,cAAc,CAAC;AAEnE,IAAA,OAAOC,YAAU,CAAO;AACtB,QAAA,KAAK,EAAE,UAAU;AACjB,QAAA,WAAW,EAAE,MAAM;QACnB,WAAW;AACX,QAAA,MAAM,EAAE,CAAC,KAAa,KAAI;YACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5B,OAAO,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;AACD,QAAA,YAAY,CAAC,YAAoB,EAAA;AAC/B,YAAA,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ;AAAE,gBAAA,OAAO,EAAE;;AAEhE,YAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;YAEzE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;YACtC,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAC5B;;AAED,YAAA,OAAO;AACJ,iBAAA,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAI;gBACf,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM;gBACjD,IAAI,GAAG,KAAK,MAAM;AAAE,oBAAA,OAAO,SAAS;gBACpC,IAAI,GAAG,KAAK,OAAO;AAAE,oBAAA,OAAO,UAAU;AACtC,gBAAA,OAAO,SAAS;AAClB,YAAA,CAAC;iBACA,IAAI,CAAC,SAAS,CAAC;QACpB,CAAC;AACF,KAAA,CAAC;AACJ;MAOa,uBAAuB,GAAG,CACrC,MAAc,EACd,cAA+B,KAC7B;AACF,IAAA,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,MAAM;IAClC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;IAClD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IACnD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC;AACjD,IAAA,OAAO,MAAM;AACf;;AC1QA;MACsB,iCAAiC,CAAA;;IAqCrD,IAAa,WAAW,CAAC,KAAyB,EAAA;QAChD,IAAI,CAAC,YAAY,GAAG;cAChB,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc;cAClD,KAAK;QACT,IAAI,CAAC,kBAAkB,GAAG;cACtB,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc;cAClD,KAAK;IACX;AACA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAyBA;;;AAGG;IACH,IAAa,aAAa,CAAC,QAAgC,EAAA;;AAEzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;;QAG9B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;;IAKA,IAAa,MAAM,CAAC,KAAiC,EAAA;AACnD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;;IAQA,IAAa,QAAQ,CAAC,KAAiC,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;;AAEA,IAAA,IAAI,QAAQ,GAAA;;AAEV,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS;;QAGvD,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;AACtC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAClD,EAAqB,CACtB;AACD,YAAA,OAAO,SAAS,IAAI,SAAS,CAAC,QAAQ;QACxC;QAEA;IACF;;IAIA,IAAa,OAAO,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,QAAQ;AAC3E,QAAA,QACE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO;IAE1E;;IAIA,IAAa,KAAK,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC,MAAM;AACrE,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO;IAC7E;AAwCA;;;AAGG;IACH,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,UAAsB,EACtB,GAAsB,EACxB,UAA4B,EAAA;QANT,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;QACL,IAAA,CAAA,UAAU,GAAV,UAAU;;;QA9Ka,IAAA,CAAA,EAAE,GAAI,MAAc,CAAC,GAAG,EAAE,MAAM,CAC/D,YAAY,CACb;;QAgCQ,IAAA,CAAA,aAAa,GAAa,KAAK;;QAI/B,IAAA,CAAA,SAAS,GAAG,KAAK;QA4BlB,IAAA,CAAA,OAAO,GAA+B,SAAS;;QAc/C,IAAA,CAAA,SAAS,GAA+B,SAAS;QAqBjD,IAAA,CAAA,QAAQ,GAAwB,SAAS;QAazC,IAAA,CAAA,MAAM,GAAwB,SAAS;;QAYtC,IAAA,CAAA,OAAO,GAAG,KAAK;;QAEf,IAAA,CAAA,QAAQ,GAAG,KAAK;;AASf,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAW;;;AAKhC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAE;;AAE7B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAE;;;QAIrC,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAU,EAAE,CAAC,CAAA;;AAE/B,QAAA,IAAA,CAAA,SAAS,GAAG,QAAa,CAAC,CAAA;;AAE1B,QAAA,IAAA,CAAA,iBAAiB,GAAe,MAAM,IAAI;QAC5C,IAAA,CAAA,MAAM,GAAQ,IAAI;;;;AAQlB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ;AAevC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;;AAGlB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;QAEA,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IACtE;IAEA,OAAO,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,IAAI;;AAEF,YAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,gBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YAC/D,QAAQ,IAAI;;gBAEV,KAAK,KAAK,IAAI,IAAI;AAClB,gBAAA,KAAK,KAAK,EAAE,QAAQ,EAAE,KAAK,cAAc;AACvC,oBAAA,OAAO,IAAI;;AAEb,gBAAA,KAAK,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU;AACxC,oBAAA,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACvD,gBAAA;AACE,oBAAA,OAAO,KAAe;;QAE5B;QAAE,OAAO,EAAE,EAAE;YACX;QACF;IACF;;IAGA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YAC5C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAClC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CACtE;QACH;AAEA,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,EAAE,MAAK;gBACT,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpC,oBAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE;gBACxC;YACF,CAAC;AACF,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,IAAI,EAAE,MAAK;;AAET,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACtB,CAAC;AACF,SAAA,CAAC;IACJ;;IAGA,eAAe,GAAA;;;AAGb,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK;IAChE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE;YACtC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC;QACrD;AAEA,QAAA,IACE,OAAO,CAAC,MAAM,EAAE,YAAY;YAC5B,CAAC,IAAI,CAAC,UAAU;AAChB,YAAA,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,EACjC;YACA,IAAI,CAAC,wBAAwB,EAAE;QACjC;AAEA,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE;YACpC,IAAI,CAAC,YAAY,EAAE;QACrB;AAEA,QAAA,IAAI,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,YAAY,EAAE;YACrB;iBAAO;gBACL,IAAI,CAAC,wBAAwB,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1D,IAAI,CAAC,wBAAwB,EAAE;QACjC;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;IAC7B;;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,KAAK,CAAC;AACJ,cAAE,KAAK,CAAC,eAAe;eACpB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,MAAM,CAAC,KAAY,EAAA;AACjB,QAAA,KAAK,CAAC;AACJ,cAAE,KAAK,CAAC,eAAe;eACpB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;IAGA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE;IACxD;AAEA;;;;;;;;AAQG;IACH,wBAAwB,GAAA;AACtB,QAAA,MAAM,MAAM,GACV,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAEnE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;cACrB,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc;AACtE,cAAE,uBAAuB,CACrB,mBAAmB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EACzC,IAAI,CAAC,cAAc,CACpB;QACL,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IACrE;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;kBACrB,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc;AACtE,kBAAE,uBAAuB,CACrB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,EAC7B,IAAI,CAAC,cAAc,CACpB;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,iBAAiB,CACpC,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,cAAc,CACpB;QACH;IACF;;;;;AAOA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA;;AAEG;IACH,IAAI,KAAK,CAAC,KAAK,EAAA;AACb,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IACrB;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,KAAI;;YAExB,MAAM,SAAS,GAAG,iCAAiC,CAAC,aAAa,CAAC,KAAK,CAAC;YACxE,EAAE,CAAC,SAAS,CAAC;AACf,QAAA,CAAC;IACH;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;AAG1B,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,IAAI,CAAC,MAAM,GAAG,UAAU;QAC1B;IACF;;;;;AAOA,IAAA,QAAQ,CAAC,QAAyB,EAAA;AAChC,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;IAC7B;;;;;AAOA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,MAAM,GAA4B,IAAI,CAAC,SAAS,CAAC,MAAM;AAC7D,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;IACvC;AAEQ,IAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAxboB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,yEAqM3C,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArML,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAYnB,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMV,WAAW,2GAIlB,UAAU,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAtBlB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAFtD;;0BAqMI;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;iIAxLzB,eAAe,EAAA,CAAA;sBADd,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAO/C,SAAS,EAAA,CAAA;sBADR,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAIN,QAAQ,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAKP,EAAE,EAAA,CAAA;sBAAlC,WAAW;uBAAC,SAAS;;sBAAG;gBAIhB,IAAI,EAAA,CAAA;sBAAZ;gBAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEY,WAAW,EAAA,CAAA;sBAAvB;gBAcQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAKY,aAAa,EAAA,CAAA;sBAAzB;gBAmBY,MAAM,EAAA,CAAA;sBAAlB;gBAQQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAMY,QAAQ,EAAA,CAAA;sBAApB;gBAqBY,OAAO,EAAA,CAAA;sBAAnB;gBAaY,KAAK,EAAA,CAAA;sBAAjB;gBAUQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAQkB,QAAQ,EAAA,CAAA;sBAA1B;gBAEkB,OAAO,EAAA,CAAA;sBAAzB;;;ACzNH,MAAM,QAAQ,GAAc;AAC1B,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,OAAO;AACf,IAAA,OAAO,CAAC,SAAS;AACjB,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,MAAM;AACd,IAAA,OAAO,CAAC,QAAQ;AAChB,IAAA,OAAO,CAAC,MAAM;CACf;AAEM,MAAM,YAAY,GAAG,CAAC,cAAuB,KAAe;IACjE,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC;IACtD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;AAChD,IAAA,OAAO,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC;AAEA;MACa,iBAAiB,GAAG,CAC/B,cAAuB,EACvB,SAAgB,KACN;IACV,IAAI,SAAS,KAAK,SAAS;AAAE,QAAA,SAAS,GAAG,IAAI,IAAI,EAAE;;AAGnD,IAAA,MAAM,cAAc,GAAc,YAAY,CAAC,cAAc,CAAC;;IAG9D,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AAChE,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;IACvC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,aAAa,CAAC;;IAGxD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,MAAc,KAAI;;AAEvD,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;QACzC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;;AAGnD,QAAA,OAAO,WAAW;AACpB,IAAA,CAAC,CAAC;AACJ;AAEA;AACO,MAAM,kBAAkB,GAAG,CAChC,KAAa,EACb,IAAY,EACZ,QAAQ,GAAG,CAAC,EACZ,cAAuB,KACX;;AAEZ,IAAA,MAAM,MAAM,GAAa,IAAI,KAAK,CAAS,QAAQ,CAAC;AACpD,IAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAEf,IAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,CAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,GAAA,CAAK,CAAC;IAC/C,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,EAAE,cAAc,CAAC;;IAGzD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,UAAkB,KAAI;AAC9D,QAAA,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC;;AAE7B,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;QACvC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;AACjD,QAAA,OAAO,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC;AACvD,IAAA,CAAC,CAAC;;IAGF,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;AACvC,IAAA,WAAW,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AAC/B,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtB,IAAA,IAAI,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;;AAEpC,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC;QACvC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACjE;;AAEA,IAAA,OAAO,UAAU;AACnB;AAEA;MACa,iBAAiB,GAAG,CAC/B,IAAU,EACV,cAAuB,KACf;;AAER,IAAA,MAAM,cAAc,GAAc,YAAY,CAAC,cAAc,CAAC;;AAG9D,IAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;AACnC,IAAA,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;;IAGvB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAC5D,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC;;AAE1C,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;AAC/B,IAAA,OAAO,WAAW;AACpB;AAEO,MAAM,YAAY,GAAG,CAC1B,IAAa,EACb,EAAW,EACX,cAAuB,EACvB,SAA8B,KACpB;AACV,IAAA,MAAM,cAAc,GAAc,YAAY,CAAC,cAAc,CAAC;IAE9D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;AAE1C,IAAA,MAAM,MAAM,GAAG,OAAO,GAAG,SAAS;AAElC,IAAA,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,GAAG,CAAC;AAC5D,IAAA,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,GAAG,CAAC;AACzD,IAAA,OAAO,MAAM;AACf;AAEA;AACO,MAAM,aAAa,GAAG,MAAa;AACxC,IAAA,MAAM,cAAc,GAAG,IAAI,IAAI,EAAE;AACjC,IAAA,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1B,IAAA,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;;;AAIzB,IAAA,MAAM,UAAU,GAAW,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;;;;IAK7D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAO,EAAE,KAAa,KAAI;AAC/C,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AACJ;AAEA;AACO,MAAM,YAAY,GAAG,MAAa;AACvC,IAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE;AAC9B,IAAA,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvB,IAAA,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AACtB,IAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnD,IAAA,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;AAChC;AAEA;MACa,KAAK,GAAG,CAAC,CAAmB,EAAE,CAAmB,KAAa;AACzE,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;IAC1B,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;AAAE,QAAA,OAAO,KAAK;IAC7C,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;AAAE,QAAA,OAAO,KAAK;IAC/C,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;AAAE,QAAA,OAAO,KAAK;AACrD,IAAA,OAAO,IAAI;AACb;AAEO,MAAM,iBAAiB,GAAG,CAAC,YAA8B,KAAa;AAC3E,IAAA,IAAI,CAAC,YAAY;AAAE,QAAA,OAAO,KAAK;IAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,YAAY,CAAC,OAAO,EAAE;AAC7C;AAEA;;;;;;AAMG;MACU,QAAQ,GAAG,CAAC,IAAU,EAAE,WAAiB,KAAa;;IAEjE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;QACpD,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE;IACvD;;IAEA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,EAAE;QAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE;IACjD;;IAEA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;AAC/C;AAEA;;;;;;AAMG;MACU,OAAO,GAAG,CAAC,IAAU,EAAE,WAAiB,KAAa;;IAEhE,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;QACpD,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE;IACvD;;IAEA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,EAAE;QAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE;IACjD;;IAEA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE;AAC/C;AAEA;;;;;AAKG;AACI,MAAM,OAAO,GAAG,CAAC,KAAU,KAAa;;AAE7C,IAAA,MAAM,IAAI,GACR,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5D,UAAE,IAAI,IAAI,CAAC,KAAK;UACd,IAAI;IAEV,QAAQ,IAAI;;AAEV,QAAA,KAAK,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU;AAC1C,QAAA,KAAK,OAAO,IAAI,EAAE,QAAQ,KAAK,UAAU;AACvC,YAAA,OAAO,IAAI;;QAEb,KAAK,KAAK,IAAI,IAAI;AAClB,QAAA,KAAK,IAAI,EAAE,QAAQ,EAAE,KAAK,cAAc;AACtC,YAAA,OAAO,KAAK;AACd,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;;MCjNa,qBAAqB,CAAA;AAShC,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa;IACtC;AAEA,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;QAPS,IAAA,CAAA,OAAO,GAAG,KAAK;IAOT;IAE7C,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;IACrD;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;YAClC;YAAE,IAAI,CAAC,aAAmC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QACrE;IACF;8GAvBW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;+EAEU,YAAY,EAAA,CAAA;sBAApB;gBACkD,QAAQ,EAAA,CAAA;sBAA1D,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,UAAA;;sBAAsB;gBAG3C,cAAc,EAAA,CAAA;sBAFb,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,kBAAA;;sBACpB;gBAEsC,OAAO,EAAA,CAAA;sBAA7C,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,OAAA;gBACZ,QAAQ,EAAA,CAAA;sBAAhB;;;ACpBH,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;MAMX,cAAc,CAAA;;AAEzB,IAAA,SAAS,CAAC,KAAW,EAAE,MAAA,GAA4B,EAAE,EAAA;AACnD,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM;;AAG3E,QAAA,IAAI,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC;AACtE,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;AAClE,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;;AAG1E,QAAA,IACE,WAAW;AACX,YAAA,WAAW,CAAC,MAAM;YAClB,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;AAE1C,YAAA,OAAO,IAAI;;AAGb,QAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,EAAE;AACvC,YAAA,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAO,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1D;;AAGA,QAAA,OAAO,KAAK;IACd;8GA/BW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCTY,aAAa,CAAA;AACxB,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,QAAA,OAAO,KAAK;IACd;IAEA,SAAS,CAAC,IAAU,EAAE,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;;AAEzB,YAAA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGnD,YAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;;YAGjE,MAAM,gBAAgB,GAAG,gBAAgB,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YAC9D,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAE3D,MAAM,cAAc,GAClB,gBAAgB,GAAG,CAAC,GAAG,GAAG,GAAG,gBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG;AAEhE,YAAA,OAAO,CAAA,KAAA,EAAQ,cAAc,CAAA,EAAG,wBAAwB,KAAK,CAAC,GAAG,EAAE,GAAG,wBAAwB,EAAE;QAClG;AAEA,QAAA,OAAO,eAAe;IACxB;8GA1BW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCGY,WAAW,CAAA;IACtB,SAAS,CAAC,KAAW,EAAE,QAA0B,EAAA;AAC/C,QAAA,OAAO,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC/B;8GAHW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,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;;;MCqBY,iBAAiB,CAAA;AAN9B,IAAA,WAAA,GAAA;AAOY,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;QAWrC,IAAA,CAAA,eAAe,GAAG,CAAC;AACnB,QAAA,IAAA,CAAA,cAAc,GAAY,OAAO,CAAC,MAAM;QACxC,IAAA,CAAA,IAAI,GAAiB,QAAQ;AAmBtC,QAAA,IAAA,CAAA,UAAU,GAAa,CAAC,EAAE,CAAC;QAC3B,IAAA,CAAA,iBAAiB,GAAsB,EAAE;AAEjC,QAAA,IAAA,CAAA,aAAa,GAAY,OAAO,CAAC,MAAM;AA6KhD,IAAA;;IAhMC,IAAa,YAAY,CAAC,KAAyB,EAAA;QACjD,IAAI,CAAC,uBAAuB,CAAC,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;IAC7D;IACA,IAAa,eAAe,CAAC,KAA4B,EAAA;QACvD,IAAI,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACtD;IACA,IAAa,UAAU,CAAC,KAAuB,EAAA;QAC7C,IAAI,CAAC,uBAAuB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnD;IACA,IAAa,SAAS,CAAC,KAAuB,EAAA;QAC5C,IAAI,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjD;IACA,IAAa,WAAW,CAAC,KAAuB,EAAA;QAC9C,IAAI,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACtD;AAOA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzD;AAEA,QAAA,IAAI,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE;AACxC,YAAA,IAAI,CAAC,aAAa,GAAG,YAAY,CAC/B,OAAO,CAAC,cAAc,CAAC,YAAY,CACpC,CAAC,GAAG,EAAa;QACpB;AAEA,QAAA,IACE,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS;AACxC,YAAA,OAAO,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI;AACtC,YAAA,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY;AAC5B,YAAA,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY;AACtC,YAAA,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,EACvC;YACA,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAClC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,CACpB;QACH;IACF;AAEA,IAAA,SAAS,CAAC,IAAU,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AAGA,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,aAAsC;AAC1C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;AACrB,YAAA,aAAa,GAAG,QAAQ,CAAC,aAA4B;AACvD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;YAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC1D,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAC9D,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC7B,KAAK,CAAC,cAAc,EAAE;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,CAAC,CAAC;AACjE,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;YAClD,IAAI,aAAa,EAAE;AACjB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,KAAK,aAAa,CAC7C;AACD,gBAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;oBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;gBAC5C;YACF;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;YACxB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAClD,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACjD,YAAA,IAAI,aAAa;gBAAE,aAAa,CAAC,KAAK,EAAE;QAC1C;IACF;AAEA,IAAA,oBAAoB,CAClB,WAAoC,EACpC,UAAkB,EAClB,iBAAiB,GAAG,IAAI,EAAA;AAExB,QAAA,IAAI,CAAC,WAAW;YAAE;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;AACpB,aAAA,OAAO;aACP,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa;aAC9B,OAAO,CAAC,WAAW,CAAC;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;AAC5D,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,IAAI,iBAAiB,IAAI,IAAI,CAAC,QAAQ;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;QAClE,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,gBAAgB,CACd,WAAoC,EAAA;AAEpC,QAAA,IAAI,CAAC,WAAW;YAAE;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD;AAEA,IAAA,oBAAoB,CAClB,WAAoC,EAAA;AAEpC,QAAA,IAAI,CAAC,WAAW;YAAE;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnD;IAEA,qBAAqB,GAAA;AACnB,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAA4B;AAC3D,QAAA,IAAI,CAAC,aAAa;YAAE;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,KAAK,aAAa,CACpB;QAC1B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,cAAc;YAAE;AAC3D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAC9B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAC7B,IAAI,CAAC,cAAc,EACnB,MAAM,CACP;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAC7C,aAAa,EACb,MAAM,EACN,KAAK,CACe;AACtB,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ;AACzC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC7C,QAAA,OAAO,aAAa;IACtB;IAEA,oBAAoB,GAAA;AAClB,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAA4B;AAC3D,QAAA,IAAI,CAAC,aAAa;YAAE;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACtC,CAAC,GAAG,KAAK,GAAG,CAAC,aAAa,KAAK,aAAa,CACpB;QAC1B,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,aAAa;YAAE;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAC9B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAC7B,IAAI,CAAC,aAAa,EAClB,SAAS,CACV;AACD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAC7C,aAAa,EACb,MAAM,EACN,KAAK,CACe;AACtB,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ;AACzC,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;AACjD,QAAA,OAAO,aAAa;IACtB;AAEA,IAAA,YAAY,CACV,IAAa,EACb,EAAW,EACX,SAA8B,EAAA;AAE9B,QAAA,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IAC/D;AAEQ,IAAA,uBAAuB,CAAC,MAAkC,EAAA;QAChE,IAAI,CAAC,iBAAiB,GAAG;YACvB,GAAG,IAAI,CAAC,iBAAiB;AACzB,YAAA,GAAG,MAAM;SACV;IACH;8GAhNW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAGd,qBAAqB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BrC,spBAmBA,EAAA,MAAA,EAAA,CAAA,iuEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDSa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,spBAAA,EAAA,MAAA,EAAA,CAAA,iuEAAA,CAAA,EAAA;8BAGT,SAAS,EAAA,CAAA;sBAAlB;gBAGD,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,qBAAqB;gBAG1B,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAGY,YAAY,EAAA,CAAA;sBAAxB;gBAGY,eAAe,EAAA,CAAA;sBAA3B;gBAGY,UAAU,EAAA,CAAA;sBAAtB;gBAGY,SAAS,EAAA,CAAA;sBAArB;gBAGY,WAAW,EAAA,CAAA;sBAAvB;gBAyCD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEpExB,aAAa,CAAA;AAMxB,IAAA,WAAA,CAAY,IAAW,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AAClC,QAAA,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;IAClD;;IAGA,OAAO,UAAU,CAAC,GAAoC,EAAA;AACpD,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACnD,QAAA,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC;IACtC;;AAGA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;;IAGA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,EAAE;IAChB;;IAGA,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,QAAA,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC;IAChC;;IAGA,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;QAC1B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC;IACpC;;IAGA,QAAQ,GAAA;AACN,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;QAC1B,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAChD,QAAA,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC;IACpC;;IAGA,YAAY,GAAA;AACV,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI;QAC9B,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACxD,QAAA,OAAO,IAAI,aAAa,CAAC,YAAY,CAAC;IACxC;8GAzDW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAb,aAAa,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;;MCCY,wBAAwB,CAAA;AAgBnC,IAAA,WAAA,CAAoB,EAAsB,EAAA;QAAtB,IAAA,CAAA,EAAE,GAAF,EAAE;;;AAZZ,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;QAInD,IAAA,CAAA,IAAI,GAAiB,QAAQ;AAEtC,QAAA,IAAA,CAAA,UAAU,GAAW,EAAE,CAAA;AACvB,QAAA,IAAA,CAAA,SAAS,GAAW,EAAE,CAAA;QAGd,IAAA,CAAA,IAAI,GAAmB,EAAE;;QAI/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;AACV,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IACE,OAAO,CAAC,cAAc;AACtB,YAAA,CAAC,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE;AACvC,YAAA,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE;AAC3C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAChC;YACA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC;QACvE;IACF;IAEA,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,UAAU,GAAG,aAAa,EAAE;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE;;QAG/B,IAAI,CAAC,sBAAsB,EAAE;;QAG7B,IAAI,IAAI,CAAC,cAAc;YACrB,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;IACzD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/C;IAEA,iBAAiB,GAAA;AACf,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAC5C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAC5B,CAAC,aAAa,EAAE;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC;IACjD;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAC5B,CAAC,SAAS,EAAE;AACb,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC;IAC7C;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,CAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAC5B,CAAC,YAAY,EAAE;AAChB,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC;IAChD;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAC5B,CAAC,QAAQ,EAAE;AACZ,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC;IAC5C;AAGA,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU;YAAE;QACxD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;AAAE,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE;AAC1D,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU;AAAE,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE;QAC1D;AACA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE;AAC3D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC3D;IAEQ,sBAAsB,GAAA;;AAE5B,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CACrD,YAAY,CAAC,CAAC,CAAC;AACf,QAAA,GAAG,CAAC,CAAC,KAAsC,KACzC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAChC,EACD,oBAAoB,CAClB,CAAC,IAAmB,EAAE,IAAmB,KACvC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CACpC,CACF;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,OAAO,CAAC,SAAS,CAAC;AAChB,YAAA,IAAI,EAAE,CAAC,KAAoB,KAAI;;AAE7B,gBAAA,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC5C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAChE,oBAAA,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC5D;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC,CAAC;AACF,SAAA,CAAC,CACH;IACH;8GAtHW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,iSC7BrC,2sCAiDA,EAAA,MAAA,EAAA,CAAA,wtFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAX,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDpBa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,2sCAAA,EAAA,MAAA,EAAA,CAAA,wtFAAA,CAAA,EAAA;yFAMT,cAAc,EAAA,CAAA;sBAAvB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAyED,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AE/FrC;AAAC,CAAC,MAAK;;IAEL,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,GAAG;AACX,YAAA,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YACpB,MAAM,CAAC,SAAS,GAAG,SAAS,EAAA;gBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;gBACjC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;AAAE,oBAAA,EAAE,EAAE;AACjD,gBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACxB,OAAO,SAAS,KAAK;sBACjB,CAAA,KAAA,EAAQ,EAAE,CAAA;AACZ,sBAAE,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,EAAE,EAAE;YAC/B,CAAC;SACF;IACH;AACF,CAAC,GAAG;;MCAS,mBAAmB,CAAA;AAmC9B,IAAA,IAAuC,YAAY,GAAA;QACjD,OAAO,IAAI,CAAC,kBAAkB;IAChC;AAEA,IAAA,IAAmC,QAAQ,GAAA;QACzC,OAAO,IAAI,CAAC,IAAI;IAClB;IAiBA,WAAA,CACU,UAAsB,EACtB,QAAmB,EAAA;QADnB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QA3Da,IAAA,CAAA,gBAAgB,GAC7C,IAAI;;AAGI,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;;AAGzC,QAAA,IAAA,CAAA,cAAc,GAAY,OAAO,CAAC,MAAM;;QAExC,IAAA,CAAA,YAAY,GAAsB,EAAE;;QAEpC,IAAA,CAAA,eAAe,GAAc,EAAE;;QAE/B,IAAA,CAAA,eAAe,GAAG,CAAC;;QAInB,IAAA,CAAA,MAAM,GAAuB,OAAO;;QAEpC,IAAA,CAAA,IAAI,GAAiB,QAAQ;AAOtC;;;AAGG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK;;QAEvB,IAAA,CAAA,IAAI,GAAsB,OAAO;;;QAe1C,IAAA,CAAA,YAAY,GAAW,EAAE;;QAGzB,IAAA,CAAA,2BAA2B,GAAW,EAAE;;QAGxC,IAAA,CAAA,kBAAkB,GAAqB,QAAQ;QAEvC,IAAA,CAAA,IAAI,GAAmB,EAAE;IAK9B;AAEH,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IACE,OAAO,CAAC,QAAQ;AAChB,YAAA,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY;AAC/B,YAAA,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,EACjC;;AAEA,YAAA,MAAM,cAAc,GAAG,IAAI,aAAa,CACtC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CACxC;AACD,YAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;QAC3C;AAEA,QAAA,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE;AACjE,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CACzD,IAAI,CAAC,cAAc,EACnB,OAAO,CAAC,YAAY,CAAC,YAAY,IAAI,EAAE,CACxC;QACH;IACF;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;;AAG1D,QAAA,MAAM,QAAQ,GACZ,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ;AACtC,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxB,cAAE,IAAI,IAAI,EAAE;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC;QAEjD,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,mBAAmB,EAAE;IACtD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,oBAAoB,CAAC,QAAuB,EAAA;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAC9B,QAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CACzD,QAAQ,EACR,IAAI,CAAC,YAAY,CAClB;IACH;AAEA;;;;;;;AAOG;IACH,mBAAmB,CACjB,QAAuB,EACvB,YAAgC,EAAA;AAEhC,QAAA,IAAI,CAAC,YAAY;YAAE,YAAY,GAAG,EAAE;;AAEpC,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI;;QAGjC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI;;QAGnD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI;;AAG3C,QAAA,MAAM,eAAe,GAAG,CAAC,CAAO,EAAE,CAAO,KACvC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;;AAGtE,QAAA,OAAO;aACJ,GAAG,CAAC,CAAC,CAAgB,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC;aACrC,MAAM,CACL,CAAC,CAAO,KACN,eAAe,CAAC,CAAC,EAAE,aAAa,CAAC;AACjC,YAAA,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC;AAC/B,YAAA,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAChC;IACL;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,IAAU,EAAA;;QAEzB,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK;YAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,IAAI,CAAC,oBAAoB,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACpD;IAEA,mBAAmB,GAAA;AACjB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;AAChD,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa;AAEvC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG;QAE3B,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAC7B,QAAA,IAAI,mBAA2B;AAE/B,QAAA,IAAI,UAAU,IAAI,iBAAiB,EAAE;AACnC,YAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;YAClC,mBAAmB,GAAG,iBAAiB;QACzC;AAAO,aAAA,IAAI,UAAU,IAAI,iBAAiB,EAAE;AAC1C,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YAC/B,mBAAmB,GAAG,iBAAiB;QACzC;AAAO,aAAA,IAAI,UAAU,GAAG,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,YAAA,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACxE;aAAO;AACL,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC/B,YAAA,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACxE;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAA,EAAG,mBAAmB,CAAA,EAAA,CAAI,CAAC;IAC9E;8GAjMW,mBAAmB,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,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,srBC7BhC,66CAwDA,EAAA,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAS,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD3Ba,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,66CAAA,EAAA,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA;uGAGY,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB;gBAInB,aAAa,EAAA,CAAA;sBAAtB;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAKQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEsC,YAAY,EAAA,CAAA;sBAAlD,WAAW;uBAAC,oBAAoB;gBAIE,QAAQ,EAAA,CAAA;sBAA1C,WAAW;uBAAC,gBAAgB;;;AErC/B;;;;;;;;;;;;;;AAcG;AAOG,MAAO,kBACX,SAAQ,iCAAiC,CAAA;AASzC,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;AAEA,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;IAsDA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,SAA2B,EAC3B,UAAsB,EACtB,GAAsB,EAAA;QAEhC,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC;QARjC,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,GAAG,GAAH,GAAG;;QAtE0B,IAAA,CAAA,KAAK,GAC5C,YAAY;;QAWL,IAAA,CAAA,IAAI,GAAiB,QAAQ;;QAE7B,IAAA,CAAA,QAAQ,GAAG,KAAK;AACzB;;;AAGG;QACM,IAAA,CAAA,YAAY,GAAsB,EAAE;AAC7C;;;AAGG;QACM,IAAA,CAAA,eAAe,GAAc,EAAE;;QAE/B,IAAA,CAAA,OAAO,GAAG,CAAC;;AAQX,QAAA,IAAA,CAAA,cAAc,GAAY,OAAO,CAAC,MAAM;;QAExC,IAAA,CAAA,qBAAqB,GAAG,IAAI;;QAE5B,IAAA,CAAA,aAAa,GAAG,KAAK;AAE9B;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsB,OAAO;QAEjC,IAAA,CAAA,eAAe,GAAG,KAAK;;;;QAMhC,IAAA,CAAA,KAAK,GAAG,KAAK;;AAGb,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAG/D,QAAA,IAAA,CAAA,eAAe,GAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;;AAElE,QAAA,IAAA,CAAA,cAAc,GAAsB,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;;AAEhE,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,OAAO,EAAW;;IAalD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;IACnC;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,IAAU,EAAA;;QAErB,IAAI,CAAC,KAAK,GAAG,iCAAiC,CAAC,aAAa,CAAC,IAAI,CAAC;;AAElE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAClE;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,WAAgB,EAAA;;QAE5B,MAAM,KAAK,GAAG,CAAA,EAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAA,CAAE;;;AAIlD,QAAA,MAAM,UAAU,GAAG,iCAAiC,CAAC,aAAa,CAChE,IAAI,CAAC,aAAa,CAAC,MAAO,CAAC,KAAK,CAAC,CAClC;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU;;AAGvB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;;AAGG;AAEH,IAAA,WAAW,CAAC,KAAoB,EAAA;QAC9B,IAAI,IAAI,CAAC,qBAAqB,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;AACtD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACxB;;IAGA,gBAAgB,GAAA;QACd,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;;IAGA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACtB;AAEA;;;;AAIG;IACK,QAAQ,CAAC,KAAK,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;;AAEf,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;QACzB;;AAEA,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,IAAI,EAAE,MAAK;;AAET,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC7B,CAAC;AACF,aAAA,CAAC;QACJ;;AAGA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;;;;;AAKrB,gBAAA,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE;gBACtC,MAAM,mBAAmB,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAC1C,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,aAAa,CAC3C;AACD,gBAAA,IAAI,mBAAmB;oBAAE;;AAEzB,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC7B,CAAC;AACF,SAAA,CAAC;IACJ;AA1LW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,yEAyEnB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAV,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzEd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,myBCpD/B,w9KA4LA,EAAA,MAAA,EAAA,CAAA,wmPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAf,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDxIa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,cAGpC,KAAK,EAAA,QAAA,EAAA,w9KAAA,EAAA,MAAA,EAAA,CAAA,wmPAAA,CAAA,EAAA;;0BAyEd;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;iIApEzB,eAAe,EAAA,CAAA;sBADd,SAAS;uBAAC,sBAAsB;gBAGQ,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGD,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAIM,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAKjB,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAKQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,qBAAqB,EAAA,CAAA;sBAA7B;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBA8ED,WAAW,EAAA,CAAA;sBADV,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;ME/IxB,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,iBApB7B,iBAAiB;YACjB,qBAAqB;YACrB,cAAc;YACd,aAAa;YACb,wBAAwB;YACxB,mBAAmB;YACnB,kBAAkB;AAClB,YAAA,WAAW,aAGX,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,eAAe;YACfY,qBAAmB;YACnB,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAGZ,kBAAkB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAEtC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAV7B,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,eAAe;YACfA,qBAAmB;YACnB,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtBhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,qBAAqB;wBACrB,cAAc;wBACd,aAAa;wBACb,wBAAwB;wBACxB,mBAAmB;wBACnB,kBAAkB;wBAClB,WAAW;AACZ,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACfA,qBAAmB;wBACnB,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;AACnD,iBAAA;;;ACrCD;;AAEG;;ACFH;AAMA;;;;AAIG;AACI,MAAM,UAAU,GAAG,CACxB,IAAsB,EACtB,GAAG,IAAsD,KAClC;IACvB,OAAO,MAAM,CAAC,MAAM,CAClB;AACE,QAAA,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAC/B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI;AACjC,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,uBAAuB,EAAE,IAAI;AAC7B,QAAA,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,CAAC;AACX,cAAE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY;AAC5B,cAAE,IAAI,IAAI,EAAE,EACZ,WAAW,EAAE;AACf,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,QAAQ,EAAE,CAAC;AACX,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,cAAc,EAAE,SAAS;AACzB,QAAA,GAAG,EAAE,IAAI;KACa,EACxB,GAAG,IAAI,CACR;AACH,CAAC;AAED;;;;AAIG;AACI,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,MAAe,KAAI;AAC5D,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,IAAI;IACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC9E,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;AAEG;AACI,MAAM,mBAAmB,GAAG,MAAK;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,IAAA,QACE,CAAC,WAAW,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC;AAChE,QAAA,UAAU,IAAI,MAAM;QACpB,YAAY,IAAI,MAAM;AAE1B,CAAC;AAED;;;;AAIG;AACI,MAAMC,MAAI,GAAG,CAClB,MAAS,EACT,GAAG,IAAS,KACE;IACd,MAAM,IAAI,GAAQ,EAAE;AACpB,IAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb,CAAC;AAED;;;AAGG;AACI,MAAM,aAAa,GACxB,CAAC,EACC,gBAAgB,GAAG,CAAC,EACpB,eAAe,GAAG,IAAI,EACtB,mBAAmB,GAAG,EAAE,GAAA,GAKtB,EAAE,KACN,CAAC,QAAyB,KAAI;IAC5B,OAAO,QAAQ,CAAC,IAAI,CAClB,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,KAAI;AACpB,QAAA,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC;;;QAG1B,IACE,YAAY,GAAG,gBAAgB;AAC/B,YAAA,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EACnD;AACA,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;QACA,OAAO,CAAC,IAAI,CACV,CAAA,QAAA,EAAW,YAAY,CAAA,cAAA,EAAiB,YAAY,GAAG,eAAe,CAAA,EAAA,CAAI,CAC3E;AACD,QAAA,OAAO,KAAK,CAAC,YAAY,GAAG,eAAe,CAAC;AAC9C,IAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MACP,OAAO,CAAC,IAAI,CACV,CAAA,aAAA,EAAgB,gBAAgB,iCAAiC,CAClE,CACF,CACF;AACH,CAAC;;MCnGU,SAAS,CAAA;AACpB,IAAA,WAAA,CAA6B,OAAwB,EAAA;QAAxB,IAAA,CAAA,OAAO,GAAP,OAAO;QAG5B,IAAA,CAAA,MAAM,GAAe,EAAE;IAHyB;AAYxD,IAAA,SAAS,CACP,KAAgE,EAAA;AAEhE,QAAA,IAAI,CAAC,KAAK,KAAK,EAAE,KAAK,YAAY,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;AACpE,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEhB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QACjD;QAEA,MAAM,aAAa,GAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAClE,KAAY,CACb;QAED,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,YAAA,aAAa,CAAC,WAAW,CAAC,CAAC,CAA6B,KAAI;gBAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AAClC,YAAA,CAAC,CAAC;QACJ;QACA,OAAO,IAAI,CAAC,MAAM;IACpB;8GApCW,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAT,SAAS,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,OAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;;AAwCD;;;;AAIG;MAMU,eAAe,CAAA;AAL5B,IAAA,WAAA,GAAA;AAMmB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC;QAG1C,IAAA,CAAA,MAAM,GAAe,EAAE;AAmChC,IAAA;AA1BC,IAAA,SAAS,CACP,KAAgE,EAAA;AAEhE,QAAA,IAAI,CAAC,KAAK,KAAK,EAAE,KAAK,YAAY,GAAG,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE;AACpE,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEhB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;QACjD;QAEA,MAAM,aAAa,GAAiC,IAAI,CAAC,MAAM,CAAC,IAAI,CAClE,KAAY,CACb;QAED,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;YAChB,aAAa,CAAC,WAAW,CACvB,CAAC,EAAE,YAAY,EAA8B,KAAI;AAC/C,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;AAChC,YAAA,CAAC,CACF;QACH;QACA,OAAO,IAAI,CAAC,MAAM;IACpB;8GAtCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;AC9DD;MAiDa,qBAAqB,CAAA;AANlC,IAAA,WAAA,GAAA;;QAW2C,IAAA,CAAA,KAAK,GAC5C,WAAW;;QASJ,IAAA,CAAA,aAAa,GAAkB,EAAE;;AAGjC,QAAA,IAAA,CAAA,SAAS,GAAW,GAAG,GAAG,IAAI,GAAG,IAAI;;QAGrC,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAGf,IAAA,CAAA,IAAI,GAAG,IAAI;;QAGX,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAGf,IAAA,CAAA,aAAa,GAAG,CAAC;AAE1B;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK;;AAGlB,QAAA,IAAA,CAAA,QAAQ,GAAa;AAC5B,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,SAAS,EAAE,WAAW;AACtB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;SACb;;QAGQ,IAAA,CAAA,aAAa,GAAa,EAAE;;QAG5B,IAAA,CAAA,UAAU,GAAoB,IAAI;;AAGjC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB;;AAGlD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAuB;;QAGhE,IAAA,CAAA,mBAAmB,GAAG,mBAAmB,EAAE;;QAE3C,IAAA,CAAA,cAAc,GAAkB,QAAQ;;AAExC,QAAA,IAAA,CAAA,KAAK,GAAqC,IAAI,GAAG,EAAE;;QAInD,IAAA,CAAA,QAAQ,GAAa,EAAE;;QAEvB,IAAA,CAAA,OAAO,GAAG,KAAK;AAygBhB,IAAA;AArgBC;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,OAAO,OAAO,CAAC,KAAK,CAClB,+EAA+E,CAChF;QACH;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACjE,gBAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,oBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE;AAClD,wBAAA,QAAQ,EAAE,GAAG;wBACb,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;wBACtD,wBAAwB,EAAE,IAAI,CAAC,aAAa,CAC1C,OAAO,CAAC,wBAAwB,CACjC;AACF,qBAAA,CAAC;oBACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC;oBAC7C,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,YAAY,EACZ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,0BAA0B,EAC1B,yBAAyB,CAC1B,CACF;;AAGD,oBAAA,IACE,YAAY,CAAC,WAAW,KAAK,UAAU;AACvC,wBAAA,YAAY,CAAC,WAAW,KAAK,YAAY,EACzC;wBACA,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC;oBACjD;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;IACF;;IAGA,WAAW,GAAA;QACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,YAAA,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE;AAClC,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;AACpC,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,gBAAA,IAAI,CAAC,wBAAwB,GAAG,WAAW;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,QAAQ,EACR,0BAA0B,CAC3B,CACF;YACH;AACF,QAAA,CAAC,CAAC;IACJ;;AAIA,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACtC,MAAM,mBAAmB,GAAG,CAAA,yEAAA,CAA2E;AACtG,YAAA,CAAE,KAAa,IAAK,MAAM,CAAC,KAAa,EAAE,WAAW;AACpD,gBAAA,mBAAmB;AACrB,YAAA,OAAO,mBAAmB;QAC5B;QACA;IACF;;;AAKA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,KAAK,CAAC,cAAc,EAAE;;AAEtB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;IAC9B;;AAGA,IAAA,WAAW,CAAC,KAAgB,EAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;IAChC;;AAGA,IAAA,MAAM,CAAC,KAAwB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;AAE9B,QAAA,IAAI,KAA2B;;QAG/B,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,YAAY,EAAE;AACpD,YAAA,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK;QAClC;aAAO,IACL,KAAK,CAAC,MAAM;YACZ,KAAK,CAAC,MAAM,YAAY,gBAAgB;AACxC,YAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAClB;AACA,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;QAC5B;QAEA,IAAI,KAAK,EAAE;YACT,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;gBAC/C,IAAI,KAAK,GAAG,KAAK;gBACjB,IAAI,UAAU,GAAkB,IAAI;;gBAEpC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;oBAC9B,KAAK,GAAG,IAAI;oBACZ,UAAU,GAAG,WAAW;gBAC1B;;AAEA,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;oBACzC,KAAK,GAAG,IAAI;oBACZ,UAAU,GAAG,WAAW;gBAC1B;;AAEA,gBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,EAAE;AACpC,oBAAA,wBAAwB,EAAE,UAAU;oBACpC,WAAW,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAgB;AAC1D,iBAAA,CAAC;;AAGF,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,oBAAA,WAAW,EAAE,OAAO;oBACpB,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAChC,iBAAA,CAAC;gBAEF,IAAI,KAAK,EAAE;;AAET,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,wBAAA,WAAW,EAAE,SAAS;wBACtB,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC/B,wBAAA,MAAM,EAAE,SAAS;AACjB,wBAAA,wBAAwB,EAAE,UAAU;AACrC,qBAAA,CAAC;gBACJ;AAEA,gBAAA,OAAO,YAAY;AACrB,YAAA,CAAC,CAAC;;YAGF,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;;AAEhC,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;oBAAE;AAC9C,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AAC7B,gBAAA,CAAC,EAAE;YACL;;YAGA,IACE,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,MAAM,YAAY,gBAAgB;AACxC,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAClB;AACA,gBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;YACzB;YAEA,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;;IAGA,QAAQ,CAAC,EAAU,EAAE,KAAkB,EAAA;;AAErC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI;YAAE;;AAEX,QAAA,IACE,IAAI,CAAC,WAAW,KAAK,OAAO;YAC5B,IAAI,CAAC,WAAW,KAAK,SAAS;AAC9B,YAAA,IAAI,CAAC,WAAW,KAAK,SAAS,EAC9B;AACA,YAAA,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9D;aAAO;AACL,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC5B;IACF;;AAGA,IAAA,eAAe,CAAC,KAAuC,EAAA;AACrD,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK;AAC/B,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;;AAG5B,QAAA,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,gBAAA,IAAI,CAAC,wBAAwB,GAAG,WAAW;AAC3C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,QAAQ,EACR,0BAA0B,CAC3B,CACF;gBACD;;AAGF,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC;AACF,qBAAA,UAAU,CAAC,IAAI,CAAC,EAAE;AAClB,qBAAA,SAAS,CAAC;oBACT,KAAK,EAAE,OAAO,CAAC,IAAI;iBACpB;qBACA,GAAG,CAAC,MAAK;;AAER,oBAAA,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE;AAClC,oBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,oBAAA,IAAI,CAAC,wBAAwB,GAAG,WAAW;AAC3C,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,QAAQ,EACR,0BAA0B,CAC3B,CACF;AACH,gBAAA,CAAC,CAAC;gBACJ;;AAGF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,MAAM;gBACT;AAAC,gBAAA,CAAC,IAAI,CAAC,OAAO,CAAC;sBACX,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI;sBAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAEjC,qBAAA,SAAS,CAAC;oBACT,KAAK,EAAE,OAAO,CAAC,IAAI;iBACpB;qBACA,GAAG,CAAC,MAAK;;oBAER,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,oBAAA,MAAM,KAAK,GAAGA,MAAI,CAChB,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,0BAA0B,EAC1B,yBAAyB,CAC1B;AACD,oBAAA,KAAK,CAAC,WAAW,GAAG,SAAS;AAC7B,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9B,gBAAA,CAAC,CAAC;gBACJ;;AAGF,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,SAAS;AACd,YAAA;gBACE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,oBAAA,GAAGA,MAAI,CACL,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,0BAA0B,EAC1B,yBAAyB,CAC1B;AACD,oBAAA,WAAW,EAAE,SAAS;AACvB,iBAAA,CAAC;gBACF;;IAEN;;IAGA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;;QAElC,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,WAAW;AACjD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;;YAE1B,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO;gBAAE;AAC/C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,SAAS,CAAC;AAClE,gBAAA,IAAI,EAAE,CAAC,KAAK,KAAI;AACd,oBAAA,QAAQ,KAAK,CAAC,IAAI;wBAChB,KAAK,aAAa,CAAC,cAAc;;AAE/B,4BAAA,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE;AACpC,gCAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,gCAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAACA,MAAI,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;4BAC9D;4BACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CACxB,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,CAC5C;AACD,4BAAA,IAAI,CAAC,WAAW,GAAG,WAAW;4BAC9B;wBAEF,KAAK,aAAa,CAAC,QAAQ;AACzB,4BAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE;;gCAElB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;;gCAE1B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/B,gCAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;gCACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;;gCAEzD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;4BAC/B;4BAEA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,yBAAyB,CAC1B,CACF;;AAGD,4BAAA,IACE,IAAI,CAAC,WAAW,KAAK,UAAU;AAC/B,gCAAA,IAAI,CAAC,WAAW,KAAK,YAAY,EACjC;gCACA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;4BACzC;;gCAAO,IAAI,CAAC,qBAAqB,EAAE;AACnC,4BAAA,IAAI,CAAC,OAAO,GAAG,KAAK;4BACpB;;gBAEN,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,oBAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AACnB,oBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,oBAAA,IAAI,CAAC,MAAM,GAAG,SAAS;;oBAEvB,IAAI,CAAC,uBAAuB,GAAG;AAC7B,wBAAA,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,0BAA0B,EAAE;qBAC9D;oBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,yBAAyB,CAC1B,CACF;AACD,oBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACtB,CAAC;AACF,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,QAAgB,EAAA;;AAEnC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;QAC5D,KAAK,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE;AACnD,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;AACtC,gBAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,oBAAA,OAAO,WAAkB;YAC7D;iBAAO;gBACL,IAAI,SAAS,KAAK,QAAQ;AAAE,oBAAA,OAAO,WAAkB;YACvD;QACF;AACA,QAAA,OAAO,OAAO;IAChB;;AAGA,IAAA,kBAAkB,CAAC,KAAwB,EAAA;AACzC,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7B;;AAGA,IAAA,eAAe,CAAC,IAAyB,EAAA;QACvC,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE;IAC1E;AAEA;;;;AAIG;IACK,aAAa,CAAC,IAAyB,EAAE,KAAa,EAAA;QAC5D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QACnB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK;AACjC,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;YACb,MAAM,gBAAgB,GACpB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;kBACzB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI;kBAChC,IAAI,CAAC,OAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACxC,YAAA,OAAO,gBAAgB;AACzB,QAAA,CAAC,CAAC,EACF,SAAS,CACP,aAAa,CAAC;YACZ,gBAAgB,EAAE,IAAI,CAAC,aAAa;AACrC,SAAA,CAAC,CACH,EACD,GAAG,CAAC,CAAC,UAAU,KAAI;;YAEjB,IAAI,UAAU,EAAE;;gBAEd,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;AACrC,oBAAA,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;oBAC/B,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAChD,UAAU,CAAC,wBAAwB,CACpC;AACD,oBAAA,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,uBAAuB;oBACjE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,0BAA0B,EAC1B,yBAAyB,CAC1B,CACF;gBACH;YACF;AACF,QAAA,CAAC,CAAC;;QAEF,MAAM,CACJ,CAAC,OAAO,KACN,CAAC,CAAC,OAAO;YACT,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU;YACxD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,YAAY,CAC7D;;QAED,IAAI,CAAC,CAAC,CAAC;AAER,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAK;gBACT,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACtC,IAAI,CAAC,qBAAqB,EAAE;gBAC9B;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjB,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,gBAAA,IAAI,CAAC,MAAM,GAAG,SAAS;AACvB,gBAAA,IAAI,CAAC,wBAAwB,GAAG,WAAW;gBAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CACnBA,MAAI,CACF,IAAI,EACJ,aAAa,EACb,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,0BAA0B,CAC3B,CACF;gBACD,IAAI,CAAC,qBAAqB,EAAE;YAC9B,CAAC;AACF,SAAA,CAAC;IACN;AAEQ,IAAA,aAAa,CAAC,IAA+B,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YACvE,OAAO,IAAI,IAAI,IAAI;QACrB;aAAO;AACL,YAAA,OAAO,WAAW;QACpB;IACF;AAEA;;AAEG;AACK,IAAA,iBAAiB,CAAC,KAA6B,EAAA;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CACrC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,YAAY,CAC5C;IACH;AAEA;;AAEG;AACK,IAAA,gBAAgB,CAAC,KAA6B,EAAA;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CACrC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,WAAW,CAC3C;IACH;AAEA;;AAEG;IACK,qBAAqB,GAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC5C,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,MAAM;AAAE,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;QACpE,CAAC,EAAE,IAAI,CAAC;IACV;8GAjlBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,6rBCjDlC,g2UAiTA,EAAA,MAAA,EAAA,CAAA,ozSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAc,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDhQa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cAGd,KAAK,EAAA,QAAA,EAAA,g2UAAA,EAAA,MAAA,EAAA,CAAA,ozSAAA,CAAA,EAAA;8BAIU,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB;gBAGc,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAIxB,OAAO,EAAA,CAAA;sBAAf;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAMQ,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAYQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAGS,YAAY,EAAA,CAAA;sBAArB;gBAoFD,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC;;;MEpKpC,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,CAVd,SAAS,EAAE,qBAAqB,aAN7C,gBAAgB;YAChB,eAAe;YACfC,iBAAe;YACf,oBAAoB;AACpB,YAAA,YAAY,aASJ,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,SAAA,EATlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,QAAQ,EAAE,UAAU;AACrB,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAZC,gBAAgB;YAChB,eAAe;YACfA,iBAAe;YACf,oBAAoB;YACpB,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAYH,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,gBAAgB;wBAChB,eAAe;wBACfA,iBAAe;wBACf,oBAAoB;wBACpB,YAAY;AACb,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,SAAS,EAAE,qBAAqB,CAAC;AAChD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;AACxB,4BAAA,QAAQ,EAAE,UAAU;AACrB,yBAAA;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;MCnBY,+BAA+B,CAAA;AAN5C,IAAA,WAAA,GAAA;QAgBE,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,KAAK,GAAG,EAAE;AAEV;;;AAGK;AACL,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;AAoE3C,IAAA;AAlEC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,OAAO;AAChD,QAAA,IAAI,WAAW,EAAE,YAAY,IAAI,IAAI;YACnC,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,WAAW,CAAC,YAAY,EAAE;AAC3C,QAAA,IAAI,eAAe,EAAE,YAAY,IAAI,IAAI;YACvC,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,eAAe,CAAC,YAAY,EAAE;QAChD,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAE9D,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC;;QAG3E,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE;YAC3C;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;IACxC;AAEA;;;;;;;;;;AAUG;IACK,kBAAkB,CACxB,YAAsB,EACtB,aAAuB,EAAA;AAEvB,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC;AAEZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;YAE5C,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAAE;;YAG5B,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,OAAO,GAAG,CAAC;AACf,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAE7C,oBAAA,IAAI,OAAO,KAAK,aAAa,CAAC,MAAM,EAAE;wBACpC,KAAK,GAAG,CAAC;AACT,wBAAA,GAAG,GAAG,KAAK,GAAG,CAAC;wBACf;oBACF;oBACA,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC;AAAE,wBAAA,OAAO,EAAE;AACxD,yBAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,wBAAA,SAAQ;;AACL,wBAAA,MAAK;gBACZ;YACF;QACF;AACA,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;IACvB;8GApFW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,sLCR5C,6TAMA,EAAA,MAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDEa,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,cAGxB,KAAK,EAAA,QAAA,EAAA,6TAAA,EAAA,MAAA,EAAA,CAAA,iCAAA,CAAA,EAAA;8BAIV,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;;;MEqBU,yBAAyB,CAAA;IACpC,IAAa,QAAQ,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAqBA,IAAA,IAAuC,YAAY,GAAA;QACjD,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AA6DA,IAAA,WAAA,CAGY,cAA8B,EAChC,QAAmB,EACnB,KAAiB,EAAA;QAFf,IAAA,CAAA,cAAc,GAAd,cAAc;QAChB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,KAAK,GAAL,KAAK;;QArFN,IAAA,CAAA,YAAY,GAAG,EAAE;;AAWO,QAAA,IAAA,CAAA,EAAE,GAAI,MAAc,CAAC,IAAI,EAAE,MAAM,EAAE;;QAG3B,IAAA,CAAA,KAAK,GAC5C,UAAU;AAUZ;;;;AAIK;QACI,IAAA,CAAA,uBAAuB,GAAG,IAAI;AAEvC;;;;AAIG;QACM,IAAA,CAAA,eAAe,GAAG,IAAI;AAE/B;;;AAGG;QACM,IAAA,CAAA,eAAe,GAAG,KAAK;AAEtB,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAO;AAExD;;;AAGG;AACO,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAE3C;;;AAGG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;;QAGxC,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;;QAKvB,IAAA,CAAA,gBAAgB,GAAqB,QAAQ;AAErC,QAAA,IAAA,CAAA,aAAa,GACnB,IAAIC,eAAa,EAA8B;QACzC,IAAA,CAAA,SAAS,GAAG,KAAK;AACjB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAW;QAQhC,IAAA,CAAA,iBAAiB,GAAU,EAAE;QASnC,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IACtE;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CACvC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAC1C;IACL;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW;YAC/C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY;AACjD,QAAA,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ;YAC1D,IAAI,CAAC,qBAAqB,EAAE;IAChC;AAEA;;;AAGG;AACH,IAAA,OAAO,CAAC,MAAW,EAAA;QACjB,OAAO,SAAS,IAAI,MAAM;IAC5B;;IAGA,WAAW,CAAC,MAAW,EAAE,KAAY,EAAA;QACnC,IAAI,MAAM,CAAC,QAAQ;YAAE;QAErB,IACE,CAAC,IAAI,CAAC,uBAAuB;AAC7B,YAAA,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EACzD;AACA,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE;IACzB;AAEA;;AAEG;IACH,WAAW,CAAC,QAAQ,GAAG,IAAI,EAAA;;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QAEzB,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,IAAI,CAAC,mBAAmB,EAAE;YAC5B;YACA,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,sBAAsB,EAAE;YAC7B,IAAI,CAAC,wBAAwB,EAAE;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,qBAAqB,EAAE,WAAW,EAAE;AACzC,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;;AAEvC,YAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;AACtC,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS;QACtC;IACF;AAEA;;AAEG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CACxD,IAAI,CAAC,OAAO,EACZ,CAAC,IAAI,CAAC,gBAAgB,CACvB;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;AAEA;;;;;;AAMG;IACH,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE;AAC3D,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CACpD,CAAC,MAAM,KACL,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,EAAE,GAAG,CAC/D;YACD,IAAI,aAAa,GAAG,CAAC,CAAC;AAAE,gBAAA,OAAO,aAAa;QAC9C;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC;IACzE;AAEA;;;;AAIK;AACL,IAAA,UAAU,CAAC,IAAiB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;IAC5C;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAoB,EAAA;;QAE5B,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,IAAI;AAC3D,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,GAAG,CAAC;YACT,KAAK,SAAS,CAAC;YACf,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,OAAO,KAAK;YACd,KAAK,OAAO;gBACV,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACvD,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBACjC;AACA,gBAAA,OAAO,KAAK;YACd,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;gBACtB,KAAK,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBACpB;AACA,gBAAA,OAAO,KAAK;;AAEhB,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACH,IAAA,OAAO,CAAC,KAAoB,EAAA;;AAE1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE;AACpE,QAAA,IAAI,MAAM;AAEV,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAClB;YAEF,KAAK,GAAG;gBACN,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC/B;YAEF,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;gBAEpB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,SAAS;AACZ,gBAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC;oBAAE,IAAI,CAAC,WAAW,EAAE;AACvC,qBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;oBAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBAEtD,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,WAAW;gBACd,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;oBACtD,IAAI,CAAC,WAAW,EAAE;qBACf,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;AAC7D,oBAAA,IAAI,CAAC,WAAW,GAAG,CAAC;gBAEtB,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;YAEF,KAAK,KAAK;gBACR,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;gBAEpD,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACjD,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;gBACjC;;IAEN;;IAGA,sBAAsB,GAAA;QACpB,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAgB,QAAQ,EAAE,OAAO;AAClE,aAAA,IAAI,CACHC,QAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAC3BC,WAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAExB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9C;;IAGA,wBAAwB,GAAA;QACtB,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAgB,QAAQ,EAAE,SAAS;AACtE,aAAA,IAAI,CACHD,QAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAC3BC,WAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAExB,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD;AAEA;;;AAGG;IACH,cAAc,CAAC,MAAW,EAAE,YAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;YAAE;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACpC,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,CAClE;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;QAChC,IAAI,SAAS,EAAE;YACb,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;;YAGhE,UAAU,CAAC,MAAK;AACd,gBAAA,cAAc,CAAC,SAAS,CAAC,aAAa,EAAE;AACtC,oBAAA,UAAU,EAAE,WAAW;AACvB,oBAAA,KAAK,EAAE,SAAS;AACjB,iBAAA,CAAC;gBAEF,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS;gBAC7D,IAAI,KAAK,EAAE;AACT,oBAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBAClD;gBACA,IAAI,YAAY,EAAE;AAChB,oBAAA,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;gBACjC;YACF,CAAC,EAAE,CAAC,CAAC;QACP;IACF;AAEA;;;;AAIG;IACH,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa;;AAEzC,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa;QAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,oBAAoB,CAAC;AACjE,QAAA,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE;AAElD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,MAAM;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG;QAE3B,MAAM,MAAM,GAAG,EAAE;QACjB,MAAM,UAAU,GAAG,GAAG;QACtB,MAAM,mBAAmB,GAAG,GAAG;AAC/B,QAAA,IAAI,iBAAiB;AAErB,QAAA,IAAI,UAAU,IAAI,mBAAmB,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;YAChC,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,UAAU,IAAI,mBAAmB,EAAE;AAC5C,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;YAC7B,iBAAiB,GAAG,mBAAmB;QACzC;AAAO,aAAA,IAAI,UAAU,GAAG,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChC,YAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/D;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/D;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAI,CAAC;IAC9E;AA5YW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,kBA4F1B,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5Fd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,wwBCjCtC,+oIA8HA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD7Fa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,+oIAAA,EAAA,MAAA,EAAA,CAAA,g4HAAA,CAAA,EAAA;;0BA6FhB;;0BACA,MAAM;2BAAC,eAAe;0FA3FZ,QAAQ,EAAA,CAAA;sBAApB;gBAMQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAG2B,UAAU,EAAA,CAAA;sBAArC,YAAY;uBAAC,YAAY;gBAKO,EAAE,EAAA,CAAA;sBAAlC,WAAW;uBAAC,SAAS;;sBAAG;gBAGgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGM,YAAY,EAAA,CAAA;sBAAlD,WAAW;uBAAC,oBAAoB;gBAIxB,OAAO,EAAA,CAAA;sBAAf;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAOQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAMQ,eAAe,EAAA,CAAA;sBAAvB;gBAES,oBAAoB,EAAA,CAAA;sBAA7B;gBAMS,MAAM,EAAA,CAAA;sBAAf;gBAMS,UAAU,EAAA,CAAA;sBAAnB;;;AErEH;;;;AAIG;AAOG,MAAO,qBAKX,SAAQF,uCAAqC,CAAA;AAoB7C,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;AAEA,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;;IAcA,IAAa,OAAO,CAAC,KAAsB,EAAA;;AAEzC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;AAErB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC;AACxB,aAAA,cAAc,CAAC,KAAK,EAAE,KAAK;AAC3B,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC;;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,yBAAyB,EAAE;AACtE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnE;;AAGA,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AACpE,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC5B;QACF;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC;AACzB,aAAA,cAAc,CAAC,KAAK,EAAE,KAAK;AAC3B,aAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,cAAc;YAAE;;QAGxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;IACxC;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;;AA2CA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;IAC3D;AAcA,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EACtB,aAAqC,EAAA;AAE/C,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QAPV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,aAAa,GAAb,aAAa;AA1HzB;;AAEG;QACsC,IAAA,CAAA,KAAK,GAC5C,UAAU;AAUZ;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsB,OAAO;;QAOjC,IAAA,CAAA,aAAa,GAAG,KAAK;;QAoCrB,IAAA,CAAA,YAAY,GAAG,EAAE;AAE1B;;;AAGG;QACM,IAAA,CAAA,yBAAyB,GAAG,IAAI;AAKzC;;;;;AAKG;QACM,IAAA,CAAA,oBAAoB,GAAG,IAAI;AAEpC;;;;AAIG;QACM,IAAA,CAAA,eAAe,GAAG,IAAI;AAE/B;;;;;AAKG;QACM,IAAA,CAAA,yBAAyB,GAAG,IAAI;AAEzC;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;;QAQ/C,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAEhB,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;QAMhB,IAAA,CAAA,QAAQ,GAAkB,EAAmB;QAC5C,IAAA,CAAA,QAAQ,GAAoB,EAAE;IAWtC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,EAAE;AAChD,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY;;YAEhD,MAAM,gBAAgB,GACpB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI;;YAEzE,IAAI,UAAU,IAAI,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,EAAE;gBACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC;YACF;;YAEA,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,EAAE;AACtE,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACjE;YACF;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;IAC1C;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AACvE,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC;IAC7D;;;;;AAOA,IAAA,cAAc,CAAC,MAAS,EAAA;QACtB,IAAI,MAAM,CAAC,QAAQ;YAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;;;;;;AAQA,IAAA,OAAO,CAAC,KAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;AAEA;;AAEG;IACH,4BAA4B,GAAA;QAC1B,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC;AAChE,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;oBACA,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;gBACzC;YACF,CAAC;AACF,SAAA,CAAC;IACJ;IACA,6BAA6B,GAAA;QAC3B,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC;AAClE,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;AACb,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;oBACA,IAAI,CAAC,cAAc,EAAE;AACrB,oBAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;gBAC1C;YACF,CAAC;AACF,SAAA,CAAC;IACJ;;;;AAMA;;;AAGG;AACK,IAAA,WAAW,CAAC,KAAQ,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B;;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA;;;;AAIG;IACH,WAAW,CAAC,KAAK,GAAG,IAAI,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,4BAA4B,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,6BAA6B,EAAE;YACtC;QACF;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,SAAS,EAAE;IACtC;;AAIA;;;AAGG;AACH,IAAA,UAAU,CAAC,MAAW,EAAA;AACpB,QAAA,OAAO,MAAM;IACf;AAEA;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;;AAIA;;;AAGG;AACH,IAAA,QAAQ,CAAC,MAAqB,EAAA;AAC5B,QAAA,OAAO,EAAE,SAAS,IAAI,MAAM,CAAC;IAC/B;AAjSW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,yEA0ItB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1Id,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,6wBASK,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGb,WAAW,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAGP,WAAW,yECzDpD,oxJAoJA,EAAA,MAAA,EAAA,CAAA,gvJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD1Ga,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,oxJAAA,EAAA,MAAA,EAAA,CAAA,gvJAAA,CAAA,EAAA;;0BA0IhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;uGAjI2B,kBAAkB,EAAA,CAAA;sBAArE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAGA,gBAAgB,EAAA,CAAA;sBAAjE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAGM,aAAa,EAAA,CAAA;sBAAlE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAOX,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGD,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAIM,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAOjB,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEY,OAAO,EAAA,CAAA;sBAAnB;gBAkCQ,YAAY,EAAA,CAAA;sBAApB;gBAMQ,yBAAyB,EAAA,CAAA;sBAAjC;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAQQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAQQ,yBAAyB,EAAA,CAAA;sBAAjC;gBAKS,cAAc,EAAA,CAAA;sBAAvB;gBA6ED,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AExNnC;AAUM,MAAO,kCACX,SAAQ,yBAAyB,CAAA;AAajC,IAAA,WAAA,CAIY,cAA8B,EAChC,SAAoB,EACpB,OAAmB,EAAA;AAE3B,QAAA,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;QAJ/B,IAAA,CAAA,cAAc,GAAd,cAAc;QAChB,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;AART,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAW;IAW1C;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,0BAA0B,EAAE;QACjC,IAAI,CAAC,kBAAkB,EAAE;IAC3B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;;IAGQ,4BAA4B,GAAA;QAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO;AACnD,aAAA,IAAI,CAACF,WAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,QAAQ;oBACb,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AAClD,oBAAA,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAClE;AACA,oBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;gBACzC;YACF,CAAC;AACF,SAAA,CAAC;IACN;;IAGQ,0BAA0B,GAAA;AAChC,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;YAC/D;AACF,QAAA,CAAC,CAAC;IACN;;IAGQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,YAAY;AACZ,aAAA,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,SAAS,CAAC;aAC9B,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,4BAA4B,EAAE;AACrC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;;QAEjC,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;;QAErD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;IAC5C;AAEA;;;AAGG;IACM,WAAW,CAAC,QAAQ,GAAG,IAAI,EAAA;AAClC,QAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;AAE3B;;AAEG;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CACrB,IAAI,CAAC,OAAO,CAAC,aAAa,EAC1B,OAAO,EACP,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAA,EAAA,CAAI,CAC5D;IACH;AAzGW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,kBAiBnC,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAjBd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kCAAkC,wOH5B/C,+oIA8HA,EAAA,MAAA,EAAA,CAAA,wGAAA,EAAA,g4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAsB,+BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FGlGa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAT9C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAM5B,KAAK,EAAA,QAAA,EAAA,+oIAAA,EAAA,MAAA,EAAA,CAAA,wGAAA,EAAA,g4HAAA,CAAA,EAAA;;0BAiBhB;;0BACA;;0BACA,MAAM;2BAAC,eAAe;0FAbhB,aAAa,EAAA,CAAA;sBAArB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;;;ACXG,MAAO,2BACX,SAAQC,oBAAkB,CAAA;AAY1B,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa;IACnD;IAWA,WAAA,CACS,OAAmB,EAClB,SAAoB,EACD,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EAAA;QAEhC,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,CAAC;QARvC,IAAA,CAAA,OAAO,GAAP,OAAO;QACN,IAAA,CAAA,SAAS,GAAT,SAAS;QACU,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;;QAff,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAMhB,IAAA,CAAA,UAAU,GAAG,KAAK;QAYhB,KAAK,CAAC,QAAQ,EAAE;IAClB;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,GAAG,KAAK;QAE/C,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;;;AAIG;AAEH,IAAA,OAAO,CAAC,KAAoB,EAAA;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC3C,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;AAEA;;;;AAIG;IACK,SAAS,GAAA;;QAEf,UAAU,CAAC,MAAK;;AAEd,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,SAAS,CAAC,WAAW,CACxB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAC3C,IAAI,CAAC,OAAO,CAAC,aAAa,CAC3B;AACD,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACxB;QACF,CAAC,EAAE,CAAC,CAAC;IACP;AAEA;;;;AAIG;IACK,oBAAoB,GAAA;QAC1B,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAACJ,WAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;;;YAIrB,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,SAAS,EAAE;;AAGtC,YAAA,IAAI,CAAC,YAAY;gBACf,IAAI,CAAC,cAAc,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,EAAE,CAAA;AAE3D,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;;gBAGjB,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAEjC,gBAAA,MAAM,cAAc,GAAG,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;AACzE,gBAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;YACtC;;AAAO,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;AAChC,QAAA,CAAC,CAAC;IACN;AAEA;;;;;AAKG;AACK,IAAA,cAAc,CAAC,KAAsB,EAAA;AAC3C,QAAA,IAAI,KAAK,EAAE,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,EAAE;;QAEjC,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK,CAAC,KAAK,IAAI,EAAE;;QAErD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE;IAC5C;AAEA;;;AAGG;IACK,QAAQ,CAAC,KAAa,EAAE,aAAsB,EAAA;AACpD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,aAAa,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACpC;IACF;AApIW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,4HA+B5B,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA/Bd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,qRC3BxC,8sCAyCA,EAAA,MAAA,EAAA,CAAA,2bAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAnB,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDda,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cAGpB,KAAK,EAAA,QAAA,EAAA,8sCAAA,EAAA,MAAA,EAAA,CAAA,2bAAA,CAAA,EAAA;;0BA+BhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;yEA1BhB,aAAa,EAAA,CAAA;sBAArB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBA0CD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;ME1DtB,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBAX5B,+BAA+B;YAC/B,2BAA2B;AAC3B,YAAA,kCAAkC,CAAA,EAAA,OAAA,EAAA,CAE1B,YAAY,EAAEwB,mBAAiB,aAEvC,+BAA+B;YAC/B,2BAA2B;YAC3B,kCAAkC,CAAA,EAAA,CAAA,CAAA;+GAGzB,mBAAmB,EAAA,OAAA,EAAA,CAPpB,YAAY,EAAEA,mBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAO9B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,+BAA+B;wBAC/B,2BAA2B;wBAC3B,kCAAkC;AACnC,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAEA,mBAAiB,CAAC;AAC1C,oBAAA,OAAO,EAAE;wBACP,+BAA+B;wBAC/B,2BAA2B;wBAC3B,kCAAkC;AACnC,qBAAA;AACF,iBAAA;;;MCEY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,CAXd,qBAAqB,EAAE,yBAAyB,aAE7D,YAAY;YACZ,oBAAoB;YACpB,mBAAmB;YACnBA,mBAAiB;YACjBtB,gBAAc,CAAA,EAAA,OAAA,EAAA,CAEN,qBAAqB,EAAE,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAG/C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAT3B,YAAY;YACZ,oBAAoB;YACpB,mBAAmB;YACnBsB,mBAAiB;YACjBtB,gBAAc,CAAA,EAAA,CAAA,CAAA;;2FAKL,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;AAChE,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,oBAAoB;wBACpB,mBAAmB;wBACnBsB,mBAAiB;wBACjBtB,gBAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,qBAAqB,EAAE,yBAAyB,CAAC;oBAC3D,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;MCcY,sBAAsB,CAAA;;IAQjC,IAAa,aAAa,CAAC,KAAgD,EAAA;AACzE,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAG9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;YACnC,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;;AAqBuC,IAAA,WAAW,CAAC,KAAU,EAAA;AAC3D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;;AAGA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY;IAC5B;;AAGA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ,EAAE;IAC7D;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO;AACL,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,yBAAyB;AACzD,YAAA,QAAQ,EAAE,IAAI;SACf;IACH;;AAGA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS;IAC7C;AAUA,IAAA,WAAA,CACU,gBAAkC,EAClC,OAAmB,EACC,YAAmC,EACnC,SAA6B,EAAA;QAHjD,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,OAAO,GAAP,OAAO;QACa,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,SAAS,GAAT,SAAS;;QAnD9B,IAAA,CAAA,aAAa,GAAG,IAAI;;AASnB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAU;AAkCjD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAO;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;IAOxC;IAEH,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE;QAEzB,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,WAAW,EAAE;;YACtC,IAAI,CAAC,kBAAkB,EAAE;IAChC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;AAEA;;;;;AAKG;IACK,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;aAC5B,IAAI,CACHiB,WAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1BM,sBAAoB,EAAE,EACtBC,KAAG,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC7D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,EAChE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAEjC,aAAA,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,KACjC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CACvC;;AAGH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;AAEA;;;;;AAKK;IACG,WAAW,GAAA;;QAEjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACzD,2BAA2B,CAC5B;;QAED,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC;QACzE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC;;AAErE,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC1B,aAAA,IAAI,CAACP,WAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/B,aAAA,SAAS,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE;;IAGQ,kBAAkB,GAAA;QACxB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAChE,kCAAkC,CACnC;QACD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;IACtE;AAEA;;;;;;AAMG;IACK,UAAU,CAAC,cAAmB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,cAAc;YAAE;;AAErB,QAAA,MAAM,YAAY,GAChB,IAAI,CAAC,aAAa;AAClB,YAAA,CAAC,KAAK;AACN,YAAA,EACE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACpD,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAC/B;AACH,QAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/B,YAAA,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACrC;aAAO,IAAI,YAAY,EAAE;YACvB,cAAc,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;QACrE;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;AAEvB,YAAA,IAAI,CAAC,YAAY,CAAC,yBAAyB,GAAG,KAAK;YACnD,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,GAAG,KAAK,IAAI,EAAE,CAAA,CAAE;AACpD,YAAA,IAAI,CAAC,YAAY,CAAC,yBAAyB,GAAG,KAAK;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YACjC;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,SAAS,EACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CACnC;AACD,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAA,EAAG,KAAK,IAAI,EAAE,CAAA,CAAE,CAAC;QAC1E;IACF;AAEA;;;;AAIG;AACK,IAAA,aAAa,CAAC,OAAY,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe;AAAE,YAAA,OAAO,OAAO;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KACvB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,GAAG,KAAK,CACrD;IACH;8GAtMW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,qBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA3B,IAAA,CAAA,kBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yDAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yDAAyD;AACnE,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;0BA6EI;;0BAAY;;0BACZ;;0BAAY;yCArEF,aAAa,EAAA,CAAA;sBAAzB;gBAYQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGS,kBAAkB,EAAA,CAAA;sBAA3B;gBAGsC,WAAW,EAAA,CAAA;sBAAjD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;ACtEvC;MAMa,yBAAyB,CAAA;AAIpC;;;AAGG;AACH,IAAA,WAAA,CAAsB,IAAgB,EAAA;QAAhB,IAAA,CAAA,IAAI,GAAJ,IAAI;;QANjB,IAAA,CAAA,QAAQ,GAAG,KAAK;IAMgB;IAEzC,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAK;;AAEvB,YAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;AAChE,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;IACH;8GAjBW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAQ,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE;AACf,iBAAA;iFAGU,QAAQ,EAAA,CAAA;sBAAhB;;;MCDU,+BAA+B,CAAA;8GAA/B,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA/B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,CAJ3B,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAC9B,YAAY,aACZ,yBAAyB,CAAA,EAAA,CAAA,CAAA;AAExB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,YAHhC,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGX,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAL3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,yBAAyB,CAAC;oBACzC,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACrC,iBAAA;;;;;;;;;;;;;;;;;;;;;;MCQY,kBAAkB,CAAA;AAC7B,IAAA,WAAA,CACwC,UAA+B,EAAA;QAA/B,IAAA,CAAA,UAAU,GAAV,UAAU;IAC/C;AACH,IAAA,MAAM,CAAC,GAAW,EAAE,CAA8B,EAAE,MAAe,EAAA;QACjE,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG;QACvE,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAC3C,+FAA+F,EAC/F,EAAE,CACH;AACD,QAAA,MAAM,eAAe,GAAG;AACtB,YAAA,KAAK,EAAE,WAAW,CAAC,gBAA4C,CAAC;YAChE,MAAM;AACN,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,GAAG,EAAE,gBAAgB;SACtB;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC;QAChE,OAAO,aAAa,IAAI,YAAY;IACtC;AAlBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAEnB,oBAAoB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAFnB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;0BAGI,MAAM;2BAAC,oBAAoB;;AAmBhC,MAAM,EAAE,GAAG;AACT,IAAA,sBAAsB,EAAE,uBAAuB;AAC/C,IAAA,qBAAqB,EAAE,yBAAyB;AAChD,IAAA,sBAAsB,EACpB,uEAAuE;AACzE,IAAA,oBAAoB,EAAE,OAAO;AAC7B,IAAA,iBAAiB,EAAE,iBAAiB;AACpC,IAAA,gBAAgB,EAAE,UAAU;CAC7B;AAED,MAAM,EAAE,GAAG;AACT,IAAA,sBAAsB,EAAE,6BAA6B;AACrD,IAAA,qBAAqB,EAAE,6BAA6B;AACpD,IAAA,sBAAsB,EACpB,+DAA+D;AACjE,IAAA,iBAAiB,EAAE,aAAa;CACjC;AACD,MAAM,qBAAqB,CAAA;AACzB,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD;AACA,QAAA,OAAO,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C;AACD;MAkBY,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAFf,eAAe,CAAA,EAAA,CAAA,CAAA;AAEd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,SAAA,EAfd;AACT,YAAA,gBAAgB,CAAC;AACf,gBAAA,MAAM,EAAE;AACN,oBAAA,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5B,oBAAA,WAAW,EAAE,IAAI;;AAEjB,oBAAA,oBAAoB,EAAE,IAAI;oBAC1B,QAAQ,EAAE,CAAC,SAAS,EAAE;AACvB,iBAAA;AACD,gBAAA,MAAM,EAAE,qBAAqB;aAC9B,CAAC;YACF,8BAA8B,CAAC,kBAAkB,CAAC;AACnD,SAAA,EAAA,OAAA,EAAA,CACS,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAEd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAhB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE;AACT,wBAAA,gBAAgB,CAAC;AACf,4BAAA,MAAM,EAAE;AACN,gCAAA,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5B,gCAAA,WAAW,EAAE,IAAI;;AAEjB,gCAAA,oBAAoB,EAAE,IAAI;gCAC1B,QAAQ,EAAE,CAAC,SAAS,EAAE;AACvB,6BAAA;AACD,4BAAA,MAAM,EAAE,qBAAqB;yBAC9B,CAAC;wBACF,8BAA8B,CAAC,kBAAkB,CAAC;AACnD,qBAAA;oBACD,OAAO,EAAE,CAAC,eAAe,CAAC;AAC3B,iBAAA;;;MC3DY,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKE,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAa,KAAa,KAAK;AAC7C,IAAA;8GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAKY,uBAAuB,CAAA;AAApC,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,SAAS,GAAG,CAAC,GAAG,KAAe,KAAK,EAAE;IACxC;AAAC;MAEY,2BAA2B,CAAA;AAAxC,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,MAAM,GAAG,CAAC,GAAW,EAAE,CAAkB,EAAE,OAAgB,KAAK,GAAG;IACrE;AAAC;MAEY,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;AACE,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,WAAmB,KAAU,EAAE;IACjD;AAAC;MAEY,wBAAwB,CAAA;IACnC,kBAAkB,CAAC,WAAwB,EAAE,KAAa,EAAA;AACxD,QAAA,OAAO,WAAW;IACpB;AAEA,IAAA,qBAAqB,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa,EAAA;AAC9D,QAAA,OAAO,KAAK;IACd;AACD;MA0BY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,CAlDlB,iBAAiB,CAAA,EAAA,OAAA,EAAA,CA2BlB,YAAY,aA3BX,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAkDjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,SAAA,EApBlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,uBAAuB;AAClC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,qBAAqB;AAC9B,gBAAA,QAAQ,EAAE,wBAAwB;AACnC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,qBAAqB;AAChC,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,QAAQ,EAAE,2BAA2B;gBACrC,IAAI,EAAE,CAAC,oBAAoB,CAAC;AAC7B,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CArBS,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAuBX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAxB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,YAAY,EAAE,CAAC,iBAAiB,CAAC;oBACjC,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC5B,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,uBAAuB;AAClC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,qBAAqB;AAC9B,4BAAA,QAAQ,EAAE,wBAAwB;AACnC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,qBAAqB;AAChC,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,QAAQ,EAAE,2BAA2B;4BACrC,IAAI,EAAE,CAAC,oBAAoB,CAAC;AAC7B,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACjED;;;AAGG;MAOU,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;;QAQ2C,IAAA,CAAA,KAAK,GAC5C,MAAM;AAST,IAAA;8GAZY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,kLCdpC,uoBAgBA,EAAA,MAAA,EAAA,CAAA,87BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDFa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,uoBAAA,EAAA,MAAA,EAAA,CAAA,87BAAA,CAAA,EAAA;8BAIsB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAMxB,IAAI,EAAA,CAAA;sBAAZ;;;METU,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,YAAA,EAAA,CALhB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAC5B,YAAY,EAAE,oBAAoB,EAAEgB,mBAAiB,CAAA,EAAA,OAAA,EAAA,CACrD,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAGtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,OAAA,EAAA,CAJrB,YAAY,EAAE,oBAAoB,EAAEA,mBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAIpD,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,uBAAuB,CAAC;AACvC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,oBAAoB,EAAEA,mBAAiB,CAAC;oBAChE,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACWD;;;AAGG;AAOG,MAAO,kBACX,SAAQzB,uCAAqC,CAAA;AAgD7C;;AAEG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;IAC1B;AACA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;;IAEA,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AACA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAOA,IAAa,sBAAsB,CAAC,MAAe,EAAA;AACjD,QAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM;IACvC;AACA,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,YAAY;IAC1D;IASA,IAAa,SAAS,CAAC,YAAmC,EAAA;;AAExD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,YAAY;;QAG9B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QAC1B,CAAC,EAAE,GAAG,CAAC;IACT;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAMA,IAAA,IAAI,OAAO,GAAA;QACT,OAAQ,IAAI,CAAC,SAAS,EAAE,OAA8B,IAAI,IAAI,CAAC,YAAY;IAC7E;;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB;IACvE;AAQA,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EACzB,OAAmB,EAAA;AAE1B,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QAPV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;AAzIhB;;AAEG;QACmB,IAAA,CAAA,KAAK,GAAG,eAAe;AAC7C;;AAEG;QAC4B,IAAA,CAAA,IAAI,GAAsB,OAAO;AAChE;;AAEG;QACsC,IAAA,CAAA,KAAK,GAC5C,OAAO;AACT;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,MAAM;AAKtB;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,IAAI;AAC5B;;AAEG;QACM,IAAA,CAAA,QAAQ,GAAG,KAAK;AACzB;;AAEG;QACM,IAAA,CAAA,KAAK,GAAG,KAAK;AACtB;;AAEG;QACM,IAAA,CAAA,GAAG,GAAG,CAAC;AAChB;;AAEG;AACM,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,gBAAgB;AACtC;;AAEG;QACM,IAAA,CAAA,IAAI,GAAG,CAAC;AAiCT,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB;QAEpC,IAAA,CAAA,UAAU,GAAG,CAAC;;QAGd,IAAA,CAAA,uBAAuB,GAAG,IAAI;;QAS7B,IAAA,CAAA,OAAO,GAAG,EAAE;;QAEZ,IAAA,CAAA,YAAY,GAAG,GAAG;;AAqBjB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAO;AAErC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,kBAAkB,EAAE;;AAU/C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAW;AAEzB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAO;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAW;IAW5C;IAEA,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/D,aAAA,SAAS,CAAC,CAAC,UAAU,KAAI;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;AACjC,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC3B;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEnB,IACE,KAAK,EAAE,MAAM;AACb,YAAA,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EACpB;;YAEA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAC9C,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACtC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B;;QAEF;aAAO;;AAEL,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACpB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA,IAAA,qBAAqB,CAAC,KAAU,EAAA;AAC9B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAC3C;AACA,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;QAClB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAlMW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,yEA0InB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1Id,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8mBCjC/B,8gKAkLA,EAAA,MAAA,EAAA,CAAA,sgfAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,qCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA5B,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDjJa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cAGV,KAAK,EAAA,QAAA,EAAA,8gKAAA,EAAA,MAAA,EAAA,CAAA,sgfAAA,CAAA,EAAA;;0BA0IhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;kGAnIH,KAAK,EAAA,CAAA;sBAA1B,WAAW;uBAAC,OAAO;gBAIW,IAAI,EAAA,CAAA;sBAAlC,WAAW;uBAAC,OAAO;;sBAAG;gBAIkB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAKxB,IAAI,EAAA,CAAA;sBAAZ;gBAIQ,WAAW,EAAA,CAAA;sBAAnB;gBAIQ,YAAY,EAAA,CAAA;sBAApB;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAIQ,KAAK,EAAA,CAAA;sBAAb;gBAIQ,GAAG,EAAA,CAAA;sBAAX;gBAIQ,GAAG,EAAA,CAAA;sBAAX;gBAIQ,IAAI,EAAA,CAAA;sBAAZ;gBAIY,SAAS,EAAA,CAAA;sBAArB;gBAOY,SAAS,EAAA,CAAA;sBAArB;gBAOY,SAAS,EAAA,CAAA;sBAArB;gBAWY,SAAS,EAAA,CAAA;sBAArB;gBAUY,sBAAsB,EAAA,CAAA;sBAAlC;gBAQQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAIY,SAAS,EAAA,CAAA;sBAArB;gBAiBS,SAAS,EAAA,CAAA;sBAAlB;;;MEhIU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,CAZX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAE/B,YAAY;YACZC,gBAAc;YACdW,qBAAmB;YACnB,mBAAmB;YACnBgB,uCAAqC;AACrC,YAAA,oBAAoB,aAEZ,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAVxB,YAAY;YACZ3B,gBAAc;YACdW,qBAAmB;YACnB,mBAAmB;YACnBgB,uCAAqC;YACrC,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAb3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;AAClC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ3B,gBAAc;wBACdW,qBAAmB;wBACnB,mBAAmB;wBACnBgB,uCAAqC;wBACrC,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,kBAAkB,CAAC;oBAC7B,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACfD,MAAM,eAAe,GAClB,UAAwD,CAAC,OAAO;AACjE,IAAA,UAAU;MAMC,mBAAmB,CAAA;IAC9B,SAAS,CAAU,KAAU,EAAE,OAA4B,EAAA;AACzD,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QACxB,OAAO,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;IAC/C;8GAJW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAnB,mBAAmB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,qBAAqB;AAC3B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCZY,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;QACE,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,aAAa,GAAG,OAAO;IACzB;AAAC;AAEM,MAAM,iBAAiB,GAAG,IAAI,cAAc,CACjD,iBAAiB,CAClB;;ACqBD,MAAM,oBAAoB,GACvB,UAAwD,CAAC,OAAO;AACjE,IAAA,UAAU;MAMC,sBAAsB,CAAA;IAYjC,WAAA,CAC6B,SAAoB,EACpB,MAAuB,EACrB,UAAkB,EACvC,UAA8C,EAC9C,QAAmB,EACnB,MAAc,EAAA;QALK,IAAA,CAAA,SAAS,GAAT,SAAS;QAEP,IAAA,CAAA,UAAU,GAAV,UAAU;QAC/B,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,MAAM,GAAN,MAAM;;QAdP,IAAA,CAAA,aAAa,GAAwB,EAAE;AAIhD,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,eAAe,EAAE;AAmB9C,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,CAAM,KAAI;;AAErB,QAAA,CAAC;AAGD,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAM,KAAI;;AAEvB,QAAA,CAAC;QAmFD,IAAA,CAAA,QAAQ,GAAG,CAAC,OAAwB,KAClC,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO;AACrE,cAAE;AACF,cAAE,EAAE,aAAa,EAAE,IAAI,EAAE;AApG3B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;AACA,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACpC;AAaA,IAAA,OAAO,CAAC,KAAoB,EAAA;;AAE1B,QAAA,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YAC/C,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACzC,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,UAAU,EAAE,IAAI;AACjB,aAAA,CAAC,CACH;QACH;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,aAAa,CACxB,IAAI,CAAC,OAAO,CAAC;kBACT,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ;AACxC,kBAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CACpB;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACvC;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE;AAC9B,QAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;IACrC;IAEA,aAAa,GAAA;AACX,QAAA,IACE,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;YACjC,CAAC,IAAI,CAAC,kBAAkB;AACxB,YAAA,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,EAC7C;YACA;QACF;QAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MACnD,IAAI,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAClD,IAAI,CAAC,kBAAsC,CAC5C,CACF;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,OAAQ,CAAC,sBAAsB,EAAE;AACxC,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE;IACtB;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa;AACjD,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1E;IACF;AAEA,IAAA,gBAAgB,CAAC,EAAyB,EAAA;;;AAGxC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,KAAI;AACvB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM;AACzC,YAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK;YACxD,EAAE,CAAC,QAAQ,CAAC;AACd,QAAA,CAAC;IACH;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAOA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,QAAQ,CAAC;QAC1E;IACF;AAEA,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO;IAChC;AAEQ,IAAA,qBAAqB,CAAC,MAAuB,EAAA;QACnD,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,KAAK,OAAO,EAAE;YACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;QACzD;aAAO;YACL,IAAI,CAAC,sBAAsB,GAAG;gBAC5B,GAAG,IAAI,CAAC,sBAAsB;AAC9B,gBAAA,GAAG,MAAM;aACV;AACD,YAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;;gBAEvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,aAAa,KAAI;AAC7D,oBAAA,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE;AACpC,wBAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;AACjC,4BAAA,MAAM,kBAAkB,GACtB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACzC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC1C;4BACH,IAAI,kBAAkB,EAAE;AACtB,gCAAA,IAAI,CAAC,kBAAkB,GAAG,kBAAkB;AAC5C,gCAAA,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;gCACnC,IAAI,CAAC,aAAa,EAAE;4BACtB;wBACF;oBACF;AACF,gBAAA,CAAC,CAAC;;gBAGF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC3D,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,OAAO,EAAE,IAAI;AACd,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CACnE,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAC1C;YACH;QACF;IACF;8GAzKW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAArB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAcvB,iBAAiB,EAAA,EAAA,EAAA,KAAA,EACjB,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAfV,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,gCAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAcI;;0BAAY;;0BACZ,MAAM;2BAAC,iBAAiB;;0BACxB,MAAM;2BAAC,WAAW;+GAXZ,aAAa,EAAA,CAAA;sBAArB;gBAuBD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;gBAM9C,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,MAAM,EAAE,CAAC,qBAAqB,CAAC;gBAM7C,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MC1DtB,mBAAmB,CAAA;IAC9B,OAAO,OAAO,CACZ,MAAiC,EAAA;QAEjC,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SAC9D;IACH;8GARW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,iBATf,sBAAsB,EAAE,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAChD,sBAAsB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAQ1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,SAAA,EAPnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,eAAe;AAC1B,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;2FAEU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;AAC3D,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;AACtD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AAC1B,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACbM,MAAM,UAAU,GAAG,CACxB,OAAqC,KAErC,OAAO,OAAO,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG;;ACSpD;AAAC,CAAC,MAAK;;IAEL,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QACjD,MAAM,CAAC,IAAI,GAAG;AACZ,YAAA,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE;YACpB,MAAM,CAAC,SAAS,GAAG,SAAS,EAAA;gBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;gBACjC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;AAAE,oBAAA,EAAE,EAAE;AACjD,gBAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACxB,OAAO,SAAS,KAAK;sBACjB,CAAA,KAAA,EAAQ,EAAE,CAAA;AACZ,sBAAE,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,EAAE,EAAE;YAC/B,CAAC;SACF;IACH;AACF,CAAC,GAAG;;MCGS,mBAAmB,CAAA;IAY9B,IAAa,KAAK,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;;AAGA,IAAA,IAAqC,UAAU,GAAA;AAC7C,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK;IACpB;;IA2BA,IAAa,OAAO,CAAC,OAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAcA,IAAA,WAAA,CACU,QAAmB,EACnB,GAA4B,EAC5B,4BAA0D,EAAA;QAF1D,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,4BAA4B,GAA5B,4BAA4B;;QApEG,IAAA,CAAA,KAAK,GAC5C,QAAQ;;QAE6B,IAAA,CAAA,SAAS,GAAG,IAAI;;QAE/C,IAAA,CAAA,MAAM,GAAG,KAAK;;QAmBb,IAAA,CAAA,cAAc,GAAG,KAAK;AAG/B;;;AAGG;QACM,IAAA,CAAA,KAAK,GAAG,WAAW;;QAInB,IAAA,CAAA,SAAS,GAAG,IAAI;;QAEhB,IAAA,CAAA,OAAO,GAAQ,EAAE;;QAMjB,IAAA,CAAA,kBAAkB,GAAG,IAAI;;;AAYxB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAe;AAChD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAe;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAe;AAClD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAe;AACnD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAe;AAWzD,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CACnE,IAAI,CAAC,GAAG,CAAC,aAAa,CACvB;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa;YAChB,IAAI,CAAC,aAAa,IAAI,mBAAmB,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;AACnE,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY;gBACf,IAAI,CAAC,YAAY,IAAI,kBAAkB,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;QACnE;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;QACjC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,eAAe,EAAE;IACxC;IAEO,QAAQ,CAAC,KAAY,EAAE,MAAc,EAAA;QAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB;QACD,QAAQ,MAAM;AACZ,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtC;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;gBACrC;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtC;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;gBACpC;;;QAGJ,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IACjD;AAEA,IAAA,IAAI,CAAC,MAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAK,QAAQ,CAAC,aAA6B;QAElE,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,OAAO,IAAI;IACb;IAEU,eAAe,GAAA;AACvB,QAAA,MAAM,CAAC,UAAU,CAAC,MAAK;YACrB,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAC7D,0EAA0E,CAC3E;AACD,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,eAAe;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACxD,QAAA,CAAC,CAAC;IACJ;IAIA,KAAK,CAAC,KAAa,EAAE,SAAkB,EAAA;AACrC,QAAA,IAAI,SAAS,KAAK,MAAM,IAAI,KAAK,YAAY,UAAU;YAAE;;QAEzD,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC;QAEA,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,MAAM,CAAC,UAAU,CAAC,MAAK;YACrB,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC1C,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,QAAA,CAAC,CAAC;IACJ;AAGA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;AACzB,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;;YAElB,IACE,IAAI,CAAC,cAAc;AACnB,gBAAA,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,EAC/C;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC3B,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;aAAO;;YAEL,IACE,IAAI,CAAC,eAAe;AACpB,gBAAA,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,cAAc,EAC9C;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC5B,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;IACF;;IAGQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC;IAC7D;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IACtD;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,IAAI;AACzC,YAAA,IAAI,CAAC,qBAAqB,CAAC,4BAA4B,EAAE;QAC3D;IACF;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,OAAO,GAAG,KAAK;QAC5C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE;IACvC;8GAnNW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,o/BChChC,qlFAyEA,EAAA,MAAA,EAAA,CAAA,w+aAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDzCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACI,aAAa,EAAA,QAAA,EAGb,QAAQ,EAAA,UAAA,EACN,KAAK,EAAA,QAAA,EAAA,qlFAAA,EAAA,MAAA,EAAA,CAAA,w+aAAA,CAAA,EAAA;oJAKE,SAAS,EAAA,CAAA;sBAA7B,SAAS;uBAAC,QAAQ;gBAGsB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGM,SAAS,EAAA,CAAA;sBAA/C,WAAW;uBAAC,wBAAwB;gBAGxB,KAAK,EAAA,CAAA;sBAAjB;gBAcoC,UAAU,EAAA,CAAA;sBAA9C,WAAW;uBAAC,kBAAkB;gBAItB,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAIY,OAAO,EAAA,CAAA;sBAAnB;gBAMS,cAAc,EAAA,CAAA;sBAAvB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBA4ED,KAAK,EAAA,CAAA;sBAFJ,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;;sBAC1C,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;gBAwBnD,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;AEnMrC,IAAY,WAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAPW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCwBV,oBAAoB,CAAA;AANjC,IAAA,WAAA,GAAA;;QAQ2C,IAAA,CAAA,KAAK,GAC5C,UAAU;;QAYH,IAAA,CAAA,SAAS,GAChB,aAAa;;AAEL,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ;;QAGxC,IAAA,CAAA,KAAK,GAAG,KAAK;QAEf,IAAA,CAAA,WAAW,GAAG,CAAC,CAAC;QAChB,IAAA,CAAA,eAAe,GAAG,IAAI;QACtB,IAAA,CAAA,sBAAsB,GAAG,YAAY;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;AACrE,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,OAAoB,KACzC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC;AACpD,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,OAAoB,KAC1C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC;QACnD,IAAA,CAAA,aAAa,GAAG,CAAC,OAAgC,KACvD,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAgJhD,IAAA;AA3IC,IAAA,IAAY,QAAQ,GAAA;AAClB,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,IAAI,CAAC,SAAS,EAAE,aAA6B,EAAC,QAAQ,IAAI,EAAE,CAC7C;IACpB;AAEA,IAAA,IAAY,SAAS,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS;IAC7D;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,SAAS;IACrD;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;IACxB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;IACzC;;IAGA,gBAAgB,GAAA;QACd,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEA,aAAa,CAAC,aAAa,GAAG,IAAI,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE;YAChC;QACF;QAEA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,aAAa;AAE1B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,uBAAuB,EAAE;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAC3B;IACF;AAEA;;AAEG;IACK,4BAA4B,GAAA;QAClC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO;aACnD,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC;AAChC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAY,KAAI;gBACrB,IACE,IAAI,CAAC,KAAK;AACV,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;AACA,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBAC3B;YACF,CAAC;AACF,SAAA,CAAC;IACN;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACzB;QACF;QAEA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAgB,QAAQ,EAAE,SAAS;AACpE,aAAA,IAAI,CACH,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAC3B,MAAM,CAAC,CAAC,KAAK,KACX,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAmB,CAAC,CAC/D;AAEF,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACvB,QAAA,CAAC,CAAC;IACN;AAEQ,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,QAAQ,KAAK,CAAC,IAAI;YAChB,KAAK,WAAW,CAAC,MAAM;YACvB,KAAK,WAAW,CAAC,GAAG;AAClB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACzB;YACF,KAAK,WAAW,CAAC,KAAK;YACtB,KAAK,WAAW,CAAC,KAAK;gBACpB,IAAI,CAAC,UAAU,EAAE;gBACjB;YACF,KAAK,WAAW,CAAC,OAAO;gBACtB,IAAI,CAAC,kBAAkB,EAAE;gBACzB;YACF,KAAK,WAAW,CAAC,SAAS;gBACxB,IAAI,CAAC,oBAAoB,EAAE;gBAC3B;;IAEN;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;cACpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS;AACnC,cAAE,IAAI,CAAC,WAAW,KAAK;kBACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS;AACnC,kBAAE,IAAI,CAAC,WAAW,GAAG,CAAC;AAE1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACtB,cAAE;AACF,cAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;AACjD,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC5B,IAAI,CAAC,WAAW,EAAE;IACpB;IAEQ,WAAW,GAAA;QACjB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;QAC7B;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3B;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;IAC7B;8GA/KW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAKD,UAAU,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B1C,uvCA6CA,EAAA,MAAA,EAAA,CAAA,wnTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDrBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,uvCAAA,EAAA,MAAA,EAAA,CAAA,wnTAAA,CAAA,EAAA;8BAIsB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGW,QAAQ,EAAA,CAAA;sBAAnD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBACV,SAAS,EAAA,CAAA;sBAAxC,SAAS;uBAAC,mBAAmB;gBAGrB,YAAY,EAAA,CAAA;sBAApB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,aAAa,EAAA,CAAA;sBAAtB;;;MEpCU,0BAA0B,CAAA;AAJvC,IAAA,WAAA,GAAA;QAK4D,IAAA,CAAA,SAAS,GAAG,IAAI;AAC3E,IAAA;8GAFY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2CAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAE2D,SAAS,EAAA,CAAA;sBAAlE,WAAW;uBAAC,2CAA2C;;;ACe1D;;;;;;;;;;;AAWG;MAgCU,qBAAqB,CAAA;IAQhC,IAAa,KAAK,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;;AAwBA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM;IAC7B;;IAOA,IAAa,OAAO,CAAC,OAAsB,EAAA;AACzC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;IAYA,WAAA,CACU,IAAgB,EAChB,QAAmB,EAAA;QADnB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QA9DT,IAAA,CAAA,IAAI,GAAqB,OAAO;;QAEjC,IAAA,CAAA,MAAM,GAAG,KAAK;;QAab,IAAA,CAAA,cAAc,GAAG,KAAK;;QAWtB,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAEf,IAAA,CAAA,SAAS,GAAG,KAAK;;QAGjB,IAAA,CAAA,KAAK,GAAG,UAAU;;AAoBjB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAW;AAC5C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ;AAC5C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ;AAC3C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ;;AAWpD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACvD;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;QACjC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,cAAc,EAAE;IACvC;IAEO,QAAQ,CAAC,KAAY,EAAE,MAAc,EAAA;QAC1C,KAAK,CAAC,cAAc,EAAE;QACtB,QAAQ,MAAM;AACZ,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBAC7B;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBAC5B;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE;gBAC7B;;AAEJ,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC7B;AAEA;;;;;AAKG;AACH,IAAA,IAAI,CAAC,MAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAK,QAAQ,CAAC,aAA6B;QACjE,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;IAGH,KAAK,CAAC,KAAa,EAAE,SAAkB,EAAA;QACrC,IACE,SAAS,KAAK,MAAM;AACpB,YAAA,KAAK,YAAY,UAAU;AAC3B,YAAA,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;YAEpC;QAEF,IAAI,CAAC,aAAa,EAAE;QAEpB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,MAAM,CAAC,UAAU,CAAC,MAAK;gBACrB,IAAI,IAAI,CAAC,QAAQ;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACxC,gBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AAC3B,YAAA,CAAC,CAAC;QACJ;IACF;;AAIA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;YAAE;AACzB,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;;YAElB,IACE,IAAI,CAAC,aAAa;AAClB,gBAAA,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,cAAc,EAC9C;AACA,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;gBAC1B,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;aAAO;;YAEL,IACE,IAAI,CAAC,cAAc;AACnB,gBAAA,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,EAC7C;AACA,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;gBAC3B,KAAK,CAAC,cAAc,EAAE;YACxB;QACF;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,CAAC,UAAU,CAAC,MAAK;YACrB,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE;AACvB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAC/D,0EAA0E,CAC3E;AACD,YAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,cAAc;AAAE,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;AACtD,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC;IAC7D;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IACtD;8GApLW,qBAAqB,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,CAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjElC,+mFAuFA,EAAA,MAAA,EAAA,CAAA,umYAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EDjDgB;YACR,OAAO,CAAC,gBAAgB,EAAE;gBACtB,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE;AAC9D,wBAAA,QAAQ,EAAE,IAAI;qBACjB,CAAC;oBACF,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;AAC3D,wBAAA,QAAQ,EAAE,IAAI;qBACjB,CAAC;AACF,oBAAA,KAAK,CAAC;wBACF,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;wBACnI,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;qBACtI,CAAC;iBACL,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE;AAC3D,wBAAA,QAAQ,EAAE,IAAI;qBACjB,CAAC;AACF,oBAAA,KAAK,CAAC;wBACF,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;wBACtI,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;qBACtI,CAAC;iBACL,CAAC;aACL,CAAC;AACL,SAAA,EAAA,CAAA,CAAA;;2FAGQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA/BjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EAGnB;wBACR,OAAO,CAAC,gBAAgB,EAAE;4BACtB,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,EAAE;AAC9D,oCAAA,QAAQ,EAAE,IAAI;iCACjB,CAAC;gCACF,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;AAC3D,oCAAA,QAAQ,EAAE,IAAI;iCACjB,CAAC;AACF,gCAAA,KAAK,CAAC;oCACF,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oCACnI,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iCACtI,CAAC;6BACL,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,EAAE;AAC3D,oCAAA,QAAQ,EAAE,IAAI;iCACjB,CAAC;AACF,gCAAA,KAAK,CAAC;oCACF,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oCACtI,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iCACtI,CAAC;6BACL,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,+mFAAA,EAAA,MAAA,EAAA,CAAA,umYAAA,CAAA,EAAA;uGAII,WAAW,EAAA,CAAA;sBAAjC,SAAS;uBAAC,UAAU;gBAGZ,IAAI,EAAA,CAAA;sBAAZ;gBAGY,KAAK,EAAA,CAAA;sBAAjB;gBAYQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAYY,OAAO,EAAA,CAAA;sBAAnB;gBAKS,cAAc,EAAA,CAAA;sBAAvB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBA0DD,KAAK,EAAA,CAAA;sBAFJ,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;;sBAC1C,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;gBAuBnD,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEzKxB,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAbxB,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;AACpB,YAAA,0BAA0B,aAT1B,YAAY;YACZ8B,kBAAgB;YAChB5B,gBAAc;AACd,YAAA,oBAAoB,aASpB,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,0BAA0B,CAAA,EAAA,CAAA,CAAA;AAIjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAnBxB,YAAY;YACZ4B,kBAAgB;YAChB5B,gBAAc;YACd,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAgBX,eAAe,EAAA,UAAA,EAAA,CAAA;kBArB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ4B,kBAAgB;wBAChB5B,gBAAc;wBACd,oBAAoB;AACrB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,mBAAmB;wBACnB,qBAAqB;wBACrB,oBAAoB;wBACpB,0BAA0B;AAC3B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,qBAAqB;wBACrB,oBAAoB;wBACpB,0BAA0B;AAC3B,qBAAA;oBACD,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACpBD;MAOa,mBAAmB,CAAA;AANhC,IAAA,WAAA,GAAA;;QAQW,IAAA,CAAA,IAAI,GAAG,CAAC;;QAER,IAAA,CAAA,KAAK,GAAG,CAAC;;QAcT,IAAA,CAAA,eAAe,GAAa,IAAI;;QAMhC,IAAA,CAAA,YAAY,GAAG,IAAI;;QAEnB,IAAA,CAAA,SAAS,GAAG,EAAE;;AAIb,QAAA,IAAA,CAAA,gBAAgB,GAAyB,IAAI,YAAY,EAAU;;QAG7E,IAAA,CAAA,UAAU,GAAG,CAAC;;QAEd,IAAA,CAAA,IAAI,GAAkB,EAAE;;QAExB,IAAA,CAAA,UAAU,GAAkB,EAAE;;QAE9B,IAAA,CAAA,UAAU,GAAG,CAAC;;QAEd,IAAA,CAAA,iBAAiB,GAAG,KAAK;;QAEzB,IAAA,CAAA,eAAe,GAAG,KAAK;AA8ExB,IAAA;AA5EC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,IAAI,EAAE;YACpC,IAAI,CAAC,aAAa,EAAE;QACtB;QAEA,IAAI,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,KAAK,EAAE;YAC3C,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;;IAGA,aAAa,GAAA;AACX,QAAA,MAAM,aAAa,GAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE;AAC5D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;QAC9D,IAAI,CAAC,YAAY,EAAE;IACrB;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B;AAAO,aAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC7C;aAAO;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;IACF;;AAGA,IAAA,eAAe,CAAC,SAAiB,EAAA;QAC/B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC;AAEA;;;AAGG;IACK,YAAY,GAAA;QAClB,MAAM,OAAO,GAAkB,EAAE;AACjC,QAAA,MAAM,MAAM,GAAW,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC;AAEhE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjB;QAEA,MAAM,WAAW,GAAW,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU;AAEzB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;YAC5B,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,EAAE;AAC9C,gBAAA,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM;YAClC;iBAAO,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC,EAAE;AACxC,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW;YAClC;AACA,YAAA,GAAG,GAAG,KAAK,GAAG,MAAM;QACtB;AACA,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;gBACd,KAAK,GAAG,CAAC;AACT,gBAAA,GAAG,GAAG,KAAK,GAAG,MAAM;YACtB;YAEA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;AAC7B,gBAAA,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;gBACzB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;YACnC;QACF;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO;AACzB,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;QAClC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW,GAAG,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;IACvC;8GAxHW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,seCpBhC,wgKAiJA,EAAA,MAAA,EAAA,CAAA,soFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,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,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD7Ha,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,wgKAAA,EAAA,MAAA,EAAA,CAAA,soFAAA,CAAA,EAAA;8BAIV,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,EAAE,EAAA,CAAA;sBAAV;gBAES,gBAAgB,EAAA,CAAA;sBAAzB;;;ME7BU,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,YAAA,EAAA,CAXhB,mBAAmB,CAAA,EAAA,OAAA,EAAA,CAEhC,YAAY;YACZ,WAAW;YACXE,gBAAc;YACd,eAAe;AACf,YAAA,oBAAoB,aAEZ,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAGlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAT7B,YAAY;YACZ,WAAW;YACXA,gBAAc;YACd,eAAe;YACf,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,mBAAmB,CAAC;AACnC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACXA,gBAAc;wBACd,eAAe;wBACf,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACDD;MAEa,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,OAAO,GAAU,EAAE;AAkC5B,IAAA;IAhCC,GAAG,CAAC,OAAkB,EAAE,KAAyB,EAAA;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC;AAEA,IAAA,MAAM,CAAC,KAAyB,EAAA;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AACjD,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB;YACF;QACF;IACF;AAEA,IAAA,MAAM,CAAC,KAAyB,EAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACnC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBACrE,WAAW,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;YACxC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,CAClB,WAA4C,EAC5C,KAAyB,EAAA;AAEzB,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QACzC;;QAEE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS,CAAC,OAAO;YAClD,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;IAEtC;8GAlCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;AAsCD;;;AAGG;AAQG,MAAO,kBACX,SAAQH,uCAAqC,CAAA;AAsB7C;;;;;AAKG;AACH,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,QAAkC,EAClC,GAAsB,EAAA;AAEhC,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QAPV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;AA/Bf;;AAEG;QACsC,IAAA,CAAA,KAAK,GAC5C,OAAO;AACT;;AAEG;QAC4B,IAAA,CAAA,IAAI,GAAsB,OAAO;AAKhE;;;;AAIG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK;IAgBf;IAEA,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;;AAEvC,QAAA,IACE,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,gBAAgB,CACvB,CAAA,iCAAA,EAAoC,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG,CACjD,CACF,CAAC,MAAM,EACR;AACA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;;AAGA,IAAA,UAAU,CAAC,KAAU,EAAA;;QAEnB,KAAK,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;IACxC;;AAGA,IAAA,gBAAgB,CAAC,EAAuB,EAAA;;AAEtC,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;AACnB,YAAA,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,QAAA,CAAC;IACH;;IAGQ,UAAU,GAAA;QAChB,IACE,IAAI,CAAC,IAAI;AACT,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAClC;YACA,MAAM,IAAI,KAAK,CAAC;;;AAGjB,IAAA,CAAA,CAAC;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe;IAC1E;AA/FW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,yEAgCnB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAhCd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,SAAA,EAHhB,CAAC,wBAAwB,CAAC,iDClEzC,m0EAuFA,EAAA,MAAA,EAAA,CAAA,0lKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDlBa,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,SAAA,EAGX,CAAC,wBAAwB,CAAC,cACzB,KAAK,EAAA,QAAA,EAAA,m0EAAA,EAAA,MAAA,EAAA,CAAA,0lKAAA,CAAA,EAAA;;0BAgChB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;6GAzBgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAKF,IAAI,EAAA,CAAA;sBAAlC,WAAW;uBAAC,OAAO;;sBAAG;gBAId,eAAe,EAAA,CAAA;sBAAvB;;;AEpEH;;;AAGG;AAOG,MAAO,uBACX,SAAQD,uCAAqC,CAAA;AAoB7C;;;;AAIG;AACH,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EAAA;AAEhC,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QANV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;AA3Bf;;AAEG;QACsC,IAAA,CAAA,KAAK,GAC5C,aAAa;AACf;;AAEG;QAC4B,IAAA,CAAA,IAAI,GAAsB,OAAO;AAKhE;;AAEG;QACM,IAAA,CAAA,SAAS,GAAsB,QAAQ;IAchD;IAEA,QAAQ,GAAA;QACN,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,UAAU,EAAE;IACnB;;IAGQ,UAAU,GAAA;QAChB,IACE,IAAI,CAAC,IAAI;AACT,YAAA,IAAI,CAAC,eAAe;AACpB,YAAA,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,EAClC;YACA,MAAM,IAAI,KAAK,CAAC;;;AAGjB,IAAA,CAAA,CAAC;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe;IAC1E;AAvDW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,yEA6BxB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7Bd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,2RC3BpC,u9BAkCA,EAAA,MAAA,EAAA,CAAA,6cAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDPa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,KAAK,EAAA,QAAA,EAAA,u9BAAA,EAAA,MAAA,EAAA,CAAA,6cAAA,CAAA,EAAA;;0BA6BhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;yEAtBgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAKF,IAAI,EAAA,CAAA;sBAAlC,WAAW;uBAAC,OAAO;;sBAAG;gBAId,eAAe,EAAA,CAAA;sBAAvB;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;;;MEjCU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,CALX,kBAAkB,EAAE,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAChD,YAAY,EAAEE,gBAAc,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAClD,kBAAkB,EAAE,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAG1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CAJhB,YAAY,EAAEA,gBAAc,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAIjD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;AAC3D,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAEA,gBAAc,EAAE,oBAAoB,CAAC;AAC7D,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;oBACtD,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACXD;MAKa,QAAQ,CAAA;AACnB;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAc,EAAA;QACtB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO;AACJ,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE;AACtB,aAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;IACxB;8GAbW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAR,QAAQ,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCIY,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,CAJd,QAAQ,CAAA,EAAA,OAAA,EAAA,CACb,YAAY,aACZ,QAAQ,CAAA,EAAA,CAAA,CAAA;AAEP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAHnB,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,QAAQ,CAAC;oBACxB,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,QAAQ,CAAC;AACpB,iBAAA;;;MCOY,cAAc,CAAA;AAL3B,IAAA,WAAA,GAAA;QAMW,IAAA,CAAA,UAAU,GAAmC,MAAM;QAKnB,IAAA,CAAA,KAAK,GAC5C,OAAO;AAyBV,IAAA;AAvBC,IAAA,IAAoD,aAAa,GAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS;IACtC;AAEA,IAAA,IAAqD,UAAU,GAAA;AAC7D,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ;IACxB;AAEA,IAAA,IACI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ;IACpD;AAEA,IAAA,IACI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ;IACrD;AAEA,IAAA,IACI,aAAa,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC;AAC9C,QAAA,OAAO,KAAK;IACd;8GA/BW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,oBAAA,EAAA,+BAAA,EAAA,iBAAA,EAAA,oCAAA,EAAA,qBAAA,EAAA,qCAAA,EAAA,sBAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAEU,UAAU,EAAA,CAAA;sBAAlB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEwC,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGmB,aAAa,EAAA,CAAA;sBAAhE,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,wBAAA;gBAIgC,UAAU,EAAA,CAAA;sBAA9D,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,yBAAA;gBAKjB,cAAc,EAAA,CAAA;sBADjB,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,8BAAA;gBAMjB,eAAe,EAAA,CAAA;sBADlB,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,+BAAA;gBAMjB,aAAa,EAAA,CAAA;sBADhB,WAAW;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,GAAA,yBAAA;;MAYV,sBAAsB,CAAA;AAIjC,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;QAFrB,IAAA,CAAA,iBAAiB,GAA0B,MAAM;IAEP;8GAJxC,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE;AACf,iBAAA;gFAEU,WAAW,EAAA,CAAA;sBAAnB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;;MAUU,4BAA4B,CAAA;AACvC,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;8GADxC,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE;AACf,iBAAA;;MAUY,oCAAoC,CAAA;AAC/C,IAAA,WAAA,CAAmB,WAA6B,EAAA;QAA7B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAqB;8GADxC,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApC,oCAAoC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBALhD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AC3ED,MAAM,WAAW,GAAG,CAAuB,GAAM,EAAE,GAAM,KAAW,GAAG,CAAC,GAAG,CAAC;AAErE,MAAM,IAAI,GAAG,CAClB,aAA4B,EAC5B,MAAkC,KACxB;AACV,IAAA,IAAI,MAAM,YAAY,MAAM,EAAE;QAC5B,OAAO,aAAa,CAAC,MAAM,CACzB,CAAC,GAAW,EAAE,IAAY,MAAM;AAC9B,YAAA,GAAG,GAAG;YACN,CAAC,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC;SAClC,CAAC,EACF,EAAE,CACH;IACH;AACA,IAAA,MAAM,KAAK,CAAC,mDAAmD,CAAC;AAClE,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAC/B,QAA0B,KACM;AAChC,IAAA,OAAO,CAAC,CAAM,EAAE,CAAM,KAAI;QACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,CAAC;AACvC,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACH,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAC9B,QAA0B,KACM;AAChC,IAAA,OAAO,CAAC,CAAM,EAAE,CAAM,KAAI;QACxB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,CAAC;AACvC,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;AACH,CAAC;;MC9BY,WAAW,CAAA;AACtB,IAAA,SAAS,CACP,KAAQ,EACR,KAAa,EACb,OAAgC,EAAA;;AAGhC,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,YAAA,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB;;QAGA,OAAO,CAAA,UAAA,EAAa,KAAK,CAAA,CAAE;IAC7B;8GAbW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;AC2BD,IAAI,YAAY,GAAG,CAAC;AAEpB,SAAS,iBAAiB,CAAC,QAAuB,EAAA;IAChD,MAAM,WAAW,GAA2B,EAAE;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE;AACnC,QAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;IAC1B;AACA,IAAA,OAAO,WAAW;AACpB;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EG;MAOU,cAAc,CAAA;AAN3B,IAAA,WAAA,GAAA;;AA8BY,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AAEnD;;;AAGG;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAY;AAErD;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAc;AAWrD;;;;AAIG;QACM,IAAA,CAAA,KAAK,GAAG,IAAI;AAErB;;;;;;AAMG;AACM,QAAA,IAAA,CAAA,UAAU,GAAqB,CAAC,CAAC,KAAK,SAAS;AAExD;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,IAAI;AAE1B;;AAEG;QACM,IAAA,CAAA,oBAAoB,GAAa,EAAE;AAE5C;;;AAGG;QACM,IAAA,CAAA,UAAU,GAAG,KAAK;AAE3B;;;AAGG;QACM,IAAA,CAAA,iBAAiB,GAAG,IAAI;AAEjC;;AAEG;QACM,IAAA,CAAA,YAAY,GAAG,UAAU;AAElC;;;AAGG;QACM,IAAA,CAAA,cAAc,GAAG,KAAK;;QAGtB,IAAA,CAAA,KAAK,GAAG,kBAAkB;AAcnC;;;AAGG;AACH,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAA6B;AAEzD;;;AAGG;AACH,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,GAAG,EAA6B;AAoB5D;;;AAGG;AACH,QAAA,IAAA,CAAA,YAAY,GAAqB,IAAI,gBAAgB,CAAC,EAAE,CAAC;AAEzD;;;AAGG;AACH,QAAA,IAAA,CAAA,aAAa,GAAuB,IAAI,kBAAkB,CAAC,KAAK,CAAC;QAEzD,IAAA,CAAA,QAAQ,GAAa,EAAE;QACvB,IAAA,CAAA,IAAI,GAAmB,EAAE;AAuPlC,IAAA;AArPC,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IACE,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,EAAE,YAAY;AACvE,YAAA,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,SAAS,EACxF;AACA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAC5C,OAAO,CAAC,SAAS,CAAC,YAAY,CAC/B;YACD,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEnC,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB;AACpD,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB;gBAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAClD;iBAAO,IAAI,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE;YAC5C;QACF;;QAGA,IACE,IAAI,CAAC,cAAc;AACnB,aAAC,OAAO,CAAC,SAAS,EAAE,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,EACvE;AACA,YAAA,MAAM,eAAe,GACnB,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;AACzD,YAAA,IAAI,eAAe;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;QACxD;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE;IAC9B;IAEA,kBAAkB,GAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;;YAE/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,aAAa,KAAI;;AAEzC,gBAAA,IACE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAA2B,CAAC,EAClE;;AAEA,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,WAAW,CAC1B;gBACH;;AAEA,gBAAA,IACE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAA2B,CAAC,EAClE;;AAEA,oBAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,aAAa,CAAC,WAAW,EACzB,aAAa,CAAC,WAAW,CAC1B;gBACH;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;;YAE7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW;QACtE;;AAGA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;;YAE7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW;QACtE;;AAGA,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBAC9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/C;AAEA;;;AAGG;AACH,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC;AAC/C,YAAA,IAAI,EAAE,CAAC,KAAc,KAAI;AACvB,gBAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACjE,gBAAA,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACxD,gBAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAC/C,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;YAC1C,CAAC;AACF,SAAA,CAAC;IACJ;AAEA;;;AAGG;AACH,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC;AACtB,aAAA,IAAI,CACH,YAAY,CAAC,CAAC,CAAC;AACf,QAAA,GAAG,CAAC,CAAC,GAA+B,KAAI;;AAEtC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAC/C,gBAAA,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO;AACjE,YAAA,CAAC,CAAC;;AAEF,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,KAAa,KAAI;;gBAEtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;AAClD,gBAAA,MAAM,WAAW,GACf,gBAAgB,GAAG;AACjB,sBAAE,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;sBACzD,KAAK;;AAEX,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;gBAE9D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;;gBAElC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvC,CAAC;AACF,SAAA,CAAC;IACN;AAEA;;;AAGG;AACH,IAAA,sBAAsB,CAAC,SAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK;;AAE5B,QAAA,MAAM,UAAU,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;QAG3E,MAAM,UAAU,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;;QAGhE,MAAM,MAAM,GAAa,UAAU,CAAC,MAAM,CACxC,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CACtC;;QAGD,MAAM,UAAU,GAAa,UAAU,CAAC,MAAM,CAC5C,CAAC,EAAE,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CACtC;;AAGD,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACpB,gBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAC5C,EAAE,EACF,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAC9B;gBACD,IAAI,IAAI,CAAC,QAAQ;oBAAE,IAAI,CAAC,MAAM,EAAE;AAClC,YAAA,CAAC,CAAC;QACJ;;QAGA,IAAI,UAAU,CAAC,MAAM;YACnB,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAElE,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;IACnD;AAEA;;;AAGG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE;IACjE;IAEA,wBAAwB,CAAC,KAAU,EAAE,MAAsB,EAAA;AACzD,QAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAC9B;IACF;AAEA;;;;AAIG;AACH,IAAA,eAAe,CAAC,MAAsB,EAAA;;QAEpC,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAChD,CAAC,EAAE,KAAK,EAAE,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,CAChD;AACD,QAAA,IAAI,kBAAkB;YAAE,OAAO,kBAAkB,CAAC,KAAK;AACvD,QAAA,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,GAAG,KAAK,GAAG,MAAM;AACvD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IAC1B;;AAGA,IAAA,WAAW,CAAC,MAAsB,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE;;AAEtB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;;QAExE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CACxB,MAAM,CAAC,KAAK,KAAK;AACf,cAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ;cACjC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CACtC;IACH;AAEA;;;AAGG;IACH,kBAAkB,CAAC,IAAS,EAAE,kBAA4B,EAAA;AACxD,QAAA,IAAI,CAAC,kBAAkB;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QAEpD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C;IACF;AAEA,IAAA,YAAY,CAAC,MAAsB,EAAA;AACjC,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,KAAK,KAAK;AACf,cAAE,IAAI,CAAC,iBAAiB,EAAE;AAC1B,cAAE,IAAI,CAAC,iBAAiB,EAAE,GAAG;AACjC,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAM;QACtB,OAAO,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;IACtE;AAEQ,IAAA,iBAAiB,CAAC,EAAU,EAAA;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3B;8GAhZW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,wrBAaX,oCAAoC,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOpC,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAdzB,sBAAsB,qEClIzC,moTA4QA,EAAA,MAAA,EAAA,CAAA,6oeAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,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,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA+B,cAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDhJa,cAAc,EAAA,UAAA,EAAA,CAAA;kBAN1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cAGV,KAAK,EAAA,QAAA,EAAA,moTAAA,EAAA,MAAA,EAAA,CAAA,6oeAAA,CAAA,EAAA;8BASnB,eAAe,EAAA,CAAA;sBADd,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;gBAQ9D,oBAAoB,EAAA,CAAA;sBADnB,YAAY;uBAAC,oCAAoC;gBAQlD,oBAAoB,EAAA,CAAA;sBADnB,YAAY;uBAAC,4BAA4B;gBAIhC,WAAW,EAAA,CAAA;sBAApB;gBAMS,YAAY,EAAA,CAAA;sBAArB;gBAKS,UAAU,EAAA,CAAA;sBAAnB;gBAMQ,YAAY,EAAA,CAAA;sBAApB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAOQ,KAAK,EAAA,CAAA;sBAAb;gBASQ,UAAU,EAAA,CAAA;sBAAlB;gBAMQ,UAAU,EAAA,CAAA;sBAAlB;gBAKQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAMQ,UAAU,EAAA,CAAA;sBAAlB;gBAMQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAKQ,YAAY,EAAA,CAAA;sBAApB;gBAMQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAGQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAGQ,iBAAiB,EAAA,CAAA;sBAAzB;;;ME3MU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,iBAdxB,cAAc;YACd,cAAc;YACd,sBAAsB;YACtB,4BAA4B;YAC5B,oCAAoC,CAAA,EAAA,OAAA,EAAA,CAE5B,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,CAAA,EAAA,OAAA,EAAA,CAEvE,cAAc;YACd,sBAAsB;YACtB,4BAA4B;YAC5B,oCAAoC,CAAA,EAAA,CAAA,CAAA;AAG3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CARhB,YAAY,EAAE,mBAAmB,EAAE,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAQjD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhB3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,cAAc;wBACd,cAAc;wBACd,sBAAsB;wBACtB,4BAA4B;wBAC5B,oCAAoC;AACrC,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,CAAC;AAC1E,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,sBAAsB;wBACtB,4BAA4B;wBAC5B,oCAAoC;AACrC,qBAAA;AACF,iBAAA;;;AC7BD;;AAEG;;ACAH;;;;;;;;;;;AAWG;MAMU,YAAY,CAAA;AALzB,IAAA,WAAA,GAAA;;QAOwC,IAAA,CAAA,SAAS,GAAG,IAAI;;QAE5B,IAAA,CAAA,IAAI,GAAG,UAAU;;QAEF,IAAA,CAAA,KAAK,GAC5C,YAAY;;QAEyB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAQ5C,IAAA,CAAA,QAAQ,GAAG,KAAK;AAa1B,IAAA;;AAnBC,IAAA,IAAgC,MAAM,GAAA;AACpC,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM;IACrB;;AASA,IAAA,IAA4B,MAAM,GAAA;AAChC,QAAA,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,EAAE,EAAE;IAC3B;;AAGA,IAAA,IAAyC,cAAc,GAAA;AACrD,QAAA,OAAO,CAAA,IAAA,EAAO,IAAI,CAAC,EAAE,EAAE;IACzB;8GA7BW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,GAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAEP,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,UAAU,EAAE;AACf,iBAAA;8BAGuC,SAAS,EAAA,CAAA;sBAA9C,WAAW;uBAAC,uBAAuB;gBAEV,IAAI,EAAA,CAAA;sBAA7B,WAAW;uBAAC,WAAW;gBAEiB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAGM,MAAM,EAAA,CAAA;sBAA5C,WAAW;uBAAC,eAAe;;sBAAG;gBAEC,MAAM,EAAA,CAAA;sBAArC,WAAW;uBAAC,aAAa;gBAIjB,GAAG,EAAA,CAAA;sBAAX;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,EAAE,EAAA,CAAA;sBAAV;gBAG2B,MAAM,EAAA,CAAA;sBAAjC,WAAW;uBAAC,SAAS;gBAKmB,cAAc,EAAA,CAAA;sBAAtD,WAAW;uBAAC,sBAAsB;;;AC9CrC;MA4Ba,aAAa,CAAA;AAuCxB,IAAA,WAAA,CAAsB,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;;QAnCG,IAAA,CAAA,SAAS,GAAG,IAAI;;QAGN,IAAA,CAAA,KAAK,GAC5C,MAAM;;AAGuB,QAAA,IAAA,CAAA,OAAO,GACpC,IAAI,SAAS,EAAE;AAEjB;;;;AAIG;QACM,IAAA,CAAA,IAAI,GAAU,EAAE;AAEzB;;;AAGG;AACc,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAkB;;QAGlE,IAAA,CAAA,UAAU,GAAG,KAAK;;QAMlB,IAAA,CAAA,WAAW,GAAG,KAAK;;QAGT,IAAA,CAAA,IAAI,GAAmB,EAAE;;QAsEzB,IAAA,CAAA,eAAe,GAAG,MAAK;;YAE/B,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE9C,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;YACpD,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC;;QAGS,IAAA,CAAA,oBAAoB,GAAG,MAAK;AACpC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;gBACxC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,gBAAA,SAAS,EAAE,MAAM;AAClB,aAAA,CAAC,CAAC;;YAEH,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACxB,IAAI,GAAG,CAAC,SAAS;oBAAE,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;AAC9C,YAAA,CAAC,CAAC;YACF,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC;IA3FsC;;IAGvC,OAAO,SAAS,CAAC,IAAW,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE;QAC3B,IAAI,MAAM,GAAG,CAAC;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC7B,YAAA,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;AAEpC,gBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,gBAAA,OAAO,EAAE,GAAG,GAAG,EAAE;YACnB;iBAAO;;AAEL,gBAAA,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;AAAE,oBAAA,MAAM,EAAE;AAC9C,gBAAA,MAAM,EAAE,GAAG,KAAK,GAAG,MAAM;gBACzB,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;AAEzB,oBAAA,OAAO,CAAC,IAAI,CACV,CAAA,kBAAA,EAAqB,GAAG,CAAC,EAAE,CAAA,iBAAA,EAAoB,GAAG,CAAC,GAAG,CAAA,2DAAA,EAA8D,EAAE,CAAA,CAAE,CACzH;gBACH;AACA,gBAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AACjB,gBAAA,OAAO,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE;YACvB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;;YAE7B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,QAAQ,GAAA;;QAEN,IAAI,CAAC,IAAI,CAAC,IAAI,CACZ,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAyB,CAAC,YAAY,aAAa,CAAC;AAClE,aAAA,SAAS,CAAC,CAAC,CAAgB,KAAI;;YAE9B,IAAI,IAAI,CAAC,WAAW;gBAAE;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtE,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;AACrB,gBAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;;AAEhB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC;0BACrB,IAAI,CAAC;AACP,0BAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC/C,oBAAA,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI;wBACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC/C;YACF;QACF,CAAC,CAAC,CACL;IACH;IAEA,kBAAkB,GAAA;;AAEhB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3E;;IA6BU,UAAU,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;;AAEhC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAC9B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAChE;;AAED,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;;AAEnE,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE5C,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW;AACjD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;IACjC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/C;;AAGU,IAAA,WAAW,CAAC,GAAQ,EAAA;;QAE5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACtB,YAAA,CAAC,CAAC,MAAM,GAAG,KAAK;YAChB,IAAI,CAAC,CAAC,SAAS;AAAE,gBAAA,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK;AAC7C,QAAA,CAAC,CAAC;;AAEF,QAAA,GAAG,CAAC,MAAM,GAAG,IAAI;QACjB,IAAI,GAAG,CAAC,SAAS;AAAE,YAAA,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI;;QAE9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;;AAGA,IAAA,QAAQ,CAAC,EAA+B,EAAA;AACtC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;AAC1D,QAAA,IACE,WAAW;YACX,CAAC,WAAW,CAAC,QAAQ;AACrB,YAAA,WAAW,KAAK,IAAI,CAAC,WAAW,EAChC;YACA,IAAI,SAAS,GAAG,KAAK;;AAErB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,gBAAA,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,MAAK;oBACX,SAAS,GAAG,IAAI;gBAClB,CAAC;AACF,aAAA,CAAC;YACF,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,oBAAA,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,oBAAA,IAAI,EAAE,WAAW;AAClB,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;gBACxB;YACF;AACA,YAAA,IAAI,WAAW,CAAC,IAAI,EAAE;;AAEpB,gBAAA,IAAI,CAAC;qBACF,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;AACpD,qBAAA,IAAI,CAAC,CAAC,OAAO,KAAI;AAChB,oBAAA,IAAI,OAAO,KAAK,KAAK,EAAE;AACrB,wBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,4BAAA,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,4BAAA,IAAI,EAAE,WAAW;AAClB,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;oBAC1B;;AAAO,wBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;AACtC,gBAAA,CAAC,CAAC;YACN;iBAAO;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YAC/B;QACF;IACF;;AAGA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAqB;AAC9C,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa;AACvC,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,KAAK;AACR,gBAAA,IAAI,MAAM;oBACR,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,gBAA+B,CAAC;gBACpE;YAEF,KAAK,MAAM;AACT,gBAAA,IAAI,MAAM;oBACR,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,iBAAgC,CAAC;gBACrE;YAEF,KAAK,WAAW,CAAC;YACjB,KAAK,SAAS;gBACZ,IAAI,CAAC,cAAc,CACjB,KAAK,EACL,UAAU,CAAC,sBAAqC,CACjD;gBACD;YAEF,KAAK,YAAY,CAAC;YAClB,KAAK,WAAW;gBACd,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAiC,CAAC;gBACxE;;AAEJ,QAAA,OAAO,IAAI;IACb;;IAGU,cAAc,CAAC,KAAoB,EAAE,UAAuB,EAAA;QACpE,IAAI,CAAC,UAAU,IAAI,EAAE,UAAU,YAAY,WAAW,CAAC;YAAE;QACzD,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,UAAU,CAAC,KAAK,EAAE;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC;8GA/PW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAxB,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAWP,YAAY,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvC/B,mmCAiCA,EAAA,MAAA,EAAA,CAAA,4iFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAQ,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDLa,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,mmCAAA,EAAA,MAAA,EAAA,CAAA,4iFAAA,CAAA,EAAA;6EAMY,SAAS,EAAA,CAAA;sBAAvC,WAAW;uBAAC,gBAAgB;gBAGY,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAIF,OAAO,EAAA,CAAA;sBAArC,eAAe;uBAAC,YAAY;gBAQpB,IAAI,EAAA,CAAA;sBAAZ;gBAMgB,YAAY,EAAA,CAAA;sBAA5B;;;MExCU,cAAc,CAAA;8GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,CAJV,YAAY,EAAE,aAAa,CAAA,EAAA,OAAA,EAAA,CAChC,YAAY,EAAE,eAAe,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CAC3C,YAAY,EAAE,aAAa,CAAA,EAAA,CAAA,CAAA;AAE1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAAA,OAAA,EAAA,CAHf,YAAY,EAAE,eAAe,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAG1C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;AAC3C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,YAAY,CAAC;AACtD,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;AACvC,iBAAA;;;ACZD;;AAEG;;ACcH;AAOM,MAAO,qBAAsB,SAAQT,uCAAqC,CAAA;AAK9E;;AAEG;AACH,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;AAEA;;AAEG;AACH,IAAA,IAAgC,OAAO,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO;IAC9B;;IAOA,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;IAEA,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AACA;;;AAGG;IACH,IAAa,SAAS,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;AAGA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,gBAAgB;IACvE;AAcA,IAAA,WAAA,CAC6B,SAAoB,EAGrC,cAA8B,EAC9B,GAAsB,EAAA;AAEhC,QAAA,KAAK,CAAC,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC;QANV,IAAA,CAAA,SAAS,GAAT,SAAS;QAG1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,GAAG,GAAH,GAAG;;QA7E0B,IAAA,CAAA,KAAK,GAC5C,UAAU;;QAmBH,IAAA,CAAA,QAAQ,GAAG,KAAK;AAwCjB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB;QAEpC,IAAA,CAAA,UAAU,GAAG,CAAC;AAKtB;;AAEG;QACM,IAAA,CAAA,IAAI,GAAsB,OAAO;IAU1C;;AAGA,IAAA,OAAO,CAAC,KAAY,EAAA;QAClB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;QACnB,IAAI,CAAC,KAAK,GAAI,KAAK,CAAC,MAA8B,CAAC,KAAK;AACxD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AA1FW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,yEA6EtB,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7Ed,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,oaCvBlC,uhHAmIA,EAAA,MAAA,EAAA,CAAA,4lHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,qCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD5Ga,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cAGb,KAAK,EAAA,QAAA,EAAA,uhHAAA,EAAA,MAAA,EAAA,CAAA,4lHAAA,CAAA,EAAA;;0BA6EhB;;0BAAQ;;0BACR;;0BACA,MAAM;2BAAC,eAAe;yEA3EgB,KAAK,EAAA,CAAA;sBAA7C,WAAW;uBAAC,iBAAiB;;sBAAG;gBAMD,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAOM,OAAO,EAAA,CAAA;sBAAtC,WAAW;uBAAC,aAAa;gBAKjB,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEY,SAAS,EAAA,CAAA;sBAArB;gBAYY,SAAS,EAAA,CAAA;sBAArB;gBAKY,SAAS,EAAA,CAAA;sBAArB;gBAWY,SAAS,EAAA,CAAA;sBAArB;gBAeQ,IAAI,EAAA,CAAA;sBAAZ;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;;;ME1EU,kBAAkB,CAAA;8GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAlB,kBAAkB,EAAA,YAAA,EAAA,CAVd,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAElC,YAAY;YACZT,gBAAc;YACd2B,uCAAqC;AACrC,YAAA,oBAAoB,aAEZ,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAGpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAR3B,YAAY;YACZ3B,gBAAc;YACd2B,uCAAqC;YACrC,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAKX,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAX9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;AACrC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ3B,gBAAc;wBACd2B,uCAAqC;wBACrC,oBAAoB;AACrB,qBAAA;oBACD,OAAO,EAAE,CAAC,qBAAqB,CAAC;oBAChC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ICNW;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCNV,mBAAmB,CAAA;AAHhC,IAAA,WAAA,GAAA;QAIU,IAAA,CAAA,QAAQ,GAAmB,EAAE;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAkB;AA2GvD,IAAA;AAzGC,IAAA,GAAG,CAAC,OAAqB,EAAA;AACvB,QAAA,MAAM,EACJ,IAAI,EACJ,cAAc,EACd,SAAS,EACT,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,OAAO,GACR,GAAG,OAAO;AACX,QAAA,MAAM,UAAU,GAAiB;YAC/B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,CAAC,WAAW;YAC3C,cAAc;YACd,SAAS,EAAE,SAAS,IAAI,EAAE;YAC1B,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,eAAe;SAChB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;IAC1C;AAWA,IAAA,UAAU,CACR,IAAiB,EACjB,cAAsB,EACtB,SAAiB,EACjB,QAAiB,EACjB,OAAgB,EAChB,QAA2B,EAC3B,eAAqB,EAAA;AAErB,QAAA,MAAM,UAAU,GAAiB;YAC/B,IAAI;YACJ,cAAc;YACd,SAAS;YACT,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,eAAe;SAChB;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;IAC1C;AAEA,IAAA,aAAa,CAAC,OAAqB,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;AACpE,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,mBAAmB,CAAC,OAAqB,EAAA;QACvC,IAAI,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE;AAC/C,YAAA,MAAM,aAAa,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;AAEhE,YAAA,OAAO,CAAC,OAAO,GAAG,aAAa,GAAG,IAAI;AACtC,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;QACxC;IACF;AAEA,IAAA,oBAAoB,CAAC,OAAqB,EAAA;AACxC,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;IACvC;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;IAC3C;AAEQ,IAAA,wBAAwB,CAAC,cAAsB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC5B,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,KAAK,cAAc,CAClD;IACH;AAEQ,IAAA,oBAAoB,CAAC,EAAU,EAAA;AACrC,QAAA,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C;IACF;AAEQ,IAAA,uBAAuB,CAAC,UAAwB,EAAA;AACtD,QAAA,IAAI,UAAU,CAAC,OAAO,EAAE;YACtB,UAAU,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CACtC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EACpC,UAAU,CAAC,OAAO,GAAG,IAAI,CAC1B;AACD,YAAA,UAAU,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE;QAC1C;IACF;8GA5GW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCmBY,cAAc,CAAA;AAOzB,IAAA,WAAA,CAAoB,mBAAwC,EAAA;QAAxC,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAFvC,IAAA,CAAA,QAAQ,GAAmB,EAAE;IAEkC;IAE/D,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;AACnC,aAAA,WAAW;AACX,aAAA,SAAS,CAAC,CAAC,QAAQ,MAAM,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACxD;AAEA,IAAA,YAAY,CAAC,OAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO,CAAC;IACvD;AAEA,IAAA,YAAY,CAAC,OAAqB,EAAA;AAChC,QAAA,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,CAAC;IACxD;AAEA,IAAA,aAAa,CAAC,OAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC;IACjD;IAEA,mBAAmB,CAAC,KAAa,EAAE,OAAqB,EAAA;AACtD,QAAA,OAAO,KAAK;IACd;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE;QAC9C;IACF;8GAnCW,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAI,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B3B,8wIAyFA,EAAA,MAAA,EAAA,CAAA,s1CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAjC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,UAAA,ED5EgB;YACR,OAAO,CAAC,gBAAgB,EAAE;gBACtB,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACpD,oBAAA,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBAC9E,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACjB,oBAAA,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;iBAClF,CAAC;aACL,CAAC;AACL,SAAA,EAAA,CAAA,CAAA;;2FAGQ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EAGV;wBACR,OAAO,CAAC,gBAAgB,EAAE;4BACtB,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AACpD,gCAAA,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BAC9E,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gCAAA,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;6BAClF,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,UAAA,EACW,KAAK,EAAA,QAAA,EAAA,8wIAAA,EAAA,MAAA,EAAA,CAAA,s1CAAA,CAAA,EAAA;qFAGV,oBAAoB,EAAA,CAAA;sBAA5B;;;MEdU,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAf,eAAe,EAAA,YAAA,EAAA,CALX,cAAc,CAAA,EAAA,OAAA,EAAA,CACnB,YAAY,EAAE,eAAe,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA,CACnD,cAAc,CAAA,EAAA,CAAA,CAAA;AAGb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAAA,OAAA,EAAA,CAJhB,YAAY,EAAE,eAAe,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAIlD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAN3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,cAAc,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,oBAAoB,CAAC;oBAC9D,OAAO,EAAE,CAAC,cAAc,CAAC;oBACzB,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACZD;;AAEG;;ACFI,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAc;IACnD,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,SAAS,EAAE,MAAM,CAAC;IACnB,CAAC,eAAe,EAAE,QAAQ,CAAC;IAC3B,CAAC,SAAS,EAAE,YAAY,CAAC;IACzB,CAAC,kBAAkB,EAAE,SAAS,CAAC;IAC/B,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,aAAa,EAAE,KAAK,CAAC;IACtB,CAAC,aAAa,EAAE,KAAK,CAAC;IACtB,CAAC,SAAS,EAAE,QAAQ,CAAC;IACrB,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAC3B,CAAA,CAAC;AAEK,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAc;IACxD,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,QAAQ,EAAE,GAAG,CAAC;IACf,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IACtC,CAAC,QAAQ,EAAE,OAAO,CAAC;IACnB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjC,CAAC,cAAc,EAAE,iCAAiC,CAAC;AACpD,CAAA,CAAC;AAEK,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAc;IAC3D,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,QAAQ,EAAE,GAAG,CAAC;IACf,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IACtC,CAAC,KAAK,EAAE,OAAO,CAAC;IAChB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjC,CAAC,cAAc,EAAE,iCAAiC,CAAC;AACpD,CAAA,CAAC;AAEK,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAc;IACzD,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,QAAQ,EAAE,GAAG,CAAC;IACf,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IACtC,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjC,CAAC,cAAc,EAAE,6CAA6C,CAAC;AAChE,CAAA,CAAC;AAEK,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAc;IAC1D,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,OAAO,EAAE,GAAG,CAAC;IACd,CAAC,QAAQ,EAAE,GAAG,CAAC;IACf,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IACtC,CAAC,MAAM,EAAE,OAAO,CAAC;IACjB,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACjC,CAAC,cAAc,EAAE,6CAA6C,CAAC;AAChE,CAAA,CAAC;AAEK,MAAM,kBAAkB,GAAG;AAChC,IAAA,GAAG,EAAE,qBAAqB;AAC1B,IAAA,MAAM,EAAE,wBAAwB;AAChC,IAAA,IAAI,EAAE,sBAAsB;AAC5B,IAAA,KAAK,EAAE,uBAAuB;CAC/B;;ACrCD;;;;;AAKG;MAKU,oBAAoB,CAAA;;IA2C/B,OAAO,YAAY,CAAC,MAAoB,EAAA;AACtC,QAAA,QACE,MAAM;YACN,CAAC,MAAM,CAAC,WAAW;AACnB,YAAA,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,YAAY;IAEhD;IAEA,WAAA,CACU,gBAA4B,EAC5B,QAAmB,EAAA;QADnB,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QA/CT,IAAA,CAAA,KAAK,GAAG,SAAS;AAC1B;;AAEG;QACM,IAAA,CAAA,SAAS,GAAc,KAAK;;QAE5B,IAAA,CAAA,KAAK,GAAG,KAAK;;QAEb,IAAA,CAAA,MAAM,GAAG,EAAE;;QAEX,IAAA,CAAA,cAAc,GAAG,EAAE;;QAInB,IAAA,CAAA,QAAQ,GAAG,GAAG;;AAGb,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAe;;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAe;;QAG1C,IAAA,CAAA,OAAO,GAAG,CAAC;QA2BnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI;IACpC;IAEA,eAAe,GAAA;;AAEb,QAAA,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IACE,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AACtD,YAAA,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;YACpD,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAChD;YACA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChD;QAEA,IAAI,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;QACxC;QAEA,IAAI,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACrD,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;;IAKA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,EAAE;IACb;;IAMA,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,EAAE;IACb;;IAIA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,OAAO;YAAE;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAChB,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC;IACzB;AAEA;;;AAGG;IACH,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAA;;QAEnB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE;AAExD,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC;QACpE;QAEA,IAAI,CAAC,cAAc,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC;AAEA;;;AAGG;IACH,IAAI,CAAC,OAAO,GAAG,KAAK,EAAA;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;QAC1B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC;QACpE;AACA,QAAA,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;IACzC;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC;AAClE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;QACvE;;AAEA,QAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;AAChE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC;AAC3D,QAAA,CAAC,CAAC;QACF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,gBAAgB,CAAC;AAC1E,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAC/B;;AAGD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC;QAElE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,YAAY,EACjB,sBAAsB,IAAI,CAAC,SAAS,CAAA,CAAE,CACvC;;AAGD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC;IACnE;AAEA;;;AAGG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;IAC/B;AAEA;;;AAGG;IACH,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE;AAChD,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,WAAW;YAClB,QAAQ,CAAC,eAAe,CAAC,SAAS;YAClC,IAAI,CAAC,aAAa,CAAC,SAAS;AAC5B,YAAA,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;AAE3D,QAAA,QAAQ,IAAI,CAAC,SAAS;AACpB,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,aAAa,CAChB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,MAAM,EAClB,SAAS,CAAC,KAAK,CAChB;gBACD;AAEF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,aAAa,CAChB,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,MAAM,EAClB,SAAS,CAAC,KAAK,CAChB;gBACD;AAEF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC;gBACrE;AAEF,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC;gBACtE;AAEF,YAAA;gBACE;;IAEN;AAEA;;;AAGG;IACH,aAAa,CACX,KAAc,EACd,SAAiB,EACjB,MAAe,EACf,YAAoB,EACpB,aAAqB,EACrB,UAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC;QACjD,MAAM,OAAO,GAAa,EAAE;QAC5B,MAAM,KAAK,GAAa,EAAE;AAE1B,QAAA,IAAI,KAAK;AACP,YAAA,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS;;AAC/D,YAAA,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS;AAE1D,QAAA,IAAI,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI;QACxC;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;AACpE,YAAA,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU;QAC/D;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAC/B;AAEA;;;AAGG;AACH,IAAA,eAAe,CACb,MAAe,EACf,SAAiB,EACjB,MAAe,EACf,aAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;AAC5C,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,aAAa,IAAI,CAAC,GAAG,SAAS;AACxE,QAAA,MAAM,OAAO,GAAa,EAAE,GAAG,EAAE;QACjC,MAAM,KAAK,GAAa,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,EAAE;AAElD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;;YACxD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AAE9C,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;IAC/B;AAEA;;;AAGG;IACH,QAAQ,CAAC,OAAiB,EAAE,KAAe,EAAA;;AAEzC,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC;AAC7D,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC;AAC3D,QAAA,CAAC,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAC9D,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAI;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC;AACzD,QAAA,CAAC,CACF;IACH;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,MAAM,UAAU,GAAG;AACjB,cAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa;AACrC,cAAE,gBAAgB,CAAC,WAAW,CAAC;QACjC,MAAM,mBAAmB,GAAG,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;AACvD,QAAA,MAAM,QAAQ,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE;AACnE,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ;QACjC,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK;IACzB;8GAvUW,oBAAoB,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,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE;AACf,iBAAA;uGAKU,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGS,QAAQ,EAAA,CAAA;sBAAjB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBAgED,YAAY,EAAA,CAAA;sBAFX,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,OAAO;gBASrB,YAAY,EAAA,CAAA;sBAHX,YAAY;uBAAC,YAAY;;sBACzB,YAAY;uBAAC,MAAM;;sBACnB,YAAY;uBAAC,cAAc;gBAO5B,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,eAAe;;;MChIlB,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,CAJb,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEzBE,gBAAc,aADd,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAGnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAFlBA,gBAAc,CAAA,EAAA,CAAA,CAAA;;2FAEb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,oBAAoB,CAAC;oBACpC,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,OAAO,EAAE,CAACA,gBAAc,CAAC;AAC1B,iBAAA;;;MC+DY,UAAU,CAAA;8GAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAV,UAAU,EAAA,OAAA,EAAA,CApCX,YAAY,CAAA,EAAA,OAAA,EAAA,CAEpB,qCAAqC;YACrC,oBAAoB;YACpB,kBAAkB;YAClB,eAAe;YACf,kCAAkC;YAClC,qBAAqB;YACrB,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,+BAA+B;YAC/B,cAAc;YACd,oBAAoB;YACpB,mBAAmB;YACnB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,eAAe;YACf,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,iBAAiB;YACjB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AASV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,EAAA,SAAA,EAPV;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,EAAE,gBAAgB,EAAE;AAC/B,aAAA;SACF,EAAA,OAAA,EAAA,CAlCS,YAAY,EAEpB,qCAAqC;YACrC,oBAAoB;YACpB,kBAAkB;YAClB,eAAe;YACf,kCAAkC;YAClC,qBAAqB;YACrB,gBAAgB;YAChB,cAAc;YACd,kBAAkB;YAClB,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,+BAA+B;YAC/B,cAAc;YACd,oBAAoB;YACpB,mBAAmB;YACnB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,eAAe;YACf,eAAe;YACf,cAAc;YACd,kBAAkB;YAClB,eAAe;YACf,iBAAiB;YACjB,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FASV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAtCtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE;wBACP,qCAAqC;wBACrC,oBAAoB;wBACpB,kBAAkB;wBAClB,eAAe;wBACf,kCAAkC;wBAClC,qBAAqB;wBACrB,gBAAgB;wBAChB,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;wBACpB,kBAAkB;wBAClB,kBAAkB;wBAClB,+BAA+B;wBAC/B,cAAc;wBACd,oBAAoB;wBACpB,mBAAmB;wBACnB,eAAe;wBACf,eAAe;wBACf,oBAAoB;wBACpB,eAAe;wBACf,eAAe;wBACf,cAAc;wBACd,kBAAkB;wBAClB,eAAe;wBACf,iBAAiB;wBACjB,mBAAmB;AACpB,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,cAAc;4BACvB,QAAQ,EAAE,EAAE,gBAAgB,EAAE;AAC/B,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACvED;;AAEG;;;;"}
1
+ {"version":3,"file":"sebgroup-green-angular-v-angular.mjs","sources":["../../../../libs/angular/src/v-angular/account-number/account-number.pipe.ts","../../../../libs/angular/src/v-angular/account-number/account-number.module.ts","../../../../libs/angular/src/v-angular/alert/alert.models.ts","../../../../libs/angular/src/v-angular/alert/alert.component.ts","../../../../libs/angular/src/v-angular/alert/alert.component.html","../../../../libs/angular/src/v-angular/alert/alert.module.ts","../../../../libs/angular/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.ts","../../../../libs/angular/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.ts","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.component.ts","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.component.html","../../../../libs/angular/src/v-angular/breadcrumbs/breadcrumbs.module.ts","../../../../libs/angular/src/v-angular/button/button.component.ts","../../../../libs/angular/src/v-angular/button/button.component.html","../../../../libs/angular/src/v-angular/button/button.module.ts","../../../../libs/angular/src/v-angular/card/card.component.ts","../../../../libs/angular/src/v-angular/card/card.module.ts","../../../../libs/angular/src/v-angular/core/core.globals.ts","../../../../libs/angular/src/v-angular/core/core.utils.ts","../../../../libs/angular/src/v-angular/character-countdown/character-countdown.directive.ts","../../../../libs/angular/src/v-angular/character-countdown/character-countdown.module.ts","../../../../libs/angular/src/v-angular/checkbox/checkbox.component.ts","../../../../libs/angular/src/v-angular/checkbox/checkbox.component.html","../../../../libs/angular/src/v-angular/checkbox/checkbox.module.ts","../../../../libs/angular/src/v-angular/datepicker/models/dates.ts","../../../../libs/angular/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.ts","../../../../libs/angular/src/v-angular/datepicker/datepicker.utils.ts","../../../../libs/angular/src/v-angular/datepicker/directives/calendar-date.directive.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/is-disabled.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/date-thook.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/matches.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.models.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.globals.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.html","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.module.ts","../../../../libs/angular/src/v-angular/datepicker/index.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.utils.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.pipes.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.ts","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.component.html","../../../../libs/angular/src/v-angular/drag-drop/drag-drop.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown-list/dropdown-list.component.html","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.html","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.module.ts","../../../../libs/angular/src/v-angular/dropdown/dropdown.module.ts","../../../../libs/angular/src/v-angular/dropdown/typeahead/typeahead.directive.ts","../../../../libs/angular/src/v-angular/external-link/external-link.directive.ts","../../../../libs/angular/src/v-angular/external-link/external-link.module.ts","../../../../libs/angular/src/v-angular/i18n/i18n.module.ts","../../../../libs/angular/src/v-angular/i18n/i18n.test.module.ts","../../../../libs/angular/src/v-angular/info-circle/info-circle.component.ts","../../../../libs/angular/src/v-angular/info-circle/info-circle.component.html","../../../../libs/angular/src/v-angular/info-circle/info-circle.module.ts","../../../../libs/angular/src/v-angular/input/input.component.ts","../../../../libs/angular/src/v-angular/input/input.component.html","../../../../libs/angular/src/v-angular/input/input.module.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask-format.pipe.ts","../../../../libs/angular/src/v-angular/input-mask/config.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.directive.ts","../../../../libs/angular/src/v-angular/input-mask/input-mask.module.ts","../../../../libs/angular/src/v-angular/input-mask/constants.ts","../../../../libs/angular/src/v-angular/modal/modal.globals.ts","../../../../libs/angular/src/v-angular/modal/dialog/dialog.component.ts","../../../../libs/angular/src/v-angular/modal/dialog/dialog.component.html","../../../../libs/angular/src/v-angular/modal/fold-out/keyboard-key.enum.ts","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.component.ts","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.component.html","../../../../libs/angular/src/v-angular/modal/fold-out/fold-out.directive.ts","../../../../libs/angular/src/v-angular/modal/slide-out/slide-out.component.ts","../../../../libs/angular/src/v-angular/modal/slide-out/slide-out.component.html","../../../../libs/angular/src/v-angular/modal/modal.module.ts","../../../../libs/angular/src/v-angular/pagination/pagination.component.ts","../../../../libs/angular/src/v-angular/pagination/pagination.component.html","../../../../libs/angular/src/v-angular/pagination/pagination.module.ts","../../../../libs/angular/src/v-angular/radio/radio.component.ts","../../../../libs/angular/src/v-angular/radio/radio.component.html","../../../../libs/angular/src/v-angular/radio/radio-group/radio-group.component.ts","../../../../libs/angular/src/v-angular/radio/radio-group/radio-group.component.html","../../../../libs/angular/src/v-angular/radio/radio.module.ts","../../../../libs/angular/src/v-angular/slug/slug.pipe.ts","../../../../libs/angular/src/v-angular/slug/slug.module.ts","../../../../libs/angular/src/v-angular/table/table.directive.ts","../../../../libs/angular/src/v-angular/table/table.tools.ts","../../../../libs/angular/src/v-angular/table/tr-thook.pipe.ts","../../../../libs/angular/src/v-angular/table/table.component.ts","../../../../libs/angular/src/v-angular/table/table.component.html","../../../../libs/angular/src/v-angular/table/table.module.ts","../../../../libs/angular/src/v-angular/table/index.ts","../../../../libs/angular/src/v-angular/tabs/tab.directive.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.ts","../../../../libs/angular/src/v-angular/tabs/tabs.component.html","../../../../libs/angular/src/v-angular/tabs/tabs.module.ts","../../../../libs/angular/src/v-angular/tabs/index.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/toast/toast.models.ts","../../../../libs/angular/src/v-angular/toast/toast-message.service.ts","../../../../libs/angular/src/v-angular/toast/toast.component.ts","../../../../libs/angular/src/v-angular/toast/toast.component.html","../../../../libs/angular/src/v-angular/toast/toast.module.ts","../../../../libs/angular/src/v-angular/toast/index.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.styles.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.directive.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.module.ts","../../../../libs/angular/src/v-angular/v-angular.module.ts","../../../../libs/angular/src/v-angular/sebgroup-green-angular-v-angular.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'\n\nexport const enum SchemaType {\n IBAN = 'iban',\n BBAN = 'bban',\n}\n\nexport type AccountNumberSchema = 'iban' | 'bban'\n\nconst evaluateValueSchema = (value: string): AccountNumberSchema => {\n const countryCodePattern = /^[a-zA-Z]{2}/\n const hasCountryCode = countryCodePattern.test(value)\n return hasCountryCode ? SchemaType.IBAN : SchemaType.BBAN\n}\n\nexport const bbanPattern = /(\\d{4})(\\d{2})(\\d{3})/\nexport const ibanPattern = /[a-zA-Z0-9]{1,4}/g\n\n/**\n * Formats account number according to bban or iban standard, and adds non-breakable whitespace (\\u00A0) between number groups.\n *\n * Example:\n * BBAN format: 'XXXX XX XXX <XXXX>'\n * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'\n *\n * @param value - account number value to format.\n * @param schema - accepts either 'iban' or 'bban'. If undefined, schema will be evaluated to 'iban' if value starts with 2 letters.\n * @returns - formatted value, or original value if schema could not be determined\n */\nexport const formatAccountNumber = (\n value: string,\n schema?: AccountNumberSchema,\n): string => {\n // evalue value schema to 'iban' or 'bban'\n if (!schema) schema = evaluateValueSchema(value)\n\n // if schema 'iban', return formatted value\n if (schema === SchemaType.BBAN)\n return value.replace(bbanPattern, '$1\\u00A0$2\\u00A0$3\\u00A0')\n\n // if schema 'iban', remove all white-spaces and other separators from the value\n const trimmedValue = value.replace(/\\s|-/g, '')\n if (schema === SchemaType.IBAN)\n return trimmedValue.replace(ibanPattern, (match: string, offset: number) =>\n offset ? `\\u00A0${match}` : match,\n )\n\n // return untouched value if unable to determine schema\n return value\n}\n\n/**\n * Pipe for formatting account number according to bban or iban standard, and adds non-breakable whitespace (\\u00A0) between number groups.\n *\n * BBAN format: 'XXXX XX XXX <XXXX>'\n * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'\n */\n@Pipe({\n name: 'accountNumber',\n standalone: true,\n})\nexport class AccountNumberPipe implements PipeTransform {\n transform = (value: string, schema?: AccountNumberSchema): string =>\n formatAccountNumber(value, schema)\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { AccountNumberPipe } from './account-number.pipe'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule, AccountNumberPipe],\n exports: [AccountNumberPipe],\n})\nexport class NggvAccountNumberPipeModule {}\n","export interface AlertMessage {\n type: AlertType\n titleText?: string\n bodyText?: string\n linkText?: string\n actionText?: string\n}\n\nexport enum AlertType {\n Success = 'success',\n Information = 'information',\n Warning = 'warning',\n Danger = 'danger',\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core'\n\nimport { AlertType } from './alert.models'\n\n@Component({\n selector: 'nggv-alert',\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n standalone: false\n})\nexport class AlertComponent {\n @Input() type: AlertType = AlertType.Success\n @Input() title?: string\n @Input() body?: string\n @Input() linkText?: string\n @Input() linkHref?: string\n @Input() actionText?: string\n @Input() closable = false\n\n @Output() closeAlert = new EventEmitter()\n @Output() clickLink = new EventEmitter()\n @Output() clickAction = new EventEmitter()\n\n onClose(e: Event): void {\n this.closeAlert.emit(e)\n }\n\n onLink(e: Event): void {\n this.clickLink.emit(e)\n }\n\n onAction(e: Event): void {\n this.clickAction.emit(e)\n }\n}\n","<div class=\"alert-container\" role=\"alert\" [ngClass]=\"type\">\n <ng-container [ngSwitch]=\"type\">\n <ng-container\n *ngSwitchCase=\"'success'\"\n [ngTemplateOutlet]=\"checkMark\"\n ></ng-container>\n <ng-container\n *ngSwitchCase=\"'information'\"\n [ngTemplateOutlet]=\"infoSquare\"\n ></ng-container>\n <ng-container\n *ngSwitchDefault\n [ngTemplateOutlet]=\"exclamationSquare\"\n ></ng-container>\n </ng-container>\n <div>\n <h3 *ngIf=\"title\">{{ title }}</h3>\n <p *ngIf=\"body\">\n {{ body }}&nbsp;<a\n *ngIf=\"linkText\"\n [href]=\"linkHref\"\n (click)=\"onLink($event)\"\n >{{ linkText }}</a\n >\n </p>\n </div>\n <button\n *ngIf=\"closable && !actionText\"\n class=\"close\"\n type=\"button\"\n (click)=\"onClose($event)\"\n >\n <i></i>\n </button>\n <footer *ngIf=\"actionText && !closable\">\n <button type=\"button\" (click)=\"onAction($event)\">\n {{ actionText }}\n </button>\n </footer>\n</div>\n\n<ng-template #checkMark>\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n</ng-template>\n<ng-template #infoSquare>\n <i>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"#333333\"\n />\n </svg>\n </i>\n</ng-template>\n<ng-template #exclamationSquare>\n <i>\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { AlertComponent } from './alert.component'\n\n@NgModule({\n declarations: [AlertComponent],\n imports: [CommonModule],\n exports: [AlertComponent],\n})\nexport class NggvAlertModule {}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { Observable, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n@Injectable() // Workaround for Compodoc https://github.com/compodoc/compodoc/issues/984\n@Component({\n template: '',\n standalone: false\n}) // Required with Angular ivy compiler\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class NggvBaseControlValueAccessorComponent\n implements AfterViewInit, OnInit, OnDestroy, ControlValueAccessor, Validator\n{\n /** Custom template for displaying the content of the label.\n * Specified by nesting an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @ContentChild('labelTpl', { read: TemplateRef })\n labelContentTpl?: TemplateRef<undefined>\n\n /** Custom template for displaying value when the input is locked.\n * Specified by nesting an `<ng-template #lockedTpl let-state>Custom locked content state: {{ state }}</ng-template>`.\n */\n @ContentChild('lockedTpl', { read: TemplateRef })\n lockedTpl?: TemplateRef<undefined>\n\n /** Reference to the native child input element. */\n @ViewChild('input', { read: ElementRef }) inputRef?: ElementRef\n\n /* ATTRIBUTES */\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n /** Name of the child input element. */\n @Input() name?: string\n /**\n * Label of the child input element using the default template.\n * Can be overwritten by specifying an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @Input() label?: string\n /** Role of the child input element. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles */\n @Input() role?: string\n /** Value of the child input element. Mostly used in conjunction with radio and checkboxes. */\n @Input() value: any\n /** An error string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() error?: string\n /** @deprecated Only one error should be shown under each field. */\n @Input() errorList?: string[]\n /** @deprecated Icon is always added before error. */\n @Input() withErrorIcon?: boolean = false\n /** Description of the child input element. Both visibly and as `aria-label`. */\n @Input() description?: string\n /** Determines if the label used to display the \"description\" text will be rendered to DOM */\n @Input() descriptionIsVisible = true\n /** If set to true, the browser will try to automatically set focus to the child input element. */\n @Input() autofocus = false\n /** Deafult value of the child input element. Used when resetting child element. */\n @Input() defaultValue?: any\n /** If passed, the component will listen for updates and will reset its value. */\n @Input() reset?: Observable<any>\n /** Adds (Optional) to input label. */\n @Input() optional?: boolean | null | undefined\n\n private _locked: boolean | null | undefined = undefined\n /** Hides the input borders and displays current value as a text. */\n @Input() set locked(value: boolean | null | undefined) {\n this._locked = value\n this.cdr.detectChanges()\n }\n get locked(): boolean | null | undefined {\n return this._locked\n }\n /** If set to true, using a controls disabled state will display input as locked. */\n @Input() displayDisabledAsLocked?: boolean | null | undefined\n\n /* STATES */\n\n private _required: boolean | null | undefined = undefined\n /** Override the required flag of the component. */\n @Input() set required(value: boolean | null | undefined) {\n this._required = value\n }\n /** Child input element is considered required and changes default label template accordingly. */\n get required(): boolean | null | undefined {\n // if required is set => return required\n if (this._required !== undefined) return this._required\n\n // if required can be determined from the control => return control.required\n if (this.ngControl?.control?.validator) {\n const validator = this.ngControl?.control?.validator(\n {} as AbstractControl,\n )\n // returns true for any error that starts with required\n return Object.keys(validator ?? {}).some((key) =>\n key.startsWith('required'),\n )\n }\n\n return\n }\n\n private _invalid: boolean | undefined = undefined\n /** Override the invalid state of the component. */\n @Input() set invalid(value: boolean) {\n this._invalid = value\n }\n /** The component has the invalid state, usually decorating the elements red and shows the first error. */\n get invalid(): boolean {\n if (this._invalid === true || this._invalid === false) return this._invalid\n return (\n !!this.ngControl?.control?.invalid && this.ngControl?.control?.touched\n )\n }\n\n private _valid: boolean | undefined = undefined\n /** Override the valid state of the component. */\n @Input() set valid(value: boolean) {\n this._valid = value\n }\n /** The component has the valid state, usually decorating the elements green. */\n get valid(): boolean {\n if (this._valid === true || this._valid === false) return this._valid\n return !!this.ngControl?.control?.valid && this.ngControl?.control?.touched\n }\n\n /** The component has the focused state, updated by the child input element's focus state. */\n @Input() focused = false\n\n private _disabled: boolean | undefined = undefined\n /** Override the disabled state of the component. */\n @Input() set disabled(value: boolean) {\n this._disabled = value\n }\n /** The component has the disabled state, usually muting the colors and removes interaction. */\n get disabled(): boolean {\n if (this._disabled === true || this._disabled === false)\n return this._disabled\n return !!this.ngControl?.control?.disabled\n }\n\n /* TRIGGERS */\n\n /** Emits focus events triggered by the child elements. */\n @Output() readonly nggvFocus = new EventEmitter()\n /** Emits focus events triggered by the child elements. */\n @Output() readonly nggvBlur = new EventEmitter()\n\n /* VALUE HANDLERS */\n\n private _state: any = null\n /** @internal */\n protected onChange = (_: any) => {\n // do nothing\n }\n /** @internal */\n protected onTouched = () => {\n // do nothing\n }\n /** @internal */\n protected onValidatorChange: () => void = () => null\n\n /* OTHER VARIABLES */\n scope: string | undefined\n\n /* LIFE CYCLE VARIABLES */\n\n private _onDestroy$ = new Subject<boolean>()\n\n /**\n * Creates a new BaseControlValueAccessorComponent.\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param translocoScope optional TranslocoScope provided if component is used within a scope.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this\n }\n\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngOnInit(): void {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValidators(\n Validators.compose([this.ngControl.control.validator, this.validate]),\n )\n }\n\n // if reset observable has been passed, subscribe after updates\n this.reset?.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n // reset value of controller\n this.state = this.defaultValue\n this.onChange(this.state)\n this.cdr.detectChanges()\n },\n })\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngAfterViewInit(): void {\n // if default value is set, then don't alter it. Otherwise, use\n // current value of controller after initiation as default value\n this.defaultValue = this.defaultValue ?? this.ngControl?.value\n }\n\n ngOnDestroy(): void {\n this._onDestroy$.next(true)\n this._onDestroy$.complete()\n }\n\n detectChanges(): void {\n this.cdr.detectChanges()\n }\n\n /** @internal */\n onFocus(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.focused = true\n this.nggvFocus.emit(event)\n }\n\n /** @internal */\n onBlur(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.onTouched()\n this.focused = false\n this.nggvBlur.emit(event)\n }\n\n /** Sets the focus on the actual input element. */\n setFocus() {\n if (this.inputRef) this.inputRef.nativeElement.focus()\n }\n\n // ----------------------------------------------------------------------------\n // CONTROL VALUE ACCESSOR\n // ----------------------------------------------------------------------------\n\n /** Internal state/value that the native input element has. */\n get state() {\n return this._state\n }\n\n /** Internal state/value that the native input element has. */\n set state(value) {\n if (typeof value === 'undefined') value = null\n this._state = value\n }\n\n /** Writes a new value to the child input element. */\n writeValue(value: any): void {\n this.state = value\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (_: any) => object): void {\n this.onChange = fn\n }\n\n /** Registers a callback function that is called when the child input element triggers on blur. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n /** Function that is called by the forms API when the control status changes to or from 'DISABLED'. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n\n // if displayDisabledAsLocked is enabled - update locked state based on disabled state\n if (this.displayDisabledAsLocked) {\n this.locked = isDisabled\n }\n }\n\n // ----------------------------------------------------------------------------\n // VALIDATORS\n // ----------------------------------------------------------------------------\n\n /** Method that performs synchronous validation against the provided control. Used for internal validation. */\n validate(_control: AbstractControl): { [name: string]: any } | null {\n return null\n }\n\n /** Registers a callback function to call when the validator inputs change. */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /** Returns the first entry in an error object. */\n get firstError(): { code: string; params: any } | null {\n const errors: ValidationErrors | null = this.ngControl.errors\n if (!errors) return null\n const code: string = Object.keys(errors)[0]\n return { code, params: errors[code] }\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { NggvBaseControlValueAccessorComponent } from './base-control-value-accessor.component'\n\n@NgModule({\n declarations: [NggvBaseControlValueAccessorComponent],\n imports: [],\n exports: [NggvBaseControlValueAccessorComponent],\n})\nexport class NggvBaseControlValueAccessorModule {}\n","import { Component, HostBinding, Input } from '@angular/core'\n\ntype Breadcrumb = {\n /** Title shown for the breadcrumb link. */\n title: string\n /** The link which is redirected to when clicked. Can be relative with external set to `false`. */\n href: string\n /** Flags this link to be either internal using router link or external using browser location. */\n external?: boolean\n}\n\n@Component({\n selector: 'nggv-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n standalone: false\n})\nexport class NggvBreadcrumbsComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'breadcrumbs'\n\n /** List of breadcrumbs to present. */\n @Input() breadcrumbs!: Breadcrumb[]\n}\n","<nav aria-label=\"Breadcrumbs\">\n <ol class=\"gds-breadcrumbs\">\n <ng-container *ngFor=\"let breadcrumb of breadcrumbs; let i = index\">\n <li [attr.aria-current]=\"i === breadcrumbs.length - 1\">\n <a\n [routerLink]=\"breadcrumb.href\"\n [external]=\"!!breadcrumb.external\"\n *ngIf=\"i < breadcrumbs.length - 1; else currentPageRef\"\n >{{ breadcrumb.title }}</a\n >\n <ng-template #currentPageRef>\n <span>{{ breadcrumb.title }}</span>\n </ng-template>\n </li>\n <li class=\"icon\" *ngIf=\"i < breadcrumbs.length - 1\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M9.22817 5.19072L8.60942 5.80947C8.46255 5.95635 8.46255 6.19385 8.60942 6.34072L14.2563 12.0001L8.60942 17.6595C8.46255 17.8063 8.46255 18.0438 8.60942 18.1907L9.22817 18.8095C9.37505 18.9563 9.61255 18.9563 9.75942 18.8095L16.3032 12.2657C16.45 12.1188 16.45 11.8813 16.3032 11.7345L9.75942 5.19072C9.61255 5.04385 9.37505 5.04385 9.22817 5.19072Z\"\n fill=\"#000\"\n />\n </svg>\n </li>\n </ng-container>\n </ol>\n</nav>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { NggvExternalLinkDirectiveModule } from '@sebgroup/green-angular/src/v-angular/external-link'\nimport { NggvBreadcrumbsComponent } from './breadcrumbs.component'\n\n@NgModule({\n declarations: [NggvBreadcrumbsComponent],\n imports: [CommonModule, NggvExternalLinkDirectiveModule, RouterModule],\n exports: [NggvBreadcrumbsComponent],\n})\nexport class NggvBreadcrumbsModule {}\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\nexport type ButtonTypes = 'button' | 'submit' | 'reset' | 'link'\n\nexport enum ButtonStyle {\n Primary,\n Secondary,\n Alternative,\n Delete,\n DeleteConfirm,\n Ghost,\n GhostDark,\n Link,\n}\n\n/**\n * Buttons allow users to take action with a single tap.\n * https://designlibrary.sebgroup.com/components/component-button\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'nggv-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n standalone: false\n})\nexport class NggvButtonComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnChanges\n{\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'button'\n /** Type of button to one of button|submit|reset|link, where link creates an anchor tag. */\n @Input() type: ButtonTypes = 'button'\n /** Style of the button to one of Primary|Secondary|Alternative|Delete|DeleteConfirm|Ghost|GhostDark|Link. */\n @Input() buttonStyle: ButtonStyle =\n this.type === 'link' ? ButtonStyle.Link : ButtonStyle.Primary\n /** Size of the button to be smaller. */\n @Input() small = false\n /** Where the button should link to if {@link ButtonTypes} is set to link. */\n @Input() href?: string\n\n /** @internal Determines if the the href property should use internal routing. */\n external = false\n /** @internal The classes determined by the buttonStyle and small properties. */\n buttonClasses: { [className: string]: boolean } = {}\n\n /** Emits click events triggered by the button or link.\n * Use instead of click to avoid triggering events on disabled buttons and links.\n */\n @Output() nggvClick = new EventEmitter()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n static buttonStyleClasses(type: ButtonStyle, small: boolean) {\n return {\n small: small,\n primary: type === ButtonStyle.Primary || type === ButtonStyle.Delete,\n secondary: type === ButtonStyle.Secondary,\n tertiary: type === ButtonStyle.Alternative || type === ButtonStyle.Link,\n danger: type === ButtonStyle.Delete || type === ButtonStyle.DeleteConfirm,\n ghost: type === ButtonStyle.GhostDark,\n 'ghost-light': type === ButtonStyle.Ghost,\n }\n }\n\n ngOnInit() {\n super.ngOnInit()\n if (this.href) this.external = /^\\w+:\\/\\/.+$/.test(this.href)\n this.buttonClasses = NggvButtonComponent.buttonStyleClasses(\n this.buttonStyle,\n this.small,\n )\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.buttonStyle || changes.small) {\n this.buttonClasses = NggvButtonComponent.buttonStyleClasses(\n this.buttonStyle,\n this.small,\n )\n }\n }\n\n /** @internal */\n onClick(event: Event) {\n if (this.disabled) return\n this.nggvClick.emit(event)\n }\n}\n","<button\n #input\n [ngClass]=\"buttonClasses\"\n [id]=\"id + '-button'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [type]=\"type\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"description\"\n (click)=\"onClick($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n *ngIf=\"type !== 'link'\"\n>\n <ng-container *ngTemplateOutlet=\"contentRef\"></ng-container>\n</button>\n\n<a\n #input\n [ngClass]=\"buttonClasses\"\n role=\"button\"\n [id]=\"id + '-link'\"\n [routerLink]=\"href\"\n [external]=\"external\"\n [attr.aria-label]=\"description\"\n (click)=\"onClick($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n *ngIf=\"type === 'link'\"\n>\n <ng-container *ngTemplateOutlet=\"contentRef\"></ng-container>\n</a>\n\n<ng-template #contentRef>\n <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { NggvExternalLinkDirectiveModule } from '@sebgroup/green-angular/src/v-angular/external-link'\nimport { NggvButtonComponent } from './button.component'\n\n@NgModule({\n declarations: [NggvButtonComponent],\n imports: [CommonModule, NggvExternalLinkDirectiveModule, RouterModule],\n exports: [NggvButtonComponent],\n})\nexport class NggvButtonModule {}\n","import { Component } from '@angular/core'\n\n@Component({\n selector: 'nggv-card',\n template: ` <ng-content></ng-content> `,\n styleUrls: ['./card.component.scss'],\n standalone: false\n})\nexport class NggvCardComponent {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvCardComponent } from './card.component'\n\n@NgModule({\n declarations: [NggvCardComponent],\n imports: [CommonModule],\n exports: [NggvCardComponent],\n})\nexport class NggvCardModule {}\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n nggv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.nggv) {\n window.nggv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import { Injectable } from '@angular/core'\n\nexport interface Option<K, V> {\n key: K\n label: V\n disabled?: boolean\n}\n\nexport interface OptionGroup<T extends Option<any, any>> {\n label: string\n options: T[]\n disabled?: boolean\n}\n\nexport type OptionBase<T extends Option<any, any>> = T | OptionGroup<T>\n\n@Injectable()\nexport class DropdownUtils<\n K = string | null,\n V = string,\n T extends Option<K, V> = Option<K, V>,\n> {\n public flattenOptions(\n options: OptionBase<T>[] | undefined,\n mustHaveLabel: boolean,\n ): T[] {\n if (!options) return [] as T[]\n return options.reduce((acc, current) => {\n if (this.isGroup(current))\n return acc.concat(this.flattenOptions(current.options, mustHaveLabel))\n if (!current.disabled && !(mustHaveLabel && !current.label))\n acc.push(current) // skip disabled\n return acc\n }, [] as T[])\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n public isGroup(option: OptionBase<T>): option is OptionGroup<T> {\n return 'options' in option\n }\n\n public deepEqual(original: any, change: any): boolean {\n if (original === change) return true\n\n // breaks early if either original or change is a primitive value\n if (\n typeof original !== 'object' ||\n typeof change !== 'object' ||\n original == null ||\n change == null\n )\n return false\n\n const keysOriginal = Object.keys(original)\n const keysChange = Object.keys(change)\n\n if (keysOriginal.length !== keysChange.length) return false\n\n for (const key of keysOriginal) {\n if (!keysChange.includes(key)) return false\n\n switch (true) {\n case Array.isArray(original[key]) && Array.isArray(change[key]):\n if (\n JSON.stringify(original[key].sort()) !==\n JSON.stringify(change[key].sort())\n )\n return false\n break\n case typeof original[key] === 'function':\n case typeof change[key] === 'function':\n if (original[key].toString() !== change[key].toString()) return false\n break\n default:\n if (!this.deepEqual(original[key], change[key])) return false\n }\n }\n\n return true\n }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'\n\n@Directive({\n selector: '[nggvCharacterCountdown]',\n standalone: false\n})\nexport class CharacterCountdownDirective {\n @Input('nggvCharacterCountdown')\n set maxlength(value: number | undefined) {\n if (!!value && !Number.isNaN(value)) {\n this._maxlength = value\n this.updateContext()\n if (!this.isViewCreated) {\n this.viewContainerRef.createEmbeddedView(this.templateRef, this.context)\n this.isViewCreated = true\n }\n } else {\n if (this.isViewCreated) {\n this.viewContainerRef.clear()\n this.isViewCreated = false\n }\n }\n }\n\n @Input('nggvCharacterCountdownCurrentLength')\n set currentLength(value: number) {\n this._currentLength = value ?? 0\n this.updateContext()\n }\n\n private _maxlength: number = Number.MAX_SAFE_INTEGER\n private _currentLength = 0\n private isViewCreated = false\n private context = { charactersLeft: 0 }\n\n constructor(\n private readonly viewContainerRef: ViewContainerRef,\n private readonly templateRef: TemplateRef<any>,\n ) {}\n\n updateContext() {\n this.context.charactersLeft = this.calculateCharactersLeft(\n this._maxlength,\n this._currentLength,\n )\n }\n\n calculateCharactersLeft = (max: number, current: number): number =>\n max - current\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { CharacterCountdownDirective } from './character-countdown.directive'\n\n@NgModule({\n declarations: [CharacterCountdownDirective],\n imports: [CommonModule],\n exports: [CharacterCountdownDirective],\n})\nexport class NggvCharacterCountdownDirectiveModule {}\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n Optional,\n Output,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Checkboxes allow a user to toggle an option on or off, or make multiple choices in a set of available options.\n * https://designlibrary.sebgroup.com/components/component-checkbox\n */\n@Component({\n selector: 'nggv-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n standalone: false\n})\nexport class NggvCheckboxComponent extends NggvBaseControlValueAccessorComponent {\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'checkbox'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the checkbox\n */\n @Input() size: 'small' | 'large' = 'large'\n\n @Input() optionalLabel = 'Optional'\n\n @Output() readonly valueChange: EventEmitter<string> =\n new EventEmitter<string>()\n\n constructor(\n @Self()\n @Optional()\n public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = !this.state\n this.onTouched()\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (checked: any) => any) {\n // Override default to update registry\n this.onChange = (checked) => {\n const output = checked ? this.value : null\n fn(output)\n this.valueChange.emit(output)\n }\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\">\n <div\n [id]=\"id + '-checkbox'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n <ng-container *ngIf=\"!labelContentTpl\">\n {{ label }}\n </ng-container>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div>\n <!-- CHECKBOX FIELD -->\n <label\n [id]=\"id + '-label'\"\n [attr.for]=\"id + '-checkbox'\"\n class=\"form-control\"\n *transloco=\"let t; read: scope\"\n >\n <input\n #input\n type=\"checkbox\"\n [id]=\"id + '-checkbox'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n <!-- LABEL -->\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n <span\n *ngIf=\"\n optional === true || (required !== true && optional !== false)\n \"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n <span>{{ label }}</span>\n </ng-container>\n </ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-checkbox'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n </ng-container>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvCheckboxComponent } from './checkbox.component'\n\n@NgModule({\n declarations: [NggvCheckboxComponent],\n imports: [CommonModule, NggvI18nModule, NggCoreWrapperModule],\n exports: [NggvCheckboxComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvCheckboxModule {}\n","import {\n createMask,\n InputmaskOptions,\n} from '@sebgroup/green-angular/src/v-angular/input-mask'\n\n/**\n * Helper function to generate InputmaskOptions by requested locale.\n * @param locale - requested locale. If not given, it'll use the browsers locale\n * @returns InputmaskOptions with date settings\n */\nexport const getLocaleDateMask = (\n dateCharacters?: DateCharacters,\n locale?: string,\n): InputmaskOptions<Date> => {\n // If no locale has been passed, use browser language\n if (!locale) locale = navigator.language\n\n const format = getLocaleDateString(locale).toLowerCase()\n\n return getFormatDateMask(format, dateCharacters)\n}\n\nexport const getLocaleDateString = (locale?: string) =>\n locale && dateFormats[locale] ? dateFormats[locale] : 'yyyy-MM-dd'\nconst dateFormats: Record<string, string> = {\n 'af-ZA': 'yyyy/MM/dd',\n 'am-ET': 'dd/MM/yyyy',\n 'ar-AE': 'dd/MM/yyyy',\n 'ar-BH': 'dd/MM/yyyy',\n 'ar-DZ': 'dd-MM-yyyy',\n 'ar-EG': 'dd/MM/yyyy',\n 'ar-IQ': 'dd/MM/yyyy',\n 'ar-JO': 'dd/MM/yyyy',\n 'ar-KW': 'dd/MM/yyyy',\n 'ar-LB': 'dd/MM/yyyy',\n 'ar-LY': 'dd/MM/yyyy',\n 'ar-MA': 'dd-MM-yyyy',\n 'ar-OM': 'dd/MM/yyyy',\n 'ar-QA': 'dd/MM/yyyy',\n 'ar-SA': 'dd/MM/yyyy',\n 'ar-SY': 'dd/MM/yyyy',\n 'ar-TN': 'dd-MM-yyyy',\n 'ar-YE': 'dd/MM/yyyy',\n 'arn-CL': 'dd-MM-yyyy',\n 'as-IN': 'dd-MM-yyyy',\n 'az-Cyrl-AZ': 'dd.MM.yyyy',\n 'az-Latn-AZ': 'dd.MM.yyyy',\n 'ba-RU': 'dd.MM.yyyy',\n 'be-BY': 'dd.MM.yyyy',\n 'bg-BG': 'dd.MM.yyyy',\n 'bn-BD': 'dd-MM-yyyy',\n 'bn-IN': 'dd-MM-yyyy',\n 'bo-CN': 'yyyy/MM/dd',\n 'br-FR': 'dd/MM/yyyy',\n 'bs-Cyrl-BA': 'dd.MM.yyyy',\n 'bs-Latn-BA': 'dd.MM.yyyy',\n 'ca-ES': 'dd/MM/yyyy',\n 'co-FR': 'dd/MM/yyyy',\n 'cs-CZ': 'dd.MM.yyyy',\n 'cy-GB': 'dd/MM/yyyy',\n 'da-DK': 'dd.MM.yyyy',\n 'de-AT': 'dd.MM.yyyy',\n 'de-CH': 'dd.MM.yyyy',\n 'de-DE': 'dd.MM.yyyy',\n 'de-LI': 'dd.MM.yyyy',\n 'de-LU': 'dd.MM.yyyy',\n 'dsb-DE': 'dd.MM.yyyy',\n 'dv-MV': 'dd/MM/yyyy',\n 'el-GR': 'dd/MM/yyyy',\n en: 'MM/dd/yyyy',\n 'en-029': 'MM/dd/yyyy',\n 'en-AU': 'dd/MM/yyyy',\n 'en-BZ': 'dd/MM/yyyy',\n 'en-CA': 'dd/MM/yyyy',\n 'en-GB': 'dd/MM/yyyy',\n 'en-IE': 'dd/MM/yyyy',\n 'en-IN': 'dd-MM-yyyy',\n 'en-JM': 'dd/MM/yyyy',\n 'en-MY': 'dd/MM/yyyy',\n 'en-NZ': 'dd/MM/yyyy',\n 'en-PH': 'MM/dd/yyyy',\n 'en-SG': 'dd/MM/yyyy',\n 'en-TT': 'dd/MM/yyyy',\n 'en-US': 'MM/dd/yyyy',\n 'en-ZA': 'yyyy/MM/dd',\n 'en-ZW': 'MM/dd/yyyy',\n 'es-AR': 'dd/MM/yyyy',\n 'es-BO': 'dd/MM/yyyy',\n 'es-CL': 'dd-MM-yyyy',\n 'es-CO': 'dd/MM/yyyy',\n 'es-CR': 'dd/MM/yyyy',\n 'es-DO': 'dd/MM/yyyy',\n 'es-EC': 'dd/MM/yyyy',\n 'es-ES': 'dd/MM/yyyy',\n 'es-GT': 'dd/MM/yyyy',\n 'es-HN': 'dd/MM/yyyy',\n 'es-MX': 'dd/MM/yyyy',\n 'es-NI': 'dd/MM/yyyy',\n 'es-PA': 'MM/dd/yyyy',\n 'es-PE': 'dd/MM/yyyy',\n 'es-PR': 'dd/MM/yyyy',\n 'es-PY': 'dd/MM/yyyy',\n 'es-SV': 'dd/MM/yyyy',\n 'es-US': 'MM/dd/yyyy',\n 'es-UY': 'dd/MM/yyyy',\n 'es-VE': 'dd/MM/yyyy',\n 'et-EE': 'dd.MM.yyyy',\n 'eu-ES': 'yyyy/MM/dd',\n 'fa-IR': 'MM/dd/yyyy',\n 'fi-FI': 'dd.MM.yyyy',\n 'fil-PH': 'MM/dd/yyyy',\n 'fo-FO': 'dd-MM-yyyy',\n 'fr-BE': 'dd/MM/yyyy',\n 'fr-CA': 'yyyy-MM-dd',\n 'fr-CH': 'dd.MM.yyyy',\n 'fr-FR': 'dd/MM/yyyy',\n 'fr-LU': 'dd/MM/yyyy',\n 'fr-MC': 'dd/MM/yyyy',\n 'fy-NL': 'dd-MM-yyyy',\n 'ga-IE': 'dd/MM/yyyy',\n 'gd-GB': 'dd/MM/yyyy',\n 'gl-ES': 'dd/MM/yyyy',\n 'gsw-FR': 'dd/MM/yyyy',\n 'gu-IN': 'dd-MM-yyyy',\n 'ha-Latn-NG': 'dd/MM/yyyy',\n 'he-IL': 'dd/MM/yyyy',\n 'hi-IN': 'dd-MM-yyyy',\n 'hr-BA': 'dd.MM.yyyy.',\n 'hr-HR': 'dd.MM.yyyy',\n 'hsb-DE': 'dd.MM.yyyy',\n 'hu-HU': 'yyyy.MM.dd.',\n 'hy-AM': 'dd.MM.yyyy',\n 'id-ID': 'dd/MM/yyyy',\n 'ig-NG': 'dd/MM/yyyy',\n 'ii-CN': 'yyyy/MM/dd',\n 'is-IS': 'dd.MM.yyyy',\n 'it-CH': 'dd.MM.yyyy',\n 'it-IT': 'dd/MM/yyyy',\n 'iu-Cans-CA': 'dd/MM/yyyy',\n 'iu-Latn-CA': 'dd/MM/yyyy',\n 'ja-JP': 'yyyy/MM/dd',\n 'ka-GE': 'dd.MM.yyyy',\n 'kk-KZ': 'dd.MM.yyyy',\n 'kl-GL': 'dd-MM-yyyy',\n 'km-KH': 'yyyy-MM-dd',\n 'kn-IN': 'dd-MM-yyyy',\n 'ko-KR': 'yyyy.MM.dd',\n 'kok-IN': 'dd-MM-yyyy',\n 'ky-KG': 'dd.MM.yyyy',\n 'lb-LU': 'dd/MM/yyyy',\n 'lo-LA': 'dd/MM/yyyy',\n 'lt-LT': 'yyyy.MM.dd',\n 'lv-LV': 'yyyy.MM.dd.',\n 'mi-NZ': 'dd/MM/yyyy',\n 'mk-MK': 'dd.MM.yyyy',\n 'ml-IN': 'dd-MM-yyyy',\n 'mn-MN': 'yyyy.MM.dd',\n 'mn-Mong-CN': 'yyyy/MM/dd',\n 'moh-CA': 'MM/dd/yyyy',\n 'mr-IN': 'dd-MM-yyyy',\n 'ms-BN': 'dd/MM/yyyy',\n 'ms-MY': 'dd/MM/yyyy',\n 'mt-MT': 'dd/MM/yyyy',\n 'nb-NO': 'dd.MM.yyyy',\n 'ne-NP': 'MM/dd/yyyy',\n 'nl-BE': 'dd/MM/yyyy',\n 'nl-NL': 'dd-MM-yyyy',\n 'nn-NO': 'dd.MM.yyyy',\n 'nso-ZA': 'yyyy/MM/dd',\n 'oc-FR': 'dd/MM/yyyy',\n 'or-IN': 'dd-MM-yyyy',\n 'pa-IN': 'dd-MM-yyyy',\n 'pl-PL': 'dd.MM.yyyy',\n 'prs-AF': 'dd/MM/yyyy',\n 'ps-AF': 'dd/MM/yyyy',\n 'pt-BR': 'dd/MM/yyyy',\n 'pt-PT': 'dd-MM-yyyy',\n 'qut-GT': 'dd/MM/yyyy',\n 'quz-BO': 'dd/MM/yyyy',\n 'quz-EC': 'dd/MM/yyyy',\n 'quz-PE': 'dd/MM/yyyy',\n 'rm-CH': 'dd/MM/yyyy',\n 'ro-RO': 'dd.MM.yyyy',\n 'ru-RU': 'dd.MM.yyyy',\n 'rw-RW': 'MM/dd/yyyy',\n 'sa-IN': 'dd-MM-yyyy',\n 'sah-RU': 'MM.dd.yyyy',\n se: 'yyyy-MM-dd',\n 'se-FI': 'dd.MM.yyyy',\n 'se-NO': 'dd.MM.yyyy',\n 'se-SE': 'yyyy-MM-dd',\n 'si-LK': 'yyyy-MM-dd',\n 'sk-SK': 'dd.MM.yyyy',\n 'sl-SI': 'dd.MM.yyyy',\n 'sma-NO': 'dd.MM.yyyy',\n 'sma-SE': 'yyyy-MM-dd',\n 'smj-NO': 'dd.MM.yyyy',\n 'smj-SE': 'yyyy-MM-dd',\n 'smn-FI': 'dd.MM.yyyy',\n 'sms-FI': 'dd.MM.yyyy',\n 'sq-AL': 'yyyy-MM-dd',\n 'sr-Cyrl-BA': 'dd.MM.yyyy',\n 'sr-Cyrl-CS': 'dd.MM.yyyy',\n 'sr-Cyrl-ME': 'dd.MM.yyyy',\n 'sr-Cyrl-RS': 'dd.MM.yyyy',\n 'sr-Latn-BA': 'dd.MM.yyyy',\n 'sr-Latn-CS': 'dd.MM.yyyy',\n 'sr-Latn-ME': 'dd.MM.yyyy',\n 'sr-Latn-RS': 'dd.MM.yyyy',\n sv: 'yyyy-MM-dd',\n 'sv-FI': 'dd.MM.yyyy',\n 'sv-SE': 'yyyy-MM-dd',\n 'sw-KE': 'MM/dd/yyyy',\n 'syr-SY': 'dd/MM/yyyy',\n 'ta-IN': 'dd-MM-yyyy',\n 'te-IN': 'dd-MM-yyyy',\n 'tg-Cyrl-TJ': 'dd.MM.yyyy',\n 'th-TH': 'dd/MM/yyyy',\n 'tk-TM': 'dd.MM.yyyy',\n 'tn-ZA': 'yyyy/MM/dd',\n 'tr-TR': 'dd.MM.yyyy',\n 'tt-RU': 'dd.MM.yyyy',\n 'tzm-Latn-DZ': 'dd-MM-yyyy',\n 'ug-CN': 'yyyy-MM-dd',\n 'uk-UA': 'dd.MM.yyyy',\n 'ur-PK': 'dd/MM/yyyy',\n 'uz-Cyrl-UZ': 'dd.MM.yyyy',\n 'uz-Latn-UZ': 'dd/MM yyyy',\n 'vi-VN': 'dd/MM/yyyy',\n 'wo-SN': 'dd/MM/yyyy',\n 'xh-ZA': 'yyyy/MM/dd',\n 'yo-NG': 'dd/MM/yyyy',\n 'zh-CN': 'yyyy/MM/dd',\n 'zh-HK': 'dd/MM/yyyy',\n 'zh-MO': 'dd/MM/yyyy',\n 'zh-SG': 'dd/MM/yyyy',\n 'zh-TW': 'yyyy/MM/dd',\n 'zu-ZA': 'yyyy/MM/dd',\n}\nexport const getFormatDateMask = (\n format: string,\n dateCharacters?: DateCharacters,\n) => {\n const separators = [' ', '.', '-', '/']\n const separator =\n separators.find((operator) => format.indexOf(operator) > -1) ?? '-'\n const dateObjects = format.split(separator)\n const year: { key: string; index: number } = { key: 'year', index: 0 },\n month: { key: string; index: number } = { key: 'month', index: 1 },\n day: { key: string; index: number } = { key: 'day', index: 2 }\n\n dateObjects.forEach((dateObject, index) => {\n switch (dateObject[0]) {\n case 'y':\n year.index = index\n break\n case 'm':\n month.index = index\n break\n case 'd':\n day.index = index\n break\n }\n })\n const placeholder = setDateFormatCharacters(format, dateCharacters)\n\n return createMask<Date>({\n alias: 'datetime',\n inputFormat: format,\n placeholder,\n parser: (value: string) => {\n const values = value.split(separator)\n const y = +values[year.index]\n const m = +values[month.index] - 1\n const d = +values[day.index]\n return new Date(y, m, d)\n },\n onBeforeMask(initialValue: string) {\n if (!initialValue || typeof initialValue !== 'string') return ''\n // If initialValues is in dateTime format, remove seconds that present after the \"T\"\n if (initialValue.includes('T')) initialValue = initialValue.split('T')[0]\n // initialValue should always be in yyyy-mm-dd no matter if set from control, via datepicker or manually with keyboard\n const values = initialValue.split('-')\n const datePartsInOrder = [year, month, day].sort(\n (a, b) => a.index - b.index,\n )\n // \"Insert\" correct values for the year/month/day, then join to string with separator\n return datePartsInOrder\n .map(({ key }) => {\n const [yearValue, monthValue, dateValue] = values\n if (key === 'year') return yearValue\n if (key === 'month') return monthValue\n return dateValue\n })\n .join(separator)\n },\n })\n}\n\nexport interface DateCharacters {\n year: string\n month: string\n day: string\n}\nexport const setDateFormatCharacters = (\n format: string,\n dateCharacters?: DateCharacters,\n) => {\n if (!dateCharacters) return format\n format = format.replace(/y/g, dateCharacters.year)\n format = format.replace(/m/g, dateCharacters.month)\n format = format.replace(/d/g, dateCharacters.day)\n return format\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n ValidationErrors,\n Validator,\n Validators,\n} from '@angular/forms'\nimport {\n TRANSLOCO_SCOPE,\n TranslocoScope,\n TranslocoService,\n} from '@jsverse/transloco'\nimport { Observable, Subject } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\nimport type { InputmaskOptions } from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport {\n DateCharacters,\n getFormatDateMask,\n getLocaleDateMask,\n getLocaleDateString,\n setDateFormatCharacters,\n} from '../models/dates'\n\n@Directive() // Required with Angular ivy compiler\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class DateControlValueAccessorComponent\n implements\n AfterViewInit,\n OnInit,\n OnChanges,\n OnDestroy,\n ControlValueAccessor,\n Validator\n{\n /** Custom template for displaying the content of the label.\n * Specified by nesting an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @ContentChild('labelTpl', { read: TemplateRef })\n labelContentTpl?: TemplateRef<undefined>\n\n /** Custom template for displaying value when the input is locked.\n * Specified by nesting an `<ng-template #lockedTpl let-selectedDate>Custom locked content date: {{ selectedDate }}</ng-template>`.\n */\n @ContentChild('lockedTpl', { read: TemplateRef })\n lockedTpl?: TemplateRef<undefined>\n\n /** Reference to the native child input element. */\n @ViewChild('input', { read: ElementRef }) inputRef?: ElementRef\n\n /* ATTRIBUTES */\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).ngv?.nextId(\n 'datepicker',\n )\n /** Name of the child input element. */\n @Input() name?: string\n /** Label of the child input element using the default template.\n * Can be overwritten by specifying an `<ng-template #labelTpl>Custom Label</ng-template>`.\n */\n @Input() label?: string\n /** Text shown before input has a written value. Default current date format by locale of transloco */\n @Input() set placeholder(value: string | undefined) {\n this._placeholder = value\n ? setDateFormatCharacters(value, this.dateCharacters)\n : value\n this.defaultPlaceholder = value\n ? setDateFormatCharacters(value, this.dateCharacters)\n : value\n }\n get placeholder() {\n return this._placeholder\n }\n private _placeholder: string | undefined\n defaultPlaceholder?: string\n /** What characters to use in date placeholder, e.g. {year: 'Y', month: 'M', day: 'D'} */\n @Input() dateCharacters?: DateCharacters\n /** Role of the child input element. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles */\n @Input() role?: string\n /** Value of the child input element. Mostly used in conjunction with radio and checkboxes. */\n @Input() value: any\n /** An error string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() error?: string\n /** A list of errors string to be shown under invalid inputs. Overwrites any form errors. */\n @Input() errorList?: string[]\n /** Adds an icon before each error message. */\n @Input() withErrorIcon?: boolean = false\n /** Description of the child input element. Both visibly and as `aria-label`. */\n @Input() description?: string\n /** If set to true, the browser will try to automatically set focus to the child input element. */\n @Input() autofocus = false\n /** Default value of the child input element. */\n @Input() defaultValue?: any\n /** If passed, the component will listen for updates and will reset its value. */\n @Input() reset?: Observable<any>\n /** Adds (Optional) to input label. */\n @Input() optional?: boolean | null | undefined\n /**\n * Settings for input mask for dates based on locale\n * @see {@link getLocaleDateMask} use this tool to generate settings for `dateInputMask`\n */\n @Input() set dateInputMask(dateMask: InputmaskOptions<Date>) {\n // Hide input field\n this.showInputDateSrc.next(false)\n this.cdr.detectChanges()\n this._dateInputMask = dateMask\n\n // Show input field to reload input-mask settings upon update\n setTimeout(() => {\n this.showInputDateSrc.next(true)\n this.cdr.detectChanges()\n }, 200)\n }\n get dateInputMask(): InputmaskOptions<Date> {\n return this._dateInputMask\n }\n private _dateInputMask!: InputmaskOptions<Date>\n\n private _locked: boolean | null | undefined = undefined\n /** Hides the input borders and displays current value as a text. */\n @Input() set locked(value: boolean | null | undefined) {\n this._locked = value\n this.cdr.detectChanges()\n }\n get locked(): boolean | null | undefined {\n return this._locked\n }\n /** If set to true, using a controls disabled state will display input as locked. */\n @Input() displayDisabledAsLocked?: boolean | null | undefined\n\n /* STATES */\n\n private _required: boolean | null | undefined = undefined\n /** Override the required flag of the component. */\n @Input() set required(value: boolean | null | undefined) {\n this._required = value\n }\n /** Child input element is considered required and changes default label template accordingly. */\n get required(): boolean | null | undefined {\n // if required is set => return required\n if (this._required !== undefined) return this._required\n\n // if required can be determined from the control => return control.required\n if (this.ngControl?.control?.validator) {\n const validator = this.ngControl?.control?.validator(\n {} as AbstractControl,\n )\n return validator && validator.required\n }\n\n return\n }\n\n private _invalid: boolean | undefined = undefined\n /** Override the invalid state of the component. */\n @Input() set invalid(value: boolean) {\n this._invalid = value\n }\n /** The component has the invalid state, usually decorating the elements red and shows the first error. */\n get invalid(): boolean {\n if (this._invalid === true || this._invalid === false) return this._invalid\n return (\n !!this.ngControl?.control?.invalid && this.ngControl?.control?.touched\n )\n }\n\n private _valid: boolean | undefined = undefined\n /** Override the valid state of the component. */\n @Input() set valid(value: boolean) {\n this._valid = value\n }\n /** The component has the valid state, usually decorating the elements green. */\n get valid(): boolean {\n if (this._valid === true || this._valid === false) return this._valid\n return !!this.ngControl?.control?.valid && this.ngControl?.control?.touched\n }\n\n /** The component has the focused state, updated by the child input element's focus state. */\n @Input() focused = false\n /** The component has the disabled state, usually muting the colors and removes interaction. */\n @Input() disabled = false\n /** Locale for using correct language in the datepicker. */\n @Input() locale: string | undefined\n /** Date format used for placeholder and input mask. Should be in lower case {year: 'y', month: 'm', day: 'd'} */\n @Input() dateFormat: string | undefined\n /** Date locale used for placeholder and input mask. */\n @Input() dateLocale: string | undefined\n\n /** Toggler for showing or hiding the input field */\n protected showInputDateSrc = new Subject<boolean>()\n\n /* TRIGGERS */\n\n /** Emits focus events triggered by the child elements. */\n @Output() readonly ngvFocus = new EventEmitter()\n /** Emits focus events triggered by the child elements. */\n @Output() readonly ngvBlur = new EventEmitter()\n\n /* VALUE HANDLERS */\n /** @internal */\n protected onChange = (_: any): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n /** @internal */\n protected onTouched = (): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n /** @internal */\n protected onValidatorChange: () => void = () => null\n private _state: any = null\n\n /* OTHER VARIABLES */\n scope: string | undefined\n /** @internal */\n // warningIcon = faTriangleExclamation;\n\n /* LIFE CYCLE VARIABLES */\n private _onDestroy$ = new Subject<true>()\n\n /**\n * Creates a new BaseControlValueAccessorComponent.\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected elementRef: ElementRef,\n protected cdr: ChangeDetectorRef,\n private _transloco: TranslocoService,\n ) {\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this\n }\n\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n static parseDateLike(value: any): null | undefined | string {\n try {\n // if value is type of string,\n if (value && typeof value === 'string') value = new Date(value)\n switch (true) {\n // remove instances where the value will not correctly be parsed to a date string\n case value == null:\n case value?.toString() === 'Invalid Date':\n return null\n // if value-as-date is a valid date object, parse the value to YYYY-MM-DD format\n case typeof value?.getMonth === 'function':\n return new Intl.DateTimeFormat('sv-SE').format(value)\n default:\n return value as string\n }\n } catch (_e) {\n return\n }\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngOnInit(): void {\n if (this.ngControl && this.ngControl.control) {\n this.ngControl.control.setValidators(\n Validators.compose([this.ngControl.control.validator, this.validate]),\n )\n }\n\n this._transloco.langChanges$.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n if (!this.locale && !this.dateFormat) {\n return this.updatePlaceholderAndMask()\n }\n },\n })\n\n // if reset observable has been passed, subscribe after updates\n this.reset?.pipe(takeUntil(this._onDestroy$)).subscribe({\n next: () => {\n // reset value of controller\n this.updateValue('')\n },\n })\n }\n\n // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n ngAfterViewInit(): void {\n // if default value is set, then don't alter it. Otherwise, use\n // current value of controller after initiation as default value\n this.defaultValue = this.defaultValue ?? this.ngControl?.value\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.defaultValue?.currentValue) {\n this.updateValue(changes.defaultValue.currentValue)\n }\n\n if (\n changes.locale?.currentValue &&\n !this.dateFormat &&\n !changes.dateFormat?.currentValue\n ) {\n this.updatePlaceholderAndMask()\n }\n\n if (changes.dateFormat?.currentValue) {\n this.updateFormat()\n }\n\n if (changes.dateCharacters?.currentValue) {\n if (this.dateFormat) {\n this.updateFormat()\n } else {\n this.updatePlaceholderAndMask()\n }\n }\n\n if (!!changes.dateLocale?.currentValue && !this.dateFormat) {\n this.updatePlaceholderAndMask()\n }\n }\n\n ngOnDestroy(): void {\n this._onDestroy$.next(true)\n this._onDestroy$.complete()\n }\n\n /** @internal */\n onFocus(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.focused = true\n this.ngvFocus.emit(event)\n }\n\n /** @internal */\n onBlur(event: Event) {\n event.stopPropagation\n ? event.stopPropagation()\n : (event.cancelBubble = true)\n this.onTouched()\n this.focused = false\n this.ngvBlur.emit(event)\n }\n\n detectChanges(): void {\n this.cdr.detectChanges()\n }\n\n /** Sets the focus on the actual input element. */\n setFocus() {\n if (this.inputRef) this.inputRef.nativeElement.focus()\n }\n\n /**\n * @internal\n * Update placeholder and input mask to match locale.\n * Order if choice for locale:\n * 1. dateLocale - Used for specifying which locale to be used for formatting date\n * 2. locale - Unless dateLocale is not provided, use locale form current translation\n * 3. transloco.getActiveLang - as last resort, get active language form trnasloco\n * If locale is undefined, transloco.activeLang will be used instead.\n */\n updatePlaceholderAndMask() {\n const locale =\n this.dateLocale ?? this.locale ?? this._transloco.getActiveLang()\n\n this._placeholder = this.defaultPlaceholder\n ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n : setDateFormatCharacters(\n getLocaleDateString(locale).toLowerCase(),\n this.dateCharacters,\n )\n this.dateInputMask = getLocaleDateMask(this.dateCharacters, locale)\n }\n\n updateFormat() {\n if (this.dateFormat) {\n this._placeholder = this.defaultPlaceholder\n ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n : setDateFormatCharacters(\n this.dateFormat.toLowerCase(),\n this.dateCharacters,\n )\n this.dateInputMask = getFormatDateMask(\n this.dateFormat,\n this.dateCharacters,\n )\n }\n }\n\n // ----------------------------------------------------------------------------\n // CONTROL VALUE ACCESSOR\n // ----------------------------------------------------------------------------\n\n /** Internal state/value that the native input element has. */\n get state() {\n return this._state\n }\n\n /**\n * Internal state/value that the native input element has.\n */\n set state(value) {\n this._state = value\n }\n\n /** Writes a new value to the child input element. */\n writeValue(value: any): void {\n this.state = value\n this.onChange(this.state)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = (value) => {\n // ensure emitted value is a string | null | undefined\n const emitValue = DateControlValueAccessorComponent.parseDateLike(value)\n fn(emitValue)\n }\n }\n\n /** Registers a callback function that is called when the child input element triggers on blur. */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn\n }\n\n /** Function that is called by the forms API when the control status changes to or from 'DISABLED'. */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled\n\n // if displayDisabledAsLocked is enabled - update locked state based on disabled state\n if (this.displayDisabledAsLocked) {\n this.locked = isDisabled\n }\n }\n\n // ----------------------------------------------------------------------------\n // VALIDATORS\n // ----------------------------------------------------------------------------\n\n /** Method that performs synchronous validation against the provided control. Used for internal validation. */\n validate(_control: AbstractControl): { [name: string]: any } | null {\n return null\n }\n\n /** Registers a callback function to call when the validator inputs change. */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /** Returns the first entry in an error object. */\n get firstError(): { code: string; params: Record<string, any> } | null {\n const errors: ValidationErrors | null = this.ngControl.errors\n if (!errors) return null\n const code = Object.keys(errors)[0]\n return { code, params: errors[code] }\n }\n\n private updateValue(value = this.defaultValue) {\n this.state = value\n this.onChange(this.state)\n this.cdr.detectChanges()\n }\n}\n","import { WeekDay } from '@angular/common'\n\nconst weekdays: WeekDay[] = [\n WeekDay.Monday,\n WeekDay.Tuesday,\n WeekDay.Wednesday,\n WeekDay.Thursday,\n WeekDay.Friday,\n WeekDay.Saturday,\n WeekDay.Sunday,\n]\n\nexport const sortWeekDays = (firstDayOfWeek: WeekDay): WeekDay[] => {\n const firstDayIndex = weekdays.indexOf(firstDayOfWeek)\n const weekStart = weekdays.slice(firstDayIndex)\n const weekEnd = weekdays.slice(0, firstDayIndex)\n return weekStart.concat(weekEnd)\n}\n\n/** Sets labels and sort weekday arrays based off of first day of week. */\nexport const getSortedWeekDays = (\n firstDayOfWeek: WeekDay,\n startDate?: Date,\n): Date[] => {\n if (startDate === undefined) startDate = new Date()\n\n // sort weekdays according to firstDayOfWeek\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n // get the date object for the first day of week\n const startDayIndex = sortedWeekdays.indexOf(startDate.getDay())\n const firstOfWeek = new Date(startDate)\n firstOfWeek.setDate(startDate.getDate() - startDayIndex)\n\n // map each day in array to a date object\n return sortedWeekdays.map((_: WeekDay, offset: number) => {\n // set appropriate date\n const weekdayDate = new Date(firstOfWeek)\n weekdayDate.setDate(weekdayDate.getDate() + offset)\n\n // and return value\n return weekdayDate\n })\n}\n\n/** Generate a matrix of dates used to visualize a calendar month. */\nexport const generateDateMatrix = (\n month: number,\n year: number,\n minWeeks = 5,\n firstDayOfWeek: WeekDay,\n): Date[][] => {\n // generate a new matrix with 5 or 6 rows (depending on number of days in that month)\n const matrix: Date[][] = new Array<Date[]>(minWeeks)\n matrix.fill([])\n\n const monthStr = `${month + 1}`.padStart(2, '0')\n const date = new Date(`${year}-${monthStr}-01`)\n const firstDate = firstCalendarDate(date, firstDayOfWeek)\n\n // for each week in that month\n const dateMatrix = matrix.map((_: Date[], weekOffset: number) => {\n const offset = weekOffset * 7\n // update the date with the offset for that week\n const firstOfWeek = new Date(firstDate)\n firstOfWeek.setDate(firstDate.getDate() + offset)\n return getSortedWeekDays(firstDayOfWeek, firstOfWeek)\n })\n\n // check if another row needs to be added (if last dates of month are missing)\n const lastAdded = dateMatrix.slice(-1)[0].slice(-1)[0]\n const lastOfMonth = new Date(lastAdded)\n lastOfMonth.setMonth(month + 1)\n lastOfMonth.setDate(0)\n\n if (isBefore(lastAdded, lastOfMonth)) {\n // add another week row\n const firstOfWeek = new Date(lastAdded)\n firstOfWeek.setDate(lastAdded.getDate() + 1)\n dateMatrix.push(getSortedWeekDays(firstDayOfWeek, firstOfWeek))\n }\n // return final datematrix\n return dateMatrix\n}\n\n/** Returns the first date used in the calendars first button. */\nexport const firstCalendarDate = (\n date: Date,\n firstDayOfWeek: WeekDay,\n): Date => {\n // sort weekdays according to firstDayOfWeek\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n // set date to the first of month\n const firstOfMonth = new Date(date)\n firstOfMonth.setDate(1)\n\n // get the offset\n const offset = sortedWeekdays.indexOf(firstOfMonth.getDay())\n const firstOfWeek = new Date(firstOfMonth)\n // use offset to set date\n firstOfWeek.setDate(1 - offset)\n return firstOfWeek\n}\n\nexport const getDayOffset = (\n from: WeekDay,\n to: WeekDay,\n firstDayOfWeek: WeekDay,\n direction?: 'forward' | 'back',\n): number => {\n const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n const fromIndex = sortedWeekdays.indexOf(from)\n const toIndex = sortedWeekdays.indexOf(to)\n\n const offset = toIndex - fromIndex\n\n if (direction === 'forward' && offset < 0) return offset + 6\n if (direction === 'back' && offset > 0) return offset - 6\n return offset\n}\n\n/** Returns an array of Dates for each of month. */\nexport const getMonthArray = (): Date[] => {\n const firstDayOfYear = new Date()\n firstDayOfYear.setMonth(0)\n firstDayOfYear.setDate(1)\n\n // create a new array of length 12,\n // and fill it with date objects of 1:st of january\n const monthArray: Date[] = new Array(12).fill(firstDayOfYear)\n\n // map through the array,\n // and create a new instance of the date,\n // changing the month based on index (0 - 11)\n return monthArray.map((d: Date, index: number) => {\n const date = new Date(d)\n date.setMonth(index)\n return date\n })\n}\n\n/** Returns an array of Dates for the current year and the next. */\nexport const getYearArray = (): Date[] => {\n const currentYear = new Date()\n currentYear.setMonth(0)\n currentYear.setDate(1)\n const nextYear = new Date(currentYear)\n nextYear.setFullYear(currentYear.getFullYear() + 1)\n return [currentYear, nextYear]\n}\n\n/** Returns true if the two dates have the same year, month and date values. */\nexport const match = (a: Date | undefined, b: Date | undefined): boolean => {\n if (!a || !b) return false\n if (a.getDate() !== b.getDate()) return false\n if (a.getMonth() !== b.getMonth()) return false\n if (a.getFullYear() !== b.getFullYear()) return false\n return true\n}\n\nexport const afterClosingHours = (closingHours: Date | undefined): boolean => {\n if (!closingHours) return false\n return Date.now() >= closingHours.getTime()\n}\n\n/**\n * Checks if a date is before control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isBefore = (date: Date, controlDate: Date): boolean => {\n // if year values are dissimilar\n if (date.getFullYear() !== controlDate.getFullYear()) {\n return date.getFullYear() < controlDate.getFullYear()\n }\n // if month values are dissimilar\n if (date.getMonth() !== controlDate.getMonth()) {\n return date.getMonth() < controlDate.getMonth()\n }\n // if year and month are equal, check the date\n return date.getDate() < controlDate.getDate()\n}\n\n/**\n * Checks if a date is after control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isAfter = (date: Date, controlDate: Date): boolean => {\n // if year values are dissimilar\n if (date.getFullYear() !== controlDate.getFullYear()) {\n return date.getFullYear() > controlDate.getFullYear()\n }\n // if month values are dissimilar\n if (date.getMonth() !== controlDate.getMonth()) {\n return date.getMonth() > controlDate.getMonth()\n }\n // if year and month are equal, check the date\n return date.getDate() > controlDate.getDate()\n}\n\n/**\n * Checks if a value can be used to initiate a new Date object.\n *\n * @param value any value\n * @returns - true if value can be coersed to a Date.\n */\nexport const isValid = (value: any): boolean => {\n // if value is type of string and can be parsed to a Date\n const date =\n value && typeof value === 'string' && !isNaN(Date.parse(value))\n ? new Date(value)\n : null\n\n switch (true) {\n // if date or value is a valid date object - return valid\n case typeof value?.getMonth === 'function':\n case typeof date?.getMonth === 'function':\n return true\n // if date or value is not a valid date object - return invalid\n case value == null:\n case date?.toString() === 'Invalid Date':\n return false\n default:\n return false\n }\n}\n","import {\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\nexport const enum DateCss {\n notWithinMonth = 'not-within-month',\n selected = 'selected',\n today = 'today',\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[calendarDate]',\n standalone: false,\n})\nexport class CalendarDateDirective implements OnInit, OnChanges {\n @Input() calendarDate!: Date\n @HostBinding('class.' + DateCss.selected) @Input() selected!: boolean\n @HostBinding('class.' + DateCss.notWithinMonth)\n @Input()\n notWithinMonth!: boolean\n @HostBinding('class.' + DateCss.today) isToday = false\n @Input() disabled!: boolean\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement\n }\n\n constructor(private elementRef: ElementRef) {}\n\n ngOnInit() {\n this.isToday = match(new Date(), this.calendarDate)\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.disabled?.currentValue) {\n ;(this.nativeElement as HTMLButtonElement).disabled = this.disabled\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { DisableDateConfig } from '../datepicker.models'\nimport {\n afterClosingHours,\n isAfter,\n isBefore,\n match,\n} from '../datepicker.utils'\n\nconst TODAY = new Date()\n\n@Pipe({\n name: 'isDisabled',\n standalone: false\n})\nexport class IsDisabledPipe implements PipeTransform {\n // transform(value: Date, firstValid: Date | undefined, lastValid: Date | undefined, excludeDates: Date[] | undefined, excludeDays: WeekDay[] | undefined): boolean {\n transform(value: Date, config: DisableDateConfig = {}): boolean {\n const { fromDate, toDate, excludeDates, excludeDays, closingTime } = config\n\n // if closingHours was provided and the date matches today - check closingHours (including timezone)\n if (closingTime && match(value, TODAY) && afterClosingHours(closingTime))\n return true\n\n // if fromDate was provided and the date occurs before fromDate date\n if (fromDate && !match(value, fromDate) && isBefore(value, fromDate))\n return true\n\n // if toDate was provided and the date occurs after toDate date\n if (toDate && !match(value, toDate) && isAfter(value, toDate)) return true\n\n // if a list of disallowed days is provided and value matches\n if (\n excludeDays &&\n excludeDays.length &&\n excludeDays.indexOf(value.getDay()) !== -1\n )\n return true\n\n // if a list of disallowed dates is provided\n if (excludeDates && excludeDates.length) {\n return !!excludeDates.find((d: Date) => match(value, d))\n }\n\n // otherwise show date as not disabled\n return false\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n name: 'dateThook',\n standalone: false\n})\nexport class DateThookPipe implements PipeTransform {\n get today(): Date {\n const tmp = new Date()\n const today = new Date(tmp.setHours(0, 0, 0, 0))\n return today\n }\n\n transform(date: Date, isDisabled: boolean): string {\n if (!!date && !isDisabled) {\n // Reset time for target date\n const dateTmp = new Date(date.setHours(0, 0, 0, 0))\n\n // To calculate the time difference of two dates\n const differenceInTime = dateTmp.getTime() - this.today.getTime()\n\n // To calculate the no. of days between two dates\n const differenceInDays = differenceInTime / (1000 * 3600 * 24)\n const absoluteDifferenceInDays = Math.abs(differenceInDays)\n\n const differentiator =\n differenceInDays < 0 ? '-' : differenceInDays === 0 ? '' : '+'\n\n return `today${differentiator}${absoluteDifferenceInDays === 0 ? '' : absoluteDifferenceInDays}`\n }\n\n return 'disabled-date'\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\n@Pipe({\n name: 'matches',\n standalone: false\n})\nexport class MatchesPipe implements PipeTransform {\n transform(value: Date, selected: Date | undefined): boolean {\n return match(value, selected)\n }\n}\n","import { WeekDay } from '@angular/common'\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n} from '@angular/core'\n\nimport {\n generateDateMatrix,\n getDayOffset,\n sortWeekDays,\n} from '../../datepicker.utils'\nimport { CalendarDateDirective } from '../../directives/calendar-date.directive'\n\nimport type { CalendarType, DisableDateConfig } from '../../datepicker.models'\n\n@Component({\n selector: 'nggv-calendar',\n templateUrl: './calendar.component.html',\n styleUrls: ['./calendar.component.scss'],\n standalone: false\n})\nexport class CalendarComponent implements OnChanges {\n @Output() dateClick = new EventEmitter<Date>()\n\n @ViewChildren(CalendarDateDirective)\n dateButtonRefs!: QueryList<CalendarDateDirective>\n\n @Input() year!: number\n @Input() month!: number\n @Input() selected: Date | undefined\n\n // inputs that configure display behaviour\n @Input() locale: string | undefined\n @Input() minCalendarRows = 5\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n @Input() type: CalendarType = 'normal'\n\n // inputs that affects which dates in the calendar should be grayed out\n @Input() set disableDates(value: Date[] | undefined) {\n this.updateDisableDateConfig({ excludeDates: value ?? [] })\n }\n @Input() set disableWeekDays(value: WeekDay[] | undefined) {\n this.updateDisableDateConfig({ excludeDays: value })\n }\n @Input() set firstValid(value: Date | undefined) {\n this.updateDisableDateConfig({ fromDate: value })\n }\n @Input() set lastValid(value: Date | undefined) {\n this.updateDisableDateConfig({ toDate: value })\n }\n @Input() set closingTime(value: Date | undefined) {\n this.updateDisableDateConfig({ closingTime: value })\n }\n\n dateMatrix: Date[][] = [[]]\n disableDateConfig: DisableDateConfig = {}\n\n private lastDayOfWeek: WeekDay = WeekDay.Sunday\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.selected?.currentValue) {\n this.selected = new Date(changes.selected.currentValue)\n }\n\n if (changes.firstDayOfWeek?.currentValue) {\n this.lastDayOfWeek = sortWeekDays(\n changes.firstDayOfWeek.currentValue,\n ).pop() as WeekDay\n }\n\n if (\n (changes.month?.currentValue !== undefined &&\n changes.month?.currentValue !== null) ||\n !!changes.year?.currentValue ||\n !!changes.firstDayOfWeek?.currentValue ||\n !!changes.minCalendarRows?.currentValue\n ) {\n this.dateMatrix = generateDateMatrix(\n this.month,\n this.year,\n this.minCalendarRows,\n this.firstDayOfWeek,\n )\n }\n }\n\n clickDate(date: Date): void {\n this.dateClick.emit(date)\n }\n\n @HostListener('keydown', ['$event'])\n keyNavigation(event: KeyboardEvent): void {\n let activeElement: HTMLElement | undefined\n if (event.key !== 'Tab')\n activeElement = document.activeElement as HTMLElement\n if (event.key === 'ArrowRight') {\n const nextFocusable = this.getNextFocusable(activeElement)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowLeft') {\n const nextFocusable = this.getPreviousFocusable(activeElement)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n const nextFocusable = this.getElementWithOffset(activeElement, -7)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n const nextFocusable = this.getElementWithOffset(activeElement, 7)\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'Enter' || event.key === 'Space') {\n if (activeElement) {\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n )\n if (!dateRef?.disabled) {\n this.dateClick.emit(dateRef?.calendarDate)\n }\n }\n }\n\n if (event.key === 'Home') {\n event.preventDefault()\n const nextFocusable = this.firstDayOfWeekElement()\n if (nextFocusable) nextFocusable.focus()\n }\n\n if (event.key === 'End') {\n event.preventDefault()\n const nextFocusable = this.lastDayOfWeekElement()\n if (nextFocusable) nextFocusable.focus()\n }\n }\n\n getElementWithOffset(\n fromElement: HTMLElement | undefined,\n offsetDays: number,\n returnOnlyEnabled = true,\n ): HTMLElement | undefined {\n if (!fromElement) return\n const fromIndex = this.dateButtonRefs\n .toArray()\n .map((ref) => ref.nativeElement)\n .indexOf(fromElement)\n const next = this.dateButtonRefs.get(fromIndex + offsetDays)\n if (!next) return\n if (returnOnlyEnabled && next.disabled)\n return this.getElementWithOffset(next.nativeElement, offsetDays)\n return next.nativeElement\n }\n\n getNextFocusable(\n fromElement: HTMLElement | undefined,\n ): HTMLElement | undefined {\n if (!fromElement) return\n return this.getElementWithOffset(fromElement, 1)\n }\n\n getPreviousFocusable(\n fromElement: HTMLElement | undefined,\n ): HTMLElement | undefined {\n if (!fromElement) return\n return this.getElementWithOffset(fromElement, -1)\n }\n\n firstDayOfWeekElement(): HTMLElement | undefined {\n const activeElement = document.activeElement as HTMLElement\n if (!activeElement) return\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n ) as CalendarDateDirective\n if (dateRef.calendarDate.getDay() === this.firstDayOfWeek) return\n const offset = this.getDayOffset(\n dateRef.calendarDate.getDay(),\n this.firstDayOfWeek,\n 'back',\n )\n const targetElement = this.getElementWithOffset(\n activeElement,\n offset,\n false,\n ) as HTMLButtonElement\n if (targetElement && targetElement.disabled)\n return this.getNextFocusable(targetElement)\n return targetElement\n }\n\n lastDayOfWeekElement(): HTMLElement | undefined {\n const activeElement = document.activeElement as HTMLElement\n if (!activeElement) return\n const dateRef = this.dateButtonRefs.find(\n (ref) => ref.nativeElement === activeElement,\n ) as CalendarDateDirective\n if (dateRef.calendarDate.getDay() === this.lastDayOfWeek) return\n const offset = this.getDayOffset(\n dateRef.calendarDate.getDay(),\n this.lastDayOfWeek,\n 'forward',\n )\n const targetElement = this.getElementWithOffset(\n activeElement,\n offset,\n false,\n ) as HTMLButtonElement\n if (targetElement && targetElement.disabled)\n return this.getPreviousFocusable(targetElement)\n return targetElement\n }\n\n getDayOffset(\n from: WeekDay,\n to: WeekDay,\n direction?: 'forward' | 'back',\n ): number {\n return getDayOffset(from, to, this.firstDayOfWeek, direction)\n }\n\n private updateDisableDateConfig(config: Partial<DisableDateConfig>): void {\n this.disableDateConfig = {\n ...this.disableDateConfig,\n ...config,\n }\n }\n}\n","<ng-container *ngFor=\"let weekRow of dateMatrix\">\n <div class=\"nggv-calendar-row\">\n <button\n *ngFor=\"let date of weekRow\"\n class=\"gds-button gds-button-alternative\"\n [attr.data-thook]=\"\n date | dateThook: (date | isDisabled: disableDateConfig)\n \"\n [attr.aria-label]=\"date\"\n [calendarDate]=\"date\"\n [notWithinMonth]=\"!(month === date?.getMonth())\"\n [selected]=\"date | matches: selected\"\n [disabled]=\"date | isDisabled: disableDateConfig\"\n (click)=\"clickDate(date)\"\n >\n {{ date | date: 'd' : undefined : locale }}\n </button>\n </div>\n</ng-container>\n","import { formatDate, WeekDay } from '@angular/common'\nimport { Injectable } from '@angular/core'\n\nexport type CalendarType = 'normal' | 'extended'\n\nexport const enum Month {\n January,\n February,\n March,\n April,\n May,\n June,\n July,\n August,\n September,\n October,\n November,\n December,\n}\n\nexport interface DisableDateConfig {\n fromDate?: Date | undefined\n toDate?: Date | undefined\n excludeDates?: Date[] | undefined\n excludeDays?: WeekDay[] | undefined\n closingTime?: Date | undefined\n}\n\n@Injectable()\nexport class CalendarMonth {\n year: number\n month: number\n id: string\n _date: Date\n\n constructor(date?: Date) {\n this._date = date ? new Date(date) : new Date()\n this._date.setDate(1)\n this._date.setHours(0, 0, 0, 0)\n this.year = this._date.getFullYear()\n this.month = this._date.getMonth()\n this.id = formatDate(this._date, 'yyyyMM', 'en')\n }\n\n /** Creates an instance based of input year and month. */\n static fromObject(obj: { year: number; month: number }): CalendarMonth {\n const objectDate = new Date(obj.year, obj.month, 1)\n return new CalendarMonth(objectDate)\n }\n\n /** Returns a Date representation for the instance. */\n get date(): Date {\n return new Date(this._date)\n }\n\n /** Returns the string id representing the instance in form of 'yyyyMM'. */\n valueOf() {\n return this.id\n }\n\n /** Returns a new instance for next month. */\n nextMonth(): CalendarMonth {\n const next = this.date\n next.setMonth(this.month + 1)\n return new CalendarMonth(next)\n }\n\n /** Returns a new instance for previous month. */\n previousMonth(): CalendarMonth {\n const previous = this.date\n previous.setMonth(this.month - 1)\n return new CalendarMonth(previous)\n }\n\n /** Returns a new instance for next year. */\n nextYear(): CalendarMonth {\n const nextYear = this.date\n nextYear.setFullYear(nextYear.getFullYear() + 1)\n return new CalendarMonth(nextYear)\n }\n\n /** Returns a new instance for previous year. */\n previousYear(): CalendarMonth {\n const previousYear = this.date\n previousYear.setFullYear(previousYear.getFullYear() - 1)\n return new CalendarMonth(previousYear)\n }\n}\n","import {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core'\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'\nimport { Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'\n\nimport { CalendarMonth } from '../../datepicker.models'\nimport { getMonthArray, getYearArray } from '../../datepicker.utils'\n\nimport type { CalendarType } from '../../datepicker.models'\n\nimport '@sebgroup/green-core/components/icon/icons/chevron-left.js'\nimport '@sebgroup/green-core/components/icon/icons/chevron-right.js'\n\n@Component({\n selector: 'nggv-calendar-control',\n templateUrl: './calendar-control.component.html',\n styleUrls: ['./calendar-control.component.scss'],\n standalone: false\n})\nexport class CalendarControlComponent implements OnInit, OnChanges, OnDestroy {\n // nextIcon: IconDefinition = faChevronRight\n // previousIcon: IconDefinition = faChevronLeft\n\n @Output() calendarChange = new EventEmitter<CalendarMonth>()\n\n @Input() activeCalendar!: CalendarMonth\n @Input() locale: string | undefined\n @Input() type: CalendarType = 'normal'\n\n monthArray: Date[] = [] // array used for month dropdown\n yearArray: Date[] = [] // array used for year dropdown\n selectedCalendar: UntypedFormGroup // dropdown form group\n\n private subs: Subscription[] = []\n\n constructor(private fb: UntypedFormBuilder) {\n // initiate form group for dropdown menus\n this.selectedCalendar = this.fb.group({\n year: [],\n month: [],\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes.activeCalendar &&\n !changes.activeCalendar.isFirstChange() &&\n changes.activeCalendar.currentValue.valueOf() !==\n this.selectedCalendar.value.id\n ) {\n this.selectedCalendar.patchValue(changes.activeCalendar.currentValue)\n }\n }\n\n ngOnInit() {\n // populate drowdowns and labels with data\n this.monthArray = getMonthArray()\n this.yearArray = getYearArray()\n\n // subscribe to year and month changes, and emit event to datepicker\n this.subscribeToFormChanges()\n\n // update control to initial value\n if (this.activeCalendar)\n this.selectedCalendar.patchValue(this.activeCalendar)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n viewPreviousMonth() {\n const previousMonth = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).previousMonth()\n this.selectedCalendar.patchValue(previousMonth)\n }\n\n viewNextMonth() {\n const nextMonth = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).nextMonth()\n this.selectedCalendar.patchValue(nextMonth)\n }\n\n viewPreviousYear() {\n const previousYear = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).previousYear()\n this.selectedCalendar.patchValue(previousYear)\n }\n\n viewNextYear() {\n const nextYear = CalendarMonth.fromObject(\n this.selectedCalendar.value,\n ).nextYear()\n this.selectedCalendar.patchValue(nextYear)\n }\n\n @HostListener('keydown', ['$event'])\n keyNavigation(event: KeyboardEvent): void {\n if (event.key !== 'PageUp' && event.key !== 'PageDown') return\n event.preventDefault()\n if (event.shiftKey) {\n if (event.key === 'PageUp') return this.viewPreviousYear()\n if (event.key === 'PageDown') return this.viewNextYear()\n }\n if (event.key === 'PageUp') return this.viewPreviousMonth()\n if (event.key === 'PageDown') return this.viewNextMonth()\n }\n\n private subscribeToFormChanges(): void {\n // used to quickly check if the yearsArray needs years appended to it\n let existingYears = this.yearArray.map((e) => e.getFullYear())\n const changes = this.selectedCalendar.valueChanges.pipe(\n debounceTime(1), // added due to this issue: https://github.com/angular/angular/issues/13129\n map((value: { year: number; month: number }) =>\n CalendarMonth.fromObject(value),\n ),\n distinctUntilChanged(\n (prev: CalendarMonth, curr: CalendarMonth) =>\n prev.valueOf() === curr.valueOf(),\n ),\n )\n this.subs.push(\n changes.subscribe({\n next: (value: CalendarMonth) => {\n // if you need to append to year array\n if (existingYears.indexOf(value.year) === -1) {\n this.yearArray.push(value.date)\n this.yearArray.sort((a, b) => a.getFullYear() - b.getFullYear())\n existingYears = this.yearArray.map((e) => e.getFullYear())\n }\n this.calendarChange.emit(value)\n },\n }),\n )\n }\n}\n","<button\n *ngIf=\"type === 'normal'\"\n data-thook=\"previous-month\"\n class=\"nggv-prev-button\"\n (click)=\"viewPreviousMonth()\"\n>\n <gds-icon-chevron-left *nggCoreElement></gds-icon-chevron-left>\n</button>\n\n<ng-container [formGroup]=\"selectedCalendar\">\n <select\n class=\"nggv-calendar-select\"\n data-thook=\"select-month\"\n formControlName=\"month\"\n >\n <option\n *ngFor=\"let month of monthArray\"\n class=\"gds-field-dropdown__label\"\n tabindex=\"0\"\n [value]=\"month.getMonth()\"\n >\n {{ month | date: 'MMMM' : undefined : locale }}\n </option>\n </select>\n\n <select\n class=\"nggv-calendar-select\"\n data-thook=\"select-year\"\n formControlName=\"year\"\n >\n <option\n *ngFor=\"let year of yearArray\"\n class=\"gds-field-dropdown__label\"\n tabindex=\"0\"\n [value]=\"year.getFullYear()\"\n >\n {{ year | date: 'yyyy' : undefined : locale }}\n </option>\n </select>\n</ng-container>\n\n<button\n *ngIf=\"type === 'normal'\"\n data-thook=\"next-month\"\n class=\"nggv-next-button\"\n (click)=\"viewNextMonth()\"\n>\n <gds-icon-chevron-right *nggCoreElement></gds-icon-chevron-right>\n</button>\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n ngv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.ngv) {\n window.ngv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import { WeekDay } from '@angular/common'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { CalendarMonth } from '../../datepicker.models'\nimport { getSortedWeekDays, isValid } from '../../datepicker.utils'\n\nimport type { CalendarType } from '../../datepicker.models'\n\n@Component({\n selector: 'nggv-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n standalone: false\n})\nexport class DatepickerComponent implements OnInit, OnChanges, OnDestroy {\n @ViewChild('calendarTemplate') calendarTemplate: TemplateRef<any> | null =\n null\n\n /** Emits a Date upon selection. */\n @Output() ngvDateChange = new EventEmitter<Date>()\n\n /** Sets first day of week in calendar. Defaults to Monday. */\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n /** Bank holidays. */\n @Input() disableDates: (string | Date)[] = []\n /** Other non selectable dates. */\n @Input() disableWeekDays: WeekDay[] = []\n /** Minimum number of calendar rows shown. */\n @Input() minCalendarRows = 5\n /** Initial date set as selected. */\n @Input() selected: Date | undefined\n /** Set locale for date format. */\n @Input() locale: string | undefined = 'en-US'\n /** Set type of calendar. */\n @Input() type: CalendarType = 'normal'\n /** Sets a from date of which all dates before will be invalid. */\n @Input() firstValid: Date | undefined\n /** Sets a to date of which all dates after will be invalid. */\n @Input() lastValid: Date | undefined\n /** Sets a closing time for today to toggle availability for today's date. */\n @Input() closingTime: Date | undefined\n /**\n * When true, the datepicker will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n /** Needed to determent where to place datepicker if dropdownPosition === 'top' */\n @Input() size: 'small' | 'large' = 'large'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.datepickerPosition\n }\n\n @HostBinding('attr.data-size') get sizeAttr() {\n return this.size\n }\n\n /** @internal */\n activeCalendar!: CalendarMonth /* = new CalendarMonth(new Date()) */\n /** @internal */\n\n /** @internal */\n weekdayArray: Date[] = []\n\n /** @internal */\n disabledDatesForActiveMonth: Date[] = []\n\n // Indicates whether the datepicker should be displayed below ('bottom') or above ('top') the input, based on available space.\n datepickerPosition: 'bottom' | 'top' = 'bottom'\n\n private subs: Subscription[] = []\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.selected &&\n !!changes.selected.currentValue &&\n !changes.selected.isFirstChange()\n ) {\n // set active calendar to match selected date\n const activeCalendar = new CalendarMonth(\n new Date(changes.selected.currentValue),\n )\n this.changeActiveCalendar(activeCalendar)\n }\n\n if (changes.disableDates && !changes.disableDates.isFirstChange()) {\n this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n this.activeCalendar,\n changes.disableDates.currentValue || [],\n )\n }\n }\n\n ngOnInit(): void {\n // initiate week label row\n this.weekdayArray = getSortedWeekDays(this.firstDayOfWeek)\n\n // initiate calendar\n const initDate =\n !!this.selected && isValid(this.selected)\n ? new Date(this.selected)\n : new Date()\n this.activeCalendar = new CalendarMonth(initDate)\n\n if (this.dynamicPosition) this.setDropdownPosition()\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /**\n * @internal\n * Update local calendar variable and changes displayed calendar.\n */\n changeActiveCalendar(calendar: CalendarMonth): void {\n this.activeCalendar = calendar\n this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n calendar,\n this.disableDates,\n )\n }\n\n /**\n * @internal\n * Returns a subset of all disabled dates.\n *\n * @param month current month to filter from\n * @param disableDates master list of all disabled dates\n * @returns a subset with current and adjacent months disabled dates\n */\n getDisabledDatesFor(\n calendar: CalendarMonth,\n disableDates?: (string | Date)[],\n ): Date[] {\n if (!disableDates) disableDates = []\n // sets month to target month\n const targetMonth = calendar.date\n\n // gets previous month from target month\n const previousMonth = calendar.previousMonth().date\n\n // gets next month from target month\n const nextMonth = calendar.nextMonth().date\n\n // checks if two dates are within the same year and month\n const withinSameMonth = (a: Date, b: Date): boolean =>\n a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear()\n\n // filter out disabled dates for current and adjacent months\n return disableDates\n .map((d: Date | string) => new Date(d))\n .filter(\n (d: Date) =>\n withinSameMonth(d, previousMonth) ||\n withinSameMonth(d, targetMonth) ||\n withinSameMonth(d, nextMonth),\n )\n }\n\n /**\n * Handles date-clicks from calendar compoentn. Emits event or changes calendar.\n * @param date date clicked in calendar\n */\n dateClickHandler(date: Date): void {\n // if a date is clicked within the active month, emit date\n if (date.getMonth() === this.activeCalendar.month)\n return this.ngvDateChange.emit(date)\n // else, change active calendar to match the date clicked\n this.selected = date\n this.changeActiveCalendar(new CalendarMonth(date))\n }\n\n setDropdownPosition() {\n const datePicker = this.elementRef.nativeElement\n const parent = datePicker.parentElement\n\n const rect = parent.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const DATEPICKER_HEIGHT = 362 // 6 ROWS OF DATES, TO BE SURE\n let maxDatepickerHeight: number\n\n if (spaceBelow >= DATEPICKER_HEIGHT) {\n this.datepickerPosition = 'bottom'\n maxDatepickerHeight = DATEPICKER_HEIGHT\n } else if (spaceAbove >= DATEPICKER_HEIGHT) {\n this.datepickerPosition = 'top'\n maxDatepickerHeight = DATEPICKER_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.datepickerPosition = 'bottom'\n maxDatepickerHeight = Math.max(spaceBelow - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n } else {\n this.datepickerPosition = 'top'\n maxDatepickerHeight = Math.max(spaceAbove - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n }\n\n this.renderer.setStyle(datePicker, 'max-height', `${maxDatepickerHeight}px`)\n }\n}\n","<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n [activeCalendar]=\"activeCalendar\"\n [locale]=\"locale\"\n [type]=\"type\"\n (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n <span *ngFor=\"let weekday of weekdayArray\">{{\n weekday | date: 'EEE' : undefined : locale\n }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n <ng-container\n *ngTemplateOutlet=\"\n calendarTemplate;\n context: {\n calendar: activeCalendar,\n disableDates: disabledDatesForActiveMonth,\n }\n \"\n >\n </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n <ng-content></ng-content>\n</div>\n\n<ng-template\n #calendarTemplate\n let-calendar=\"calendar\"\n let-disableDates=\"disableDates\"\n>\n <nggv-calendar\n [year]=\"calendar.year\"\n [month]=\"calendar.month\"\n [type]=\"type\"\n [locale]=\"locale\"\n [disableDates]=\"disableDates\"\n [selected]=\"selected\"\n [lastValid]=\"lastValid\"\n [firstValid]=\"firstValid\"\n [closingTime]=\"closingTime\"\n [disableWeekDays]=\"disableWeekDays\"\n [minCalendarRows]=\"minCalendarRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n (dateClick)=\"dateClickHandler($event)\"\n >\n </nggv-calendar>\n</ng-template>\n","import '../../datepicker.globals'\nimport '@sebgroup/green-core/components/icon/icons/calendar.js'\nimport '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { WeekDay } from '@angular/common'\nimport {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Self,\n ViewChild,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport {\n TRANSLOCO_SCOPE,\n TranslocoScope,\n TranslocoService,\n} from '@jsverse/transloco'\nimport { fromEvent, Observable, Subject } from 'rxjs'\nimport { startWith, takeUntil } from 'rxjs/operators'\n\nimport { DateControlValueAccessorComponent } from '../../date-control-value-accessor/date-control-value-accessor.component'\n\nimport type { CalendarType } from '../../datepicker.models'\n\n/**\n * Date pickers simplify the task of selecting a date in a visual representation of a calendar.\n * https://designlibrary.sebgroup.com/components/component-datepicker\n *\n * Selector: `nggv-dateinput`\n *\n * When focusing an date element, the calendar allows for navigation using both tab and arrow keys.\n * Pressing 'esc' will close the calendar.\n *\n * Requires TranslocoLocale, but in turn allows for setting locale dynamically:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#manually-setting-locale\n *\n * To configure TranslocoLocale, follow this guide:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#setup\n */\n@Component({\n selector: 'nggv-dateinput,nggv-input[type=date]',\n templateUrl: './date-input.component.html',\n styleUrls: ['./date-input.component.scss'],\n standalone: false,\n})\nexport class DateInputComponent\n extends DateControlValueAccessorComponent\n implements OnDestroy\n{\n @ViewChild('toggleCalendarButton')\n toggleButtonRef?: ElementRef<HTMLButtonElement>\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'date-input'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Set type of calendar: either 'normal' or 'expanded'. Default is 'normal'. */\n @Input() type: CalendarType = 'normal'\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /**\n * An array of Dates or parsable strings that corresponds with dates that should not be selectable in the calendar.\n * I.e. bank holidays.\n */\n @Input() disableDates: (string | Date)[] = []\n /**\n * An array of weekdays that should not be selectable in the calendar.\n * Can be used together with or instead of @Input() disableDates.\n */\n @Input() disableWeekDays: WeekDay[] = []\n /** Mininum number of rows shown in the calendar. */\n @Input() minRows = 5\n /** Sets a from-date of which all dates before will be invalid. */\n @Input() firstValid: Date | undefined\n /** Sets a to-date of which all dates after will be invalid. */\n @Input() lastValid: Date | undefined\n /** Sets a closing time for today to toggle availability for today's date. */\n @Input() closingTime: Date | undefined\n /** Sets first day of week in calendar. Defaults to Monday. */\n @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n /** If set to true, it will allow to close the calendar on escape button click. */\n @Input() closeCalendarOnEscape = true\n /** If the date-input should close when scrolling the viewport. Default: false*/\n @Input() closeOnScroll = false\n\n /**\n * Sets the displayed size of the date input field.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n @Input() dynamicPosition = false\n\n /** @internal */\n // calendarIcon: IconDefinition = faCalendarDays;\n\n /** @internal */\n shown = false\n\n /** @internal */\n showInput$ = this.showInputDateSrc.asObservable().pipe(startWith(true))\n\n /** Observable for listening to scrolls when the datepicker is open */\n private documentScroll$: Observable<Event> = fromEvent(document, 'scroll')\n /** Observable for listening to clicks outside of the datepicker. */\n private documentClick$: Observable<Event> = fromEvent(document, 'click')\n /** Subject used for unsubscribe pattern on above observable. */\n private datepickerClosed$ = new Subject<boolean>()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected transloco: TranslocoService,\n protected elementRef: ElementRef,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, elementRef, cdr, transloco)\n // this.showInput$ = this.showInputDateSrc.asObservable()\n }\n\n ngOnDestroy(): void {\n this.datepickerClosed$.next(true)\n this.datepickerClosed$.complete()\n }\n\n /**\n * @internal\n * Called from the datepicker-component when a date button is clicked in the calendar.\n *\n * @param date date object emitted when selecting a date in the datepicker.\n */\n onDateChange(date: Date): void {\n // control value accessor will ensure correct formatting of state\n this.state = DateControlValueAccessorComponent.parseDateLike(date)\n // emit state\n this.onChange(this.state)\n // close datepicker and move focus to datepicker button\n this.setShown(false)\n setTimeout(() => this.toggleButtonRef?.nativeElement.focus(), 1)\n }\n\n /**\n * @internal\n * Called when entering date manually in input field.\n */\n onValueChange(eventTarget: any): void {\n // Will be in the format selected in inputMask\n const value = `${eventTarget.inputmask.undoValue}`\n\n // Use parserfunction from inputMask to parse to a date object since value can be in multiple formats\n // Then ontrol value accessor will ensure correct formatting of state\n const parsedDate = DateControlValueAccessorComponent.parseDateLike(\n this.dateInputMask.parser!(value),\n )\n\n this.state = parsedDate\n\n // emit parsed date\n this.onChange(parsedDate)\n this.onTouched()\n }\n\n /**\n * @internal\n * Listen to 'esc' keypress and closes datepicker if open.\n */\n @HostListener('keydown', ['$event'])\n keyListener(event: KeyboardEvent): void {\n if (this.closeCalendarOnEscape && event.key === 'Escape')\n this.setShown(false)\n }\n\n /** @internal */\n toggleDatepicker(): void {\n this.setShown(!this.shown)\n }\n\n /** To externally trigger the datepicker to close. */\n close(): void {\n this.setShown(false)\n }\n\n /**\n * Set the shown state of the datepicker popup. If true the popup will be visible.\n * If the state is set to false, call onTouched to notify any state listeners\n * @param state the shown state which to set.\n */\n private setShown(state = true): void {\n this.shown = state\n if (!this.shown) {\n // if shown is set to false, stop listening to clicks\n this.datepickerClosed$.next(true)\n return this.onTouched()\n }\n // if shown is set to true, reset unsubscribe variable\n this.datepickerClosed$.next(false)\n\n // start listen to scroll if closeOnScroll is enabled\n if (this.closeOnScroll) {\n this.documentScroll$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n next: () => {\n // if document starts scrolling, close datepicker\n return this.setShown(false)\n },\n })\n }\n\n // start listening for clicks outside the component\n this.documentClick$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n next: (event: Event) => {\n // clicking on a gray date causes the datepicker to reload the calendar dates,\n // and the button element clicked will no longer be considered as a child of the datepicker.\n // but the event target path will still contain the parent element\n // if target has datepicker parent, keep listening\n const eventPath = event.composedPath()\n const hasDatepickerParent = !!eventPath.find(\n (e) => e === this.elementRef.nativeElement,\n )\n if (hasDatepickerParent) return\n // else the click is considered to be outside, close datepicker\n return this.setShown(false)\n },\n })\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div\n class=\"gds-field-label--small description hide-if-empty\"\n *ngIf=\"description\"\n >\n {{ description }}\n </div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state | nggvInputMaskFormat: dateInputMask }}\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT WRAPPER -->\n <ng-container *ngIf=\"!locked\">\n <div\n class=\"field-wrap\"\n [class.nggv-field--error]=\"invalid\"\n *ngIf=\"showInput$ | async\"\n >\n <!-- INPUT FIELD -->\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"nggv-field-date\"\n type=\"text\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [nggvInputMask]=\"dateInputMask\"\n [value]=\"state\"\n title=\"\"\n (change)=\"onValueChange($event.target)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <button\n aria-label=\"toggle calendar\"\n #toggleCalendarButton\n class=\"nggv-button-date\"\n type=\"button\"\n data-thook=\"toggle-calendar-button\"\n (click)=\"toggleDatepicker()\"\n [disabled]=\"disabled\"\n >\n @if (size === 'small') {\n <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n }\n\n @if (size === 'large') {\n <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n }\n </button>\n </div>\n\n <!-- DATEPICKER -->\n <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n <nggv-datepicker\n #input\n [type]=\"type\"\n [disableDates]=\"disableDates\"\n [disableWeekDays]=\"disableWeekDays\"\n [selected]=\"state\"\n [locale]=\"locale\"\n [minCalendarRows]=\"minRows\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [firstValid]=\"firstValid\"\n [lastValid]=\"lastValid\"\n [closingTime]=\"closingTime\"\n [dynamicPosition]=\"dynamicPosition\"\n [size]=\"size\"\n (ngvDateChange)=\"onDateChange($event)\"\n >\n <ng-content></ng-content>\n </nggv-datepicker>\n </div>\n\n <!-- ERRORS -->\n <ng-container\n *ngIf=\"\n invalid &&\n (error || ngControl?.invalid) &&\n (!errorList || !errorList.length)\n \"\n >\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n </label>\n </ng-container>\n <ng-container *ngFor=\"let error of errorList ?? []\">\n <label\n class=\"gds-field-notice gds-field-notice--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && error\"\n >\n <span class=\"error-item\">\n <span class=\"error-item--icon\">\n <gds-icon-triangle-exclamation\n *nggCoreElement\n [solid]=\"true\"\n size=\"16px\"\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n class=\"error-item--text\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n </label>\n </ng-container>\n </ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { CalendarControlComponent } from './components/calendar-control/calendar-control.component'\nimport { CalendarComponent } from './components/calendar/calendar.component'\nimport { DateInputComponent } from './components/date-input/date-input.component'\nimport { DatepickerComponent } from './components/datepicker/datepicker.component'\nimport { CalendarDateDirective } from './directives/calendar-date.directive'\nimport { DateThookPipe } from './pipes/date-thook.pipe'\nimport { IsDisabledPipe } from './pipes/is-disabled.pipe'\nimport { MatchesPipe } from './pipes/matches.pipe'\n\n@NgModule({\n declarations: [\n CalendarComponent,\n CalendarDateDirective,\n IsDisabledPipe,\n DateThookPipe,\n CalendarControlComponent,\n DatepickerComponent,\n DateInputComponent,\n MatchesPipe,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TranslocoModule,\n NggvInputMaskModule,\n NggCoreWrapperModule,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n exports: [DateInputComponent, DatepickerComponent],\n})\nexport class NggvDatepickerModule {}\n","/*\n * Public API Surface of date-picker\n */\nexport * from './date-control-value-accessor/date-control-value-accessor.component'\nexport * from './components/calendar/calendar.component'\nexport * from './components/calendar-control/calendar-control.component'\nexport * from './components/date-input/date-input.component'\nexport * from './components/datepicker/datepicker.component'\nexport * from './directives/calendar-date.directive'\nexport * from './pipes/is-disabled.pipe'\nexport * from './pipes/matches.pipe'\nexport * from './models/dates'\nexport * from './datepicker.models'\nexport * from './datepicker.globals'\nexport * from './datepicker.module'\nexport * from './datepicker.utils'\n","/* eslint-disable no-console */\nimport { Observable, throwError, timer } from 'rxjs'\nimport { finalize, mergeMap } from 'rxjs/operators'\n\nimport { APIFile, LocalFile } from './drag-drop.models'\n\n/**\n * Helper to extend the base file with {@link APIFile} defaults\n * @param file file base that will be extended with {@link APIFile} defaults\n * @param data extra data to override defaults\n */\nexport const extendFile = (\n file: File | undefined,\n ...data: Array<Partial<Omit<LocalFile, 'raw'> & APIFile>>\n): LocalFile & APIFile => {\n return Object.assign(\n {\n id: file ? btoa(file.name) : '',\n fileName: file ? file.name : 'na',\n status: '',\n statusReasonInformation: null,\n principal: '',\n uploadDate: (file\n ? new Date(file.lastModified)\n : new Date()\n ).toISOString(),\n registrarId: '',\n registrarName: '',\n progress: 0,\n uploadState: 'local',\n uploadRequests: undefined,\n raw: file,\n } as LocalFile & APIFile,\n ...data,\n )\n}\n\n/**\n * Checks if file matches allowed mime types\n * @param type file mime type\n * @param accept allowed mime types\n */\nexport const verifyAccept = (type: string, accept?: string) => {\n if (!accept) return true\n const regex = new RegExp(accept.replace(/\\*/g, '.*').replace(/\\s*,\\s*/g, '|'))\n return regex.test(type)\n}\n\n/**\n * Determines if browser supports drag and drop\n */\nexport const isDragDropAvailable = () => {\n const div = document.createElement('div')\n return (\n ('draggable' in div || ('ondragstart' in div && 'ondrop' in div)) &&\n 'FormData' in window &&\n 'FileReader' in window\n )\n}\n\n/**\n * Pick only specified keys from a given object\n * @param keys keys to pick from a given object\n * @param object to extract keys from\n */\nexport const pick = <T, K extends keyof T>(\n object: T,\n ...keys: K[]\n): Pick<T, K> => {\n const copy: any = {}\n keys.forEach((key) => {\n copy[key] = object[key]\n })\n return copy\n}\n\n/**\n * Will retry running the observable when an error occurs to a maximum limit, increasing delay between executions.\n * @param options specifies number of retries, scaling duration and statuses to exclude\n */\nexport const retryStrategy =\n ({\n maxRetryAttempts = 3,\n scalingDuration = 1000,\n excludedStatusCodes = [],\n }: {\n maxRetryAttempts?: number\n scalingDuration?: number\n excludedStatusCodes?: number[]\n } = {}) =>\n (attempts: Observable<any>) => {\n return attempts.pipe(\n mergeMap((error, i) => {\n const retryAttempt = i + 1\n // if maximum number of retries have been met\n // or response is a status code we don't wish to retry, throw error\n if (\n retryAttempt > maxRetryAttempts ||\n excludedStatusCodes.find((e) => e === error.status)\n ) {\n return throwError(() => error)\n }\n console.warn(\n `Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`,\n )\n return timer(retryAttempt * scalingDuration)\n }),\n finalize(() =>\n console.warn(\n `Failed after ${maxRetryAttempts} retry attempts, standing down.`,\n ),\n ),\n )\n }\n","import {\n inject,\n KeyValueChangeRecord,\n KeyValueChanges,\n KeyValueDiffer,\n KeyValueDiffers,\n Pipe,\n PipeTransform,\n} from '@angular/core'\n\n@Pipe({\n name: 'value', pure: false,\n standalone: false\n})\nexport class ValuePipe implements PipeTransform {\n constructor(private readonly differs: KeyValueDiffers) {}\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem((r: KeyValueChangeRecord<K, V>) => {\n this.values.push(r.currentValue)\n })\n }\n return this.values\n }\n}\n\n/**\n * Stand-alone version of existing value pipe.\n *\n * Impure flag needed due to keep track of changes in complex values (such as objects or arrays).\n */\n@Pipe({\n name: 'valueImpure',\n pure: false,\n standalone: true,\n})\nexport class ValueImpurePipe implements PipeTransform {\n private readonly differs = inject(KeyValueDiffers)\n\n private differ!: KeyValueDiffer<any, any>\n private values: Array<any> = []\n\n transform<K, V>(input: null): null\n transform<V>(input: { [key: string]: V } | Map<string, V>): Array<V>\n transform<V>(\n input: { [key: string]: V } | Map<string, V> | null,\n ): Array<V> | null\n transform<K, V>(input: Map<K, V>): Array<V>\n transform<K, V>(input: Map<K, V> | null): Array<V> | null\n transform<K, V>(\n input: null | { [key: string]: V; [key: number]: V } | Map<K, V>,\n ): Array<V> | null {\n if (!input || (!(input instanceof Map) && typeof input !== 'object')) {\n return null\n }\n\n if (!this.differ) {\n // make a differ for whatever type we've been passed in\n this.differ = this.differs.find(input).create()\n }\n\n const differChanges: KeyValueChanges<K, V> | null = this.differ.diff(\n input as any,\n )\n\n if (differChanges) {\n this.values = []\n differChanges.forEachItem(\n ({ currentValue }: KeyValueChangeRecord<K, V>) => {\n this.values.push(currentValue)\n },\n )\n }\n return this.values\n }\n}\n","/* eslint-disable no-console */\nimport { HttpEventType } from '@angular/common/http'\nimport {\n Component,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { timer } from 'rxjs'\nimport { filter, retryWhen, switchMap, take, tap } from 'rxjs/operators'\n\nimport {\n DialogEvent,\n NggvDialogComponent,\n} from '@sebgroup/green-angular/src/v-angular/modal'\nimport {\n extendFile,\n isDragDropAvailable,\n pick,\n retryStrategy,\n verifyAccept,\n} from './drag-drop.utils'\n\nimport type {\n APIFile,\n EventStateChange,\n FileService,\n LocalFile,\n StateMap,\n UploadState,\n} from './drag-drop.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cloud-upload.js'\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\nimport '@sebgroup/green-core/components/icon/icons/checkmark.js'\n\nexport type DragDropState = 'normal' | 'over' | 'uploading' | 'done'\n\n@Component({\n selector: 'nggv-drag-drop',\n templateUrl: './drag-drop.component.html',\n styleUrls: ['./drag-drop.component.scss'],\n standalone: false\n})\nexport class NggvDragDropComponent implements OnInit, OnDestroy {\n /** @internal */\n @ViewChild('deleteModalRef') deleteModalRef!: NggvDialogComponent\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'drag-drop'\n\n /** Allowing selecting or dropping multiple files. */\n @Input() service: FileService | undefined\n\n /** Mime types allowed. */\n @Input() accept?: string\n\n /** Disables deletion or cancellation during defined states [local | uploading | aborted | uploaded | validating | error | deleted | done]. */\n @Input() disableRemove: UploadState[] = []\n\n /** File size limit in mega bytes. */\n @Input() fileLimit: number = 250 * 1024 * 1024\n\n /** Allowing selecting or dropping multiple files. */\n @Input() multiple = true\n\n /** Determines if list should be shown under upload, disabling list disables multiple upload. */\n @Input() list = true\n\n /** Frequency of requests which to send to the API requesting status updates. */\n @Input() throttle = 5000\n\n /** Maximum number of attempts to request a status update from the API if service is unreachable. */\n @Input() retryAttempts = 5\n\n /** If selection of multiple file should be possible with a checkbox.\n * @experimental work in progress and should not yet be used.\n * @internal\n */\n @Input() selectable = false\n\n /** Allows multiple values from `apiFile.status` to be mapped to a single file upload state. */\n @Input() stateMap: StateMap = {\n local: 'local',\n uploading: 'uploading',\n aborted: 'aborted',\n uploaded: 'uploaded',\n validating: 'validating',\n error: 'error',\n deleted: 'deleted',\n done: 'done',\n }\n\n /** Statuses allowed to be fetch during the initial load. Used to hide \"done\" states from list. */\n @Input() fetchStatuses: string[] = []\n\n /** Statuses allowed be shown when status is \"rejected\". Will fallback to generic message. `null` allows all. */\n @Input() errorCodes: string[] | null = null\n\n /** Event triggered on initialization and every time the \"uploadState\" for a file changes. */\n @Output() stateChange = new EventEmitter<EventStateChange>()\n\n /** Event triggered when view details is clicked. */\n @Output() detailsClick = new EventEmitter<LocalFile & APIFile>()\n\n /** @internal */\n isDragDropAvailable = isDragDropAvailable()\n /** @internal */\n componentState: DragDropState = 'normal'\n /** @internal */\n files: Map<string, LocalFile & APIFile> = new Map()\n /** @internal */\n lastFile: (LocalFile & APIFile) | undefined\n /** @internal */\n selected: string[] = []\n /** @internal */\n loading = false\n /** @internal */\n markedForDeletion: APIFile | undefined\n\n /**\n * Initialize the component and warn if service is not defined. Will also fetch files for the list if enabled.\n */\n ngOnInit() {\n if (!this.service) {\n return console.error(\n 'Drag and drop component will not work without the [service] property defined!',\n )\n }\n\n if (this.list) {\n this.service.fetchFiles(this.fetchStatuses).subscribe((apiFiles) => {\n for (const apiFile of apiFiles) {\n const extendedFile = extendFile(undefined, apiFile, {\n progress: 100,\n uploadState: this.determineUploadState(apiFile.status),\n internalStatusReasonCode: this.fallbackError(\n apiFile.internalStatusReasonCode,\n ),\n })\n this.files.set(extendedFile.id, extendedFile)\n this.stateChange.emit(\n pick(\n extendedFile,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n extendedFile.uploadState === 'uploaded' ||\n extendedFile.uploadState === 'validating'\n ) {\n this.checkValidity(extendedFile, this.throttle)\n }\n }\n })\n }\n }\n\n /** Destroy all event listeners and polling running */\n ngOnDestroy() {\n this.files.forEach((file) => {\n file.uploadRequests?.unsubscribe()\n if (file.uploadState === 'uploading') {\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n }\n })\n }\n\n /** @internal Warn user trying to leave page before all uploads are done. Custom message only works in older browsers. */\n @HostListener('window:beforeunload', ['$event'])\n onBeforeUnload(event: Event) {\n if (!this.allUploadingDone(this.files)) {\n const confirmationMessage = `You still have files uploading, are you sure you want to leave this page?`\n ;((event as any) || (window.event as any)).returnValue =\n confirmationMessage\n return confirmationMessage\n }\n return\n }\n\n /* Drag & Drop Events */\n\n /** @internal Event handler for when a file is held over the drop area */\n onDragEnter(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n // Update the visual state\n this.componentState = 'over'\n }\n\n /** @internal Event handler for when a file leaves the drop area */\n onDragLeave(event: DragEvent): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n }\n\n /** @internal Event handler for when a file is dropped on the drop area or when `input` files are selected */\n onDrop(event: DragEvent | Event): void {\n if (!this.service) return\n event.preventDefault()\n this.componentState = 'normal'\n\n let files: FileList | undefined\n\n // Determine if files are from the drop event or input element\n if (event instanceof DragEvent && event.dataTransfer) {\n files = event.dataTransfer.files\n } else if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n files = event.target.files\n }\n\n if (files) {\n const extendedFiles = Array.from(files, (file) => {\n let abort = false\n let statusCode: string | null = null\n // Check if file size is larger than limit\n if (file.size > this.fileLimit) {\n abort = true\n statusCode = 'MFEFHM003'\n }\n // Check if file type is not acceptable\n if (!verifyAccept(file.type, this.accept)) {\n abort = true\n statusCode = 'MFEFHM002'\n }\n // Add default values expected by the API\n const extendedFile = extendFile(file, {\n internalStatusReasonCode: statusCode,\n uploadState: (abort ? 'aborted' : 'local') as UploadState,\n })\n\n // Emit initial local upload event\n this.stateChange.emit({\n uploadState: 'local',\n fileName: extendedFile.fileName,\n })\n\n if (abort) {\n // Emit aborted upload event\n this.stateChange.emit({\n uploadState: 'aborted',\n fileName: extendedFile.fileName,\n status: 'aborted',\n internalStatusReasonCode: statusCode,\n })\n }\n\n return extendedFile\n })\n\n // Append to previous files\n let i = 0\n for (const file of extendedFiles) {\n // If multiple or list is false append only file then break loop\n if ((!this.multiple || !this.list) && i >= 1) break\n this.lastFile = file\n this.files.set(file.id, file)\n i++\n }\n\n // Clear file input so that same file can be uploaded\n if (\n event.target &&\n event.target instanceof HTMLInputElement &&\n event.target.files\n ) {\n event.target.value = ''\n }\n\n this.onSubmit()\n }\n }\n\n /** @internal Event trigger for when delete button is pressed */\n onRemove(id: string, state: UploadState): void {\n // Only allow removal in certain states\n if (!this.service || this.disableRemove.includes(state)) return\n const file = this.files.get(id)\n if (!file) return\n // Skip confirmation for aborted and deleted files\n if (\n file.uploadState === 'error' ||\n file.uploadState === 'aborted' ||\n file.uploadState === 'deleted'\n ) {\n this.onConfirmRemove({ original: undefined, payload: file })\n } else {\n this.markedForDeletion = file\n this.deleteModalRef.open()\n }\n }\n\n /** @internal */\n onConfirmRemove(event: DialogEvent<LocalFile & APIFile>) {\n const { payload: file } = event\n if (!file || !this.service) return\n\n // Abort upload and set local state to aborted to inform user\n switch (file.uploadState) {\n case 'local':\n case 'uploading':\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM004'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n break\n\n // Remove file from service then set local state to aborted to inform user\n case 'uploaded':\n case 'validating':\n this.service\n .removeFile(file.id)\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Abort regardless of response from server\n file.uploadRequests?.unsubscribe()\n file.uploadState = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM005'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n })\n break\n\n // Remove file from service then locally for \"completed\" states\n case 'error':\n case 'done':\n ;(this.service.removeFileFor\n ? this.service.removeFileFor(file)\n : this.service.removeFile(file.id)\n )\n .subscribe({\n error: console.warn,\n })\n .add(() => {\n // Remove regardless of response from server\n this.files.delete(file.id)\n const event = pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n )\n event.uploadState = 'deleted'\n this.stateChange.emit(event)\n })\n break\n\n // Just remove the file locally to clean up\n case 'aborted':\n case 'deleted':\n default:\n this.files.delete(file.id)\n this.stateChange.emit({\n ...pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n uploadState: 'deleted',\n })\n break\n }\n }\n\n /** @internal Event handler for when the files should be uploaded */\n onSubmit() {\n if (!this.files || !this.service) return\n // If list is not enabled update the component state to show progress\n if (!this.list) this.componentState = 'uploading'\n this.loading = true\n this.files.forEach((file) => {\n // Filter out all files that aren't currently considered local\n if (!file.raw || file.uploadState !== 'local') return\n file.uploadRequests = this.service!.uploadFile(file.raw!).subscribe({\n next: (event) => {\n switch (event.type) {\n case HttpEventType.UploadProgress:\n // Update upload progress\n if (file.uploadState !== 'uploading') {\n file.uploadState = 'uploading'\n this.stateChange.emit(pick(file, 'uploadState', 'fileName'))\n }\n file.progress = Math.round(\n (100 * event.loaded) / (event.total || 100),\n )\n file.uploadState = 'uploading'\n break\n\n case HttpEventType.Response:\n if (event.body?.id) {\n // Remove old file id\n this.files.delete(file.id)\n // Update file with information from the API\n Object.assign(file, event.body)\n file.progress = 100\n file.uploadState = this.determineUploadState(file.status)\n // Update with new file id\n this.files.set(file.id, file)\n }\n\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n\n // Check if validation is required, then start polling\n if (\n file.uploadState === 'uploaded' ||\n file.uploadState === 'validating'\n ) {\n this.checkValidity(file, this.throttle)\n } else this.setComponentStateDone()\n this.loading = false\n break\n }\n },\n error: (error) => {\n console.warn(error)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n // todo: wrong\n file.statusReasonInformation = [\n { originatorId: 'local', reason: 'dragDrop.error.MFEFHM001' },\n ]\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'statusReasonInformation',\n ),\n )\n this.loading = false\n },\n })\n })\n }\n\n /**\n * @internal\n * Using the state map convert `apiFile.state` to one of {@link UploadState}\n * @param apiState the state given by the file to be used for mapping\n */\n determineUploadState(apiState: string): UploadState {\n // Reverse so that later states override earlier\n const stateEntries = Object.entries(this.stateMap).reverse()\n for (const [uploadState, apiStates] of stateEntries) {\n if (this.uploadStateIsArray(apiStates)) {\n if (apiStates.includes(apiState)) return uploadState as any\n } else {\n if (apiStates === apiState) return uploadState as any\n }\n }\n return 'error'\n }\n\n /** @internal */\n uploadStateIsArray(state: string | string[]): state is string[] {\n return Array.isArray(state)\n }\n\n /** @internal used for translation templating parameters */\n translateParams(file: LocalFile & APIFile) {\n return { ...file, fileLimit: (this.fileLimit / 1024 / 1024).toFixed(3) }\n }\n\n /**\n * Poll the status endpoint to determine when file is valid\n * @param file file used to check state and update\n * @param delay how long each interval should wait before sending a request\n */\n private checkValidity(file: LocalFile & APIFile, delay: number) {\n if (!this.service) return\n file.uploadRequests = timer(0, delay)\n .pipe(\n switchMap(() => {\n const asyncFetchStatus =\n this.service && this.service.fetchStatusFor\n ? this.service.fetchStatusFor(file)\n : this.service!.fetchStatus(file.id)\n return asyncFetchStatus\n }),\n retryWhen(\n retryStrategy({\n maxRetryAttempts: this.retryAttempts,\n }),\n ),\n tap((fileStatus) => {\n // Continuously update file state to show step progress\n if (fileStatus) {\n // Emit event when status changes\n if (file.status !== fileStatus.status) {\n file.status = fileStatus.status\n file.internalStatusReasonCode = this.fallbackError(\n fileStatus.internalStatusReasonCode,\n )\n file.statusReasonInformation = fileStatus.statusReasonInformation\n file.uploadState = this.determineUploadState(fileStatus.status)\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n 'statusReasonInformation',\n ),\n )\n }\n }\n }),\n // Remove validation state\n filter(\n (apiFile) =>\n !!apiFile &&\n this.determineUploadState(apiFile.status) !== 'uploaded' &&\n this.determineUploadState(apiFile.status) !== 'validating',\n ),\n // Take first state after validation\n take(1),\n )\n .subscribe({\n next: () => {\n if (this.allValidationDone(this.files)) {\n this.setComponentStateDone()\n }\n },\n error: (err) => {\n console.warn(err)\n file.uploadState = 'aborted'\n file.status = 'aborted'\n file.internalStatusReasonCode = 'MFEFHM001'\n this.stateChange.emit(\n pick(\n file,\n 'uploadState',\n 'fileName',\n 'id',\n 'status',\n 'internalStatusReasonCode',\n ),\n )\n this.setComponentStateDone()\n },\n })\n }\n\n private fallbackError(code: string | null | undefined): string | null {\n if (this.errorCodes == null || (code && this.errorCodes.includes(code))) {\n return code ?? null\n } else {\n return 'MFEFHM001'\n }\n }\n\n /**\n * Check so that no files are still validating\n */\n private allValidationDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'validating',\n )\n }\n\n /**\n * Check so that no files are still uploading\n */\n private allUploadingDone(files: Map<string, LocalFile>) {\n return Array.from(files.values()).every(\n (file) => file.uploadState !== 'uploading',\n )\n }\n\n /**\n * Helper to update the component state to done and then back to normal\n */\n private setComponentStateDone() {\n if (!this.list) this.componentState = 'done'\n setTimeout(() => {\n if (this.componentState === 'done') this.componentState = 'normal'\n }, 3000)\n }\n}\n","<ng-container *transloco=\"let t\">\n <form enctype=\"multipart/form-data\" #dragDropForm>\n <div class=\"gds-drag-drop\">\n <input\n class=\"gds-drag-drop__input\"\n id=\"drag-drop\"\n type=\"file\"\n [accept]=\"accept\"\n [multiple]=\"multiple && list\"\n (change)=\"onDrop($event)\"\n />\n <label\n [ngClass]=\"{\n 'gds-drag-drop__label': true,\n 'gds-drag-drop__label--above': componentState === 'over',\n }\"\n for=\"drag-drop\"\n [attr.data-thook]=\"thook + '-picker'\"\n [attr.aria-busy]=\"loading\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragEnter($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (dragend)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [ngSwitch]=\"componentState\"\n >\n <!-- COMPONENT STATE NORMAL -->\n <ng-template [ngSwitchCase]=\"'normal'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n ><em>{{ t('dragDrop.label.fileChoose') }}</em>\n <ng-template [ngIf]=\"isDragDropAvailable\">\n {{ t('dragDrop.label.fileDrag') }}</ng-template\n >\n </ng-template>\n\n <!-- COMPONENT STATE OVER -->\n <ng-template [ngSwitchCase]=\"'over'\">\n <gds-icon-cloud-upload *nggCoreElement></gds-icon-cloud-upload\n >{{ t('dragDrop.label.fileDrop') }}\n </ng-template>\n\n <!-- COMPONENT STATE UPLOADING -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <strong class=\"filename\">{{ lastFile?.fileName }}</strong>\n\n <!-- UPLOADING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngIf]=\"lastFile?.uploadState === 'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: lastFile,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n </ng-template>\n\n <!-- COMPONENT STATE DONE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n {{ t('dragDrop.label.fileUploaded', { filename: lastFile?.fileName })\n }}<gds-icon-checkmark *nggCoreElement></gds-icon-checkmark>\n </ng-template>\n </label>\n\n <!-- LIST -->\n <table\n class=\"gds-table file-list\"\n [attr.data-thook]=\"thook + '-file-list'\"\n *ngIf=\"list\"\n >\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n id=\"select-all\"\n />\n <label for=\"select-all\"></label>\n </div>\n </th>\n <th class=\"gds-table__primary-col col-name\">\n {{ t('dragDrop.label.fileName') }}\n </th>\n <th class=\"col-status\">\n {{ t('dragDrop.label.fileStatus') }}\n </th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n <tr\n [attr.data-thook]=\"thook + '-file'\"\n *ngFor=\"let file of files | value\"\n >\n <td *ngIf=\"selectable\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n aria-label=\"Field label\"\n [id]=\"'file-checkbox-' + file.id\"\n />\n <label [for]=\"'file-checkbox-' + file.id\"></label>\n </div>\n </td>\n <td\n class=\"gds-table__primary-col\"\n [attr.data-thook]=\"thook + '-file-name'\"\n >\n {{ file.fileName }}\n </td>\n <td\n [attr.data-thook]=\"thook + '-file-status'\"\n [ngSwitch]=\"file.uploadState\"\n >\n <!-- UPLOADING STATE -->\n <ng-template [ngSwitchCase]=\"'uploading'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- UPLOADED STATE -->\n <ng-template [ngSwitchCase]=\"'uploaded'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateUploaded'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- VALIDATING STATE -->\n <ng-template [ngSwitchCase]=\"'validating'\">\n <ng-template\n [ngTemplateOutlet]=\"progressTemplate\"\n [ngTemplateOutletContext]=\"{\n file: file,\n text: t('dragDrop.text.fileStateValidating'),\n }\"\n ></ng-template>\n </ng-template>\n\n <!-- ABORTED STATE -->\n <ng-template [ngSwitchCase]=\"'aborted'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n </ng-template>\n\n <!-- ERROR STATE -->\n <ng-template [ngSwitchCase]=\"'error'\">\n <span\n class=\"error-text\"\n [transloco]=\"\n 'dragDrop.error.' + file.internalStatusReasonCode\n \"\n [translocoParams]=\"translateParams(file)\"\n *ngIf=\"file.internalStatusReasonCode\"\n ></span>\n <br />\n <a\n (click)=\"detailsClick.emit(file)\"\n style=\"cursor: pointer\"\n *ngIf=\"\n file.statusReasonInformation &&\n file.statusReasonInformation.length\n \"\n >\n {{ t('dragDrop.link.viewDetails') }}\n </a>\n </ng-template>\n\n <!-- DONE STATE -->\n <ng-template [ngSwitchCase]=\"'done'\">\n <span class=\"success-text\">{{\n t('dragDrop.text.fileStateDone')\n }}</span>\n </ng-template>\n </td>\n\n <td class=\"gds-table__numeric-col\">\n <a\n class=\"remove\"\n tabindex=\"0\"\n (click)=\"onRemove(file.id, file.uploadState)\"\n *ngIf=\"!disableRemove.includes(file.uploadState)\"\n >\n <gds-icon-cross-small *nggCoreElement></gds-icon-cross-small>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </form>\n\n <nggv-dialog\n #deleteModalRef\n [title]=\"t('dragDrop.text.fileCancelModalTitle')\"\n [content]=\"\n t('dragDrop.text.fileCancelModalContent', {\n name: markedForDeletion?.fileName,\n })\n \"\n [payload]=\"markedForDeletion\"\n [buttons]=\"{\n negative: 'dragDrop.text.fileCancelConfirm',\n positive: 'dragDrop.text.fileCancelDeny',\n }\"\n (nggvNegativeEvent)=\"onConfirmRemove($any($event))\"\n ></nggv-dialog>\n\n <!-- PROGRESS TEMPLATE -->\n\n <ng-template\n #progressTemplate\n let-file=\"\n file\"\n let-text=\"text\"\n >\n <div class=\"progress-wrapper\">\n <progress\n class=\"gds-progress-bar progress\"\n max=\"100\"\n [value]=\"file.progress\"\n >\n {{\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </progress>\n <ng-template [ngIf]=\"stateMap.validating.length\">\n <div\n class=\"gds-progress-indicator indicator\"\n *ngIf=\"uploadStateIsArray(stateMap.validating); else singleValidation\"\n >\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"i <= stateMap.validating.indexOf(file.status)\"\n *ngFor=\"let state of stateMap.validating; let i = index\"\n ></div>\n </div>\n </ng-template>\n <ng-template #singleValidation>\n <div class=\"gds-progress-indicator indicator\">\n <!-- eslint-disable @angular-eslint/template/eqeqeq -->\n <div\n class=\"gds-progress-indicator__step\"\n [class.-done]=\"file.status == stateMap.validating\"\n ></div>\n <!-- eslint-enable @angular-eslint/template/eqeqeq -->\n </div>\n </ng-template>\n </div>\n <span class=\"progress-text\">\n {{\n text ||\n t('dragDrop.text.fileStateUploading', {\n uploaded:\n (file.raw?.size * (file.progress / 100)) / 1024 | number: '0.0-0',\n size: file.raw?.size / 1024 | number: '0.0-0',\n progress: file.progress,\n unit: 'kB',\n })\n }}\n </span>\n </ng-template>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { HttpClientModule } from '@angular/common/http'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvModalModule } from '@sebgroup/green-angular/src/v-angular/modal'\nimport { NggvDragDropComponent } from './drag-drop.component'\nimport { ValuePipe } from './drag-drop.pipes'\n\n@NgModule({\n imports: [\n HttpClientModule,\n TranslocoModule,\n NggvModalModule,\n NggCoreWrapperModule,\n CommonModule,\n ],\n declarations: [ValuePipe, NggvDragDropComponent],\n providers: [\n {\n provide: TRANSLOCO_SCOPE,\n useValue: 'dragDrop',\n },\n ],\n exports: [NggvDragDropComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDragDropModule {}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'\n\n@Component({\n selector: 'nggv-typeahead-highlight',\n templateUrl: './typeahead-highlight.component.html',\n styleUrls: ['./typeahead-highlight.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadHighlightComponent implements OnChanges {\n /** The text that is displayed in the dropdown list */\n @Input() textContent?: string\n /** The substring that should be highlighted within textContent */\n @Input() textToHighlight?: string\n\n prefix?: string // Substring before the match\n match?: string // The match\n suffix?: string // Substring after the match\n\n text = ''\n input = ''\n\n /**\n * Regexp of characters that are allowed in textContent without being found in textToHighlight\n * Allow whitespaces.\n * */\n allowedNonMatchingChars = new RegExp(/\\s/)\n\n ngOnChanges(changes: SimpleChanges) {\n const { textContent, textToHighlight } = changes\n if (textContent?.currentValue != null)\n this.text = `${textContent.currentValue}`\n if (textToHighlight?.currentValue != null)\n this.input = `${textToHighlight.currentValue}`\n this.updateValues()\n }\n\n private updateValues() {\n const splittedText = this.text.toLocaleLowerCase().split('')\n const splittedInput = this.input.toLocaleLowerCase().split('')\n\n const { start, end } = this.getHighlightedPart(splittedText, splittedInput)\n\n // If user input is not found within the textcontent, reset options and return.\n if (start === -1 || end === -1) {\n this.prefix = this.match = this.suffix = ''\n return\n }\n this.prefix = this.text.substring(0, start)\n this.match = this.text.substring(start, end)\n this.suffix = this.text.substring(end)\n }\n\n /**\n * Function that finds the start and end index of where the input is located within the text to display.\n * First occurence is returned. Allows for spaces to occur despite input not matching space.\n * Loops through each character in splittedText and when a char in splittedText equlas the first character of\n * splittedInput, evaluate wether it's match on the entire input.\n * - If it's => return indexes.\n * - If it's not => break out and check next char in outer loop.\n * @param splittedText the text content splitted in an array\n * @param splittedInput the input splitted in an array\n * @returns { start: number, end: number } Indexes of where the match starts and ends in the text displatyed\n */\n private getHighlightedPart(\n splittedText: string[],\n splittedInput: string[],\n ): { start: number; end: number } {\n let start = -1\n let end = -1\n\n for (let i = 0; i < splittedText.length; i++) {\n // If start and end have been set, break and return\n if (start > -1 || end > -1) break\n\n // If current char match first in input, try see if whole input match from that index\n if (splittedText[i] === splittedInput[0]) {\n let matches = 1\n for (let t = 1; t <= splittedText.length; t++) {\n // If match on last character of input, we're finished.\n if (matches === splittedInput.length) {\n start = i\n end = start + t\n break\n }\n if (splittedText[t + i] === splittedInput[matches]) matches++\n else if (this.allowedNonMatchingChars.test(splittedText[t + i]))\n continue // Ignore whitespace, continue\n else break // No match, break out of inner loop to check next char in text\n }\n }\n }\n return { start, end }\n }\n}\n","<ng-container *ngIf=\"!this.match\">{{ textContent }}</ng-container>\n<!-- Note that this is sensitive to line breaks producing extra spacing between the different parts -->\n<ng-container *ngIf=\"!!this.match\">\n {{ prefix || '' }}<span class=\"match\">{{ match }}</span\n >{{ suffix || '' }}\n</ng-container>\n","import {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { filter, fromEvent, Subject, Subscription, takeUntil } from 'rxjs'\nimport scrollIntoView from 'scroll-into-view-if-needed'\n\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n@Component({\n selector: 'nggv-dropdown-list',\n templateUrl: './dropdown-list.component.html',\n styleUrls: ['./dropdown-list.component.scss'],\n standalone: false,\n})\nexport class NggvDropdownListComponent implements OnInit, OnChanges {\n @Input() set expanded(state: boolean) {\n this.setExpanded(state)\n }\n get expanded(): boolean {\n return this._expanded\n }\n @Input() state: any\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n @Input() optionContentTpl: TemplateRef<OptionBase<any>> | undefined\n @Input() groupLabelTpl: TemplateRef<OptionBase<any>> | undefined\n\n /** @internal List of references to the option elements. */\n @ViewChildren('optionRefs') optionRefs:\n | QueryList<ElementRef<HTMLLIElement>>\n | undefined\n\n /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n @HostBinding('attr.id') @Input() id = (window as any).nggv?.nextId()\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('attr.data-position') get positionAttr() {\n return this.dropdownPosition\n }\n\n @Input() options!: any[]\n\n @Input() textToHighlight?: string\n\n /**\n * Used to control if \"selectedValueChanged\" only should emit distinct changes, or each time a value is selected\n * When true, value is not emitted if there's no distinct change\n * When false, value is emitted every time an option is selected\n * */\n @Input() onlyEmitDistinctChanges = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * When true, the dropdown will automatically choose to open above or below the input\n * based on available space in the viewport, and will scale its height to fit if needed.\n */\n @Input() dynamicPosition = false\n\n @Output() selectedValueChanged = new EventEmitter<any>()\n\n /**\n * Emitted when the dropdown is closed by user interactions (e.g. Escape or Tab) or other immediate close triggers.\n * This notifies external consumers that the dropdown was closed as a result of a user action.\n */\n @Output() closed = new EventEmitter<void>()\n\n /**\n * Emitted after the dropdown has fully closed and internal cleanup has been performed.\n * Use this for post-close tasks that must run after subscriptions are torn down and resources released.\n */\n @Output() afterClose = new EventEmitter<void>()\n\n /** The current active option based on numeric index. */\n public activeIndex = -1\n\n scope: string | undefined\n\n // Indicates whether the dropdown list should be displayed below ('bottom') or above ('top') the input, based on available space.\n dropdownPosition: 'bottom' | 'top' = 'bottom'\n\n private dropdownUtils: DropdownUtils<string | null, string, any> =\n new DropdownUtils<string | null, string, any>()\n private _expanded = false\n private closed$ = new Subject<boolean>()\n public selectedValue?: Option<string, any>\n\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n protected onClickSubscription: Subscription | undefined\n /** Subscribe to to keyboard events only when list is open. */\n private onKeyDownSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n private _flattenedOptions: any[] = []\n\n constructor(\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer: Renderer2,\n private elRef: ElementRef,\n ) {\n if (this.translocoScope) this.scope = this.translocoScope.toString()\n }\n\n ngOnInit(): void {\n if (this.state)\n this.activeIndex = this.options.findIndex(\n (option) => option.key === this.state.key,\n )\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!!changes.state && !changes.state.firstChange)\n this.selectedValue = changes.state.currentValue\n if (!!changes.options?.currentValue?.length && this.expanded)\n this.refreshSelectedOption()\n }\n\n /**\n * Returns true if argument is an {@link OptionGroup}.\n * @param option the object to check.\n */\n isGroup(option: any): boolean {\n return 'options' in option\n }\n\n /** @internal */\n updateState(option: any, event: Event) {\n if (option.disabled) return\n\n if (\n !this.onlyEmitDistinctChanges ||\n !this.dropdownUtils.deepEqual(this.selectedValue, option)\n ) {\n this.selectedValue = option\n this.state = option\n this.selectedValueChanged.emit(option)\n }\n\n this.setExpanded(false)\n event.stopPropagation()\n }\n\n /**\n * @internal\n */\n setExpanded(expanded = true) {\n // update expanded state\n this._expanded = expanded\n\n if (expanded) {\n if (this.dynamicPosition) {\n this.setDropdownPosition()\n }\n this.refreshSelectedOption()\n this.subscribeToKeyUpEvents()\n this.subscribeToKeyDownEvents()\n } else {\n this.closed$.next(true)\n this.afterClose.emit()\n this.onClickSubscription?.unsubscribe()\n this.onKeyDownSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n // to trigger gc removal\n this.onKeyDownSubscription = undefined\n this.onKeyUpSubscription = undefined\n }\n }\n\n /**\n * @internal\n */\n refreshSelectedOption() {\n this._flattenedOptions = this.dropdownUtils.flattenOptions(\n this.options,\n !this.optionContentTpl,\n )\n this.activeIndex = this.getActiveIndex()\n this.state = this._flattenedOptions[this.activeIndex]\n this.scrollToResult(this.state)\n }\n\n /**\n * @internal\n * @returns The active index (number) if option is found, -1 otherwise.\n * - If a selectedValue exists that's not nullish and that options is found, return that index\n * - Else, return first non nullish index\n * - If none of the above criterias are met, -1 are returned\n */\n getActiveIndex(): number {\n if (!!this.selectedValue && this.selectedValue?.key != null) {\n const selectedIndex = this._flattenedOptions.findIndex(\n (option) =>\n option.key != null && option.key === this.selectedValue?.key,\n )\n if (selectedIndex > -1) return selectedIndex\n }\n return this._flattenedOptions.findIndex((option) => option.key != null)\n }\n\n /**\n * @internal\n * evaluates wether the HTML element overflows\n * @param elem The HTMLElement to evaluate\n * */\n isOverflow(elem: HTMLElement) {\n return elem.offsetWidth < elem.scrollWidth\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): any {\n return group\n }\n\n /**\n * @internal\n * Disables default events.\n * @param event fired containing which key was pressed.\n */\n onKeyDown(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (event.key === ' ' && !this.selectWithSpace) return true\n switch (event.key) {\n case ' ': // Space - placed here to ensure the dropdown-list closes after selecting using \"Space\"\n case 'ArrowUp': // Disable scrolling up\n case 'ArrowDown': // Disable scrolling down\n event.preventDefault()\n event.stopPropagation()\n return false\n case 'Enter': // Disable form submission and select the currently active value\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n const option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n }\n return false\n case 'Tab': // trigger dropdown to close (for typeahead)\n event.preventDefault()\n event.stopPropagation()\n if (this.expanded) {\n this.setExpanded(false)\n this.closed.emit()\n }\n return false\n }\n return true\n }\n\n /**\n * @internal\n * Enter toggles the dropdown, home, end, and, arrows change the index.\n * Space selects the currently active option if `selectWithSpace` is true.\n * @param event fired containing which key was released.\n */\n onKeyUp(event: KeyboardEvent) {\n // If space is pressed but it should not select an option, do nothing\n if (!this.expanded || (event.key === ' ' && !this.selectWithSpace)) return\n let option\n\n switch (event.key) {\n case 'Escape':\n this.setExpanded(false)\n this.closed.emit()\n break\n\n case ' ': // Space - select the currently chosen value\n option = this._flattenedOptions[this.activeIndex]\n this.updateState(option, event)\n break\n\n case 'Home': // Move to the first option\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowUp': // Move up one step to the previous option\n if (this.activeIndex > 0) this.activeIndex--\n else if (this.activeIndex === 0)\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'ArrowDown': // Move down one step to the next option\n if (this._flattenedOptions.length > this.activeIndex + 1)\n this.activeIndex++\n else if (this.activeIndex === this._flattenedOptions.length - 1)\n this.activeIndex = 0\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n\n case 'End': // Move to the last options\n this.activeIndex = this._flattenedOptions.length - 1\n\n option = this._flattenedOptions[this.activeIndex]\n this.state = option\n this.scrollToResult(option, true)\n break\n }\n }\n\n /** @internal */\n subscribeToKeyUpEvents() {\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyUp(event))\n }\n\n /** @internal */\n subscribeToKeyDownEvents() {\n this.onKeyDownSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n filter(() => this.expanded),\n takeUntil(this.closed$),\n )\n .subscribe((event) => this.onKeyDown(event))\n }\n\n /**\n * Scrolls focused result into view with a specified offset.\n * @param key the result index which to scroll to.\n */\n scrollToResult(option: any, focusElement?: boolean) {\n if (!this.optionRefs || !option) return\n const optionRef = this.optionRefs.find(\n (li) => li.nativeElement.id === this.id + '-option-' + (option.id ?? option.key),\n )\n const offset = this.scrollOffset\n if (optionRef) {\n let delta = window.scrollY || document.documentElement.scrollTop\n\n // The list seems not to be visible at the time of scrolling, but this setTimeout \"hack\" makes it work...\n setTimeout(() => {\n scrollIntoView(optionRef.nativeElement, {\n scrollMode: 'if-needed',\n block: 'nearest',\n })\n\n delta -= window.scrollY || document.documentElement.scrollTop\n if (delta) {\n window.scrollBy(0, delta > 0 ? -offset : offset)\n }\n if (focusElement) {\n optionRef.nativeElement.focus()\n }\n }, 0)\n }\n }\n\n /**\n * Calculates available space above and below the dropdown input,\n * sets dropdownPosition ('top' or 'bottom') accordingly,\n * and dynamically sets the max-height of the dropdown list to fit the viewport.\n */\n setDropdownPosition() {\n const dropdown = this.elRef.nativeElement\n // dropdown trigger\n const dropdownInput = dropdown.parentElement\n const dropdownList = dropdown.querySelector('ul[role=\"listbox\"]')\n const rect = dropdownInput.getBoundingClientRect()\n\n const viewportHeight = window.innerHeight\n const spaceBelow = viewportHeight - rect.bottom\n const spaceAbove = rect.top\n\n const MARGIN = 10\n const MIN_HEIGHT = 100\n const DROPDOWN_MAX_HEIGHT = 500\n let maxDropdownHeight\n\n if (spaceBelow >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceAbove >= DROPDOWN_MAX_HEIGHT) {\n this.dropdownPosition = 'top'\n maxDropdownHeight = DROPDOWN_MAX_HEIGHT\n } else if (spaceBelow > spaceAbove) {\n this.dropdownPosition = 'bottom'\n maxDropdownHeight = Math.max(spaceBelow - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n } else {\n this.dropdownPosition = 'top'\n maxDropdownHeight = Math.max(spaceAbove - MARGIN, MIN_HEIGHT) // 10px margin, minimum height 100px\n }\n\n this.renderer.setStyle(dropdownList, 'max-height', `${maxDropdownHeight}px`)\n }\n}\n","<ng-container *transloco=\"let t; read: scope\">\n <div class=\"visually-hidden\">{{ t(state?.label) }}</div>\n <ul\n class=\"gds-dropdown__options card options gds-reset\"\n [class.gds-dropdown__options-expanded]=\"expanded\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.data-thook]=\"thook + '-options'\"\n [attr.aria-labelledby]=\"id + '-label'\"\n [attr.aria-activedescendant]=\"\n state ? id + '-option-' + (state?.id ?? state?.key) : undefined\n \"\n >\n <ng-container *ngFor=\"let item of options\">\n <!-- OPTION -->\n <ng-container *ngIf=\"!isGroup(item)\">\n <ng-template\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n\n <!-- OPTION GROUP -->\n <li\n class=\"gds-dropdown__options__label group\"\n [attr.data-thook]=\"thook + '-option-group'\"\n *ngIf=\"isGroup(item)\"\n >\n <!-- group label template (default or custom) -->\n <ng-template\n *ngTemplateOutlet=\"listGroupTemplate; context: { $implicit: item }\"\n ></ng-template>\n\n <ul [attr.aria-disabled]=\"item.disabled\" class=\"gds-reset\">\n <ng-container *ngFor=\"let option of castGroup(item).options\">\n <ng-template\n *ngTemplateOutlet=\"\n listItemTemplate;\n context: { $implicit: option }\n \"\n ></ng-template>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n\n <!-- TEMPLATE -->\n <ng-template #listItemTemplate let-option>\n <li\n #optionRefs\n *ngIf=\"!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + (option.id ?? option.key)\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n [nggvTooltip]=\"isOverflow(liElem) ? t(option.label) : undefined\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n basicOptionContentTpl;\n context: { $implicit: option }\n \"\n >\n </ng-template>\n </li>\n <!-- Checking overflow on custom templates do not work skip adding nggvToolTip if custom template is provided -->\n <li\n #optionRefs\n *ngIf=\"!!optionContentTpl\"\n tabindex=\"-1\"\n [id]=\"id + '-option-' + (option.id ?? option.key)\"\n class=\"gds-dropdown__options__label option\"\n role=\"option\"\n #liElem\n [attr.data-thook]=\"thook + '-option-' + option.key\"\n [attr.aria-disabled]=\"option.disabled\"\n [attr.aria-selected]=\"\n option.key === selectedValue?.key && !!selectedValue?.key\n \"\n [attr.aria-focus]=\"option.key === state?.key && !option.disabled\"\n (click)=\"updateState(option, $event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"optionContentTpl; context: { $implicit: option }\"\n >\n </ng-template>\n </li>\n </ng-template>\n\n <ng-template #listGroupTemplate let-item>\n <ng-container *ngIf=\"groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"groupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n <ng-container *ngIf=\"!groupLabelTpl\">\n <ng-template\n *ngTemplateOutlet=\"basicGroupLabelTpl; context: { $implicit: item }\"\n ></ng-template>\n </ng-container>\n </ng-template>\n\n <ng-template #basicOptionContentTpl let-option>\n <nggv-typeahead-highlight\n *ngIf=\"!!textToHighlight\"\n [textToHighlight]=\"textToHighlight\"\n [textContent]=\"t(option.label)\"\n >\n </nggv-typeahead-highlight>\n <ng-container *ngIf=\"!textToHighlight\">\n {{ t(option.label) }}\n </ng-container>\n </ng-template>\n\n <ng-template #basicGroupLabelTpl let-item>\n <div class=\"nggv-group-label\">{{ t(item.label) }}</div>\n </ng-template>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n Output,\n Self,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subscription } from 'rxjs'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\nimport {\n DropdownUtils,\n Option,\n OptionBase,\n OptionGroup,\n} from '@sebgroup/green-angular/src/v-angular/core'\n\n/**\n * A dropdown allows the user to select an option from a list.\n * Dropdowns enables users to make a quick selection of the available options for a specific entry.\n * https://designlibrary.sebgroup.com/components/component-dropdown\n */\n@Component({\n selector: 'nggv-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n standalone: false\n})\nexport class NggvDropdownComponent<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n extends NggvBaseControlValueAccessorComponent\n implements OnDestroy, OnChanges\n{\n /** Custom template for displaying options and groups. */\n @ContentChild('selectedTpl', { read: TemplateRef }) selectedContentTpl:\n | TemplateRef<OptionBase<T>>\n | undefined\n @ContentChild('optionTpl', { read: TemplateRef }) optionContentTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n @ContentChild('groupLabelTpl', { read: TemplateRef }) groupLabelTpl:\n | TemplateRef<OptionBase<any>>\n | undefined\n\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dropdown'\n\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /**\n * Sets the displayed size of the dropdown.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n /** Text shown before an option is selected. */\n @Input() placeholder?: string\n /** Specific value for aria-label. If not provided, label/labelTpl will be used. */\n @Input() ariaLabel?: string\n /** If the dropdown should close when scrolling the viewport. Default: false */\n @Input() closeOnScroll = false\n /** List of {@link Option} and {@link OptionGroup} listed when dropdown is expanded. */\n @Input() set options(value: OptionBase<T>[]) {\n // update options\n this._options = value\n // already has a null/undefined key\n const nullishOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == null)\n // if the dropdown is optional, add a null value to deselect option\n if (!this.required && !nullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n }\n\n // set default value and emit if there is only one option\n if (value.length === 1 && this.required && this.selectOnSingleOption) {\n const onlyOption = this.dropdownUtils.flattenOptions(value, false)[0]\n this.updateModel(onlyOption)\n return\n }\n\n // don't update local state if we shouldn't control nullish value and we cant find the selected value amongst the options\n const matchingOption = this.dropdownUtils\n .flattenOptions(value, false)\n .find((option) => option.key == this.ngControl?.value)\n if (!this.allowControlNullishOption && !matchingOption) return\n\n // Update local state\n this.writeValue(this.ngControl?.value)\n }\n\n get options(): OptionBase<T>[] {\n return this._options\n }\n\n /** The additional amount to show when option is scrolled into view. */\n @Input() scrollOffset = 24\n\n /**\n * Allow this component to add/ remove nullish options based on wether the control is required or not\n * Defaults to true.\n */\n @Input() allowControlNullishOption = true\n\n /** Text to highlight in option */\n @Input() textToHighlight?: string\n\n /**\n * If only one option exists in options[], default is to select it.\n * This input can be used to alter that behaviour so it doesn't automatically\n * select a value if it's the only one.\n * Defaults to true.\n */\n @Input() selectOnSingleOption = true\n\n /**\n * Used to control if the dropdown list should select the current active element, when Space is pressed on the keyboard.\n * Primary usage is for typeahead, where the should be able to write a filter query containing spaces,\n * but not select the current active element with Space.\n */\n @Input() selectWithSpace = true\n\n /**\n * Used to determine which changes should be handled by the dropdown.\n * If set to false, all changes will be handled by the dropdown.\n * If set to true, only changes that are distinct from the current value will be handled.\n * Defaults to true.\n */\n @Input() onlyHandleDistinctChanges = true\n\n /**\n * Emits changes of the expanded state of the dropdown\n */\n @Output() expandedChange = new EventEmitter<boolean>()\n\n /** @internal nullish option. */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.placeholder ?? '\\u00A0' }\n }\n\n /** The current expanded state of the dropdown options. */\n public expanded = false\n /** The current option selected based on numeric index. */\n public activeIndex = -1\n /** Subscribe if dropdown expanded to listen to click outside to close dropdown. */\n private onClickSubscription: Subscription | undefined\n /** Subscribe if dropdown expanded to listen to scroll outside to close dropdown. */\n private onScrollSubscription: Subscription | undefined\n\n public keyEvent: KeyboardEvent = {} as KeyboardEvent\n private _options: OptionBase<T>[] = []\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n protected dropdownUtils: DropdownUtils<K, V, T>,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.required?.currentValue !== undefined) {\n const isRequired = changes.required.currentValue\n // remove nullish option\n const hasNullishOption =\n this.dropdownUtils.flattenOptions(this._options, false)[0]?.key == null\n // if required, remove nullish option\n if (isRequired && hasNullishOption && this.allowControlNullishOption) {\n this._options = this._options.slice(1)\n return\n }\n // if not required, add nullish option\n if (!isRequired && !hasNullishOption && this.allowControlNullishOption) {\n this._options = [this.defaultNullishOption].concat(this._options)\n return\n }\n }\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onScrollSubscription?.unsubscribe()\n }\n\n /** @internal override to correctly set state from form value */\n writeValue(value: any): void {\n const options = this.dropdownUtils.flattenOptions(this._options, false)\n this.state = options.find((option) => option.key === value)\n }\n\n // ----------------------------------------------------------------------------\n // EVENTS\n // ----------------------------------------------------------------------------\n\n /** @internal */\n onSelectChange(option: T) {\n if (option.disabled) return\n this.updateModel(option)\n this.setExpanded(false)\n }\n\n // /**\n // * @internal\n // * Enter toggles the dropdown, home, end, and, arrows change the index.\n // * @param event fired containing which key was released.\n // */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n this.keyEvent = event\n }\n\n /**\n * Closes the dropdown on click outside.\n */\n subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n subscribeToOutsideScrollEvent() {\n this.onScrollSubscription = fromEvent(document, 'scroll').subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.toggleDropdown()\n this.onScrollSubscription?.unsubscribe()\n }\n },\n })\n }\n\n // ----------------------------------------------------------------------------\n // HELPERS\n // ----------------------------------------------------------------------------\n\n /**\n * Set the dropdown value to given option.\n * @param value the dropdown option to select.\n */\n private updateModel(value: T) {\n this.state = value\n this.onChange(value.key)\n }\n\n /** Toggle the expanded state of the dropdown options. */\n toggleDropdown() {\n this.setExpanded(!this.expanded)\n this.cdr.detectChanges()\n }\n\n /**\n * Set the expanded state of the dropdown options. If true the options are shown below the field.\n * Activate on click event to be able to close dropdown on click outside.\n * @param state the expanded state which to set.\n */\n setExpanded(state = true) {\n this.expanded = state\n this.expandedChange.emit(this.expanded)\n if (this.expanded) {\n this.subscribeToOutsideClickEvent()\n if (this.closeOnScroll) {\n this.subscribeToOutsideScrollEvent()\n }\n }\n if (!this.expanded) this.onTouched()\n }\n\n /* TYPE CASTS */\n\n /**\n * Typecast anything to an {@link Option}.\n * @param option the object to typecast.\n */\n castOption(option: any): T {\n return option\n }\n\n /**\n * Typecast anything to an {@link OptionGroup}.\n * @param group the object to typecast.\n */\n castGroup(group: any): OptionGroup<T> {\n return group\n }\n\n /* TYPE CHECKS */\n\n /**\n * Returns true if argument is an {@link Option}.\n * @param option the object to check.\n */\n isOption(option: OptionBase<T>): option is OptionGroup<T> {\n return !('options' in option)\n }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper dropdown-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n [onlyEmitDistinctChanges]=\"onlyHandleDistinctChanges\"\n [selectWithSpace]=\"selectWithSpace\"\n [dynamicPosition]=\"true\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n","import {\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n SkipSelf,\n} from '@angular/core'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { fromEvent, Subject, takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownListComponent } from '../../dropdown-list/dropdown-list.component'\n\n// Use dropdownList template and combine stylesheets\n@Component({\n selector: 'nggv-typeahead-dropdown-list',\n templateUrl: '../../dropdown-list/dropdown-list.component.html',\n styleUrls: [\n '../typeahead-dropdown-list/typeahead-dropdown-list.component.scss',\n '../../dropdown-list/dropdown-list.component.scss',\n ],\n standalone: false\n})\nexport class NggvTypeaheadDropdownListComponent\n extends NggvDropdownListComponent\n implements OnInit, OnDestroy\n{\n @Input() hostComponent!: NggvInputComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n private _destroy$ = new Subject<boolean>()\n\n constructor(\n @SkipSelf()\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n private renderer2: Renderer2,\n private element: ElementRef,\n ) {\n super(translocoScope, renderer2, element)\n }\n\n ngOnInit(): void {\n this.handleSelectedValueChanges()\n this.handleFocusChanges()\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n /** @Internal Subscribe to click outside dropdownList and input to close dropdownList */\n private subscribeToOutsideClickEvent() {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeUntil(this._destroy$))\n .subscribe({\n next: (event: Event) => {\n if (\n this.expanded &&\n !this.element.nativeElement.contains(event.target) &&\n !this.hostComponent.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setExpanded(false)\n this.onClickSubscription?.unsubscribe()\n }\n },\n })\n }\n\n /** @Internal Update state of the host-input to reflect the selected value */\n private handleSelectedValueChanges() {\n this.selectedValueChanged\n .pipe(takeUntil(this._destroy$))\n .subscribe((selected) => {\n if (this.hostComponent.inputRef) {\n this.hostComponent.state = `${this.formatSelected(selected)}`\n }\n })\n }\n\n /** @Internal Expand the dropdown when input receives focus. If no state, set empty string in input */\n private handleFocusChanges() {\n this.hostComponent.nggvFocus\n .asObservable()\n .pipe(takeUntil(this._destroy$))\n .subscribe(() => {\n if (!this.state) this.hostComponent.nggvInput.emit('')\n this.setExpanded(true)\n this.subscribeToOutsideClickEvent()\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n //If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n *\n * @param expanded boolean to set if dropdown is expanded\n */\n override setExpanded(expanded = true) {\n super.setExpanded(expanded)\n\n /**\n * Makes the typeahead dropdown as wide as the host component\n */\n this.renderer2.setStyle(\n this.element.nativeElement,\n 'width',\n `${this.hostComponent.element.nativeElement.offsetWidth}px`,\n )\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { takeUntil } from 'rxjs'\n\nimport { OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../../dropdown.component'\n\n@Component({\n selector: 'nggv-typeahead-input',\n templateUrl: './typeahead-input.component.html',\n styleUrls: ['./typeahead-input.component.scss'],\n standalone: false\n})\nexport class NggvTypeaheadInputComponent\n extends NggvInputComponent\n implements OnInit, OnDestroy\n{\n /** Reference to the host dropdown */\n @Input() hostComponent!: NggvDropdownComponent\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n get dropdownButton(): HTMLElement {\n return this.hostComponent.inputRef?.nativeElement\n }\n\n /** Boolean to indicate wether the dropdown is expanded or not, to apply appropriate styling */\n expanded = false\n\n /** Used to determine the height of the inputin html */\n buttonHeight?: number\n\n /** @internal Used to determine wether the input has been moved or not */\n inputMoved = false\n\n constructor(\n public element: ElementRef,\n private renderer2: Renderer2,\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr, element)\n super.ngOnInit()\n }\n\n ngOnInit() {\n this.autocomplete = 'off'\n this.debounceTime = 0\n this.hostComponent.selectOnSingleOption = false\n\n this.handleExpandedChange()\n }\n\n /**\n * @internal\n * Allow space to be inputted as text\n * @param event fired containing which key was released.\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n if (event.code === 'Space' && this.expanded) {\n event.preventDefault()\n }\n }\n\n /**\n * @internal\n * First time the dropdown is expanded, move the input sp it becomes a child of the dropdown button\n * to better reflect semantics and styling.\n */\n private moveInput() {\n // Workaround to execute code in setTimeout due to hooks management etc.\n setTimeout(() => {\n // Only move if parent dropdown is found\n if (this.dropdownButton) {\n this.renderer2.appendChild(\n this.dropdownButton.querySelector('button'),\n this.element.nativeElement,\n )\n this.inputMoved = true\n }\n }, 0)\n }\n\n /**\n * @internal\n * When dropdown is expanded, focus on the input. If a value is selected, set it in the input.\n * When the dropdown is collapsed, empty the input from text.\n */\n private handleExpandedChange() {\n this.hostComponent.expandedChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((state) => {\n this.expanded = state\n\n // Calling this function from onInit caused issues when DOM has not fully been initialized because of\n // different CSS used to hide (but not remove) from DOM\n if (!this.inputMoved) this.moveInput()\n\n // Get the height of the parent button so the input can be explicitly set to the same height since it's absolutely positioned\n this.buttonHeight =\n this.dropdownButton?.getBoundingClientRect().height || 32 // Default to 2em;\n\n if (this.expanded) {\n // Weird workaround for setting focus. Didn't set focus, but wrapping in setTimeout solved it.\n // See suggestion here: https://github.com/ionic-team/stencil/issues/3772#issuecomment-1292599609\n setTimeout(() => this.setFocus())\n // Format and interpolate result since return type can be other than string from the formatter\n const formattedValue = `${this.formatSelected(this.hostComponent.state)}`\n this.setInput(formattedValue, false)\n } else this.setInput('', true)\n })\n }\n\n /**\n * @internal Formats the selected option to display in the input. Interpolate the returned value\n * since we don't know the return type or label type.\n * @param value The selected value\n * @returns The formatted value\n */\n private formatSelected(value: OptionBase<any>) {\n if (value?.key == null) return ''\n // If no formatter exists, return the label or empty string\n if (!this.selectedFormatter) return value.label ?? ''\n // If a formatter exists, use it\n return this.selectedFormatter(value) ?? ''\n }\n\n /**\n * Sets the input programmatically instead of native HTML input event.\n * @param input\n */\n private setInput(input: string, triggerFilter: boolean) {\n this.state = input\n if (triggerFilter) {\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n }\n}\n","<ng-container>\n <div\n class=\"input-wrapper\"\n [ngClass]=\"{ expanded: expanded, collapsed: !expanded }\"\n [ngStyle]=\"{ 'height.px': buttonHeight }\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- INPUT FIELD -->\n <div class=\"input-group\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvTypeaheadDropdownListComponent } from './typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadHighlightComponent } from './typeahead-highlight/typeahead-highlight.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@NgModule({\n declarations: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n imports: [CommonModule, NggvTooltipModule],\n exports: [\n NggvTypeaheadHighlightComponent,\n NggvTypeaheadInputComponent,\n NggvTypeaheadDropdownListComponent,\n ],\n})\nexport class NggvTypeaheadModule {}\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvDropdownListComponent } from './dropdown-list/dropdown-list.component'\nimport { NggvDropdownComponent } from './dropdown.component'\nimport { NggvTypeaheadModule } from './typeahead/typeahead.module'\n\n@NgModule({\n declarations: [NggvDropdownComponent, NggvDropdownListComponent],\n imports: [\n CommonModule,\n NggCoreWrapperModule,\n NggvTypeaheadModule,\n NggvTooltipModule,\n NggvI18nModule,\n ],\n exports: [NggvDropdownComponent, NggvDropdownListComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvDropdownModule {}\n","import {\n ComponentRef,\n Directive,\n ElementRef,\n EventEmitter,\n Host,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n ViewContainerRef,\n} from '@angular/core'\nimport {\n distinctUntilChanged,\n from,\n OperatorFunction,\n Subject,\n Subscription,\n takeUntil,\n tap,\n withLatestFrom,\n} from 'rxjs'\n\nimport { Option, OptionBase } from '@sebgroup/green-angular/src/v-angular/core'\nimport { NggvInputComponent } from '@sebgroup/green-angular/src/v-angular/input'\nimport { NggvDropdownComponent } from '../dropdown.component'\nimport { NggvTypeaheadDropdownListComponent } from '../typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component'\nimport { NggvTypeaheadInputComponent } from './typeahead-input/typeahead-input.component'\n\n@Directive({\n selector: 'nggv-input[nggvTypeahead], nggv-dropdown[nggvTypeahead]',\n standalone: true,\n})\nexport class NggvTypeaheadDirective<\n K = string | null | undefined,\n V = string | null | undefined,\n T extends Option<K, V> = Option<K, V>,\n >\n implements OnInit, OnDestroy\n{\n /** Function that filter the inputvalue */\n @Input() set nggvTypeahead(value: OperatorFunction<string, T[]> | undefined) {\n this.typeaheadFunction = value\n\n // If inputsubscription already exists, unsubscribe and subscribe again\n if (this.inputSubscription$) {\n this.inputSubscription$?.unsubscribe()\n this.inputSubscription$ = undefined\n this.handleInputChanges()\n }\n }\n\n /** Formats each item that is displayed as an option. Only applies format if the option if it implement Option interface. */\n @Input() resultFormatter?: (option: OptionBase<any>) => string\n\n /** Formats the selected item in the input when dropdown is opened. If no function is provided, it will display the value of the selected objects label property */\n @Input() selectedFormatter?: (selected: OptionBase<any>) => string\n\n /** Allow option to be unselected in the dropdown even if it is required. Defaults to true */\n @Input() allowUnselect = true\n\n /** Custom label for the unselect option */\n @Input() unselectLabel?: string\n\n /** Custom label for the empty option */\n @Input() emptyOptionLabel?: string\n\n /** Emits the entered string the user has written in the input */\n @Output() filterPhraseChange = new EventEmitter<string>()\n\n /** Forward text inputs to apply the filter function*/\n @HostListener('nggvInput', ['$event']) onNggvInput(event: any) {\n this.inputValue$.next(event)\n }\n\n /** Helper to the determine if the host is nggv-drodpown or nggv-input*/\n get hostIsDropdown() {\n return !!this.hostDropdown\n }\n\n /** Predefined options */\n get defaultNullishOption(): OptionBase<any> {\n return { key: null, label: this.unselectLabel || '\\u00A0' }\n }\n\n get emptyOption(): OptionBase<any> {\n return {\n key: null,\n label: this.emptyOptionLabel || 'label.nomatchingoptions',\n disabled: true,\n }\n }\n\n /** Name of the component. nggv-dropdown if NggvDropdownComponent or nggv-input if NggvInputComponent */\n get localName() {\n return this.element.nativeElement.localName\n }\n\n dropdownListComponent!: ComponentRef<NggvTypeaheadDropdownListComponent>\n inputComponent!: ComponentRef<NggvTypeaheadInputComponent>\n\n private typeaheadFunction?: OperatorFunction<string, T[]>\n private inputValue$ = new Subject<any>()\n private inputSubscription$?: Subscription\n private onDestroy$ = new Subject<boolean>()\n\n constructor(\n private viewContainerRef: ViewContainerRef,\n private element: ElementRef,\n @Optional() @Host() private hostDropdown: NggvDropdownComponent,\n @Optional() @Host() private hostInput: NggvInputComponent,\n ) {}\n\n ngOnInit() {\n this.handleInputChanges()\n\n if (this.hostIsDropdown) this.createInput()\n else this.createDropdownList()\n }\n\n ngOnDestroy(): void {\n this.onDestroy$.next(true)\n this.onDestroy$.complete()\n }\n\n /**\n * @internal\n * Core functionality of typeahead. Emits input, then filters the result based on the supplied function\n * If directive is applied on nggv-input, manually show or hide options in the list.\n * If directive is applied on nggv-dropdown, let the dropdown itself choose when to open or close\n */\n private handleInputChanges() {\n this.inputSubscription$ = this.inputValue$\n .pipe(\n takeUntil(this.onDestroy$),\n distinctUntilChanged(),\n tap((inputValue) => this.filterPhraseChange.emit(inputValue)),\n this.typeaheadFunction ? this.typeaheadFunction : () => from([]),\n withLatestFrom(this.inputValue$),\n )\n .subscribe(([filteredValues, input]) =>\n this.setOptions(filteredValues, input),\n )\n\n // Trigger the pipe when this function have been called\n this.inputValue$.next('')\n }\n\n /**\n * @internal\n * Creates a nggv-input if the host itself is not a text-input\n * Set styles to not display the input when closed\n * Trigger filtering when changes occur in the field\n * */\n private createInput() {\n // Create the input component\n this.inputComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadInputComponent,\n )\n // Forward necessary info to component\n this.inputComponent.setInput('hostComponent', this.hostDropdown)\n this.inputComponent.setInput('selectedFormatter', this.selectedFormatter)\n this.inputComponent.setInput('resultFormatter', this.resultFormatter)\n // Listen to value changes\n this.inputComponent.instance.nggvInput\n .pipe(takeUntil(this.onDestroy$))\n .subscribe((inputValue) => this.inputValue$.next(inputValue))\n }\n\n /** @internal Creates a nggv-dropdown-list if the host itself is a nggv-input */\n private createDropdownList() {\n this.dropdownListComponent = this.viewContainerRef.createComponent(\n NggvTypeaheadDropdownListComponent,\n )\n this.dropdownListComponent.setInput('hostComponent', this.hostInput)\n }\n\n /**\n * @internal Sets the options the user can select.\n * If the host is a nggv-dropdown, utilize the dropdown itself to display the options\n * If the host is a nggv-input, use the created nggv-dropdown-list to displaye the options\n * @param filteredValues The options to display in the dropdown\n * @param emptyInput If the input is empty\n */\n private setOptions(filteredValues: T[], input: string) {\n if (!filteredValues) return\n // Conditionally add empty or nullish option if it's allowed, the input is empty and does not already contain nullish\n const allowNullish =\n this.allowUnselect &&\n !input &&\n !(\n Object.keys(filteredValues[0] ?? {}).includes('key') &&\n filteredValues[0]?.key == null\n )\n if (filteredValues.length === 0) {\n filteredValues = [this.emptyOption]\n } else if (allowNullish) {\n filteredValues = [this.defaultNullishOption].concat(filteredValues)\n }\n\n if (this.hostIsDropdown) {\n // Add nullish option when no input is written (or when dropdown is epanded and has a selection)\n this.hostDropdown.allowControlNullishOption = false\n this.hostDropdown.options = this.formatOptions(filteredValues)\n this.hostDropdown.textToHighlight = `${input || ''}`\n this.hostDropdown.onlyHandleDistinctChanges = false\n this.hostDropdown.selectWithSpace = false\n this.hostDropdown.detectChanges()\n return\n }\n\n if (!this.hostIsDropdown) {\n this.dropdownListComponent.setInput(\n 'options',\n this.formatOptions(filteredValues),\n )\n this.dropdownListComponent.setInput('textToHighlight', `${input || ''}`)\n }\n }\n\n /**\n * @internal Formats the available options to display in the dropdown list\n * @param options The selected value\n * @returns The formatted value\n */\n private formatOptions(options: T[]): OptionBase<any>[] {\n if (!options) return []\n if (!this.resultFormatter) return options\n return options.map((value) =>\n value?.label ? this.resultFormatter?.(value) : value,\n )\n }\n}\n","import { Directive, Input, OnInit } from '@angular/core'\nimport { RouterLink } from '@angular/router'\n\n/** Directive overrides routerLink attribute to allow external links. */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'a[routerLink]',\n standalone: false\n})\nexport class NggvExternalLinkDirective implements OnInit {\n /** If set to true, links will trigger a location change rather than an internal history push. */\n @Input() external = false\n\n /**\n * Creates a new ExternalLinkDirective\n * @param link extracted routerLink metadata\n */\n constructor(protected link: RouterLink) {}\n\n ngOnInit() {\n if (!this.external) return\n this.link.onClick = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n window.location.href = this.link['routerLink']?.toString() || ''\n return false\n }\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NggvExternalLinkDirective } from './external-link.directive'\n\n@NgModule({\n declarations: [NggvExternalLinkDirective],\n imports: [CommonModule],\n exports: [NggvExternalLinkDirective],\n})\nexport class NggvExternalLinkDirectiveModule {}\n","import { Inject, Injectable, isDevMode, NgModule } from '@angular/core'\nimport {\n HashMap,\n provideTransloco,\n provideTranslocoMissingHandler,\n TRANSLOCO_TRANSPILER,\n TranslocoLoader,\n TranslocoMissingHandler,\n TranslocoMissingHandlerData,\n TranslocoModule,\n TranslocoTranspiler,\n} from '@jsverse/transloco'\nimport { delay, lastValueFrom, of } from 'rxjs'\n\nimport defaultLang from './i18n.json'\n\n@Injectable()\nexport class NggvMissingHandler implements TranslocoMissingHandler {\n constructor(\n @Inject(TRANSLOCO_TRANSPILER) private transpiler: TranslocoTranspiler,\n ) {}\n handle(key: string, _: TranslocoMissingHandlerData, params: HashMap) {\n const keyWithoutLocale = key.charAt(2) === '.' ? key.substring(3) : key\n const withoutScope = keyWithoutLocale.replace(\n /^((?:\\w+)(?<!label|heading|button|alt|link|title|href|fieldhelp|error|text|image|list)(?:\\.))/,\n '',\n )\n const transpileParams = {\n value: defaultLang[keyWithoutLocale as keyof typeof defaultLang],\n params,\n translation: {},\n key: keyWithoutLocale,\n }\n const transpiledKey = this.transpiler.transpile(transpileParams)\n return transpiledKey || withoutScope\n }\n}\n\nconst en = {\n 'error.fieldinputmask': 'Invalid value pattern',\n 'error.fieldrequired': 'Field must have content',\n 'error.fieldmaxlength':\n 'Field content should not be longer than {{requiredLength}} characters',\n 'label.defaultlabel': 'Label',\n 'label.maxlength': 'characters left',\n 'label.optional': 'Optional',\n}\n\nconst sv = {\n 'error.fieldinputmask': 'Icke giltigt tecken mönster',\n 'error.fieldrequired': 'Fältet får inte lämnas tomt',\n 'error.fieldmaxlength':\n 'Fältinnehållet måste vara längre än {{requiredLength}} tecken',\n 'label.maxlength': 'tecken kvar',\n}\nclass TranslocoInlineLoader implements TranslocoLoader {\n getTranslation(lang: string) {\n if (lang === 'sv') {\n return lastValueFrom(of(sv).pipe(delay(1500)))\n }\n return lastValueFrom(of(en).pipe(delay(500)))\n }\n}\n\n@NgModule({\n providers: [\n provideTransloco({\n config: {\n availableLangs: ['en', 'sv'],\n defaultLang: 'en',\n // Remove this option if your application doesn't support changing language in runtime.\n reRenderOnLangChange: true,\n prodMode: !isDevMode(),\n },\n loader: TranslocoInlineLoader,\n }),\n provideTranslocoMissingHandler(NggvMissingHandler),\n ],\n exports: [TranslocoModule],\n})\nexport class NggvI18nModule {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule, Pipe, PipeTransform } from '@angular/core'\nimport {\n HashMap,\n Translation,\n TRANSLOCO_FALLBACK_STRATEGY,\n TRANSLOCO_INTERCEPTOR,\n TRANSLOCO_MISSING_HANDLER,\n TRANSLOCO_TRANSPILER,\n TranslocoConfig,\n TranslocoFallbackStrategy,\n TranslocoInterceptor,\n TranslocoMissingHandler,\n TranslocoTranspilerFunction,\n} from '@jsverse/transloco'\n\n@Pipe({\n name: 'transloco',\n standalone: false\n})\nexport class TranslocoMockPipe implements PipeTransform {\n transform = (value: number): number => value\n}\n\nexport class TranslocoMockTranspiler implements TranslocoTranspilerFunction {\n transpile = (..._args: string[]) => ''\n}\n\nexport class TranslocoMockMissingHandler implements TranslocoMissingHandler {\n handle = (key: string, _: TranslocoConfig, _params: HashMap) => key\n}\n\nexport class TranslocoMockStrategy implements TranslocoFallbackStrategy {\n getNextLangs = (_failedLang: string): any => ''\n}\n\nexport class TranslocoMockInterceptor implements TranslocoInterceptor {\n preSaveTranslation(translation: Translation, _lang: string): Translation {\n return translation\n }\n\n preSaveTranslationKey(_key: string, value: string, _lang: string): string {\n return value\n }\n}\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TranslocoMockPipe],\n exports: [TranslocoMockPipe],\n providers: [\n {\n provide: TRANSLOCO_TRANSPILER,\n useClass: TranslocoMockTranspiler,\n },\n {\n provide: TRANSLOCO_INTERCEPTOR,\n useClass: TranslocoMockInterceptor,\n },\n {\n provide: TRANSLOCO_FALLBACK_STRATEGY,\n useClass: TranslocoMockStrategy,\n },\n {\n provide: TRANSLOCO_MISSING_HANDLER,\n useClass: TranslocoMockMissingHandler,\n deps: [TRANSLOCO_TRANSPILER],\n },\n ],\n})\nexport class NggvI18nTestModule {}\n","import '@sebgroup/green-core/components/icon/icons/circle-info.js'\n\nimport { Component, HostBinding, Input } from '@angular/core'\n\n/**\n * A button that will present an explanation to a problem/question.\n * https://designlibrary.sebgroup.com/components/component-contextual-help-button\n */\n@Component({\n selector: 'nggv-info-circle',\n templateUrl: './info-circle.component.html',\n styleUrls: ['./info-circle.component.scss'],\n standalone: false\n})\nexport class NggvInfoCircleComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'info'\n\n /**\n * Text to display in tooltip when mouse hovers over icon.\n */\n @Input() info!: string\n\n // /** @internal */\n // infoCircle: IconDefinition = faInfoCircle\n}\n","<svg [nggvTooltip]=\"info\">\n <path\n d=\"M10.75 11H12L12 16.25M21.25 12C21.25 17.1086 17.1086 21.25 12 21.25C6.89137 21.25 2.75 17.1086 2.75 12C2.75 6.89137 6.89137 2.75 12 2.75C17.1086 2.75 21.25 6.89137 21.25 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n fill=\"none\"\n />\n <path\n d=\"M11.375 8C11.375 8.34518 11.6548 8.625 12 8.625C12.3452 8.625 12.625 8.34518 12.625 8C12.625 7.65482 12.3452 7.375 12 7.375C11.6548 7.375 11.375 7.65482 11.375 8Z\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n stroke-width=\"0.25\"\n />\n</svg>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvTooltipModule } from '@sebgroup/green-angular/src/v-angular/tooltip'\nimport { NggvInfoCircleComponent } from './info-circle.component'\n\n@NgModule({\n declarations: [NggvInfoCircleComponent],\n imports: [CommonModule, NggCoreWrapperModule, NggvTooltipModule],\n exports: [NggvInfoCircleComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvInfoCircleModule {}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n} from '@angular/core'\nimport { NgControl, UntypedFormControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\nimport { Subject } from 'rxjs'\nimport { debounceTime, takeUntil } from 'rxjs/operators'\n\nimport type { InputmaskOptions } from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Input fields allow users to add and edit text.\n * https://designlibrary.sebgroup.com/components/component-input\n */\n@Component({\n selector: 'nggv-input',\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n standalone: false\n})\nexport class NggvInputComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /**\n * Adding .gds-form-item as a class to host element\n */\n @HostBinding('class') class = 'gds-form-item'\n /**\n * Adding .gds-form-item--small class based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'input'\n /**\n * Type of input field. Should avoid types that modify field too much such as range.\n */\n @Input() type = 'text'\n /**\n * Text shown before input has a written value.\n */\n @Input() placeholder?: string\n /**\n * If set to \"on\", hint for form autofill feature.\n */\n @Input() autocomplete = 'on'\n /**\n * If set to true, the value will not be editable.\n */\n @Input() readonly = false\n /**\n * If set to true, enables the Angular template-driven email validator.\n */\n @Input() email = false\n /**\n * Minimum value required for numeric input types.\n */\n @Input() min = 0\n /**\n * Maximum value required for numeric input types.\n */\n @Input() max = Number.MAX_SAFE_INTEGER\n /**\n * Incremental values that are valid for numeric input types.\n */\n @Input() step = 1\n /**\n * Minimum length (number of characters) of value.\n */\n @Input() set minLength(length: number) {\n this._minlength = length\n }\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n }\n get minlength(): number {\n return this._minlength\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.writeValue(this.state)\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.writeValue(this.state)\n }\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Wether to show label that tells how many characters are still left to be entered. Will only be set if maxLength is also set */\n private _showCharacterCountDown = true\n @Input() set showCharacterCountdown(option: boolean) {\n this._showCharacterCountDown = option\n }\n get showCharacterCountdown(): boolean {\n return this._showCharacterCountDown && this.hasMaxLength\n }\n\n /** Pattern the value must match to be valid. */\n @Input() pattern = ''\n /** Amount of time to wait until emitting (nggvINput) event */\n @Input() debounceTime = 500\n\n /** Settings for input mask if requested */\n private _inputMask!: InputmaskOptions<any>\n @Input() set inputMask(newInputMask: InputmaskOptions<any>) {\n // Hide input field\n this.hideInput$.next(true)\n this.cdr.detectChanges()\n this._inputMask = newInputMask\n\n // Show input field to reload input-mask settings upon update\n setTimeout(() => {\n this.hideInput$.next(false)\n this.cdr.detectChanges()\n }, 200)\n }\n get inputMask(): InputmaskOptions<any> {\n return this._inputMask\n }\n\n /** Emits every time the value of the inner input field changes, independantly of updates on the formcontroller */\n @Output() nggvInput = new EventEmitter<any>()\n\n private _formControl = new UntypedFormControl()\n get control(): UntypedFormControl {\n return (this.ngControl?.control as UntypedFormControl) ?? this._formControl\n }\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n /** Toggler for showing or hiding the input field */\n hideInput$ = new Subject<boolean>()\n\n protected inputChange$ = new Subject<any>()\n protected _destroy$ = new Subject<boolean>()\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n public element: ElementRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this.inputChange$\n .pipe(takeUntil(this._destroy$), debounceTime(this.debounceTime))\n .subscribe((inputValue) => {\n this.nggvInput.emit(inputValue)\n })\n }\n\n ngOnDestroy(): void {\n this._destroy$.next(true)\n this._destroy$.complete()\n }\n\n writeValue(value: any) {\n // maxLength will only work with string values\n if (\n value?.length &&\n value.length > this.maxlength &&\n this.control.touched\n ) {\n // cut value to match max length\n this.state = this.cutTextAfterMaxLength(value)\n if (value.length !== this.state.length) {\n this.onChange(this.state)\n }\n // emit value\n } else {\n // update state\n this.state = value\n }\n this.cdr.detectChanges()\n }\n\n cutTextAfterMaxLength(value: any): any {\n if (typeof value === 'string') {\n return value.substring(0, this.maxlength)\n }\n return value\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLInputElement).value\n this.onChange(this.state)\n this.inputChange$.next(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-input'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div\n class=\"form-info description hide-if-empty\"\n *ngIf=\"description && descriptionIsVisible\"\n>\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-container *ngIf=\"!inputMask\">\n {{ state }}\n </ng-container>\n <ng-container *ngIf=\"!!inputMask\">\n {{ state | nggvInputMaskFormat: inputMask }}\n </ng-container>\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\" [class.nggv-field--error]=\"invalid\">\n <div class=\"input-group-prefix hide-if-empty\">\n <ng-content select=\"[slot='prefix']\"></ng-content>\n </div>\n\n <!-- INPUT FIELD -->\n <div class=\"input-group\" *ngIf=\"!inputMask\">\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n [attr.type]=\"type\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [attr.email]=\"email\"\n [attr.aria-describedby]=\"id + '-message'\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [pattern]=\"pattern\"\n title=\"\"\n [disabled]=\"disabled\"\n [autocomplete]=\"autocomplete\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n </div>\n\n <!-- INPUT FIELD WITH MASK -->\n <div\n class=\"input-group\"\n *ngIf=\"!!inputMask && (hideInput$ | async) === false\"\n >\n <input\n #input\n [id]=\"id + '-input'\"\n class=\"gds-field\"\n autocomplete=\"off\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [readOnly]=\"readonly\"\n [attr.role]=\"role\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [attr.aria-describedby]=\"id + '-message'\"\n [nggvInputMask]=\"inputMask\"\n title=\"\"\n [formControl]=\"control\"\n />\n </div>\n\n <div class=\"input-group-suffix hide-if-empty\">\n <ng-content select=\"[slot='suffix']\"></ng-content>\n <ng-content></ng-content>\n </div>\n </div>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"!inputMask && hasMaxLength && showCharacterCountdown\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { NggvInputComponent } from './input.component'\n\n@NgModule({\n declarations: [NggvInputComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvInputMaskModule,\n ReactiveFormsModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvInputComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvInputModule {}\n","import { Pipe, PipeTransform } from '@angular/core'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskStatic =\n (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n _Inputmask\n\n@Pipe({\n name: 'nggvInputMaskFormat',\n standalone: false\n})\nexport class InputMaskFormatPipe implements PipeTransform {\n transform<T = any>(value: any, options: InputmaskOptions<T>): any {\n if (!value) return value\n return InputmaskStatic.format(value, options)\n }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport class InputMaskConfig {\n isAsync = false\n inputSelector = 'input'\n}\n\nexport const INPUT_MASK_CONFIG = new InjectionToken<InputMaskConfig>(\n 'InputMaskConfig',\n)\n","import { isPlatformServer } from '@angular/common'\nimport {\n AfterViewInit,\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Optional,\n PLATFORM_ID,\n Renderer2,\n Self,\n} from '@angular/core'\nimport {\n AbstractControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n} from '@angular/forms'\nimport _Inputmask from 'inputmask'\n\nimport type Inputmask from 'inputmask'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\n\nimport type { InputmaskOptions } from './input-mask.types'\n\nconst InputmaskConstructor =\n (_Inputmask as unknown as { default?: Inputmask.Static }).default ||\n _Inputmask\n\n@Directive({\n selector: '[nggvInputMask]',\n standalone: false\n})\nexport class NggvInputMaskDirective<T = any>\n implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator\n{\n /** Input settings of directive */\n @Input() nggvInputMask: InputmaskOptions<T> = {}\n\n inputMaskPlugin: Inputmask.Instance | undefined\n nativeInputElement: HTMLInputElement | undefined\n defaultInputMaskConfig = new InputMaskConfig()\n\n private mutationObserver: MutationObserver | undefined\n\n constructor(\n @Optional() @Self() public ngControl: NgControl,\n @Inject(INPUT_MASK_CONFIG) config: InputMaskConfig,\n @Inject(PLATFORM_ID) private platformId: string,\n private elementRef: ElementRef<HTMLInputElement | any>,\n private renderer: Renderer2,\n private ngZone: NgZone,\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this\n }\n this.setNativeInputElement(config)\n }\n\n @HostListener('input', ['$event.target.value'])\n onInput = (_: any) => {\n // Empty method\n }\n\n @HostListener('blur', ['$event.target.value'])\n onTouched = (_: any) => {\n // Empty method\n }\n\n @HostListener('keyup', ['$event'])\n onKeyUp(event: KeyboardEvent) {\n // Trigger \"onInput\" when pressing delete or backspace, when input is focused\n if (['Delete', 'Backspace'].includes(event.key)) {\n this.elementRef.nativeElement.dispatchEvent(\n new Event('input', {\n bubbles: true,\n cancelable: true,\n }),\n )\n }\n }\n\n ngOnInit() {\n if (this.control) {\n this.control.setValidators(\n this.control.validator\n ? [this.control.validator, this.validate]\n : [this.validate],\n )\n\n this.control.updateValueAndValidity()\n }\n }\n\n ngOnDestroy(): void {\n this.inputMaskPlugin?.remove()\n this.mutationObserver?.disconnect()\n }\n\n initInputMask() {\n if (\n isPlatformServer(this.platformId) ||\n !this.nativeInputElement ||\n !Object.keys(this.nggvInputMask ?? {}).length\n ) {\n return\n }\n\n this.inputMaskPlugin = this.ngZone.runOutsideAngular(() =>\n new InputmaskConstructor(this.inputMaskOptions).mask(\n this.nativeInputElement as HTMLInputElement,\n ),\n )\n\n if (this.control) {\n setTimeout(() => {\n this.control!.updateValueAndValidity()\n })\n }\n }\n\n ngAfterViewInit() {\n this.initInputMask()\n }\n\n get inputMaskOptions(): Inputmask.Options {\n const { parser, ...options } = this.nggvInputMask\n return options\n }\n\n writeValue(value: string): void {\n if (this.nativeInputElement) {\n this.renderer.setProperty(this.nativeInputElement, 'value', value ?? '')\n }\n }\n\n registerOnChange(fn: (_: T | null) => void): void {\n // Use injected parser from settings to modify value\n // of users desire\n this.onInput = (value) => {\n const parser = this.nggvInputMask?.parser\n const newValue = parser && value ? parser(value) : value\n fn(newValue)\n }\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn\n }\n\n validate = (control: AbstractControl): { [key: string]: any } | null =>\n !control.value || !this.inputMaskPlugin || this.inputMaskPlugin.isValid()\n ? null\n : { invalidformat: true }\n\n setDisabledState(disabled: boolean): void {\n if (this.nativeInputElement) {\n this.renderer.setProperty(this.nativeInputElement, 'disabled', disabled)\n }\n }\n\n private get control(): AbstractControl | null | undefined {\n return this.ngControl?.control\n }\n\n private setNativeInputElement(config: InputMaskConfig) {\n if (this.elementRef.nativeElement.tagName === 'INPUT') {\n this.nativeInputElement = this.elementRef.nativeElement\n } else {\n this.defaultInputMaskConfig = {\n ...this.defaultInputMaskConfig,\n ...config,\n }\n if (this.defaultInputMaskConfig.isAsync) {\n // Create an observer instance linked to the callback function\n this.mutationObserver = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n const nativeInputElement =\n this.elementRef.nativeElement.querySelector(\n this.defaultInputMaskConfig.inputSelector,\n )\n if (nativeInputElement) {\n this.nativeInputElement = nativeInputElement\n this.mutationObserver?.disconnect()\n this.initInputMask()\n }\n }\n }\n })\n\n // Start observing the target node for configured mutations\n this.mutationObserver.observe(this.elementRef.nativeElement, {\n childList: true,\n subtree: true,\n })\n } else {\n this.nativeInputElement = this.elementRef.nativeElement.querySelector(\n this.defaultInputMaskConfig.inputSelector,\n )\n }\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\n\nimport { INPUT_MASK_CONFIG, InputMaskConfig } from './config'\nimport { InputMaskFormatPipe } from './input-mask-format.pipe'\nimport { NggvInputMaskDirective } from './input-mask.directive'\n\n@NgModule({\n declarations: [NggvInputMaskDirective, InputMaskFormatPipe],\n exports: [NggvInputMaskDirective, InputMaskFormatPipe],\n providers: [\n {\n provide: INPUT_MASK_CONFIG,\n useClass: InputMaskConfig,\n },\n ],\n})\nexport class NggvInputMaskModule {\n static forRoot(\n config?: Partial<InputMaskConfig>,\n ): ModuleWithProviders<NggvInputMaskModule> {\n return {\n ngModule: NggvInputMaskModule,\n providers: [{ provide: INPUT_MASK_CONFIG, useValue: config }],\n }\n }\n}\n","import { InputmaskOptions } from './input-mask.types'\n\nexport const createMask = <T>(\n options: string | InputmaskOptions<T>,\n): InputmaskOptions<T> =>\n typeof options === 'string' ? { mask: options } : options\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n interface Window {\n /** Counter for unique identifiers */\n nggv: {\n ids: { [namespace: string]: number; default: number }\n nextId: (namespace?: string) => string\n }\n }\n}\n\n;(() => {\n // Make sure there is an incremental ID each component can use\n if (typeof window !== 'undefined' && !window.nggv) {\n window.nggv = {\n ids: { default: -1 },\n nextId(namespace = 'default'): string {\n let id = this.ids[namespace] || 0\n if (typeof this.ids[namespace] === 'number') id++\n this.ids[namespace] = id\n return namespace === 'default'\n ? `nggv-${id}`\n : `nggv-${namespace}-${id}`\n },\n }\n }\n})()\n","import {\n ConfigurableFocusTrap,\n ConfigurableFocusTrapFactory,\n} from '@angular/cdk/a11y'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core'\n\nimport { DialogButtons } from '../modal.types'\n\nexport interface DialogEvent<T = any> {\n original: Event | undefined\n payload: T | undefined\n}\n\n@Component({\n selector: 'nggv-dialog',\n templateUrl: './dialog.component.html',\n styleUrls: ['./dialog.component.scss'],\n exportAs: 'dialog',\n standalone: false\n})\nexport class NggvDialogComponent implements OnInit, OnDestroy {\n private configurableFocusTrap: ConfigurableFocusTrap\n\n @ViewChild('dialog') dialogRef: ElementRef | undefined\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'dialog'\n /** @internal */\n @HostBinding('class.gds-modal-dialog') baseClass = true\n /** @internal Defines the default visibility state of the dialog. */\n private _shown = false\n @Input() set shown(value: boolean) {\n this._shown = value\n this.enableFocusTrap()\n if (value) {\n this.hideOverflow()\n } else {\n this.resetOverflow()\n }\n }\n get shown() {\n return this._shown\n }\n\n /** @internal */\n @HostBinding('attr.aria-hidden') get ariaHidden() {\n return !this.shown\n }\n /** Defines the default visibility state of the dialog. */\n @Input() initiallyShown = false\n /** Sets modal heading. Will be translated (using transloco) if the string matches a cms key. */\n @Input() heading!: string\n /**\n * Sets modal title. Will be translated (using transloco) if the string matches a cms key.\n * @deprecated - use heading instead.\n */\n @Input() title = 'Attention'\n /** Sets content body and can contain html code. The content body can also be set by nesting children to the dialog tag. */\n @Input() content?: string\n /** Defines if dialog should close on action. */\n @Input() autoClose = true\n /** An array of event payloads that will be added to every click context menu item click. */\n @Input() payload: any = {}\n\n @Input() dialogTitleId!: string\n /** Pass the null if you don't want dialog body to be announced by the screen reader */\n @Input() dialogBodyId!: string | null\n /** It gives an ability for parent component to control if modal should be closed on esc button click. */\n @Input() closeModalOnEscape = true\n /** Aria label for the Close button with \"X\" icon, in the header */\n @Input() closeButtonAriaLabel?: string\n\n _buttons: DialogButtons | undefined\n /** Buttons are defined as a key-value pair where key is one of \"positive|neutral|negative\" and value is the button label. */\n @Input() set buttons(buttons: DialogButtons) {\n this._buttons = buttons\n }\n // /** @internal */\n // closeIcon = faTimes\n\n @Output() nggvCloseEvent = new EventEmitter<DialogEvent>()\n @Output() nggvPositiveEvent = new EventEmitter<DialogEvent>()\n @Output() nggvNeutralEvent = new EventEmitter<DialogEvent>()\n @Output() nggvNegativeEvent = new EventEmitter<DialogEvent>()\n @Output() nggvDangerEvent = new EventEmitter<DialogEvent>()\n\n protected _previous: HTMLElement | undefined\n protected _firstFocusable: HTMLElement | undefined\n protected _lastFocusable: HTMLElement | undefined\n\n constructor(\n private renderer: Renderer2,\n private ref: ElementRef<HTMLElement>,\n private configurableFocusTrapFactory: ConfigurableFocusTrapFactory,\n ) {\n this.configurableFocusTrap = this.configurableFocusTrapFactory.create(\n this.ref.nativeElement,\n )\n }\n\n ngOnInit() {\n this.dialogTitleId =\n this.dialogTitleId ?? 'gds-dialog-title-' + window.nggv?.nextId()\n if (this.dialogBodyId !== null) {\n this.dialogBodyId =\n this.dialogBodyId ?? 'gds-dialog-body-' + window.nggv?.nextId()\n }\n\n this._shown = this.initiallyShown\n if (this.shown) this._limitFocusable()\n }\n\n public onAction(event: Event, action: string) {\n event.preventDefault()\n const emitEvent = {\n original: event,\n payload: this.payload,\n }\n switch (action) {\n case 'positive':\n this.nggvPositiveEvent.emit(emitEvent)\n break\n case 'neutral':\n this.nggvNeutralEvent.emit(emitEvent)\n break\n case 'negative':\n this.nggvNegativeEvent.emit(emitEvent)\n break\n case 'danger':\n this.nggvDangerEvent.emit(emitEvent)\n break\n // case 'close' is handled by if-statement below with call to this.close()\n }\n if (this.autoClose) this.close(event, 'action')\n }\n\n open(opener?: HTMLElement) {\n this._shown = true\n this._previous = opener || (document.activeElement as HTMLElement)\n\n this.enableFocusTrap()\n this.hideOverflow()\n this._limitFocusable()\n return true\n }\n\n protected _limitFocusable() {\n window.setTimeout(() => {\n if (!this.dialogRef) return\n const focusable = this.dialogRef.nativeElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n this._firstFocusable = focusable[0]\n this._lastFocusable = focusable[focusable.length - 1]\n if (this._firstFocusable) this._firstFocusable.focus()\n })\n }\n\n @HostListener('click', ['$event', '\"host\"'])\n @HostListener('document:keydown.escape', ['$event'])\n close(event?: Event, initiator?: string) {\n if (initiator === 'host' && event instanceof MouseEvent) return\n // prevent modal from closing on esc button click when closeModalOnEscape is set to false\n if (!this.closeModalOnEscape) return\n if (this.shown) {\n const emitEvent = {\n original: event,\n payload: this.payload,\n }\n this.nggvCloseEvent.emit(emitEvent)\n }\n\n this.resetOverflow()\n this.disableFocusTrap()\n\n this._shown = false\n window.setTimeout(() => {\n if (this._previous) this._previous.focus()\n this._previous = undefined\n })\n }\n\n @HostListener('keydown', ['$event'])\n focusTrap(event: KeyboardEvent) {\n if (event.key !== 'Tab') return\n if (event.shiftKey) {\n // shift + tab\n if (\n this._lastFocusable &&\n document.activeElement === this._firstFocusable\n ) {\n this._lastFocusable.focus()\n event.preventDefault()\n }\n } else {\n // tab\n if (\n this._firstFocusable &&\n document.activeElement === this._lastFocusable\n ) {\n this._firstFocusable.focus()\n event.preventDefault()\n }\n }\n }\n\n // to prevent background scrolling when modal is open\n private hideOverflow(): void {\n this.renderer.setStyle(document.body, 'overflow', 'hidden')\n }\n\n private resetOverflow(): void {\n this.renderer.removeStyle(document.body, 'overflow')\n }\n\n private enableFocusTrap() {\n if (this.configurableFocusTrap) {\n this.configurableFocusTrap.enabled = true\n this.configurableFocusTrap.focusInitialElementWhenReady()\n }\n }\n\n private disableFocusTrap() {\n if (this.configurableFocusTrap) {\n this.configurableFocusTrap.enabled = false\n }\n }\n\n ngOnDestroy(): void {\n this.configurableFocusTrap?.destroy()\n }\n}\n","<ng-container *ngIf=\"shown\">\n <div class=\"modal-dialog__wrapper\" [class.-active]=\"shown\">\n <div\n class=\"modal-dialog__container\"\n *transloco=\"let t\"\n #dialog\n role=\"dialog\"\n aria-dialog=\"true\"\n [attr.aria-labelledby]=\"dialogTitleId\"\n [attr.aria-describedby]=\"dialogBodyId\"\n >\n <header class=\"modal-dialog__heading\">\n <h3 [attr.id]=\"dialogTitleId\">{{ t(heading || title || '') }}</h3>\n <button\n data-thook=\"dialog-close\"\n (click)=\"onAction($event, 'close')\"\n (keydown.enter)=\"onAction($event, 'close')\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n class=\"nggv-modal-slideout__close\"\n >\n <i></i>\n </button>\n </header>\n <section class=\"modal-dialog__body\" [attr.id]=\"dialogBodyId\">\n <div [innerHtml]=\"content\"></div>\n <ng-content></ng-content>\n </section>\n <footer class=\"modal-dialog__actions\">\n <button\n class=\"danger-confirm\"\n type=\"reset\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.negative || 'negative')\"\n (click)=\"onAction($event, 'negative')\"\n (keydown.enter)=\"onAction($event, 'negative')\"\n *ngIf=\"_buttons && _buttons.negative\"\n >\n {{ t(_buttons.negative) }}\n </button>\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.neutral || 'neutral')\"\n (click)=\"onAction($event, 'neutral')\"\n (keydown.enter)=\"onAction($event, 'neutral')\"\n *ngIf=\"_buttons && _buttons.neutral\"\n >\n {{ t(_buttons.neutral) }}\n </button>\n <button\n class=\"danger\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.danger || 'danger')\"\n (click)=\"onAction($event, 'danger')\"\n (keydown.enter)=\"onAction($event, 'danger')\"\n *ngIf=\"_buttons && _buttons.danger\"\n >\n {{ t(_buttons.danger) }}\n </button>\n <button\n class=\"submit\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.positive || 'positive')\"\n (click)=\"onAction($event, 'positive')\"\n (keydown.enter)=\"onAction($event, 'positive')\"\n *ngIf=\"_buttons && _buttons.positive\"\n >\n {{ t(_buttons.positive) }}\n </button>\n </footer>\n </div>\n <div class=\"nggv-backdrop\"></div>\n </div>\n</ng-container>\n","export enum KeyboardKey {\n Escape = 'Escape',\n Space = 'Space',\n Enter = 'Enter',\n ArrowUp = 'ArrowUp',\n ArrowDown = 'ArrowDown',\n Tab = 'Tab',\n}\n","import '@sebgroup/green-core/components/icon/icons/dot-grid-one-horizontal.js'\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core'\nimport { fromEvent, Subscription } from 'rxjs'\nimport { filter, takeWhile } from 'rxjs/operators'\n\nimport { KeyboardKey } from './keyboard-key.enum'\n\n@Component({\n selector: 'nggv-fold-out',\n templateUrl: './fold-out.component.html',\n styleUrls: ['./fold-out.component.scss'],\n standalone: false\n})\nexport class NggvFoldOutComponent implements OnDestroy, AfterViewInit {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'fold-out'\n\n @ViewChild('foldout', { read: ElementRef }) inputRef?: ElementRef\n @ViewChild('childrenContainer') container?: ElementRef\n\n /** Aligns the dropdown list with the buttons right or left side */\n @Input() alignOptions!: 'left' | 'right'\n /** Option to show text with action button */\n @Input() text?: string\n /** Aria label for the fold-out button */\n @Input() ariaLabel?: string\n /** Sets the width property of the list. Default = fit-content */\n @Input() listWidth: 'fit-content' | 'max-content' | 'min-content' | 'auto' =\n 'fit-content'\n /** Emits when the children container collapses, for components with change detection strategy \"OnPush\" */\n @Output() actionEmitter = new EventEmitter<void>()\n\n /** @internal */\n protected shown = false\n\n private activeIndex = -1\n private firstArrowClick = true\n private ariaFocusAttributeName = 'aria-focus'\n private blurAllElements = (): void => this.children.forEach(this.blurElement)\n private blurElement = (element: HTMLElement): void =>\n element.setAttribute(this.ariaFocusAttributeName, 'false')\n private focusElement = (element: HTMLElement): void =>\n element.setAttribute(this.ariaFocusAttributeName, 'true')\n private getChildIndex = (element: HTMLElement | undefined): number =>\n element ? this.children.indexOf(element) : -1\n\n private onClickSubscription: Subscription | undefined\n private onKeyUpSubscription: Subscription | undefined\n\n private get children() {\n return Array.from(\n (this.container?.nativeElement as HTMLElement).children ?? [],\n ) as HTMLElement[]\n }\n\n private get lastChild(): HTMLElement | undefined {\n return this.children[this.children.length - 1] || undefined\n }\n\n private get focusedElement(): HTMLElement | undefined {\n return this.children[this.activeIndex] || undefined\n }\n\n ngAfterViewInit(): void {\n this.blurAllElements()\n }\n\n ngOnDestroy(): void {\n this.onClickSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n }\n\n /** Toggle display of the option list */\n toggleVisibility(): void {\n this.setVisibility(!this.shown)\n }\n\n setVisibility(setVisibility = true): void {\n if (this.shown === setVisibility) {\n return\n }\n\n this.resetChildren()\n this.shown = setVisibility\n\n if (this.shown) {\n this.subscribeToOutsideClickEvent()\n this.subscribeToKeyDownEvent()\n } else {\n this.onClickSubscription?.unsubscribe()\n this.onKeyUpSubscription?.unsubscribe()\n this.actionEmitter.emit()\n }\n }\n\n /**\n * Closes the fold-out on click outside.\n */\n private subscribeToOutsideClickEvent(): void {\n this.onClickSubscription = fromEvent(document, 'click')\n .pipe(takeWhile(() => this.shown))\n .subscribe({\n next: (event: Event) => {\n if (\n this.shown &&\n !this.inputRef?.nativeElement.contains(event.target)\n ) {\n this.setVisibility(false)\n }\n },\n })\n }\n\n private subscribeToKeyDownEvent(): void {\n if (!this.children.length) {\n return\n }\n\n this.onKeyUpSubscription = fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeWhile(() => this.shown),\n filter((event) =>\n Object.values(KeyboardKey).includes(event.code as KeyboardKey),\n ),\n )\n .subscribe((event) => {\n event.preventDefault()\n event.stopPropagation()\n this.onKeyDown(event)\n })\n }\n\n private onKeyDown(event: KeyboardEvent): void {\n switch (event.code) {\n case KeyboardKey.Escape:\n case KeyboardKey.Tab:\n this.setVisibility(false)\n break\n case KeyboardKey.Enter:\n case KeyboardKey.Space:\n this.takeAction()\n break\n case KeyboardKey.ArrowUp:\n this.handleArrowUpClick()\n break\n case KeyboardKey.ArrowDown:\n this.handleArrowDownClick()\n break\n }\n }\n\n private handleArrowUpClick(): void {\n this.activeIndex = this.firstArrowClick\n ? this.getChildIndex(this.lastChild)\n : this.activeIndex === 0\n ? this.getChildIndex(this.lastChild)\n : this.activeIndex - 1\n\n this.firstArrowClick = false\n this.handleFocus()\n }\n\n private handleArrowDownClick(): void {\n this.activeIndex = this.firstArrowClick\n ? 0\n : (this.activeIndex + 1) % this.children.length\n this.firstArrowClick = false\n this.handleFocus()\n }\n\n private handleFocus(): void {\n this.blurAllElements()\n this.focusElement(this.children[this.activeIndex])\n }\n\n private takeAction(): void {\n if (this.focusedElement) {\n this.focusedElement.click()\n }\n\n this.setVisibility(false)\n }\n\n private resetChildren(): void {\n this.blurAllElements()\n this.activeIndex = -1\n this.firstArrowClick = true\n }\n}\n","<div #foldout>\n <button\n data-thook=\"fold-out-toggle\"\n class=\"fold-out-button\"\n [ngClass]=\"{ 'no-text': !text }\"\n (click)=\"toggleVisibility()\"\n [attr.aria-expanded]=\"shown\"\n [attr.aria-label]=\"ariaLabel\"\n >\n <ng-container *ngTemplateOutlet=\"text ? withText : default\"> </ng-container>\n </button>\n <div\n #childrenContainer\n class=\"nggv-fold-out__popover\"\n [ngClass]=\"{\n 'flex-right': alignOptions === 'right',\n 'list-width-fit-content': listWidth === 'fit-content',\n 'list-width-max-content': listWidth === 'max-content',\n 'list-width-min-content': listWidth === 'min-content',\n 'list-width-auto': listWidth === 'auto',\n }\"\n [class.nggv-fold-out__popover-expanded]=\"shown\"\n (click)=\"toggleVisibility()\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n\n<ng-template #withText>\n {{ text }}\n <gds-icon-dot-grid-one-horizontal\n width=\"24\"\n height=\"24\"\n *nggCoreElement\n ></gds-icon-dot-grid-one-horizontal>\n</ng-template>\n\n<ng-template #default>\n <gds-icon-dot-grid-one-horizontal\n width=\"24\"\n height=\"24\"\n *nggCoreElement\n ></gds-icon-dot-grid-one-horizontal>\n <ng-template></ng-template\n></ng-template>\n","import { Directive, HostBinding } from '@angular/core'\n\n@Directive({\n selector: '[nggvOption]',\n standalone: false\n})\nexport class NggvFoldOutOptionDirective {\n @HostBinding('class.nggv-field-dropdown__options__label') baseClass = true\n}\n","import {\n animate,\n group,\n query,\n style,\n transition,\n trigger,\n} from '@angular/animations'\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core'\n\nimport { DialogButtons } from '../modal.types'\n\n/** Modal slide-out component based on vanilla pattern library design.\n * The modal title can be set using the @Input heading, and will automatically be translated if\n * the string matches a cms key.\n * Content can be injected into the body of the slide-out by either setting the @Input content to any type of\n * markdown, or using content projection (adding content between the `nggv-slideout-modal`-start and end tag).\n * If the content needs to stretch outside the normal padded area, add the attribute `slot=\"outside-content\"` to the\n * projected content main element.\n * Test hooks:\n * The modal hook defaults to 'slideout' but is customizeable.\n * The closing button can be selected using 'slideout-close'.\n * The backdrop is selectable using 'slideout-backdrop'.\n */\n@Component({\n selector: 'nggv-slideout-modal',\n templateUrl: './slide-out.component.html',\n styleUrls: ['./slide-out.component.scss'],\n animations: [\n trigger('modalAnimation', [\n transition(':enter', [\n query('.gds-slide-out', style({ transform: 'translateX(100%)' }), {\n optional: true,\n }),\n query('.gds-backdrop, [role=dialog]', style({ opacity: '0' }), {\n optional: true,\n }),\n group([\n query('.gds-slide-out', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(0)' })), { optional: true }),\n query('.gds-backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '1' })), { optional: true }),\n ]),\n ]),\n transition(':leave', [\n query('.gds-slide-out', style({ transform: 'translateX(0)' }), {\n optional: true,\n }),\n group([\n query('.gds-slide-out', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ transform: 'translateX(100%)' })), { optional: true }),\n query('.gds-backdrop, [role=dialog]', animate('350ms cubic-bezier(0.33, 1, 0.68, 1)', style({ opacity: '0' })), { optional: true }),\n ]),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class NggvSlideOutComponent implements OnInit {\n /** @internal */\n @ViewChild('slideOut') slideOutRef: ElementRef | undefined\n\n /** Sets from which side the modal should open. */\n @Input() side: 'left' | 'right' = 'right'\n /** Defines the default visibility state of the slide-out. */\n private _shown = false\n @Input() set shown(value: boolean) {\n this._shown = value\n if (value) {\n this.hideOverflow()\n } else {\n this.resetOverflow()\n }\n }\n get shown() {\n return this._shown\n }\n /** Defines the default visibility state of the modal. */\n @Input() initiallyShown = false\n /** Sets modal heading. Will be translated (using transloco) if the string matches a cms key. */\n @Input() heading!: string\n /**\n * Sets modal title. Will be translated (using transloco) if the string matches a cms key.\n * @deprecated - use @Input() heading instead.\n */\n @Input() title!: string\n /** Sets content body of the modal and can contain html code. The content body can also be set by nesting children to the modal tag. */\n @Input() content?: string\n /** Sets whether it is possible to close the modal from the top right corner. */\n @Input() closable = true\n /** Sets whether it is possible to close the modal by clicking outside the modal area (on the backdrop). */\n @Input() closableOutside = true\n /** Allows the modal content to decide the width of the modal. */\n @Input() autoWidth = false\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'slideout'\n\n /** Aria label for the Close button with \"X\" icon, in the header */\n @Input() closeButtonAriaLabel?: string\n\n /** @internal */\n get fromLeft(): boolean {\n return this.side === 'left'\n }\n\n // /** @internal */\n // closeIcon = faTimes;\n\n _buttons: DialogButtons | undefined\n /** Buttons are defined as a key-value pair where key is one of \"positive|neutral|negative\" and value is the button label. */\n @Input() set buttons(buttons: DialogButtons) {\n this._buttons = buttons\n }\n\n /** Will emit true on closing event. */\n @Output() nggvCloseEvent = new EventEmitter<boolean>()\n @Output() nggvPositiveEvent = new EventEmitter<void>()\n @Output() nggvNeutralEvent = new EventEmitter<void>()\n @Output() nggvNegativeEvent = new EventEmitter<void>()\n\n private previous: HTMLElement | undefined\n private firstFocusable: HTMLElement | undefined\n private lastFocusable: HTMLElement | undefined\n\n constructor(\n private host: ElementRef,\n private renderer: Renderer2,\n ) {\n // appends methods for opening and closing modal to native element\n this.host.nativeElement.open = this.open.bind(this)\n this.host.nativeElement.close = this.close.bind(this)\n }\n\n ngOnInit() {\n this._shown = this.initiallyShown\n if (this.shown) this.limitFocusable()\n }\n\n public onAction(event: Event, action: string) {\n event.preventDefault()\n switch (action) {\n case 'positive':\n this.nggvPositiveEvent.emit()\n break\n case 'neutral':\n this.nggvNeutralEvent.emit()\n break\n case 'negative':\n this.nggvNegativeEvent.emit()\n break\n }\n this.close(event, 'action')\n }\n\n /**\n * Called on a modal element. Opens the modal and sets focus to the last focusable element in the modal.\n *\n * @param opener - reference to last focused element before opening modal\n * @returns - true\n */\n open(opener?: HTMLElement): boolean {\n this._shown = true\n this.previous = opener || (document.activeElement as HTMLElement)\n this.hideOverflow()\n this.limitFocusable()\n return true\n }\n\n /**\n * Called on a modal element. Closes the modal and emits a `nggvCloseEvent`. Sets focus to the lats focused element if an element was sent in to open function.\n *\n * @param event\n * @param initiator\n */\n @HostListener('click', ['$event', '\"host\"'])\n @HostListener('document:keydown.escape', ['$event'])\n close(event?: Event, initiator?: string): void {\n let closableOutside = true\n\n if (\n initiator === 'host' &&\n event instanceof MouseEvent &&\n event.target !== event.currentTarget\n )\n return\n\n if (\n this.slideOutRef &&\n !this.slideOutRef.nativeElement.contains(event?.target) &&\n !this.closableOutside\n ) {\n closableOutside = false\n }\n\n this.resetOverflow()\n\n if (this.shown && this.closable && closableOutside) {\n this.nggvCloseEvent.emit(this.shown)\n this.shown = false\n window.setTimeout(() => {\n if (this.previous) this.previous.focus()\n this.previous = undefined\n })\n }\n }\n\n /** @internal */\n @HostListener('keydown', ['$event'])\n focusTrap(event: KeyboardEvent) {\n if (event.key !== 'Tab') return\n if (event.shiftKey) {\n // shift + tab\n if (\n this.lastFocusable &&\n document.activeElement === this.firstFocusable\n ) {\n this.lastFocusable.focus()\n event.preventDefault()\n }\n } else {\n // tab\n if (\n this.firstFocusable &&\n document.activeElement === this.lastFocusable\n ) {\n this.firstFocusable.focus()\n event.preventDefault()\n }\n }\n }\n\n private limitFocusable() {\n window.setTimeout(() => {\n if (!this.slideOutRef) return\n const focusable = this.slideOutRef.nativeElement.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n this.firstFocusable = focusable[0]\n this.lastFocusable = focusable[focusable.length - 1]\n if (this.firstFocusable) this.firstFocusable.focus()\n })\n }\n\n private hideOverflow(): void {\n this.renderer.setStyle(document.body, 'overflow', 'hidden')\n }\n\n private resetOverflow(): void {\n this.renderer.removeStyle(document.body, 'overflow')\n }\n}\n","<ng-container *ngIf=\"shown\">\n <div\n [ngClass]=\"{\n 'gds-slide-out--left': fromLeft,\n 'gds-slide-out--right': !fromLeft,\n }\"\n *transloco=\"let t\"\n [class.-active]=\"shown\"\n [attr.data-thook]=\"thook\"\n [attr.aria-hidden]=\"!shown\"\n [@modalAnimation]\n >\n <div\n #slideOut\n class=\"gds-slide-out\"\n [class.auto-width]=\"autoWidth\"\n [class.entered]=\"shown\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"gds-modal-title\"\n aria-describedby=\"gds-modal-body\"\n >\n <header class=\"gds-slide-out__header\">\n <h3 id=\"gds-modal-title\">\n {{ heading || title || '' }}\n </h3>\n <button\n data-testid=\"modal-close-button\"\n class=\"nggv-modal-slideout__close\"\n (click)=\"close($event, 'action')\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <i></i>\n </button>\n </header>\n\n <section id=\"modal-body\">\n <div class=\"gds-slide-out__content hide-if-empty\">\n <div *ngIf=\"content\" [innerHtml]=\"content\"></div>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"[slot='outside-content']\"></ng-content>\n </section>\n\n <footer class=\"modal-dialog__actions\">\n <button\n class=\"danger\"\n type=\"reset\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.negative || 'negative')\"\n (click)=\"onAction($event, 'negative')\"\n (keydown.enter)=\"onAction($event, 'negative')\"\n *ngIf=\"_buttons && _buttons.negative\"\n >\n {{ t(_buttons.negative) }}\n </button>\n\n <button\n class=\"secondary\"\n type=\"button\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.neutral || 'neutral')\"\n (click)=\"onAction($event, 'neutral')\"\n (keydown.enter)=\"onAction($event, 'neutral')\"\n *ngIf=\"_buttons && _buttons.neutral\"\n >\n {{ t(_buttons.neutral) }}\n </button>\n\n <button\n class=\"primary\"\n type=\"submit\"\n [attr.data-thook]=\"'dialog-' + (_buttons?.positive || 'positive')\"\n (click)=\"onAction($event, 'positive')\"\n (keydown.enter)=\"onAction($event, 'positive')\"\n *ngIf=\"_buttons && _buttons.positive\"\n >\n {{ t(_buttons.positive) }}\n </button>\n </footer>\n </div>\n\n <div\n class=\"nggv-backdrop\"\n data-thook=\"slideout-backdrop\"\n (click)=\"close()\"\n ></div>\n </div>\n</ng-container>\n","import './modal.globals'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvButtonModule } from '@sebgroup/green-angular/src/v-angular/button'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvDialogComponent } from './dialog/dialog.component'\nimport { NggvFoldOutComponent } from './fold-out/fold-out.component'\nimport { NggvFoldOutOptionDirective } from './fold-out/fold-out.directive'\nimport { NggvSlideOutComponent } from './slide-out/slide-out.component'\n\n@NgModule({\n imports: [\n CommonModule,\n NggvButtonModule,\n NggvI18nModule,\n NggCoreWrapperModule,\n ],\n declarations: [\n NggvDialogComponent,\n NggvSlideOutComponent,\n NggvFoldOutComponent,\n NggvFoldOutOptionDirective,\n ],\n exports: [\n NggvDialogComponent,\n NggvSlideOutComponent,\n NggvFoldOutComponent,\n NggvFoldOutOptionDirective,\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvModalModule {}\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core'\n\nimport '@sebgroup/green-core/components/icon/icons/chevron-left.js'\nimport '@sebgroup/green-core/components/icon/icons/chevron-right.js'\nimport '@sebgroup/green-core/components/icon/icons/arrow-left.js'\n\n/** The Pagination component is used to separate long sets of data so that it is easier for a user to consume information. To change the current page simply click on the page number. */\n@Component({\n selector: 'nggv-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss'],\n standalone: false\n})\nexport class PaginationComponent implements OnChanges {\n /** Total size of pagination */\n @Input() size = 0\n /** Selected page */\n @Input() value = 1\n /** First page text */\n @Input() firstText?: string\n /** Last page text */\n @Input() lastText?: string\n /** Next page text */\n @Input() nextText?: string\n /** Offset per page */\n @Input() offset?: number\n /** Number of pages to display*/\n @Input() pagingLength?: number\n /** Previous page text */\n @Input() previousText?: string\n /** Use first and last navigation buttons*/\n @Input() useFirstAndLast?: boolean = true\n /** Use text-based navigation buttons*/\n @Input() useTextNav?: boolean\n /** Use dot-navigation */\n @Input() useDotNav?: boolean\n /** Use 'Go to page' input field */\n @Input() showGoToPage = true\n /** Element class name */\n @Input() className = ''\n /** Element ID */\n @Input() id?: string\n /** Callback on page change */\n @Output() pageNumberChange: EventEmitter<number> = new EventEmitter<number>()\n\n /** @internal */\n pageNumber = 0\n /** @internal */\n list: Array<number> = []\n /** @internal */\n dotnavList: Array<number> = []\n /** @internal */\n pagingSize = 0\n /** @internal */\n showEllipsisStart = false\n /** @internal */\n showEllipsisEnd = false\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.offset || changes?.size) {\n this.setPagingSize()\n }\n\n if (changes?.pagingLength || changes?.value) {\n this.generateList()\n }\n }\n\n /** @internal */\n setPagingSize() {\n const initialOffset: number = this.offset ? this.offset : 10\n this.pagingSize = Math.ceil(Number(this.size) / initialOffset)\n this.generateList()\n }\n\n /** @internal */\n handleOnChange(value: number): void {\n if (value <= 0) {\n this.pageNumberChange.emit(1)\n } else if (value > this.pagingSize) {\n this.pageNumberChange.emit(this.pagingSize)\n } else {\n this.pageNumberChange.emit(value)\n }\n }\n\n /** @internal */\n handlePageInput(pageInput: string) {\n this.handleOnChange(Number(pageInput))\n }\n\n /**\n * Generates an array of the pages that needs to be displayed\n * It depends on the size, offset, and the current value\n */\n private generateList(): void {\n const genList: Array<number> = []\n const length: number = this.pagingLength ? this.pagingLength : 5\n\n for (let i = 1; i <= this.pagingSize; i++) {\n genList.push(i)\n }\n\n const medianValue: number = Math.ceil(length / 2)\n let start = 0\n let end = this.pagingSize\n\n if (length < this.pagingSize) {\n if (this.pagingSize - this.value < medianValue) {\n start = this.pagingSize - length\n } else if (this.value - medianValue > -1) {\n start = this.value - medianValue\n }\n end = start + length\n }\n if (this.useFirstAndLast) {\n if (start == 0) {\n start = 1\n end = start + length\n }\n\n if (end > this.pagingSize - 1) {\n end = this.pagingSize - 1\n start = Math.max(1, end - length)\n }\n }\n\n this.dotnavList = genList\n const pagingStart = genList[start]\n const pagingEnd = genList[end - 1]\n this.showEllipsisStart = pagingStart > 2\n this.showEllipsisEnd = pagingEnd < this.pagingSize - 1\n this.list = genList.slice(start, end)\n }\n}\n","<div class=\"pagination-wrapper\" [ngClass]=\"className\" [attr.id]=\"id\">\n <nav class=\"custom-pagination\">\n <ng-container *ngIf=\"useDotNav; else numNav\">\n <ul class=\"pagination dotnav\">\n <ng-container *ngFor=\"let num of dotnavList\">\n <li class=\"page-item\" (click)=\"handleOnChange(num)\" [value]=\"num\">\n <span\n class=\"page-dot-link\"\n [ngClass]=\"{ active: value === num }\"\n ></span>\n </li>\n </ng-container>\n </ul>\n </ng-container>\n\n <ng-template #numNav>\n <ul class=\"pagination\">\n <ng-container>\n <li class=\"page-item\" (click)=\"handleOnChange(value - 1)\">\n <button\n class=\"page-link\"\n [attr.title]=\"previousText\"\n [attr.disabled]=\"value === 1 ? 'disabled' : null\"\n >\n <span class=\"nav-action\">\n <ng-container *ngIf=\"useTextNav; else angleLeftIcon\">\n {{ previousText ? previousText : 'Previous' }}\n </ng-container>\n <ng-template #angleLeftIcon>\n <gds-icon-chevron-left\n *nggCoreElement\n ></gds-icon-chevron-left>\n </ng-template>\n </span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"useFirstAndLast\">\n <li class=\"page-item\" (click)=\"handleOnChange(1)\">\n <button\n class=\"page-link\"\n [ngClass]=\"{ active: value === 1 }\"\n [attr.title]=\"firstText\"\n >\n <span class=\"nav-num\">{{ 1 }}</span>\n </button>\n </li>\n\n <li class=\"page-item\" *ngIf=\"showEllipsisStart\">\n <span class=\"page-link\" [attr.title]=\"'...'\">\n <span class=\"nav-num\">...</span>\n </span>\n </li>\n </ng-container>\n\n <ng-container *ngFor=\"let num of list\">\n <li\n class=\"page-item\"\n [ngClass]=\"{ active: value === num }\"\n (click)=\"handleOnChange(num)\"\n value=\"num\"\n >\n <button class=\"page-link\" [ngClass]=\"{ active: value === num }\">\n <span class=\"nav-num\">{{ num }}</span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"useFirstAndLast\">\n <li class=\"page-item\" *ngIf=\"showEllipsisEnd\">\n <span class=\"page-link\" [attr.title]=\"'...'\">\n <span class=\"nav-num\">...</span>\n </span>\n </li>\n\n <li\n class=\"page-item\"\n (click)=\"handleOnChange(pagingSize)\"\n *ngIf=\"pagingSize > 1\"\n >\n <button\n class=\"page-link\"\n [ngClass]=\"{ active: value === pagingSize }\"\n [attr.title]=\"lastText\"\n >\n <span class=\"nav-num\">{{ pagingSize }}</span>\n </button>\n </li>\n </ng-container>\n\n <ng-container>\n <li class=\"page-item\" (click)=\"handleOnChange(value + 1)\">\n <button class=\"page-link\" [attr.title]=\"nextText\">\n <span class=\"nav-action\">\n <ng-container *ngIf=\"useTextNav; else angleRightIcon\">\n {{ nextText ? nextText : 'Next' }}\n </ng-container>\n <ng-template #angleRightIcon>\n <gds-icon-chevron-right\n *nggCoreElement\n ></gds-icon-chevron-right>\n </ng-template>\n </span>\n </button>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"showGoToPage\">\n <li>\n <div class=\"paging-input-wrapper\">\n <div class=\"label-wrapper\">\n <label for=\"pageInput\" *transloco=\"let t\">\n {{ t('label.gotopage') }}\n </label>\n </div>\n <div class=\"input-wrapper\">\n <input\n #pageInput\n data-thook=\"pagination-go-to-input\"\n min=\"1\"\n [max]=\"pagingSize\"\n id=\"pageInput\"\n class=\"gds-field\"\n type=\"number\"\n (keydown.enter)=\"handlePageInput(pageInput.value)\"\n [ngModel]=\"value\"\n />\n <button\n type=\"button\"\n data-thook=\"pagination-go-to-button\"\n (click)=\"handlePageInput(pageInput.value)\"\n >\n <gds-icon-chevron-right\n *nggCoreElement\n ></gds-icon-chevron-right>\n </button>\n </div>\n </div>\n </li>\n </ng-container>\n </ul>\n </ng-template>\n </nav>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { PaginationComponent } from './pagination.component'\n\n@NgModule({\n declarations: [PaginationComponent],\n imports: [\n CommonModule,\n FormsModule,\n NggvI18nModule,\n TranslocoModule,\n NggCoreWrapperModule,\n ],\n exports: [PaginationComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvPaginationModule {}\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** @internal Internal class used to uncheck radio buttons with the matching name. */\n@Injectable()\nexport class NggvRadioControlRegistry {\n private _radios: any[] = []\n\n add(control: NgControl, radio: NggvRadioComponent) {\n this._radios.push([control, radio])\n }\n\n remove(radio: NggvRadioComponent) {\n for (let i = this._radios.length - 1; i >= 0; --i) {\n if (this._radios[i][1] === radio) {\n this._radios.splice(i, 1)\n return\n }\n }\n }\n\n select(radio: NggvRadioComponent) {\n this._radios.forEach((controlPair) => {\n if (this._isSameGroup(controlPair, radio) && controlPair[1] !== radio) {\n controlPair[1].writeValue(radio.value)\n }\n })\n }\n\n private _isSameGroup(\n controlPair: [NgControl, NggvRadioComponent],\n radio: NggvRadioComponent,\n ) {\n if (!controlPair[0].control) return false\n return (\n //@ts-expect-error internal properties not exposed\n controlPair[0]._parent === radio.ngControl._parent &&\n controlPair[1].name === radio.name\n )\n }\n}\n\n/**\n * Use radio buttons when users must select one option in a list with exclusive options out of a set of two or more options.\n * https://designlibrary.sebgroup.com/components/component-radiobutton\n */\n@Component({\n selector: 'nggv-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [NggvRadioControlRegistry],\n standalone: false\n})\nexport class NggvRadioComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'radio'\n /**\n * Sets class on host element based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Syncs a FormControl in an existing FormGroup to a form control element by name.\n */\n @Input() formControlName?: string\n /**\n * Decides if error should be connected to each individual radio button.\n * If true, errors will be shown in nggv-radio-group component.\n * If false, errors will be show below each radio button\n */\n isGroup = false\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param registry internal registry used to uncheck radio buttons with the matching name, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected registry: NggvRadioControlRegistry,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n this.registry.add(this.ngControl, this)\n // Check if nggv-radio-group is present connected to the same formControl\n if (\n Array.from(\n document.querySelectorAll(\n `nggv-radio-group[formcontrolname=${this.name}]`,\n ),\n ).length\n ) {\n this.isGroup = true\n }\n }\n\n ngOnDestroy() {\n this.registry.remove(this)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => any) {\n // Override default to update registry\n this.onChange = () => {\n fn(this.value)\n this.registry.select(this)\n }\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\">\n <div\n [id]=\"id + '-radio'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div>\n <!-- RADIO BUTTON FIELD -->\n <label [attr.for]=\"id + '-radio'\" class=\"form-control\">\n <input\n #input\n type=\"radio\"\n [attr.id]=\"id + '-radio'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- LABEL -->\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"\n labelContentTpl ?? null;\n context: { $implicit: value }\n \"\n ></ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <!-- if no nggv-radio-group is present -->\n @if (!isGroup) {\n <ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-radio'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n </ng-container>\n }\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/**\n * Creates a wrapper around a group of radio buttons.\n * If there is an error to the form control connected to the radio buttons, it will be shown once below instead of below every individual radio button\n */\n@Component({\n selector: 'nggv-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n standalone: false\n})\nexport class NggvRadioGroupComponent\n extends NggvBaseControlValueAccessorComponent\n implements OnInit\n{\n /**\n * Special property used for selecting DOM elements during automated UI testing.\n */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'radio-group'\n /**\n * Sets class on host element based on size input for styling\n */\n @HostBinding('class') @Input() size: 'small' | 'large' = 'large'\n /**\n * Syncs a FormControl in an existing FormGroup to a form control element by name.\n */\n @Input() formControlName?: string\n /**\n * Sets \"flex-direction\" of parent of radio buttons.\n */\n @Input() direction?: 'row' | 'column' = 'column'\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- RADIO BUTTONS -->\n<div [ngClass]=\"direction === 'column' ? 'direction-column' : 'direction-row'\">\n <ng-content></ng-content>\n</div>\n<!-- ERRORS -->\n<ng-container *transloco=\"let t; read: scope\">\n <div\n class=\"form-info form-info--error\"\n [attr.for]=\"ngControl?.name + '-radio-group'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n size=\"16px\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ error }}\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvRadioGroupComponent } from './radio-group/radio-group.component'\nimport { NggvRadioComponent } from './radio.component'\n\n@NgModule({\n declarations: [NggvRadioComponent, NggvRadioGroupComponent],\n imports: [CommonModule, NggvI18nModule, NggCoreWrapperModule],\n exports: [NggvRadioComponent, NggvRadioGroupComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvRadioModule {}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n/** Pipe used to transform text with special characters into a simple kebab-case id. */\n@Pipe({\n name: 'slug',\n standalone: false\n})\nexport class SlugPipe implements PipeTransform {\n /**\n * Function for executing the transformation to kebab-case id.\n * @param value the text with special characters which to transform.\n */\n transform(value?: string): unknown {\n if (!value) {\n return value\n }\n return value\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-')\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { SlugPipe } from './slug.pipe'\n\n@NgModule({\n declarations: [SlugPipe],\n imports: [CommonModule],\n exports: [SlugPipe],\n})\nexport class NggvSlugPipeModule {}\n","import { Directive, HostBinding, Input, TemplateRef } from '@angular/core'\n\nconst enum ColumnCSSClass {\n Primary = 'gds-table__primary-col',\n Sortable = 'gds-table__sortable-col',\n Numeric = 'gds-table__numeric-col',\n Negative = 'gds-table__negative-col',\n Ascending = 'gds-table__sortable-col--asc',\n Descending = 'gds-table__sortable-col--desc',\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[columnType]',\n standalone: false\n})\nexport class TableDirective {\n @Input() columnType: 'numeric' | 'text' | undefined = 'text'\n @Input() sortable?: boolean\n @Input() sortOrder?: 'desc' | 'asc'\n @Input() value: any\n\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'table'\n\n @HostBinding('class.' + ColumnCSSClass.Numeric) get numericColumn(): boolean {\n return this.columnType === 'numeric'\n }\n\n @HostBinding('class.' + ColumnCSSClass.Sortable) get isSortable(): boolean {\n return !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Ascending)\n get orderAscending(): boolean {\n return this.sortOrder === 'asc' && !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Descending)\n get orderDescending(): boolean {\n return this.sortOrder === 'desc' && !!this.sortable\n }\n\n @HostBinding('class.' + ColumnCSSClass.Negative)\n get negativeValue(): boolean {\n if (!isNaN(this.value)) return +this.value < 0\n return false\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableColumn]',\n standalone: false\n})\nexport class TableTemplateDirective<K = string> {\n @Input() tableColumn!: K\n @Input() tableColumnTarget?: 'th' | 'td' | 'both' = 'both'\n\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableFooter]',\n standalone: false\n})\nexport class TableFooterTemplateDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tableAppendableRows]',\n standalone: false\n})\nexport class TableAppendableRowsTemplateDirective {\n constructor(public templateRef: TemplateRef<any>) {}\n}\n","const getKeyValue = <T, K extends keyof T>(obj: T, key: K): T[K] => obj[key]\n\nexport const pick = (\n propertyArray: Array<string>,\n object: { [key: string]: unknown },\n): object => {\n if (object instanceof Object) {\n return propertyArray.reduce(\n (acc: object, curr: string) => ({\n ...acc,\n [curr]: getKeyValue(object, curr),\n }),\n {},\n )\n }\n throw Error('The value for argument \"object\" must be an object')\n}\n\nexport const orderByDescending = <T>(\n property: keyof T | string,\n): ((a: any, b: any) => number) => {\n return (a: any, b: any) => {\n if (a[property] > b[property]) return -1\n if (a[property] < b[property]) return 1\n return 0\n }\n}\n\nexport const orderByAscending = <T>(\n property: keyof T | string,\n): ((a: any, b: any) => number) => {\n return (a: any, b: any) => {\n if (a[property] < b[property]) return -1\n if (a[property] > b[property]) return 1\n return 0\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n name: 'trThook',\n standalone: true,\n})\nexport class TrThookPipe implements PipeTransform {\n transform<V>(\n value: V,\n index: number,\n thookFn?: (rowData: V) => string,\n ): string {\n // call thook fn to set thook for active row\n if (thookFn != null) {\n return thookFn(value)\n }\n\n // default thook\n return `table-row-${index}`\n }\n}\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core'\nimport { UntypedFormControl, UntypedFormGroup } from '@angular/forms'\nimport { Subscription } from 'rxjs'\nimport { debounceTime, map } from 'rxjs/operators'\n\nimport {\n TableAppendableRowsTemplateDirective,\n TableFooterTemplateDirective,\n TableTemplateDirective,\n} from './table.directive'\nimport {\n ariaLabelsOrderBy,\n OrderBy,\n TableColumn,\n TableRow,\n} from './table.models'\nimport { orderByAscending, orderByDescending, pick } from './table.tools'\n\nlet staticInitId = 0\n\nfunction objectFromEntries(entryMap: Map<any, any>): { [key: string]: any } {\n const fromEntries: { [key: string]: any } = {}\n for (const [key, value] of entryMap) {\n fromEntries[key] = value\n }\n return fromEntries\n}\n\n/**\n * A table component with built-in sorting and selecting functionality.\n * By default, table cells (i.e. `<td>` elements) and table headers (i.e. `<th>` elements) are populated with text only values.\n *\n * To customize the contents of either the `<td>` or `<th>` elements (like adding color, icons, form fields, extra padding etc.), provide\n * the customized content within a `<ng-template>`-tag, and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableColumn`-attribute to the `<ng-template>`-element, and set the value to the specific column property.\n * Set `tableColumnTarget` to either `th`, `td` or `both` (default) depending on target element type.\n * The entire row from the `@Input() tableData` is available from the context `$implicit` variable.\n *\n * @example\n * <!-- for table cells i.e. td-elements -->\n * <ng-template tableColumn=\"status\" tableColumnTarget=\"td\" let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <!-- my custom status element -->\n * </ng-template>\n *\n * @example\n * <!-- for table headers i.e. th-elements -->\n * <ng-template tableColumn=\"status\" tableColumnTarget=\"th\" let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <!-- my custom status element -->\n * </ng-template>\n *\n * It is possible to add custom rows that are appended below data row. Use `<ng-template>`-tag and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableAppendableRows`-attribute to the `<ng-template>`-element. Any `tr` elements that exist within `<ng-template tableAppendableRows>` and `</ng-template>` tags will be put below data row's `tr` element in the table.\n *\n * @example\n * <!-- custom appended rows -->\n * <ng-template tableAppendableRows let-myDataVar=\"$implicit\" let-status=\"$implicit.status\">\n * <tr>\n * <!-- first row's columns -->\n * </tr>\n * <!-- more rows if needed -->\n * </ng-template>\n *\n * If custom styling is needed for data row that has appended rows, you can use data attribute `data-hasrowspan` to distinguish it from data row without appended rows.\n * You can pass your own custom method with conditional logic to define what value will be passed to data-hasrowspan.\n * In addition, hasRowSpan function accepts item from `@Input() tableData` as argument which is of the same type as value passed to context `$implicit` variable.\n * IMPORTANT: use arrow function style for defining function inside component, i.e. `hasRowSpan = (value) => output;`. If regular function will be defined, i.e. `hasRowSpan(value) { return output; }`, binding will not work.\n *\n * @example\n * <!-- inside component\n * class CustomComponent {\n * customHasRowSpanFunction = (item: CustomDataType) => item.appendedRowsData.length > 0 ? true : false;\n * }\n * -->\n * <!-- inside stylesheets\n * [data-hasrowspan=\"true\"] {\n * color: blue;\n * }\n * .appended-row {\n * color: blue;\n * }\n * -->\n * <nggv-table [hasRowSpan]=\"customHasRowSpanFunction\">\n * <!-- custom appended rows -->\n * <ng-template tableAppendableRows let-appendedRowsData=\"$implicit.appendedRowsData\">\n * <tr *ngFor=\"let appendedRowItem of appendedRowsData\" class=\"appended-row\">\n * <td>{{ appendedRowItem }}</td>\n * <!-- other row's columns -->\n * </tr>\n * </ng-template>\n * </nggv-table>\n *\n * In addition, it is possible to add footer for the table. Similarly to adding custom columns, use `<ng-template>`-tag and place the ng-template in the html between the start and ending tag of\n * the `<nggv-table>`. Add a `tableFooter`-attribute to the `<ng-template>`-element. Any elements that exist within `<ng-template tableFooter>` and `</ng-template>` tags will be put to tfoot element inside the table.\n *\n * @example\n * <!-- for table footer i.e. tfoot-element -->\n * <ng-template tableFooter>\n * <tr>\n * <!-- first row's columns -->\n * </tr>\n * <!-- more rows if needed -->\n * </ng-template>\n *\n */\n@Component({\n selector: 'nggv-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n standalone: false\n})\nexport class TableComponent<T extends TableRow>\n implements OnInit, OnChanges, AfterContentInit, OnDestroy {\n /**\n * @internal\n * Custom templates defined in the html.\n */\n @ContentChildren(TableTemplateDirective, { descendants: true })\n customTemplates!: QueryList<TableTemplateDirective<keyof T>>\n\n /**\n * @internal\n * Custom appended rows template defined in the html.\n */\n @ContentChild(TableAppendableRowsTemplateDirective)\n appendedRowsTemplate!: TableAppendableRowsTemplateDirective\n\n /**\n * @internal\n * Custom footer template defined in the html.\n */\n @ContentChild(TableFooterTemplateDirective)\n customFooterTemplate!: TableFooterTemplateDirective\n\n /** Emits the table row that was clicked. Works on all columns if not preventDefaultEmit is set for that column. */\n @Output() ngvRowClick = new EventEmitter<T | any>()\n\n /**\n * Emits currently selected and deselected items in the table as key-value pairs.\n * Uses each item`s itemId as key, and a boolean value to describe selected status.\n */\n @Output() ngvRowSelect = new EventEmitter<string[]>()\n\n /**\n * Emits event to signal that the table should be reordered.\n */\n @Output() ngvOrderBy = new EventEmitter<OrderBy<T>>()\n\n /**\n * An array of items describing how the table header should be rendered,\n * together with instructions for how each row should be displayed in that column.\n */\n @Input() tableColumns!: TableColumn<T>[]\n\n /** Data array to display data in the table. Each item <T> in the array represents a row in the table. */\n @Input() tableData!: T[]\n\n /**\n * Property name used to uniquely describe each item (i.e. row) in the data table.\n * Defaults to \\'id\\'.\n * Is required if selectable is true.\n */\n @Input() rowId = 'id'\n\n /**\n * Function's return value is used for data attribute \\'data-hasrowspan\\'.\n * If custom hasRowSpan function is not passed to the table,\n * then this function returns undefined value by default which results in \\'data-hasrowspan\\' attribute being omitted in html\n * (angular omits attributes that contain null or undefined value).\n * IMPORTANT: use arrow function style for defining function inside component, i.e. `hasRowSpan = (value) => output;`. If regular function will be defined, i.e. `hasRowSpan(value) { return output; }`, binding will not work.\n */\n @Input() hasRowSpan: (item: T) => any = (_) => undefined\n\n /**\n * Used to enable/disable the left-side checkbox column.\n * Defaults to true.\n */\n @Input() selectable = true\n\n /**\n * Array of row id's (as defined by rowId property) that should not have a checkbox even if selectable is true.\n */\n @Input() hiddenCheckboxRowIds: string[] = []\n\n /**\n * Used to enable/disable expandable rows.\n * Defaults to false.\n */\n @Input() expandable = false\n\n /**\n * Used to enable/disable the right-side expand icon column.\n * Defaults to true.\n */\n @Input() expandedByDefault = true\n\n /**\n * Property name used to describe the subItems in the data table.\n */\n @Input() subItemsProp = 'subItems'\n\n /**\n * Allow nggv-table to attempt sorting the data in the table. Not recommended if only a subset is loaded or if the dataset is very large.\n * Disabled by default.\n */\n @Input() allowLocalSort = false\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'table-select-all'\n\n /** Function to overwrite generated thook for each row. */\n @Input() trThookFn?: (item: T) => string\n\n /** Aria label for the checkbox in the table header */\n @Input() ariaLabelCheckboxTh?: string\n\n /** Aria label for the checkbox in the table header */\n @Input() ariaLabelCheckboxTr?: string\n\n /** Aria labels for sorting in the table header */\n @Input() ariaLabelsOrderBy?: ariaLabelsOrderBy\n\n /**\n * @internal\n * Internal data structure used to keep track of added content templates used in td elements.\n */\n customRowTemplates = new Map<keyof T, TemplateRef<any>>()\n\n /**\n * @internal\n * Internal data structure used to keep track of added content templates used in th elements.\n */\n customHeaderTemplates = new Map<keyof T, TemplateRef<any>>()\n\n /**\n * @internal\n * Internal data structure used to hold custom appended rows i.e. tr elements (rows).\n */\n appendedRowsTemplateRef!: TemplateRef<any>\n\n /**\n * @internal\n * Internal data structure used to hold tfoot element children i.e. tr elements (rows).\n */\n customFooterTemplateRef!: TemplateRef<any>\n\n /**\n * @internal\n * Incremental id.\n */\n initId!: number\n\n /**\n * @internal\n * FormGroup containing all row id\\'s as controls, and whether these are selected or not as values.\n */\n rowSelectors: UntypedFormGroup = new UntypedFormGroup({})\n\n /**\n * @internal\n * Master selector for selecting or deselecting all row selectors.\n */\n groupSelector: UntypedFormControl = new UntypedFormControl(false)\n\n private selected: string[] = []\n private subs: Subscription[] = []\n\n ngOnChanges(changes: SimpleChanges) {\n // Update selectable or expandable rows if table data or settings change\n if (\n (this.selectable || this.expandable) && changes.tableData?.currentValue ||\n (changes.selectable?.currentValue || changes.expandable?.currentValue) && this.tableData\n ) {\n const wasChanged = this.registerSelectableRows(\n changes.tableData.currentValue,\n )\n if (wasChanged && !this.subs.length) {\n // first time this is run\n const groupSelectorSub = this.groupValueSubscription\n const rowSelectorSub = this.rowValueSubscription\n this.subs.push(groupSelectorSub, rowSelectorSub)\n } else if (wasChanged) {\n this.rowSelectors.updateValueAndValidity()\n }\n }\n\n // sort any incoming data\n if (\n this.allowLocalSort &&\n (changes.tableData?.currentValue || changes.tableColumns?.currentValue)\n ) {\n const orderedByColumn: TableColumn<T> | undefined =\n this.tableColumns?.find((el) => el.order !== undefined)\n if (orderedByColumn) this.sortItemsBy(orderedByColumn)\n }\n }\n\n ngOnInit(): void {\n this.initId = staticInitId++\n }\n\n ngAfterContentInit() {\n // if any custom templates were defined in the template\n if (this.customTemplates.length) {\n // for each template found\n this.customTemplates.map((tableTemplate) => {\n // if target is either 'td' or 'both'\n if (\n ['td', 'both'].includes(tableTemplate.tableColumnTarget as string)\n ) {\n // add to custom row templates\n this.customRowTemplates.set(\n tableTemplate.tableColumn,\n tableTemplate.templateRef,\n )\n }\n // if target is either 'th' or 'both'\n if (\n ['th', 'both'].includes(tableTemplate.tableColumnTarget as string)\n ) {\n // add to custom header templates\n this.customHeaderTemplates.set(\n tableTemplate.tableColumn,\n tableTemplate.templateRef,\n )\n }\n })\n }\n\n // if appended rows' template is defined in the template\n if (this.appendedRowsTemplate) {\n // set templateRef of appended rows' template to variable\n this.appendedRowsTemplateRef = this.appendedRowsTemplate.templateRef\n }\n\n // if custom footer template is defined in the template\n if (this.customFooterTemplate) {\n // set templateRef of table footer to variable\n this.customFooterTemplateRef = this.customFooterTemplate.templateRef\n }\n\n // if expandedByDefault is true, then expand all rows\n if (this.expandedByDefault && this.expandable && this.tableData) {\n this.tableData.forEach((item) => {\n this.toggleRowToExpand(item[this.rowId])\n })\n }\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /**\n * @internal\n * Returns a subscription to the master selector control that either selects or deselects all row controls.\n */\n get groupValueSubscription(): Subscription {\n return this.groupSelector.valueChanges.subscribe({\n next: (value: boolean) => {\n const selectMap = new Map(Object.entries(this.rowSelectorsValue))\n selectMap.forEach((_, key) => selectMap.set(key, value))\n const patchValue = objectFromEntries(selectMap)\n this.rowSelectors.patchValue(patchValue)\n },\n })\n }\n\n /**\n * @internal\n * Returns a subscription to all individual row selectors and update the master selector if all are selected.\n */\n get rowValueSubscription(): Subscription {\n return this.rowSelectors.valueChanges\n .pipe(\n debounceTime(0), // to limit the number of events and to wait for all sub controls to update\n map((val: { [key: string]: boolean }) => {\n // get a filtered array of keys for all rows that are selected\n const selected = Object.keys(val).filter((key) => {\n return val[key] === true && this.rowSelectors.get(key)?.enabled\n })\n // returns an object containing only the filtered keys\n return pick(selected, val)\n }),\n )\n .subscribe({\n next: (value: object) => {\n // the number of selected keys compared to the total number of keys available\n const numberOfSelected = Object.keys(value).length\n const allSelected: boolean =\n numberOfSelected > 0\n ? numberOfSelected === Object.keys(this.rowSelectorsValue).length\n : false\n // update the master selector control\n this.groupSelector.setValue(allSelected, { emitEvent: false })\n // update the array of currently selected id's\n this.selected = Object.keys(value)\n // and emit the updated value\n this.ngvRowSelect.emit(this.selected)\n },\n })\n }\n\n /**\n * @internal\n * Registers or disables row controls for new or removed rows.\n */\n registerSelectableRows(tableData: any[]): boolean {\n if (!tableData) return false\n // Array containing only the id's for each row\n const dataRowIds: string[] = tableData.map((data: any) => data[this.rowId])\n\n // Array containing the id's that have registered controls\n const currentIds: string[] = Object.keys(this.rowSelectorsValue)\n\n // Array containing all ids that lacks a corresponding control (i.e. new rows)\n const newIds: string[] = dataRowIds.filter(\n (id) => currentIds.indexOf(id) === -1,\n )\n\n // Array containing all ids that has a control but is no longer in the data set (i.e. removed rows)\n const removedIds: string[] = currentIds.filter(\n (id) => dataRowIds.indexOf(id) === -1,\n )\n\n // Register new controls for added rows\n if (newIds.length) {\n newIds.forEach((id) => {\n const ctrl = this.rowSelectors.registerControl(\n id,\n new UntypedFormControl(false),\n )\n if (ctrl.disabled) ctrl.enable()\n })\n }\n\n // Set already registered controls to disabled for removed rows\n if (removedIds.length)\n removedIds.forEach((id) => this.rowSelectors.get(id)?.disable())\n\n return newIds.length > 0 || removedIds.length > 0\n }\n\n /**\n * @internal\n * Returns all enabled values unless all rows are disabled.\n */\n get rowSelectorsValue(): any {\n return this.rowSelectors.enabled ? this.rowSelectors.value : {}\n }\n\n toggleSortOrderWithSpace(event: any, column: TableColumn<T>) {\n if (column.sortable) {\n event.preventDefault()\n this.toggleSortOrder(column)\n }\n }\n\n /**\n * @internal\n * Switches sorting order between ascending and descending order for a column.\n * @param column the column to sort rows after.\n */\n toggleSortOrder(column: TableColumn<T>) {\n // check if the table is already sorted by another column than the one provided\n const currentlyOrderedBy = this.tableColumns?.find(\n (el) => el !== column && el.order !== undefined,\n )\n if (currentlyOrderedBy) delete currentlyOrderedBy.order\n column.order = column.order === 'desc' ? 'asc' : 'desc'\n this.sortItemsBy(column)\n }\n\n /** If sortable, reorders the table data using the specified column as ordering attribute. */\n sortItemsBy(column: TableColumn<T>): TableRow[] | undefined {\n if (!column.sortable) return\n // emit re-order event\n this.ngvOrderBy.emit({ property: column.property, order: column.order })\n // if local sort is allowed, reorder data\n if (!this.allowLocalSort || !this.tableData) return\n return this.tableData.sort(\n column.order === 'desc'\n ? orderByDescending(column.property)\n : orderByAscending(column.property),\n )\n }\n\n /**\n * @internal\n * Emits row data for what row was clicked if defaultEmit is allowed.\n */\n propagateItemClick(item: any, preventDefaultEmit?: boolean) {\n if (!preventDefaultEmit) this.ngvRowClick.emit(item)\n\n if (this.expandable && item[this.subItemsProp]) {\n this.toggleRowToExpand(item[this.rowId])\n }\n }\n\n getAriaLabel(column: TableColumn<T>): string | undefined {\n const sortOrder =\n column.order === 'asc'\n ? this.ariaLabelsOrderBy?.desc\n : this.ariaLabelsOrderBy?.asc\n if (!sortOrder) return // no aria labels defined\n return column.ariaLabelSortable?.replace('{{sortOrder}}', sortOrder)\n }\n\n private toggleRowToExpand(id: string): void {\n const row = this.rowSelectors.get(id)\n row?.setValue(!row.value)\n }\n}\n","<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <label\n [attr.for]=\"'cb_header__' + initId\"\n class=\"form-control\"\n id=\"thead-checkbox\"\n >\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <i></i>\n </label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [class.row__expand]=\"expandable\"\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div\n *ngIf=\"!hiddenCheckboxRowIds.includes(item[rowId])\"\n class=\"gds-field-checkbox-wrap\"\n >\n <label\n [attr.for]=\"'cb_row__' + initId + '_' + i\"\n class=\"form-control\"\n >\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <i></i>\n </label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns; let i = index\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"expandable && i === 0; else nonExpandableTemplate\">\n <div\n class=\"gds-item-field-wrap\"\n [ngClass]=\"{ 'no-sub-items': item.subItems.length === 0 }\"\n >\n <span\n *ngIf=\"item.subItems.length > 0\"\n role=\"button\"\n tabindex=\"0\"\n class=\"chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId])?.value\"\n >\n <svg\n width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n <span class=\"gds-item-field-text\">\n {{ item[column.property] }} ({{ item.subItems.length }})\n <div *ngIf=\"column.columnLabel\" class=\"gds-item-field-extra-label\">\n {{ item[column.columnLabel] }}\n </div>\n </span>\n </div>\n </ng-container>\n\n <ng-template #nonExpandableTemplate>\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: item }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </ng-template>\n </td>\n </tr>\n\n <!-- Expanded Sub Items -->\n <ng-container *ngIf=\"expandable && rowSelectors.get(item[rowId])?.value\">\n <tr *ngFor=\"let subItem of item[subItemsProp]\">\n <td\n *ngFor=\"let column of tableColumns\"\n class=\"web-view\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n (click)=\"propagateItemClick(subItem, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: subItem }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ subItem[column.property] }}\n </ng-template>\n </td>\n\n <td\n class=\"mobile-view\"\n [attr.colspan]=\"tableColumns.length\"\n (click)=\"propagateItemClick(subItem)\"\n >\n <dl class=\"mobile-view-field-wrap\">\n <ng-container *ngFor=\"let column of tableColumns\">\n <div\n *ngIf=\"!column.hidePropertyOnMobile\"\n class=\"mobile-view-field\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n >\n <dt *ngIf=\"!column.hideLabelOnMobile\">\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </dt>\n <dd [ngStyle]=\"column.boldTextOnMobile ? { 'font-weight': '500' } : {'font-weight': '400'}\">\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: subItem }\"></ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ subItem[column.property] }}\n </ng-template>\n </dd>\n <ng-content></ng-content>\n </div>\n </ng-container>\n </dl>\n <span\n role=\"button\"\n tabindex=\"0\"\n class=\"nav-chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId])?.value\"\n >\n <svg\n width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n </td>\n </tr>\n </ng-container>\n\n <!-- Custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TableComponent } from './table.component'\nimport {\n TableAppendableRowsTemplateDirective,\n TableDirective,\n TableFooterTemplateDirective,\n TableTemplateDirective,\n} from './table.directive'\nimport { TrThookPipe } from './tr-thook.pipe'\n\n@NgModule({\n declarations: [\n TableComponent,\n TableDirective,\n TableTemplateDirective,\n TableFooterTemplateDirective,\n TableAppendableRowsTemplateDirective,\n ],\n imports: [CommonModule, ReactiveFormsModule, TranslocoModule, TrThookPipe],\n exports: [\n TableComponent,\n TableTemplateDirective,\n TableFooterTemplateDirective,\n TableAppendableRowsTemplateDirective,\n ],\n})\nexport class NggvTableModule {}\n","/*\n * Public API Surface of table\n */\n\nexport * from './table.component'\nexport * from './table.directive'\nexport * from './tr-thook.pipe'\nexport * from './table.models'\nexport * from './table.module'\n","import { Directive, HostBinding, Input } from '@angular/core'\n\n/**\n * Directive that provides the tab container with data about its child tabs.\n * The directive sets its own active state and adds aria attributes.\n *\n * @example\n * <nggv-tabs>\n * <article tab=\"Tab title 1\"> <!-- Content --> </article>\n * <article tab=\"Tab title 2\" [active]=\"true\"> <!-- Content --> </article>\n * <article tab=\"Tab title 3\" disabled> <!-- Content --> </article>\n * <article tab=\"<strong>Tab title 4</strong>\"> <!-- Content --> </article>\n * </nggv-tabs>\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[tab]',\n standalone: false\n})\nexport class TabDirective {\n /** @internal */\n @HostBinding('class.gds-tabs__panel') baseClass = true\n /** @internal */\n @HostBinding('attr.role') role = 'tabpanel'\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs-panel'\n /** Sets whether this tab should be the active tab on load. */\n @HostBinding('class.-active') @Input() active = false\n /** @internal */\n @HostBinding('attr.hidden') get hidden() {\n return !this.active\n }\n /** Sets the title displayed in the tab list for this child. */\n @Input() tab!: string\n /** Sets whether this tab should be able to be selected. */\n @Input() disabled = false\n /** Identifier used for aria attributes and selection. */\n @Input() id: string | number | undefined // todo: discuss if window.ngv.nextId() should be used\n\n /** @internal */\n @HostBinding('attr.id') get attrId() {\n return `panel-${this.id}`\n }\n\n /** @internal */\n @HostBinding('attr.aria-labelledby') get ariaLabelledby() {\n return `tab-${this.id}`\n }\n}\n","/* eslint-disable no-console */\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n} from '@angular/core'\nimport { NavigationEnd, Router } from '@angular/router'\nimport { Subscription } from 'rxjs'\nimport { filter } from 'rxjs/operators'\n\nimport { TabDirective } from './tab.directive'\nimport { EventTabChange, Tab } from './tabs.models'\n\n@Component({\n selector: 'nggv-tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n standalone: false\n})\nexport class TabsComponent\n implements OnChanges, OnInit, AfterContentInit, OnDestroy\n{\n /** @internal */\n @HostBinding('class.gds-tabs') baseClass = true\n\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'tabs'\n\n /** @internal List of children with a {@link TabDirective}. */\n @ContentChildren(TabDirective) tabRefs: QueryList<TabDirective> =\n new QueryList()\n\n /**\n * List of tabs to generate, this should not be used in conjunction with children that have a {@link TabDirective}.\n * It is useful for generating a list of tabs with links for navigation.\n * If any tab has the link property, a `<router-outlet>` is added below the tabs list.\n */\n @Input() tabs: Tab[] = []\n\n /**\n * Event triggered on initialization and every time the active tab changes.\n * The tab change can be cancelled if event type is set to `'before'` and `cancel()` is called.\n */\n @Output() public ngvTabSwitch = new EventEmitter<EventTabChange>()\n\n /** @internal Adds a `<router-outlet>` below the tabs list. */\n useRouting = false\n\n /** @internal The currently active tab. */\n selectedTab: Tab | undefined\n\n /** @internal If tab switching has started. */\n isSwitching = false\n\n /** @internal */\n protected subs: Subscription[] = []\n\n constructor(protected router: Router) {}\n\n /** @internal */\n static uniqueIds(tabs: Tab[]) {\n const uniqueIds = new Set()\n let offset = 0\n return tabs.map((tab, index) => {\n if (tab.id && !uniqueIds.has(tab.id)) {\n // Id is already unique\n uniqueIds.add(tab.id)\n return { ...tab }\n } else {\n // If no id is set for the tab, use the next available index\n while (uniqueIds.has(index + offset)) offset++\n const id = index + offset\n if (uniqueIds.has(tab.id)) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate tab id \"${tab.id}\" found for tab \"${tab.tab}\", de-duplicating using index + offset. New tab id will be ${id}`,\n )\n }\n uniqueIds.add(id)\n return { ...tab, id }\n }\n })\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.tabs.currentValue) {\n // Update tabs on property updates\n this.updateFromInput()\n }\n }\n\n ngOnInit() {\n // Update tabs on route change\n this.subs.push(\n this.router.events\n .pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))\n .subscribe((e: NavigationEnd) => {\n // Skip if already routing to tab\n if (this.isSwitching) return\n const tab = this.tabs.find(({ link }) => link && e.url.endsWith(link))\n if (tab) {\n this.onSelect(tab.id)\n if (tab.disabled) {\n // Fallback to previously selected tab or first tab not disabled\n const fallbackTab = this.selectedTab\n ? this.selectedTab\n : this.tabs.find(({ disabled }) => !disabled)\n if (fallbackTab && fallbackTab.link)\n this.router.navigateByUrl(fallbackTab.link)\n }\n }\n }),\n )\n }\n\n ngAfterContentInit() {\n // Update tabs on view init\n if (this.tabRefs.length) {\n this.updateFromReferences()\n }\n // Update tabs on view child change\n this.subs.push(this.tabRefs.changes.subscribe(this.updateFromReferences))\n }\n\n /** @internal */\n protected updateFromInput = () => {\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n // Determine if router outlet should be used\n this.useRouting = this.tabs.some(({ link }) => link)\n this.updateTabs()\n }\n\n /** @internal */\n protected updateFromReferences = () => {\n this.tabs = this.tabRefs.map((tabRef) => ({\n tab: tabRef.tab,\n id: tabRef.id,\n active: tabRef.active,\n disabled: tabRef.disabled,\n directive: tabRef,\n }))\n // Make sure each tab has a unique id\n this.tabs = TabsComponent.uniqueIds(this.tabs)\n this.tabs.forEach((tab) => {\n if (tab.directive) tab.directive.id = tab.id\n })\n this.updateTabs()\n }\n\n /** @internal */\n protected updateTabs() {\n const url = window.location.href\n // Select tab if its link matches active url\n let selectedTab = this.tabs.find(\n ({ link, disabled }) => link && !disabled && url.endsWith(link),\n )\n // Fallback to first active tab\n if (!selectedTab) selectedTab = this.tabs.find((tab) => tab.active)\n // Fallback to first tab\n if (!selectedTab) selectedTab = this.tabs[0]\n // Select or give up\n if (selectedTab && this.selectedTab !== selectedTab)\n this.onSelect(selectedTab.id)\n }\n\n ngOnDestroy() {\n this.subs.forEach((sub) => sub.unsubscribe())\n }\n\n /** @internal */\n protected activateTab(tab: Tab) {\n // Deactivate all tabs\n this.tabs.forEach((t) => {\n t.active = false\n if (t.directive) t.directive.active = false\n })\n // Activate selected tab\n tab.active = true\n if (tab.directive) tab.directive.active = true\n // Send end event\n this.ngvTabSwitch.emit({ type: 'end', prev: this.selectedTab, next: tab })\n this.selectedTab = tab\n this.isSwitching = false\n }\n\n /** @internal */\n onSelect(id: string | number | undefined) {\n const selectedTab = this.tabs.find((tab) => tab.id === id)\n if (\n selectedTab &&\n !selectedTab.disabled &&\n selectedTab !== this.selectedTab\n ) {\n let cancelled = false\n // Events are synchronous and allow for tab switch to be cancelled if desired\n this.isSwitching = true\n this.ngvTabSwitch.emit({\n type: 'start',\n prev: this.selectedTab,\n next: selectedTab,\n cancel: () => {\n cancelled = true\n },\n })\n if (cancelled) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n return\n }\n if (selectedTab.link) {\n // Navigate and wait for guard accept route\n this.router\n .navigateByUrl(selectedTab.link, { replaceUrl: true })\n .then((changed) => {\n if (changed === false) {\n this.ngvTabSwitch.emit({\n type: 'cancel',\n prev: this.selectedTab,\n next: selectedTab,\n })\n this.isSwitching = false\n } else this.activateTab(selectedTab)\n })\n } else {\n this.activateTab(selectedTab)\n }\n }\n }\n\n /** @internal */\n onKeyDown(event: KeyboardEvent) {\n const tabElement = event.target as HTMLElement\n if (!tabElement) return false\n const parent = tabElement.parentElement\n switch (event.key) {\n case 'End': // End\n if (parent)\n this.tabFocusHelper(event, parent.lastElementChild as HTMLElement)\n break\n\n case 'Home': // Home\n if (parent)\n this.tabFocusHelper(event, parent.firstElementChild as HTMLElement)\n break\n\n case 'LeftArrow': // Left arrow\n case 'UpArrow': // Up arrow\n this.tabFocusHelper(\n event,\n tabElement.previousElementSibling as HTMLElement,\n )\n break\n\n case 'RightArrow': // Right arrow\n case 'DownArrow': // Down arrow\n this.tabFocusHelper(event, tabElement.nextElementSibling as HTMLElement)\n break\n }\n return true\n }\n\n /** @internal */\n protected tabFocusHelper(event: KeyboardEvent, tabElement: HTMLElement) {\n if (!tabElement || !(tabElement instanceof HTMLElement)) return\n event.preventDefault()\n event.stopPropagation()\n tabElement.focus()\n this.onSelect(tabElement.id.slice(4))\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n class=\"gds-tabs__tablist\"\n role=\"tablist\"\n [attr.data-thook]=\"thook + '-list'\"\n (keydown)=\"onKeyDown($event)\"\n >\n <button\n class=\"gds-tabs__tab\"\n [id]=\"'tab-' + (tab.id !== undefined ? tab.id : '')\"\n role=\"tab\"\n [attr.data-thook]=\"tab.thook || thook + '-tab'\"\n [tabindex]=\"tab.active ? 0 : -1\"\n [attr.aria-controls]=\"'panel-' + (tab.id !== undefined ? tab.id : '')\"\n [attr.aria-selected]=\"tab.active\"\n [class.-selected]=\"tab.active\"\n [disabled]=\"tab.disabled\"\n [innerHTML]=\"t(tab.tab)\"\n (click)=\"onSelect(tab.id)\"\n *ngFor=\"let tab of tabs\"\n ></button>\n </div>\n <article\n *ngIf=\"useRouting\"\n class=\"gds-tabs__panel -active\"\n [id]=\"'panel-' + (selectedTab ? selectedTab.id : '')\"\n [attr.data-thook]=\"thook + '-panel'\"\n [attr.aria-labelledby]=\"'tab-' + (selectedTab ? selectedTab.id : '')\"\n >\n <router-outlet></router-outlet>\n </article>\n <ng-content *ngIf=\"!useRouting\"></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { RouterModule } from '@angular/router'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { TabDirective } from './tab.directive'\nimport { TabsComponent } from './tabs.component'\n\n@NgModule({\n declarations: [TabDirective, TabsComponent],\n imports: [CommonModule, TranslocoModule, RouterModule],\n exports: [TabDirective, TabsComponent],\n})\nexport class NggvTabsModule {}\n","/*\n * Public API Surface of tabs\n */\n\nexport * from './tab.directive'\nexport * from './tabs.component'\nexport * from './tabs.models'\nexport * from './tabs.module'\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@jsverse/transloco'\n\nimport { NggvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n standalone: false\n})\nexport class NggvTextareaComponent extends NggvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n 'textarea'\n\n /**\n * Sets the small class based on the size input.\n */\n @HostBinding('class.small') get isSmall(): boolean {\n return this.size === 'small'\n }\n\n /**\n * Sets the large class based on the size input.\n */\n @HostBinding('class.large') get isLarge(): boolean {\n return this.size === 'large'\n }\n\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n /**\n * Sets the displayed size of the textarea.\n */\n @Input() size: 'small' | 'large' = 'large'\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"form-info description hide-if-empty\" *ngIf=\"description && descriptionIsVisible\">\n {{ description }}\n</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n </ng-template>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"gds-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required || null\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n title=\"\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div\n class=\"gds-form-item__footer error-wrapper\"\n *transloco=\"let t; read: scope\"\n >\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n solid=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </span>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <span\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"form-info form-info--countdown\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </span>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown'\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTextareaComponent } from './textarea.component'\n\n@NgModule({\n declarations: [NggvTextareaComponent],\n imports: [\n CommonModule,\n NggvI18nModule,\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n ],\n exports: [NggvTextareaComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvTextareaModule {}\n","import { TemplateRef } from '@angular/core'\n\nexport interface ToastMessage {\n type: MessageType | 'success' | 'information' | 'error' | 'warning'\n translocoScope?: string\n titleText?: string\n bodyText?: string\n template?: TemplateRef<any>\n templateContext?: any\n timeout?: number\n timeoutId?: number\n timeoutStartTime?: number\n}\n\nexport enum MessageType {\n Success = 'success',\n Information = 'information',\n Error = 'error',\n Warning = 'warning',\n}\n","import { Injectable, TemplateRef } from '@angular/core'\nimport { Observable, Subject } from 'rxjs'\n\nimport { MessageType, ToastMessage } from './toast.models'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToastMessageService {\n private messages: ToastMessage[] = []\n private messageSubject = new Subject<ToastMessage[]>()\n\n add(message: ToastMessage): void {\n const {\n type,\n translocoScope,\n titleText,\n template,\n templateContext,\n bodyText,\n timeout,\n } = message\n const newMessage: ToastMessage = {\n type: type ? type : MessageType.Information,\n translocoScope,\n titleText: titleText ?? '',\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n addMessage(\n type: 'success' | 'information' | 'error' | 'warning',\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void\n addMessage(\n type: MessageType,\n translocoScope: string,\n titleText: string,\n bodyText?: string,\n timeout?: number,\n template?: TemplateRef<any>,\n templateContext?: any,\n ): void {\n const newMessage: ToastMessage = {\n type,\n translocoScope,\n titleText,\n bodyText,\n timeout,\n template,\n templateContext,\n }\n\n this.removeMessage(newMessage)\n this.messages.push(newMessage)\n this.messageSubject.next([...this.messages])\n this.setMessageRemoveTimeout(newMessage)\n }\n\n removeMessage(message: ToastMessage): void {\n const index = this.getDuplicateMessageIndex(message.titleText ?? '')\n this.removeMessageByIndex(index)\n }\n\n pauseMessageTimeout(message: ToastMessage): void {\n if (message.timeoutStartTime && message.timeout) {\n const remainingTime =\n message.timeoutStartTime - Date.now() + message.timeout * 1000\n\n message.timeout = remainingTime / 1000\n window.clearTimeout(message.timeoutId)\n }\n }\n\n resumeMessageTimeout(message: ToastMessage): void {\n this.setMessageRemoveTimeout(message)\n }\n\n getMessages(): Observable<ToastMessage[]> {\n return this.messageSubject.asObservable()\n }\n\n private getDuplicateMessageIndex(newMessageText: string): number {\n return this.messages.findIndex(\n (message) => message.titleText === newMessageText,\n )\n }\n\n private removeMessageByIndex(id: number): void {\n if (id !== -1) {\n this.messages.splice(id, 1)\n this.messageSubject.next([...this.messages])\n }\n }\n\n private setMessageRemoveTimeout(newMessage: ToastMessage): void {\n if (newMessage.timeout) {\n newMessage.timeoutId = window.setTimeout(\n () => this.removeMessage(newMessage),\n newMessage.timeout * 1000,\n )\n newMessage.timeoutStartTime = Date.now()\n }\n }\n}\n","import { animate, style, transition, trigger } from '@angular/animations'\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core'\nimport { Subscription } from 'rxjs'\n\nimport { ToastMessageService } from './toast-message.service'\nimport { ToastMessage } from './toast.models'\n\nimport '@sebgroup/green-core/components/icon/icons/cross-small.js'\n\n@Component({\n selector: 'nggv-toast',\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [\n trigger('toastAnimation', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(100%)' }),\n animate('300ms ease-in', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n transition(':leave', [\n animate('300ms ease-out', style({ opacity: 0, transform: 'translateY(100%)' })),\n ]),\n ]),\n ],\n standalone: false\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n @Input() closeButtonAriaLabel?: string\n\n private toastMessagesSubscription!: Subscription\n\n messages: ToastMessage[] = []\n\n constructor(private toastMessageService: ToastMessageService) {}\n\n ngOnInit() {\n this.toastMessagesSubscription = this.toastMessageService\n .getMessages()\n .subscribe((messages) => (this.messages = messages))\n }\n\n onMouseEnter(message: ToastMessage) {\n this.toastMessageService.pauseMessageTimeout(message)\n }\n\n onMouseLeave(message: ToastMessage) {\n this.toastMessageService.resumeMessageTimeout(message)\n }\n\n removeMessage(message: ToastMessage) {\n this.toastMessageService.removeMessage(message)\n }\n\n trackByMessageIndex(index: number, message: ToastMessage): number {\n return index;\n }\n\n ngOnDestroy(): void {\n if (this.toastMessagesSubscription) {\n this.toastMessagesSubscription.unsubscribe()\n }\n }\n}\n","<output class=\"messages-container\" aria-live=\"polite\">\n <div\n class=\"message\"\n *ngFor=\"let message of messages; trackBy: trackByMessageIndex\"\n [ngClass]=\"message.type\"\n @toastAnimation\n (mouseenter)=\"onMouseEnter(message)\"\n (mouseleave)=\"onMouseLeave(message)\"\n >\n <div class=\"content\" *transloco=\"let t; read: message.translocoScope\">\n <div class=\"message-type-icon-wrapper\">\n <ng-container *ngIf=\"message.type === 'success'\">\n <i>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M17.6203 6.60836L9.40014 14.8285L6.37976 11.8081C6.23332 11.6617 5.99588 11.6617 5.84942 11.8081L4.96554 12.692C4.8191 12.8384 4.8191 13.0759 4.96554 13.2223L9.13495 17.3917C9.28138 17.5382 9.51882 17.5382 9.66529 17.3917L19.0344 8.02258C19.1809 7.87614 19.1809 7.63871 19.0344 7.49224L18.1506 6.60836C18.0041 6.46193 17.7667 6.46193 17.6203 6.60836Z\"\n fill=\"white\"\n ></path>\n </svg>\n </i>\n </ng-container>\n <ng-container\n *ngIf=\"message.type === 'error' || message.type === 'warning'\"\n >\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM10.8682 7.42857H13.1318C13.3777 7.42857 13.5731 7.635 13.5597 7.8805L13.2948 12.7376C13.2824 12.9649 13.0945 13.1429 12.8669 13.1429H11.1331C10.9055 13.1429 10.7176 12.9649 10.7052 12.7376L10.4402 7.8805C10.4269 7.635 10.6223 7.42857 10.8682 7.42857ZM12 17.0714C11.0927 17.0714 10.3571 16.3359 10.3571 15.4286C10.3571 14.5213 11.0927 13.7857 12 13.7857C12.9073 13.7857 13.6429 14.5213 13.6429 15.4286C13.6429 16.3359 12.9073 17.0714 12 17.0714Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n <ng-container *ngIf=\"message.type === 'information'\">\n <i>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M18.2857 4H5.71429C4.7675 4 4 4.7675 4 5.71429V18.2857C4 19.2325 4.7675 20 5.71429 20H18.2857C19.2325 20 20 19.2325 20 18.2857V5.71429C20 4.7675 19.2325 4 18.2857 4ZM12 7.07143C12.8284 7.07143 13.5 7.743 13.5 8.57143C13.5 9.39986 12.8284 10.0714 12 10.0714C11.1716 10.0714 10.5 9.39986 10.5 8.57143C10.5 7.743 11.1716 7.07143 12 7.07143ZM14 16.1429C14 16.3795 13.8081 16.5714 13.5714 16.5714H10.4286C10.1919 16.5714 10 16.3795 10 16.1429V15.2857C10 15.049 10.1919 14.8571 10.4286 14.8571H10.8571V12.5714H10.4286C10.1919 12.5714 10 12.3795 10 12.1429V11.2857C10 11.049 10.1919 10.8571 10.4286 10.8571H12.7143C12.951 10.8571 13.1429 11.049 13.1429 11.2857V14.8571H13.5714C13.8081 14.8571 14 15.049 14 15.2857V16.1429Z\"\n fill=\"currentColor\"\n />\n </svg>\n </i>\n </ng-container>\n </div>\n <div class=\"text-content\">\n @if (message.template) {\n <ng-template\n [ngTemplateOutlet]=\"message.template\"\n [ngTemplateOutletContext]=\"{ $implicit: message.templateContext }\"\n ></ng-template>\n } @else {\n @if (message.titleText) {\n <div>{{ t(message.titleText) }}</div>\n }\n @if (message.bodyText) {\n <div class=\"text-body-content\">\n {{ t(message.bodyText) }}\n </div>\n }\n }\n </div>\n <button\n class=\"close-icon-button\"\n [ngClass]=\"{ information: message.type === 'information' }\"\n (click)=\"removeMessage(message)\"\n [attr.aria-label]=\"closeButtonAriaLabel\"\n >\n <gds-icon-cross-small\n class=\"close-icon\"\n *nggCoreElement\n ></gds-icon-cross-small>\n </button>\n </div>\n </div>\n</output>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { ToastComponent } from './toast.component'\n\n@NgModule({\n declarations: [ToastComponent],\n imports: [CommonModule, TranslocoModule, NggCoreWrapperModule],\n exports: [ToastComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggvToastModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toast-message.service'\nexport * from './toast.component'\nexport * from './toast.models'\nexport * from './toast.module'\n","export const tooltipBoxStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['z-index', '1045'],\n ['border-radius', '.25rem'],\n ['padding', '.5rem 1rem'],\n ['background-color', '#1a1a1a'],\n ['color', '#fff'],\n ['font-size', '0.875rem'],\n ['font-weight', '400'],\n ['line-height', '1.5'],\n ['padding', '0.5rem'],\n ['pointer-events', 'none'],\n])\n\nexport const tooltipArrowTopStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['bottom', '-1rem'],\n ['left', '50%'],\n ['transform', 'translateX(-50%)'],\n ['border-color', '#1a1a1a transparent transparent'],\n])\n\nexport const tooltipArrowBottomStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['top', '-1rem'],\n ['left', '50%'],\n ['transform', 'translateX(-50%)'],\n ['border-color', 'transparent transparent #1a1a1a'],\n])\n\nexport const tooltipArrowLeftStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['right', '-1rem'],\n ['top', '50%'],\n ['transform', 'translateY(-50%)'],\n ['border-color', 'transparent transparent transparent #1a1a1a'],\n])\n\nexport const tooltipArrowRightStyles = new Map<string, any>([\n ['position', 'absolute'],\n ['width', '0'],\n ['height', '0'],\n ['border', '0.5rem solid transparent'],\n ['left', '-1rem'],\n ['top', '50%'],\n ['transform', 'translateY(-50%)'],\n ['border-color', 'transparent #1a1a1a transparent transparent'],\n])\n\nexport const tooltipArrowStyles = {\n top: tooltipArrowTopStyles,\n bottom: tooltipArrowBottomStyles,\n left: tooltipArrowLeftStyles,\n right: tooltipArrowRightStyles,\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core'\n\nimport { tooltipArrowStyles, tooltipBoxStyles } from './tooltip.styles'\n\nexport type Placement = 'top' | 'right' | 'bottom' | 'left'\n\ntype Position = {\n top?: number\n right?: number\n bottom?: number\n left?: number\n}\n\n/**\n * A tooltip is a text label that acts as a helper to a specific item.\n * Recommended to use value `top` or `bottom` with `placement` for responsive design.\n * Dynamic resizing and tooltip position are a work in progress.\n * https://designlibrary.sebgroup.com/components/component-tooltip\n */\n@Directive({\n selector: '[nggvTooltip]',\n standalone: false\n})\nexport class NggvTooltipDirective\n implements AfterViewInit, OnChanges, OnDestroy\n{\n /** The text that will be shown in the tooltip. */\n @Input() nggvTooltip?: string\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'tooltip'\n /** The side of the anchor which the tooltip will be rendered.\n * Recommended `top` and `bottom` for responsive designs as these are more stable.\n */\n @Input() placement: Placement = 'top'\n /** Initial state and subsequent updates on wether the tooltip is visible. */\n @Input() shown = false\n /** How far off from the text the tooltip will be rendered. */\n @Input() offset = 10\n /** How frequently the tooltip will be re-rendered when the page size changes. */\n @Input() resizeThrottle = 50\n /** Id of tooltip element. */\n @Input() tooltipId?: string\n /** Numeric max-width for tooltip. */\n @Input() maxWidth = 343\n\n /** Emits a show event triggered changing visibility state of the tooltip. */\n @Output() nggvShow = new EventEmitter<HTMLElement>()\n /** Emits a hide event triggered changing visibility state of the tooltip. */\n @Output() nggvHide = new EventEmitter<HTMLElement>()\n\n /** @internal */\n protected timeout = 0\n\n /** @internal */\n protected parentElement: HTMLElement\n\n /** @internal */\n protected anchorElement: HTMLElement\n\n /** @internal */\n protected tooltipElement: HTMLElement | undefined\n\n /** @internal */\n protected arrowElement: HTMLElement | undefined\n\n /** @internal Check if changes should trigger a re-render */\n static shouldUpdate(change: SimpleChange) {\n return (\n change &&\n !change.firstChange &&\n change.previousValue !== change.currentValue\n )\n }\n\n constructor(\n private anchorElementRef: ElementRef,\n private renderer: Renderer2,\n ) {\n this.anchorElement = this.anchorElementRef.nativeElement\n this.parentElement = document.body\n }\n\n ngAfterViewInit() {\n // Set a timeout to allow view to fully render before creating tooltip.\n setTimeout(() => (this.shown ? this.show(true) : this.hide(true)))\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NggvTooltipDirective.shouldUpdate(changes.nggvTooltip) ||\n NggvTooltipDirective.shouldUpdate(changes.placement) ||\n NggvTooltipDirective.shouldUpdate(changes.thook)\n ) {\n this.shown ? this.show(true) : this.hide(true)\n }\n\n if (NggvTooltipDirective.shouldUpdate(changes.shown)) {\n this.shown ? this.show() : this.hide()\n }\n\n if (NggvTooltipDirective.shouldUpdate(changes.offset)) {\n this.updatePosition()\n }\n }\n\n ngOnDestroy() {\n this.hide(true)\n }\n\n /** @internal */\n @HostListener('mouseenter')\n @HostListener('focus')\n onMouseEnter() {\n this.show()\n }\n\n /** @internal */\n @HostListener('mouseleave')\n @HostListener('blur')\n @HostListener('keyup.escape')\n onMouseLeave() {\n this.hide()\n }\n\n /** @internal */\n @HostListener('window:resize')\n resize() {\n if (this.timeout) return\n this.timeout = window.setTimeout(() => {\n this.timeout = 0\n this.updatePosition()\n }, this.resizeThrottle)\n }\n\n /**\n * Sets the visibility state of the tooltip to true and creates a new tooltip if it doesn't exist or `recreate` is set.\n * @param recreate if set to true, destroy any existing tooltip and create a new one.\n */\n show(recreate = false) {\n // Require tooltip text to create\n if (!this.nggvTooltip || this.nggvTooltip.length === 0) return\n\n if (recreate || !this.tooltipElement) {\n this.hide(true)\n this.create(this.nggvTooltip)\n } else {\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n }\n\n this.updatePosition()\n this.shown = true\n this.nggvShow.emit(this.tooltipElement)\n }\n\n /**\n * Sets the visibility state of the tooltip to false and destroys an existing tooltip if `destroy` is set.\n * @param destroy if set to true, destroy any existing tooltip.\n */\n hide(destroy = false) {\n if (!this.tooltipElement) return\n if (this.parentElement.contains(this.tooltipElement)) {\n this.renderer.removeChild(this.parentElement, this.tooltipElement)\n }\n if (destroy) this.destroy()\n this.shown = false\n this.nggvHide.emit(this.tooltipElement)\n }\n\n /**\n * @internal\n * Creates a new tooltip with the set placement and a given text as its body.\n * @param text the string to be displayed in the tooltip body.\n */\n create(text: string) {\n this.tooltipElement = this.renderer.createElement('div')\n this.renderer.addClass(this.tooltipElement, 'gds-tooltip')\n this.renderer.setAttribute(this.tooltipElement, 'data-thook', this.thook)\n this.renderer.setAttribute(this.tooltipElement, 'role', 'tooltip')\n if (this.tooltipId) {\n this.renderer.setAttribute(this.tooltipElement, 'id', this.tooltipId)\n }\n // set styling\n Array.from(tooltipBoxStyles.entries()).forEach(([style, value]) => {\n this.renderer.setStyle(this.tooltipElement, style, value)\n })\n const relativeMaxWidth = this.pxToRem(this.maxWidth)\n this.renderer.setStyle(this.tooltipElement, 'max-width', relativeMaxWidth)\n this.renderer.appendChild(\n this.tooltipElement,\n this.renderer.createText(text),\n )\n\n // add tooltip to DOM\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n\n this.arrowElement = this.renderer.createElement('div')\n this.renderer.addClass(\n this.arrowElement,\n `gds-tooltip__arrow-${this.placement}`,\n )\n\n // add arrow to tooltip element\n this.renderer.appendChild(this.tooltipElement, this.arrowElement)\n }\n\n /**\n * @internal\n * Destroys the current tooltip by un-setting variables, should only be used after detaching elements from the DOM.\n */\n destroy() {\n this.tooltipElement = undefined\n this.arrowElement = undefined\n }\n\n /**\n * @internal\n * Recalculates the position of the tooltip.\n */\n updatePosition() {\n if (!this.tooltipElement || !this.arrowElement) return\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n this.parentElement.scrollTop ||\n 0\n const anchorRect = this.anchorElement.getBoundingClientRect()\n const tooltipRect = this.tooltipElement.getBoundingClientRect()\n const arrowRect = this.arrowElement.getBoundingClientRect()\n\n switch (this.placement) {\n case 'top':\n this.alignVertical(\n true,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'bottom':\n this.alignVertical(\n false,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'left':\n this.alignHorizontal(true, scrollPos, anchorRect, tooltipRect.height)\n break\n\n case 'right':\n this.alignHorizontal(false, scrollPos, anchorRect, tooltipRect.height)\n break\n\n default:\n return\n }\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `top` or `bottom`.\n */\n alignVertical(\n above: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n arrowWidth: number,\n ) {\n const width = this.parentElement.clientWidth\n const anchorMidX = anchor.left + anchor.width / 2\n const tooltip: Position = {}\n const arrow: Position = {}\n\n if (above)\n tooltip.top = anchor.top - tooltipHeight - this.offset + scrollPos\n else tooltip.top = anchor.bottom + this.offset + scrollPos\n\n if (anchorMidX < width / 2) {\n tooltip.left = Math.max(0, anchorMidX - tooltipWidth / 2)\n arrow.left = anchorMidX - tooltip.left\n } else {\n tooltip.right = Math.max(0, width - (anchorMidX + tooltipWidth / 2))\n arrow.right = width - anchorMidX - tooltip.right - arrowWidth\n }\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `left` or `right`.\n */\n alignHorizontal(\n before: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipHeight: number,\n ) {\n const width = this.parentElement.clientWidth\n const top = anchor.top + (anchor.height - tooltipHeight) / 2 + scrollPos\n const tooltip: Position = { top }\n const arrow: Position = { top: tooltipHeight / 2 }\n\n if (before) tooltip.right = width - anchor.left + this.offset\n else tooltip.left = anchor.right + this.offset\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Updates the CSS properties for the tooltip position.\n */\n setStyle(tooltip: Position, arrow: Position) {\n // Tooltip\n Object.entries(tooltip).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.tooltipElement, prop, position)\n })\n\n // Arrow\n Object.entries(arrow).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.arrowElement, prop, position)\n })\n\n Array.from(tooltipArrowStyles[this.placement].entries()).forEach(\n ([style, value]) => {\n this.renderer.setStyle(this.arrowElement, style, value)\n },\n )\n }\n\n private pxToRem(value: number): string {\n const fontSizePx = window\n ?.getComputedStyle(this.parentElement)\n ?.getPropertyValue('font-size')\n const fontSizeNumberMatch = fontSizePx?.match(/\\d{1,}/)\n const fontSize = fontSizeNumberMatch ? +fontSizeNumberMatch[0] : 16\n const remValue = value / fontSize\n return `${remValue}rem`\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { NggvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggvTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n declarations: [NggvTooltipDirective],\n exports: [NggvTooltipDirective],\n imports: [NggvI18nModule],\n})\nexport class NggvTooltipModule {}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport {\n NggCoreWrapperModule,\n SCOPE_RESOLVER,\n} from '@sebgroup/green-angular/src/lib/shared'\nimport { getScopedTagName } from '@sebgroup/green-core/scoping'\nimport { NggvAlertModule } from './alert'\nimport { NggvBaseControlValueAccessorModule } from './base-control-value-accessor'\nimport { NggvBreadcrumbsModule } from './breadcrumbs'\nimport { NggvButtonModule } from './button'\nimport { NggvCardModule } from './card'\nimport { NggvCharacterCountdownDirectiveModule } from './character-countdown/character-countdown.module'\nimport { NggvCheckboxModule } from './checkbox'\nimport { NggvDatepickerModule } from './datepicker'\nimport { NggvDragDropModule } from './drag-drop'\nimport { NggvDropdownModule } from './dropdown'\nimport { NggvTypeaheadModule } from './dropdown/typeahead/typeahead.module'\nimport { NggvExternalLinkDirectiveModule } from './external-link'\nimport { NggvI18nModule } from './i18n'\nimport { NggvInfoCircleModule } from './info-circle'\nimport { NggvInputModule } from './input'\nimport { NggvInputMaskModule } from './input-mask'\nimport { NggvModalModule } from './modal'\nimport { NggvPaginationModule } from './pagination'\nimport { NggvRadioModule } from './radio'\nimport { NggvSlugPipeModule } from './slug'\nimport { NggvTableModule } from './table'\nimport { NggvTabsModule } from './tabs'\nimport { NggvTextareaModule } from './textarea'\nimport { NggvToastModule } from './toast'\nimport { NggvTooltipModule } from './tooltip'\n\n@NgModule({\n declarations: [],\n imports: [CommonModule],\n exports: [\n NggvCharacterCountdownDirectiveModule,\n NggCoreWrapperModule,\n NggvSlugPipeModule,\n NggvAlertModule,\n NggvBaseControlValueAccessorModule,\n NggvBreadcrumbsModule,\n NggvButtonModule,\n NggvCardModule,\n NggvCheckboxModule,\n NggvDatepickerModule,\n NggvDragDropModule,\n NggvDropdownModule,\n NggvExternalLinkDirectiveModule,\n NggvI18nModule,\n NggvInfoCircleModule,\n NggvInputMaskModule,\n NggvInputModule,\n NggvModalModule,\n NggvPaginationModule,\n NggvRadioModule,\n NggvTableModule,\n NggvTabsModule,\n NggvTextareaModule,\n NggvToastModule,\n NggvTooltipModule,\n NggvTypeaheadModule,\n ],\n providers: [\n {\n provide: SCOPE_RESOLVER,\n useValue: { getScopedTagName },\n },\n ],\n})\nexport class NggvModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","NggvExternalLinkDirectiveModule","NggvBaseControlValueAccessorComponent","i2","i4","NggvI18nModule","createMask","i2.CalendarDateDirective","i3.IsDisabledPipe","i4.DateThookPipe","i5.MatchesPipe","i1","i2.CalendarComponent","i3.CalendarControlComponent","i5","i6.DatepickerComponent","NggvInputMaskModule","pick","i5.ValuePipe","NggvModalModule","DropdownUtils","filter","takeUntil","i2.NggvTypeaheadHighlightComponent","i6.NggvDropdownListComponent","i3.NggvTypeaheadHighlightComponent","NggvInputComponent","NggvTooltipModule","distinctUntilChanged","tap","i1.NggvDropdownComponent","i6","NggvCharacterCountdownDirectiveModule","NggvButtonModule","i4.TableDirective","i5.TrThookPipe","i1.ToastMessageService"],"mappings":"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AE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,EAAE,EAAE,YAAY;AAChB,IA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"}