@patter/ngx-components 21.1.8 → 22.1.9

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":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-multi-select/ptr-multi-select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-multi-select/ptr-multi-select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-chip-input/ptr-chip-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-chip-input/ptr-chip-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.html","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.component.ts","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.directive.ts","../../../../projects/patter/ngx-components/src/lib/services/loading.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.html","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.html","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tab/ptr-tab.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster.service.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.html","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nexport interface PtrMenuItem {\n label: string;\n link?: string;\n children?: PtrMenuItem[];\n}\n\n@Component({\n selector: 'ptr-menu',\n imports: [RouterModule],\n templateUrl: './menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./menu.component.scss']\n})\nexport class PtrMenuComponent {\n\n @Input() menuItems: PtrMenuItem[] = [];\n\n}\n","<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, EventEmitter, HostBinding, Input, Output, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\ntype ButtonStyle = 'normal' | 'error' | 'secondary' | 'icon';\n\n@Component({\n selector: 'ptr-button',\n imports: [CommonModule, RouterLink],\n templateUrl: './ptr-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrButtonComponent {\n\n @HostBinding('class') get hostClasses() {\n const hostClass = [];\n if (this.style() === 'secondary') {\n hostClass.push('is-style-outline');\n }\n if (this.style() === 'error') {\n hostClass.push('is-style-error-button');\n }\n if (this.style() === 'icon') {\n hostClass.push('is-style-icon-button');\n }\n if (this.smallSize()) {\n hostClass.push('is-style-smaller-element');\n }\n return hostClass.join(' ');\n }\n\n style = signal<ButtonStyle>('normal');\n type = signal<'button' | 'submit' | 'reset'>('button');\n disabled = signal(false);\n href = signal<string | null>(null);\n routerLink = signal<string | (string | number)[] | null>(null);\n additionalClasses = signal('');\n smallSize = signal(false);\n\n @Input() set buttonStyle(value: ButtonStyle) {\n this.style.set(value);\n }\n\n @Input() set buttonType(value: 'button' | 'submit' | 'reset') {\n this.type.set(value);\n }\n\n @Input() set isDisabled(value: boolean) {\n this.disabled.set(value);\n }\n\n @Input() set hrefLink(value: string | null) {\n this.href.set(value);\n }\n\n @Input() set routerLinkValue(value: string | (string | number)[] | null) {\n this.routerLink.set(value);\n }\n\n @Input() set extraClasses(value: string) {\n this.additionalClasses.set(value);\n }\n\n @Input() set isSmallSize(value: boolean) {\n if (value) {\n this.smallSize.set(true);\n }\n }\n\n @Input() set isIconButton(value: boolean) {\n if (value) {\n this.style.set('icon');\n }\n }\n\n @Input() ariaLabel? = '';\n\n @Output() clicked = new EventEmitter<Event>();\n\n isLink = computed(() => !!this.href() || !!this.routerLink());\n\n buttonClasses = computed(() => {\n const classes = ['wp-block-button__link'];\n\n if (this.style() !== 'normal') {\n classes.push(`wp-block-button__link--${this.style()}`);\n }\n\n if (this.disabled() && this.isLink()) {\n classes.push('disabled');\n }\n\n if (this.additionalClasses()) {\n classes.push(this.additionalClasses());\n }\n\n return classes.join(' ');\n });\n\n onClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n\n}\n","<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n\n@if (isLink()) {\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n</a>\n} @else {\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\n [attr.aria-label]=\"ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n</button>\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\ninterface ProcessedOption {\n type: 'option' | 'group';\n label: string;\n value?: string;\n options?: ProcessedOption[];\n}\n\n@Component({\n selector: 'ptr-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-dialog-list.component.html',\n styleUrls: ['./ptr-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrDialogListComponent {\n\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\n this._options.set(this.processOptions(value));\n }\n @Input() showSearch = false;\n @Input() searchPlaceholder = 'Search...';\n @Input() dialogTitle? = '';\n\n @Output() selectionChange = new EventEmitter<string | null>();\n @Output() dialogClosed = new EventEmitter<void>();\n @Output() searchTermChanged = new EventEmitter<string>();\n\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\n\n private _options = signal<ProcessedOption[]>([]);\n value = signal<string | null>(null);\n searchTerm = signal('');\n highlightedIndex = signal(-1);\n isOpen = signal(false);\n private componentId = Math.random().toString(36).substring(2);\n listId = `${this.componentId}-list`;\n\n filteredOptions = computed(() => {\n const term = this.searchTerm().toLowerCase();\n return this._options().flatMap(item => {\n if (item.type === 'group') {\n const filteredOptions = item.options!.filter(option =>\n option.label.toLowerCase().includes(term)\n );\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\n } else {\n return item.label.toLowerCase().includes(term) ? [item] : [];\n }\n });\n });\n\n openDialog() {\n this.dialog.nativeElement.show();\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n openDialogSilent() {\n this.dialog.nativeElement.setAttribute('open', 'true');\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n closeDialog() {\n this.dialog.nativeElement.close();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.highlightedIndex.set(-1);\n this.dialogClosed.emit();\n this.resetDialogPosition();\n }\n\n updateSearchTerm(term: string) {\n this.searchTerm.set(term);\n this.highlightedIndex.set(-1);\n this.searchTermChanged.emit(term);\n }\n\n onDialogKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closeDialog();\n event.preventDefault();\n }\n\n // When there is no search input and there are options, move input into the first option\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n }\n }\n }\n\n onInputKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeDialog();\n event.preventDefault();\n break;\n }\n }\n\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.selectOption(optionValue);\n event.preventDefault();\n break;\n }\n }\n\n focusOption() {\n if (this.highlightedIndex() >= 0) {\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\n (options[this.highlightedIndex()] as HTMLElement).focus();\n }\n }\n\n selectOption(optionValue: string) {\n this.value.set(optionValue);\n this.selectionChange.emit(optionValue);\n this.closeDialog();\n }\n\n private getTotalOptionsCount(): number {\n return this.filteredOptions().reduce((count, item) => {\n if (item.type === 'group') {\n return count + item.options!.length;\n }\n return count + 1;\n }, 0);\n }\n\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\n if (!options) return [];\n return options.map(option => {\n if (typeof option === 'string') {\n return {\n type: 'option',\n label: option,\n value: option\n };\n } else if ('groupLabel' in option) {\n return {\n type: 'group',\n label: option.groupLabel,\n options: option.options.map(subOption => ({\n type: 'option',\n label: typeof subOption === 'string' ? subOption : subOption.label,\n value: typeof subOption === 'string' ? subOption : subOption.value\n }))\n };\n } else {\n return {\n type: 'option',\n label: option.label,\n value: option.value\n };\n }\n });\n }\n\n adjustDialogPosition() {\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - dialogRect.bottom;\n if (spaceBelow > 0) {\n this.dialog.nativeElement.style.top = '100%';\n } else {\n this.dialog.nativeElement.style.bottom = '100%';\n }\n }\n\n resetDialogPosition() {\n this.dialog.nativeElement.style.top = '';\n this.dialog.nativeElement.style.bottom = '';\n }\n\n}\n","<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\n\n @if(dialogTitle) {\n <p class=\"dialog-title\">{{dialogTitle}}</p>\n }\n\n @if (showSearch) {\n <div>\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\n class=\"search-input\">\n </div>\n }\n\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\n @for (item of filteredOptions(); track item.label) {\n @if (item.type === 'option') {\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n {{ item.label }}\n </li>\n } @else {\n <li role=\"group\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </li>\n @for (option of item.options!; track option.value) {\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n {{ option.label }}\n </li>\n }\n }\n }\n </ul>\n\n</dialog>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\n\n@Component({\n selector: 'ptr-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrSelectComponent),\n multi: true\n }\n ]\n})\nexport class PtrSelectComponent {\n\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\n @Input() showSearch = true;\n @Input() placeholder?: string | null = 'Select an option';\n @Input() label? = '';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n\n @Output() selectionChange = new EventEmitter<string | null>();\n\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\n\n value = signal<string | null>(null);\n\n displayValue = computed(() => {\n const currentValue = this.value();\n if (currentValue === null) return null;\n const allOptions = this.flattenOptions(this.options);\n const selectedOption = allOptions?.find(option => option.value === currentValue);\n return selectedOption ? selectedOption.label : null;\n });\n\n effectivePlaceholder = computed(() => {\n return this.placeholder?.trim() || 'Select an option';\n });\n\n private componentId = Math.random().toString(36).substring(2);\n labelId = `${this.componentId}-label`;\n inputId = `${this.componentId}-input`;\n\n onChange: (value: string | null) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\n !(event.target as HTMLElement).closest('.select-button') &&\n this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n\n toggleDialog() {\n if (this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n } else {\n this.dialogList.openDialog();\n }\n }\n\n onOptionSelected(optionValue: string | null) {\n this.value.set(optionValue);\n this.onChange(optionValue);\n this.onTouched();\n this.selectionChange.emit(optionValue);\n }\n\n writeValue(value: string): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.selectButton?.nativeElement) {\n this.selectButton.nativeElement.disabled = isDisabled;\n }\n }\n\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\n if (!options) return [];\n\n return options.flatMap(option => {\n if (typeof option === 'string') {\n return { value: option, label: option };\n } else if ('groupLabel' in option) {\n return option.options;\n } else {\n return option;\n }\n });\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <button #selectButton type=\"button\" class=\"select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\n <span [attr.id]=\"labelId\" class=\"select-display\">\n @if (displayValue(); as dValue) { {{dValue}} } @else {\n <span class=\"placeholder\">{{effectivePlaceholder()}}</span>\n }\n </span>\n <span class=\"select-arrow\">⏷</span>\n </button>\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n <ptr-dialog-list #dialogList [options]=\"options\" (selectionChange)=\"onOptionSelected($event)\"\n [showSearch]=\"showSearch\" />\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\ninterface ProcessedOption {\n type: 'option' | 'group';\n label: string;\n value?: string;\n options?: ProcessedOption[];\n}\n\n@Component({\n selector: 'ptr-multi-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-multi-dialog-list.component.html',\n styleUrls: ['./ptr-multi-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrMultiDialogListComponent {\n\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\n this._options.set(this.processOptions(value));\n }\n @Input() showSearch = false;\n @Input() searchPlaceholder = 'Search...';\n @Input() dialogTitle? = '';\n @Input() selectedValues: string[] = [];\n @Input() maxSelections?: number;\n @Input() showSelectAll = true;\n\n @Output() selectionChange = new EventEmitter<string[]>();\n @Output() dialogClosed = new EventEmitter<void>();\n @Output() searchTermChanged = new EventEmitter<string>();\n\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\n\n private _options = signal<ProcessedOption[]>([]);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n highlightedIndex = signal(-1);\n isOpen = signal(false);\n private componentId = Math.random().toString(36).substring(2);\n listId = `${this.componentId}-list`;\n\n filteredOptions = computed(() => {\n const term = this.searchTerm().toLowerCase();\n return this._options().flatMap(item => {\n if (item.type === 'group') {\n const filteredOptions = item.options!.filter(option =>\n option.label.toLowerCase().includes(term)\n );\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\n } else {\n return item.label.toLowerCase().includes(term) ? [item] : [];\n }\n });\n });\n\n // Get all available option values (for select all functionality)\n allFilteredOptionValues = computed(() => {\n return this.filteredOptions().flatMap(item => {\n if (item.type === 'group') {\n return item.options!.map(option => option.value!);\n } else {\n return [item.value!];\n }\n });\n });\n\n // Check if all filtered options are selected\n allSelectedState = computed(() => {\n const allValues = this.allFilteredOptionValues();\n const selectedValues = this.selectedItems();\n\n if (allValues.length === 0) return false;\n\n const selectedCount = allValues.filter(value => selectedValues.includes(value)).length;\n\n if (selectedCount === 0) return false;\n if (selectedCount === allValues.length) return true;\n return 'indeterminate'; // Some but not all selected\n });\n\n // Determine if select all should be shown\n shouldShowSelectAll = computed(() => {\n const allValues = this.allFilteredOptionValues();\n\n // Don't show if feature is disabled\n if (!this.showSelectAll) return false;\n\n // Don't show if there's only 1 or no options\n if (allValues.length <= 1) return false;\n\n // Don't show if there are more options than maxSelections\n if (this.maxSelections && allValues.length > this.maxSelections) return false;\n\n return true;\n });\n\n openDialog() {\n this.selectedItems.set([...this.selectedValues]);\n this.dialog.nativeElement.show();\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n openDialogSilent() {\n this.selectedItems.set([...this.selectedValues]);\n this.dialog.nativeElement.setAttribute('open', 'true');\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n closeDialog() {\n this.dialog.nativeElement.close();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.highlightedIndex.set(-1);\n this.dialogClosed.emit();\n this.resetDialogPosition();\n }\n\n updateSearchTerm(term: string) {\n this.searchTerm.set(term);\n this.highlightedIndex.set(-1);\n this.searchTermChanged.emit(term);\n }\n\n onDialogKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closeDialog();\n event.preventDefault();\n }\n\n // When there is no search input and there are options, move input into the first option\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n }\n }\n }\n\n onInputKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeDialog();\n event.preventDefault();\n break;\n }\n }\n\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.toggleOption(optionValue);\n event.preventDefault();\n break;\n }\n }\n\n onSelectAllKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.toggleSelectAll();\n event.preventDefault();\n break;\n }\n }\n\n focusOption() {\n if (this.highlightedIndex() >= 0) {\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\n (options[this.highlightedIndex()] as HTMLElement).focus();\n }\n }\n\n toggleOption(optionValue: string) {\n const currentSelected = this.selectedItems();\n const isSelected = currentSelected.includes(optionValue);\n\n if (isSelected) {\n // Remove from selection\n const newSelected = currentSelected.filter(value => value !== optionValue);\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n } else {\n // Add to selection (if not at max)\n if (!this.maxSelections || currentSelected.length < this.maxSelections) {\n const newSelected = [...currentSelected, optionValue];\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n }\n }\n }\n\n toggleSelectAll() {\n const allValues = this.allFilteredOptionValues();\n const currentSelected = this.selectedItems();\n const allSelectedState = this.allSelectedState();\n\n if (allSelectedState === true) {\n // Deselect all filtered options\n const newSelected = currentSelected.filter(value => !allValues.includes(value));\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n } else {\n // Select all filtered options (respecting max selections)\n const unselectedValues = allValues.filter(value => !currentSelected.includes(value));\n let newSelected = [...currentSelected];\n\n if (this.maxSelections) {\n const remainingSlots = this.maxSelections - currentSelected.length;\n newSelected = [...currentSelected, ...unselectedValues.slice(0, remainingSlots)];\n } else {\n newSelected = [...currentSelected, ...unselectedValues];\n }\n\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n }\n }\n\n isOptionSelected(optionValue: string): boolean {\n return this.selectedItems().includes(optionValue);\n }\n\n canSelectMore(): boolean {\n if (!this.maxSelections) return true;\n return this.selectedItems().length < this.maxSelections;\n }\n\n private getTotalOptionsCount(): number {\n return this.filteredOptions().reduce((count, item) => {\n if (item.type === 'group') {\n return count + item.options!.length;\n }\n return count + 1;\n }, 0);\n }\n\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\n if (!options) return [];\n return options.map(option => {\n if (typeof option === 'string') {\n return {\n type: 'option',\n label: option,\n value: option\n };\n } else if ('groupLabel' in option) {\n return {\n type: 'group',\n label: option.groupLabel,\n options: option.options.map(subOption => ({\n type: 'option',\n label: typeof subOption === 'string' ? subOption : subOption.label,\n value: typeof subOption === 'string' ? subOption : subOption.value\n }))\n };\n } else {\n return {\n type: 'option',\n label: option.label,\n value: option.value\n };\n }\n });\n }\n\n adjustDialogPosition() {\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - dialogRect.bottom;\n if (spaceBelow > 0) {\n this.dialog.nativeElement.style.top = '100%';\n } else {\n this.dialog.nativeElement.style.bottom = '100%';\n }\n }\n\n resetDialogPosition() {\n this.dialog.nativeElement.style.top = '';\n this.dialog.nativeElement.style.bottom = '';\n }\n\n}\n","<dialog #dialog class=\"ptr-multi-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\n\n @if(dialogTitle) {\n <p class=\"dialog-title\">{{dialogTitle}}</p>\n }\n\n @if (showSearch) {\n <div>\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\n class=\"search-input\">\n </div>\n }\n<form>\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\" [attr.aria-multiselectable]=\"true\">\n @if (shouldShowSelectAll()) {\n <li role=\"option\" class=\"select-all-option\" [attr.aria-selected]=\"allSelectedState() === true\"\n [class.selected]=\"allSelectedState() === true\" [class.indeterminate]=\"allSelectedState() === 'indeterminate'\"\n (click)=\"toggleSelectAll()\" (keydown)=\"onSelectAllKeyDown($event)\" [attr.tabindex]=\"0\">\n <input type=\"checkbox\" [checked]=\"allSelectedState() === true\"\n [indeterminate]=\"allSelectedState() === 'indeterminate'\" readonly>\n Select All\n </li>\n }\n @for (item of filteredOptions(); track item.label) {\n @if (item.type === 'option') {\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"isOptionSelected(item.value!)\"\n [class.selected]=\"isOptionSelected(item.value!)\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\n [class.disabled]=\"!canSelectMore() && !isOptionSelected(item.value!)\"\n (click)=\"toggleOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(item.value!)\" [disabled]=\"!canSelectMore() && !isOptionSelected(item.value!)\" readonly>\n {{ item.label }}\n </li>\n } @else {\n <li role=\"group\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </li>\n @for (option of item.options!; track option.value) {\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"isOptionSelected(option.value!)\"\n [class.selected]=\"isOptionSelected(option.value!)\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\n [class.disabled]=\"!canSelectMore() && !isOptionSelected(option.value!)\"\n (click)=\"toggleOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(option.value!)\" [disabled]=\"!canSelectMore() && !isOptionSelected(option.value!)\" readonly>\n {{ option.label }}\n </li>\n }\n }\n }\n </ul>\n</form>\n</dialog>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\nimport { PtrMultiDialogListComponent } from '../../shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component';\n\n@Component({\n selector: 'ptr-multi-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrMultiDialogListComponent\n ],\n templateUrl: './ptr-multi-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./ptr-multi-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrMultiSelectComponent),\n multi: true\n }\n ]\n})\nexport class PtrMultiSelectComponent {\n\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\n @Input() showSearch = true;\n @Input() placeholder?: string | null = 'Select options';\n @Input() label? = '';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n @Input() maxSelections?: number;\n @Input() showSelectAll = true;\n\n @Output() selectionChange = new EventEmitter<string[]>();\n\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\n @ViewChild('dialogList') dialogList!: PtrMultiDialogListComponent;\n\n value = signal<string[]>([]);\n\n selectedOptions = computed(() => {\n const currentValues = this.value();\n if (currentValues.length === 0) return [];\n const allOptions = this.flattenOptions(this.options);\n return allOptions.filter(option => currentValues.includes(option.value));\n });\n\n displayText = computed(() => {\n const selected = this.selectedOptions();\n if (selected.length === 0) return this.effectivePlaceholder();\n if (selected.length === 1) return selected[0].label;\n return `${selected.length} options selected`;\n });\n\n effectivePlaceholder = computed(() => {\n return this.placeholder?.trim() || 'Select options';\n });\n\n private componentId = Math.random().toString(36).substring(2);\n labelId = `${this.componentId}-label`;\n inputId = `${this.componentId}-input`;\n\n onChange: (value: string[]) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\n !(event.target as HTMLElement).closest('.multi-select-button') &&\n this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n\n toggleDialog() {\n if (this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n } else {\n this.dialogList.openDialog();\n }\n }\n\n onSelectionChanged(selectedValues: string[]) {\n this.value.set(selectedValues);\n this.onChange(selectedValues);\n this.onTouched();\n this.selectionChange.emit(selectedValues);\n }\n\n removeSelectedItem(valueToRemove: string) {\n const currentValues = this.value();\n const updatedValues = currentValues.filter(value => value !== valueToRemove);\n this.onSelectionChanged(updatedValues);\n }\n\n writeValue(value: string[]): void {\n this.value.set(value || []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.selectButton?.nativeElement) {\n this.selectButton.nativeElement.disabled = isDisabled;\n }\n }\n\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\n if (!options) return [];\n\n return options.flatMap(option => {\n if (typeof option === 'string') {\n return { value: option, label: option };\n } else if ('groupLabel' in option) {\n return option.options;\n } else {\n return option;\n }\n });\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <button #selectButton type=\"button\" class=\"multi-select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\n <span [attr.id]=\"labelId\" class=\"select-display\">\n @if (selectedOptions().length === 0) {\n <span class=\"placeholder\">{{effectivePlaceholder()}}</span>\n } @else {\n <div class=\"selected-items\">\n @for (option of selectedOptions(); track option.value) {\n <span class=\"selected-chip\">\n {{option.label}}\n <button type=\"button\" class=\"remove-chip\" (click)=\"removeSelectedItem(option.value); $event.stopPropagation()\"\n [attr.aria-label]=\"'Remove ' + option.label\">\n ×\n </button>\n </span>\n }\n </div>\n }\n </span>\n <span class=\"select-arrow\">⏷</span>\n </button>\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n <ptr-multi-dialog-list #dialogList [options]=\"options\" [selectedValues]=\"value()\" [maxSelections]=\"maxSelections\"\n [showSelectAll]=\"showSelectAll\" (selectionChange)=\"onSelectionChanged($event)\" [showSearch]=\"showSearch\" />\n\n</div>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, forwardRef, HostListener, inject, Input, OnInit, signal, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\nimport { debounceTime, distinctUntilChanged, Observable, of, Subject, switchMap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n@Component({\n selector: 'ptr-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './ptr-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrInputComponent),\n multi: true\n }\n ]\n})\nexport class PtrInputComponent implements ControlValueAccessor, OnInit {\n\n @Input() type: 'text' | 'number' | 'email' | 'password' | 'search' | 'hidden' | 'date' | 'time' | 'textarea' = 'text';\n @Input() label = '';\n @Input() placeholder?: string | null = '';\n @Input() autocomplete? = '';\n @Input() description? = '';\n @Input() dialogHelpText? = '';\n @Input() searchFn?: (term: string) => Observable<string[]>;\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n\n @ViewChild('input') input!: ElementRef<HTMLInputElement>;\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\n\n private destroyRef = inject(DestroyRef);\n\n private componentId = Math.random().toString(36).substring(2);\n private minChars = 3;\n private searchTerms = new Subject<string>();\n private hasSelectedOption = false;\n\n inputId = `${this.componentId}-input`;\n inputValue = signal('');\n searchResultOptions = signal<string[]>([]);\n onChange: (value: string) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (this.searchFn) {\n if (!this.dialogList?.dialog.nativeElement.contains(event.target as Node) && this.dialogList?.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n }\n\n ngOnInit(): void {\n this.setupSearch();\n }\n\n private setupSearch() {\n if (this.searchFn) {\n this.searchTerms.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(term => term.length >= this.minChars ? this.searchFn!(term) : of([])),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(results => {\n this.searchResultOptions.set(results);\n if (results.length > 0 && this.dialogList) {\n this.dialogList.openDialogSilent();\n } else {\n this.dialogList.closeDialog();\n }\n });\n }\n }\n\n onInputChange(value: string) {\n this.inputValue.set(value);\n this.onChange(value);\n if (!this.hasSelectedOption && this.searchFn && value.length >= this.minChars) {\n this.searchTerms.next(value);\n }\n this.hasSelectedOption = false;\n }\n\n onOptionSelected(optionValue: string | null) {\n this.hasSelectedOption = true;\n\n this.inputValue.set(optionValue ?? '');\n this.onChange(optionValue ?? '');\n if (this.dialogList) {\n this.dialogList.closeDialog();\n }\n }\n\n onFocus() {\n if (this.searchResultOptions().length > 0 && this.dialogList && !this.hasSelectedOption) {\n this.dialogList.openDialogSilent();\n }\n }\n\n onBlur() {\n this.onTouched();\n }\n\n writeValue(value: string): void {\n this.inputValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.input?.nativeElement) {\n this.input.nativeElement.disabled = isDisabled;\n }\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n <div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n @switch (type) {\n @case ('textarea') {\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\n }\n @default {\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\n }\n }\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n @if (searchFn) {\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\n [dialogTitle]=\"dialogHelpText\" />\n }\n\n</div>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, Input, OnInit, signal, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrButtonComponent } from '../../../ptr-button/ptr-button.component';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\n@Component({\n selector: 'ptr-chip-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrButtonComponent,\n PtrDialogListComponent\n],\n templateUrl: './ptr-chip-input.component.html',\n styleUrls: ['./ptr-chip-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrChipInputComponent),\n multi: true\n }\n ]\n})\nexport class PtrChipInputComponent implements ControlValueAccessor, OnInit {\n @Input() label = '';\n @Input() placeholder?: string | null = 'Add item...';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n @Input() maxItems?: number;\n @Input() suggestions: (PtrOption | PtrOptionGroup | string)[] | undefined;\n /**\n * Auto reopen the suggestions dialog after adding/selecting a chip (default true)\n * as long as maxItems has not been reached.\n */\n @Input() autoReopenAfterSelect = true;\n\n @ViewChild('chipInput') chipInput!: ElementRef<HTMLInputElement>;\n @ViewChild('dialogList') dialogList?: PtrDialogListComponent;\n\n private componentId = Math.random().toString(36).substring(2);\n inputId = `${this.componentId}-input`;\n\n inputValue = signal('');\n chipItems = signal<string[]>([]);\n isDisabled = signal(false);\n\n tempInputControl = new FormControl('');\n\n onChange: (value: string[]) => void = () => { };\n onTouched: () => void = () => { };\n\n ngOnInit(): void {\n this.tempInputControl.valueChanges.subscribe(value => {\n this.inputValue.set(value || '');\n });\n }\n\n addChip(): void {\n const value = this.inputValue().trim();\n if (value && (!this.maxItems || this.chipItems().length < this.maxItems)) {\n // Don't add duplicates\n if (!this.chipItems().includes(value)) {\n const newChips = [...this.chipItems(), value];\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n this.tempInputControl.setValue('');\n this.chipInput.nativeElement.focus();\n this.maybeReopenDialog();\n }\n }\n\n removeChip(index: number): void {\n const newChips = [...this.chipItems()];\n newChips.splice(index, 1);\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // Re-open dialog when typing if closed\n if (!this.dialogList?.isOpen?.() && this.hasSuggestions() && event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n this.openDialog();\n }\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.addChip();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.openDialog();\n } else if (event.key === 'Escape') {\n this.closeDialog();\n } else if (event.key === 'Backspace' && !this.inputValue() && this.chipItems().length > 0) {\n // Remove the last chip when backspace is pressed and input is empty\n this.removeChip(this.chipItems().length - 1);\n }\n }\n\n onBlur(): void {\n // Add the chip when the input loses focus if there's a value\n // but only if the suggestions dialog isn't open\n if (!this.dialogList?.isOpen?.() && this.inputValue().trim()) {\n this.addChip();\n }\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as Node;\n const dialogEl = this.dialogList?.dialog?.nativeElement as HTMLElement | undefined;\n const inputEl = this.chipInput?.nativeElement as HTMLElement | undefined;\n if (\n this.dialogList?.isOpen?.() &&\n dialogEl && !dialogEl.contains(target) &&\n inputEl && !inputEl.contains(target)\n ) {\n this.closeDialog();\n }\n }\n\n openDialog(): void {\n if (this.isDisabled() || (this.maxItems !== undefined && this.chipItems().length >= this.maxItems)) return;\n if (!this.suggestions || this.suggestions.length === 0) return;\n this.dialogList?.openDialog?.();\n }\n\n closeDialog(): void {\n this.dialogList?.closeDialog?.();\n }\n\n onSuggestionSelected(optionValue: string | null) {\n if (!optionValue) {\n this.closeDialog();\n return;\n }\n this.closeDialog();\n this.addChipFromValue(optionValue);\n this.maybeReopenDialog();\n }\n\n private addChipFromValue(value: string) {\n const trimmed = value.trim();\n if (!trimmed) return;\n if (this.maxItems !== undefined && this.chipItems().length >= this.maxItems) return;\n if (!this.chipItems().includes(trimmed)) {\n const newChips = [...this.chipItems(), trimmed];\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n // Clear input and refocus for quick entry\n this.tempInputControl.setValue('');\n this.chipInput?.nativeElement.focus();\n }\n\n private maybeReopenDialog() {\n if (\n this.autoReopenAfterSelect &&\n !this.isDisabled() &&\n (!this.maxItems || this.chipItems().length < this.maxItems) &&\n this.hasSuggestions()\n ) {\n queueMicrotask(() => this.openDialog());\n }\n }\n\n private hasSuggestions(): boolean {\n return !!(this.suggestions && this.suggestions.length > 0);\n }\n\n writeValue(value: string[]): void {\n this.chipItems.set(value || []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n if (isDisabled) {\n this.tempInputControl.disable();\n } else {\n this.tempInputControl.enable();\n }\n }\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <div class=\"ptr-chip-container\">\n <div class=\"ptr-chip-list\">\n @for (chip of chipItems(); track chip; let i = $index) {\n <div class=\"ptr-chip\">\n <span class=\"ptr-chip-text\">{{ chip }}</span>\n <button type=\"button\" class=\"ptr-chip-remove\" (click)=\"removeChip(i)\" [disabled]=\"isDisabled()\"\n aria-label=\"Remove item\">×</button>\n </div>\n }\n </div>\n\n <div class=\"ptr-chip-input-wrapper\">\n <input #chipInput [id]=\"inputId\" type=\"text\" [placeholder]=\"placeholder || ''\" [formControl]=\"tempInputControl\"\n (keydown)=\"onKeyDown($event)\" (blur)=\"onBlur()\" (focus)=\"openDialog()\"\n (input)=\"dialogList?.updateSearchTerm(inputValue())\"\n [disabled]=\"isDisabled() || (maxItems !== undefined && chipItems().length >= maxItems)\" />\n <ptr-button (clicked)=\"addChip()\"\n [isDisabled]=\"!inputValue().trim() || isDisabled() || (maxItems !== undefined && chipItems().length >= maxItems)\">Add</ptr-button>\n </div>\n </div>\n\n <ptr-dialog-list #dialogList [options]=\"suggestions\" [showSearch]=\"false\" [dialogTitle]=\"label\"\n (selectionChange)=\"onSuggestionSelected($event)\" />\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PtrConditionalRule, PtrFormConfig, PtrFormField } from '../interfaces';\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\nimport { PtrSelectComponent } from \"../input/ptr-select/select.component\";\nimport { PtrMultiSelectComponent } from \"../input/ptr-multi-select/ptr-multi-select.component\";\nimport { PtrInputComponent } from '../input/ptr-input/ptr-input.component';\nimport { PtrChipInputComponent } from '../input/ptr-chip-input/ptr-chip-input.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ptr-form',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PtrButtonComponent,\n PtrSelectComponent,\n PtrMultiSelectComponent,\n PtrInputComponent,\n PtrChipInputComponent\n ],\n templateUrl: './form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrFormComponent implements OnInit {\n\n @Input() config!: PtrFormConfig;\n @Input() loading = false;\n @Input() error: string | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Output() formSubmit = new EventEmitter<any>();\n @Output() formGroupCreated = new EventEmitter<FormGroup>();\n\n formGroup!: FormGroup;\n\n private fb = inject(FormBuilder);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.buildForm();\n this.formGroupCreated.emit(this.formGroup);\n this.setupConditionalLogic();\n }\n\n buildForm(): void {\n const group: Record<string, unknown> = {};\n this.config.fields.forEach(field => {\n // Initialize array fields with empty arrays\n if (field.type === 'chips' || field.type === 'multi-select') {\n group[field.name] = [field.value || [], field.validators || []];\n } else {\n group[field.name] = [field.value || '', field.validators || []];\n }\n });\n\n this.formGroup = this.fb.group(group, this.config.formValidators ? { validators: this.config.formValidators } : null);\n }\n\n onSubmit(): void {\n if (this.formGroup.valid) {\n this.formSubmit.emit(this.formGroup.value);\n }\n }\n\n public resetForm(): void {\n this.formGroup.reset();\n this.config.fields.forEach(field => {\n const control = this.formGroup.get(field.name);\n if (field.type === 'chips' || field.type === 'multi-select') {\n control?.setValue(field.value || [], { emitEvent: false });\n } else {\n control?.setValue(field.value || '', { emitEvent: false });\n }\n });\n this.cdr.markForCheck();\n }\n\n // Conditional logic\n setupConditionalLogic(): void {\n this.formGroup.valueChanges.pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n isFieldVisible(field: PtrFormField): boolean {\n if (!field.conditional?.showWhen) {\n return true;\n }\n return this.evaluateConditionalRules(field.conditional.showWhen) as boolean;\n }\n\n getFieldLabel(field: PtrFormField): string {\n if (!field.conditional?.label) {\n return field.label;\n }\n const result = this.evaluateConditionalRules(field.conditional.label);\n return typeof result === 'string' ? result : field.label;\n }\n\n getFieldPlaceholder(field: PtrFormField): string {\n if (!field.conditional?.placeholder) {\n return field.placeholder || '';\n }\n const result = this.evaluateConditionalRules(field.conditional.placeholder);\n return typeof result === 'string' ? result : field.placeholder || '';\n }\n\n private evaluateConditionalRules(rules: PtrConditionalRule[]): string | boolean {\n for (const rule of rules) {\n const fieldValue = this.formGroup.get(rule.field)?.value;\n if (fieldValue === rule.value) {\n return rule.result;\n }\n }\n return false;\n }\n}\n","<div [class]=\"'gform_wrapper ' + config.formClass\">\n\n @if (error) {\n <div class=\"gform_validation_errors\">\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\n </div>\n }\n\n @if (config.title) {\n <div class=\"gform_heading\">\n <h2 class=\"gform_title\">{{ config.title }}</h2>\n </div>\n }\n\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n\n <div class=\"gform_fields\">\n\n @for (field of config.fields; track field.name) {\n @if(isFieldVisible(field)) {\n\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\n\n @switch (field.type) {\n @case ('select') {\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\n }\n @case ('multi-select') {\n <ptr-multi-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\"\n [maxSelections]=\"field.maxSelections\" />\n }\n @case ('chips') {\n <ptr-chip-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\"\n [placeholder]=\"getFieldPlaceholder(field)\" [description]=\"field.description\"\n [maxItems]=\"field.maxItems\" [labelPosition]=\"config.labelPosition\" />\n }\n @default {\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\n }\n }\n\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\n <div class=\"gfield_description validation_message gfield_validation_message\">\n @if (formGroup.get(field.name)?.errors?.['required']) {\n This field is required.\n }\n @if (formGroup.get(field.name)?.errors?.['email']) {\n Please enter a valid email address.\n }\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\n }\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\n }\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\n Please match the required format.\n }\n </div>\n }\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\n formGroup.get(field.name)?.touched) {\n @for (error of formGroup.errors | keyvalue; track error) {\n @if (field.validationMessages[error.key]) {\n <div class=\"gfield_description validation_message gfield_validation_message\">\n {{ field.validationMessages[error.key] }}\n </div>\n }\n }\n }\n </div>\n }\n }\n </div>\n\n @if(config.submitText){\n <div class=\"gform_footer\">\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\n </div>\n }\n\n </form>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';\nimport { filter, map, Observable, startWith } from 'rxjs';\n\n@Component({\n selector: 'ptr-title',\n imports: [CommonModule],\n templateUrl: './ptr-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTitleComponent implements OnInit {\n\n @Input() styleClass = 'entry-title';\n @Input() wrapperStyleClass = '';\n @Input() screenReaderOnly = false;\n\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n private titleStrategy = inject(TitleStrategy);\n\n displayTitle$!: Observable<string>;\n hideTitle$!: Observable<boolean>;\n\n ngOnInit() {\n const routeEvents$ = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n startWith(null),\n map(() => this.getRoute(this.activatedRoute))\n );\n\n this.hideTitle$ = routeEvents$.pipe(\n map(route => !!route.snapshot.data['hideTitle'])\n );\n\n this.displayTitle$ = routeEvents$.pipe(\n map(route => {\n if (route.snapshot.data['hideTitle']) {\n return '';\n }\n // Check for a custom display title in the route data\n const customDisplayTitle = route.snapshot.data['displayTitle'];\n if (customDisplayTitle) {\n return customDisplayTitle;\n }\n // If no custom display title, use the resolved title from TitleStrategy\n const resolvedTitle = this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';\n return resolvedTitle;\n // Remove any common suffix (checking for both ' | ' and ' - ' separators)\n // return this.removeCommonSuffix(resolvedTitle);\n })\n );\n }\n\n private getRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }\n\n}\n","@if ((hideTitle$|async) === false) {\n @if(wrapperStyleClass) {\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\n </header>\n } @else {\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ptr-loading-spinner',\n imports: [],\n template: `<div class=\"ptr-progress-spinner\"></div>`,\n styleUrls: [\"./loading-spinner.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrLoadingSpinnerComponent { }\n","import { ComponentRef, Directive, ElementRef, HostBinding, inject, Input, OnDestroy, Renderer2, ViewContainerRef } from '@angular/core';\nimport { PtrLoadingSpinnerComponent } from './loading-spinner.component';\n\n@Directive({\n selector: '[ptrLoadingSpinner]'\n})\nexport class PtrLoadingSpinnerDirective implements OnDestroy {\n\n private targetEl = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n\n private spinnerInstance?: ComponentRef<PtrLoadingSpinnerComponent>;\n private overlay?: HTMLElement;\n\n @HostBinding('style.position') hostPosition = 'relative';\n\n @Input({ required: true }) set ptrLoadingSpinner(loading: boolean) {\n if (loading) {\n this.addBlurEffect();\n this.addOverlay();\n this.addProgressSpinnerComponent();\n } else {\n this.removeBlurEffect();\n this.removeOverlay();\n this.removeProgressSpinnerComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.spinnerInstance?.destroy();\n this.removeBlurEffect();\n }\n\n private addProgressSpinnerComponent(): void {\n this.spinnerInstance = this.viewContainerRef.createComponent(PtrLoadingSpinnerComponent);\n this.overlay?.appendChild(this.spinnerInstance.location.nativeElement);\n }\n\n private removeProgressSpinnerComponent(): void {\n this.spinnerInstance?.destroy();\n }\n\n private addOverlay(): void {\n this.overlay = this.renderer.createElement('div');\n this.renderer.setStyle(this.overlay, 'display', 'flex');\n this.renderer.setStyle(this.overlay, 'justify-content', 'center');\n this.renderer.setStyle(this.overlay, 'align-items', 'center');\n this.renderer.setStyle(this.overlay, 'position', 'absolute');\n this.renderer.setStyle(this.overlay, 'top', '0');\n this.renderer.setStyle(this.overlay, 'left', '0');\n this.renderer.setStyle(this.overlay, 'width', '100%');\n this.renderer.setStyle(this.overlay, 'height', '100%');\n this.renderer.setStyle(this.overlay, 'min-height', '25px');\n\n this.renderer.appendChild(this.targetEl.nativeElement, this.overlay);\n }\n\n private removeOverlay(): void {\n if (this.overlay) {\n this.renderer.removeChild(this.targetEl.nativeElement, this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addBlurEffect(): void {\n const style = this.renderer.createElement('style');\n const blurRule = `\n .ptr-loading-blur > *:not(:last-child) {\n filter: blur(2px);\n transition: filter 0.3s ease;\n }\n `;\n this.renderer.appendChild(style, this.renderer.createText(blurRule));\n this.renderer.appendChild(document.head, style);\n this.renderer.addClass(this.targetEl.nativeElement, 'ptr-loading-blur');\n }\n\n private removeBlurEffect(): void {\n this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');\n }\n\n}\n","import { computed, Injectable, signal, Signal } from '@angular/core';\n\n/**\n * Optimized Async Loading Service using Angular Signals\n * Supports global loading state and named loading areas with auto-cleanup\n *\n * To use as a non-singleton service, add to providers array in @Component decorator:\n * @Component({\n * selector: 'app-example',\n * templateUrl: './example.component.html',\n * providers: [PtrLoadingService]\n * })\n *\n * Usage:\n * Set loading: this.loadingService.setLoading(true)\n * - Set loading: this.loadingService.setLoading(true, 'areaName')\n *\n * - Get loading (template): {{ loadingService.isLoading()() }}\n * - Get loading (template): {{ loadingService.isLoading('areaName')() }}\n *\n * - Get loading (component): this.loadingService.isLoading()()\n * - Get loading (component): this.loadingService.isLoading('areaName')()\n *\n * - Check if any loading: {{ loadingService.isAnyLoading()() }}\n *\n * - React to loading changes: effect(() => console.log('Loading:', this.loadingService.isLoading('areaName')()))\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrLoadingService {\n\n private globalTaskCount = signal(0);\n private loadingAreas = new Map<string, ReturnType<typeof signal<number>>>();\n\n isLoading(area?: string): Signal<boolean> {\n if (!area) {\n return computed(() => this.globalTaskCount() > 0);\n }\n\n return computed(() => {\n const areaSignal = this.loadingAreas.get(area);\n return areaSignal ? areaSignal() > 0 : false;\n });\n }\n\n isAnyLoading(): Signal<boolean> {\n return computed(() => {\n if (this.globalTaskCount() > 0) return true;\n for (const areaSignal of this.loadingAreas.values()) {\n if (areaSignal() > 0) return true;\n }\n return false;\n });\n }\n\n setLoading(value: boolean, area?: string): void {\n if (!area) {\n this.updateTaskCount(this.globalTaskCount, value);\n } else {\n this.updateNamedAreaLoading(area, value);\n }\n }\n\n resetLoading(area?: string): void {\n if (!area) {\n this.globalTaskCount.set(0);\n } else if (this.loadingAreas.has(area)) {\n this.loadingAreas.get(area)!.set(0);\n this.loadingAreas.delete(area);\n }\n }\n\n private updateNamedAreaLoading(area: string, increment: boolean): void {\n let areaSignal = this.loadingAreas.get(area);\n if (!areaSignal && increment) {\n areaSignal = signal(0);\n this.loadingAreas.set(area, areaSignal);\n }\n\n if (areaSignal) {\n areaSignal.update(count => {\n const newCount = increment ? count + 1 : Math.max(0, count - 1);\n if (newCount === 0) {\n this.loadingAreas.delete(area);\n }\n return newCount;\n });\n }\n }\n\n private updateTaskCount(taskCount: ReturnType<typeof signal<number>>, increment: boolean): void {\n taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));\n }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, AfterViewInit, TemplateRef } from '@angular/core';\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\nimport { CommonModule } from '@angular/common';\n\nexport interface DialogResult<T = unknown> {\n result: boolean;\n data: T | null;\n}\n\n@Component({\n selector: 'ptr-dialog',\n imports: [\n PtrButtonComponent,\n CommonModule\n ],\n templateUrl: './ptr-dialog.component.html',\n styleUrls: [\"./ptr-dialog.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrDialogComponent<T = unknown> implements AfterViewInit {\n\n @ViewChild('dialogElement') dialogElement!: ElementRef<HTMLDialogElement>;\n\n @Input() title = '';\n @Input() message = '';\n @Input() buttonText = 'Confirm';\n @Input() buttonStyle: 'normal' | 'error' | 'secondary' = 'normal';\n @Input() contentTemplate: TemplateRef<unknown> | null = null;\n @Input() hasDefaultContent = true;\n @Input() data: T | null = null;\n\n @Output() closed = new EventEmitter<DialogResult<T>>();\n\n ngAfterViewInit() {\n this.dialogElement.nativeElement.showModal();\n }\n\n close() {\n this.dialogElement.nativeElement.close();\n }\n\n confirm() {\n this.closed.emit({result: true, data: this.data});\n this.close();\n }\n\n onClose() {\n this.closed.emit({result: false, data: this.data});\n }\n\n setData(data: T) {\n this.data = data;\n }\n}\n","<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\n <div class=\"ptr-modal__content\">\n\n <div class=\"ptr-modal__header\">\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\n </div>\n\n @if (hasDefaultContent && !contentTemplate) {\n <p>{{ message }}</p>\n }\n\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: data, dialogInstance: this}\"></ng-container>\n }\n\n <div class=\"ptr-modal__actions\">\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\n </div>\n\n </div>\n</dialog>\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable, TemplateRef, Type, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { DialogResult, PtrDialogComponent } from './ptr-dialog/ptr-dialog.component';\n\nexport interface PtrDialogOptions<T = unknown> {\n title: string;\n message?: string;\n buttonText?: string;\n buttonStyle?: 'normal' | 'error' | 'secondary';\n contentTemplate?: TemplateRef<unknown>;\n data?: T;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrDialogService {\n private appRef = inject(ApplicationRef);\n private injector = inject(EnvironmentInjector);\n\n private dialogComponentRef: ComponentRef<PtrDialogComponent<unknown>> | null = null;\n\n open<T = unknown>(options: PtrDialogOptions<T>): Observable<DialogResult<T>> {\n const dialogResult$ = new Subject<DialogResult<T>>();\n\n this.dialogComponentRef = createComponent(PtrDialogComponent as Type<PtrDialogComponent<unknown>>, {\n environmentInjector: this.injector,\n });\n\n if (!this.dialogComponentRef) {\n throw new Error('Failed to create dialog component');\n }\n\n const { instance } = this.dialogComponentRef;\n\n instance.title = options.title;\n instance.message = options.message || '';\n instance.buttonText = options.buttonText || 'Confirm';\n instance.buttonStyle = options.buttonStyle || 'normal';\n\n if (options.contentTemplate) {\n instance.contentTemplate = options.contentTemplate;\n instance.hasDefaultContent = !options.contentTemplate;\n }\n\n if (options.data !== undefined) {\n instance.data = options.data as unknown;\n }\n\n instance.closed\n .pipe(take(1))\n .subscribe((result: DialogResult<unknown>) => {\n this.removeDialog();\n dialogResult$.next(result as unknown as DialogResult<T>);\n dialogResult$.complete();\n });\n\n document.body.appendChild(this.dialogComponentRef.location.nativeElement);\n this.appRef.attachView(this.dialogComponentRef.hostView);\n\n return dialogResult$.asObservable();\n }\n\n private removeDialog() {\n if (this.dialogComponentRef) {\n this.appRef.detachView(this.dialogComponentRef.hostView);\n this.dialogComponentRef.destroy();\n this.dialogComponentRef = null;\n }\n }\n\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'ptr-tooltip',\n imports: [],\n templateUrl: './ptr-tooltip.component.html',\n styleUrls: [\"./ptr-tooltip.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTooltipComponent {\n\n @Input() content = '';\n\n @ViewChild('tooltipDialog') tooltipDialog!: ElementRef<HTMLDialogElement>;\n\n private tooltipTimer: any;\n\n showTooltip() {\n clearTimeout(this.tooltipTimer);\n this.tooltipTimer = setTimeout(() => {\n this.tooltipDialog.nativeElement.show();\n }, 200); // Small delay to prevent flickering on quick mouse movements\n }\n\n hideTooltip() {\n clearTimeout(this.tooltipTimer);\n this.tooltipTimer = setTimeout(() => {\n this.tooltipDialog.nativeElement.close();\n }, 200); // Small delay to allow moving mouse to tooltip\n }\n\n}\n","<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\n <ng-content></ng-content>\n</span>\n<dialog #tooltipDialog class=\"ptr-tooltip\">\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\n</dialog>","import { ChangeDetectionStrategy, Component, computed, inject, Input } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, distinctUntilChanged } from 'rxjs';\nimport { BreadcrumbRouteInfo, PtrBreadcrumb } from './interfaces';\n@Component({\n selector: 'ptr-breadcrumbs',\n imports: [RouterModule],\n templateUrl: './ptr-breadcrumbs.component.html',\n styleUrl: './ptr-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrBreadcrumbsComponent {\n\n @Input() showFirstSeparator = true;\n\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n\n private routeEvents = toSignal(\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged()\n )\n );\n\n breadcrumbs = computed(() => {\n this.routeEvents();\n return this.createBreadcrumbs(this.activatedRoute.root);\n });\n\n private createBreadcrumbs(route: ActivatedRoute, routeUrl = '', breadcrumbs: PtrBreadcrumb[] = []): PtrBreadcrumb[] {\n const routeChildren: ActivatedRoute[] = route.children;\n if (routeChildren.length === 0) {\n return breadcrumbs;\n }\n for (const child of routeChildren) {\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\n if (routeURL !== '') {\n routeUrl += `/${routeURL}`;\n }\n const { label, url } = this.getLabelForRoute(child);\n\n // Skip if the label is undefined or empty and the path is empty\n if (label && (!breadcrumbs.length || breadcrumbs[breadcrumbs.length - 1].label !== label)) {\n breadcrumbs.push({ label, url: url ?? routeUrl });\n }\n\n return this.createBreadcrumbs(child, routeUrl, breadcrumbs);\n }\n return breadcrumbs;\n }\n\n private getLabelForRoute(route: ActivatedRoute): BreadcrumbRouteInfo {\n const breadcrumbReturnInfo: BreadcrumbRouteInfo = {};\n const customBreadcrumb = route.snapshot.data['breadcrumb'] as BreadcrumbRouteInfo | undefined;\n\n if (customBreadcrumb) {\n if (customBreadcrumb.label) {\n breadcrumbReturnInfo.label = customBreadcrumb.label;\n }\n if (customBreadcrumb.url) {\n breadcrumbReturnInfo.url = customBreadcrumb.url;\n }\n } else if (route.snapshot.title) {\n breadcrumbReturnInfo.label = route.snapshot.title;\n }\n\n return breadcrumbReturnInfo;\n }\n\n}\n","@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n","import { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core';\n\n@Component({\n selector: 'ptr-tab',\n template: '@if(active()){<ng-content></ng-content>}',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTabComponent {\n @Input() label!: string;\n @Input() link?: string;\n\n active = signal(false);\n}\n","\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, effect, ElementRef, inject, QueryList, signal, ViewChildren } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { PtrTabComponent } from '../ptr-tab/ptr-tab.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n@Component({\n selector: 'ptr-tabs',\n imports: [RouterModule],\n templateUrl: './ptr-tabs.component.html',\n styleUrl: './ptr-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTabsComponent implements AfterViewInit {\n\n @ContentChildren(PtrTabComponent) tabComponents!: QueryList<PtrTabComponent>;\n @ViewChildren('tabButton') buttons!: QueryList<ElementRef>;\n\n private router = inject(Router);\n private destroyRef = inject(DestroyRef);\n\n tabs = signal<PtrTabComponent[]>([]);\n activeTabIndex = signal(0);\n useLinks = signal(false);\n sliderPosition = signal({ transform: 'translateX(0)', width: '0' });\n\n constructor() {\n effect(() => {\n const activeTab = this.tabs().find(tab => tab.active());\n if (activeTab?.link) {\n this.router.navigate([activeTab.link]);\n }\n this.updateSliderPosition();\n });\n }\n\n ngAfterViewInit() {\n this.tabComponents.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.updateTabs();\n });\n this.updateTabs();\n }\n\n updateTabs() {\n this.tabs.set(this.tabComponents.toArray());\n this.useLinks.set(this.tabs().some(tab => !!tab.link));\n if (this.tabs().length > 0 && !this.tabs().some(tab => tab.active())) {\n this.selectTab(0);\n } else {\n this.updateSliderPosition();\n }\n }\n\n selectTab(index: number) {\n this.tabs().forEach((tab, i) => tab.active.set(i === index));\n this.activeTabIndex.set(index);\n }\n\n updateSliderPosition() {\n const activeButton = this.buttons?.get(this.activeTabIndex())?.nativeElement;\n if (activeButton) {\n const { offsetLeft, offsetWidth } = activeButton;\n this.sliderPosition.set({\n transform: `translateX(${offsetLeft}px)`,\n width: `${offsetWidth}px`\n });\n }\n }\n\n}\n","<div class=\"tabs-container\" role=\"tablist\">\n @for (tab of tabs(); track $index; let i = $index) {\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\n }\n\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\n</div>\n\n@if (!useLinks()) {\n<div class=\"tab-content\">\n <ng-content></ng-content>\n</div>\n}\n","import { ApplicationRef, ComponentRef, createComponent, DestroyRef, EnvironmentInjector, inject, Injectable, Injector, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { timer } from 'rxjs';\nimport { PtrToast } from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrToasterService {\n\n private destroyRef = inject(DestroyRef);\n private injector = inject(Injector);\n private environmentInjector = inject(EnvironmentInjector);\n private appRef = inject(ApplicationRef);\n\n private toasts = signal<PtrToast[]>([]);\n private counter = 0;\n private toasterComponentRef: ComponentRef<unknown> | null = null;\n\n constructor() {\n this.injectToasterComponent();\n }\n\n private injectToasterComponent() {\n if (this.toasterComponentRef) {\n return;\n }\n\n import('./ptr-toaster/ptr-toaster.component').then(module => {\n this.toasterComponentRef = createComponent(module.PtrToasterComponent, {\n environmentInjector: this.environmentInjector,\n elementInjector: this.injector\n });\n\n const domElem = this.toasterComponentRef.location.nativeElement;\n document.body.appendChild(domElem);\n this.appRef.attachView(this.toasterComponentRef.hostView);\n });\n }\n\n public getToasts() {\n return this.toasts.asReadonly();\n }\n\n public show(message: string, type: PtrToast['type'] = 'info') {\n const id = this.counter++;\n this.toasts.update(toasts => [...toasts, { id, message, type }]);\n\n timer(10000)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.remove(id));\n }\n\n public remove(id: number) {\n this.toasts.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PtrToasterService } from '../ptr-toaster.service';\n\n@Component({\n selector: 'ptr-toaster',\n imports: [CommonModule],\n templateUrl: './ptr-toaster.component.html',\n styleUrl: './ptr-toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrToasterComponent {\n protected toasterService = inject(PtrToasterService);\n}\n","<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasterService.getToasts()(); track toast.id) {\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\n <span>{{toast.message}}</span>\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\n </div>\n }\n</div>\n","/*\n * Public API Surface of ngx-components\n */\n\nexport * from './lib/menu/menu.component';\n\nexport * from './lib/forms/interfaces';\nexport { PtrFormComponent } from './lib/forms/form/form.component';\nexport { PtrSelectComponent } from './lib/forms/input/ptr-select/select.component';\nexport { PtrMultiSelectComponent } from './lib/forms/input/ptr-multi-select/ptr-multi-select.component';\nexport { PtrInputComponent } from './lib/forms/input/ptr-input/ptr-input.component';\nexport { PtrChipInputComponent } from './lib/forms/input/ptr-chip-input/ptr-chip-input.component';\n\nexport { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';\n\nexport { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';\nexport { PtrLoadingSpinnerDirective } from './lib/loading-spinner/loading-spinner.directive';\n\nexport { PtrLoadingService } from './lib/services/loading.service';\n\nexport { PtrButtonComponent } from './lib/ptr-button/ptr-button.component';\n\nexport { PtrDialogService } from './lib/dialog/ptr-dialog.service';\nexport { PtrDialogComponent } from './lib/dialog/ptr-dialog/ptr-dialog.component';\nexport { PtrTooltipComponent } from './lib/dialog/ptr-tooltip/ptr-tooltip.component';\n\nexport { PtrBreadcrumbsComponent } from './lib/ptr-breadcrumbs/ptr-breadcrumbs.component';\nexport { PtrBreadcrumb } from './lib/ptr-breadcrumbs/interfaces';\n\nexport { PtrTabsComponent } from './lib/components/tabs/ptr-tabs/ptr-tabs.component';\nexport { PtrTabComponent } from './lib/components/tabs/ptr-tab/ptr-tab.component';\n\nexport { PtrToasterService } from './lib/ptr-toaster/ptr-toaster.service';\nexport { PtrToasterComponent } from './lib/ptr-toaster/ptr-toaster/ptr-toaster.component';\nexport { PtrToast } from './lib/ptr-toaster/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;MAgBa,gBAAgB,CAAA;IAElB,SAAS,GAAkB,EAAE;uGAF3B,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChB7B,wTASA,EAAA,MAAA,EAAA,CAAA,6hDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDEc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,YAAY,CAAC,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wTAAA,EAAA,MAAA,EAAA,CAAA,6hDAAA,CAAA,EAAA;;sBAKhD;;;MENU,kBAAkB,CAAA;AAE7B,IAAA,IAA0B,WAAW,GAAA;QACnC,MAAM,SAAS,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,WAAW,EAAE;AAChC,YAAA,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAEpC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE;AAC5B,YAAA,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC;;AAEzC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE;AAC3B,YAAA,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC;;AAExC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC;;AAE5C,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG5B,IAAA,KAAK,GAAG,MAAM,CAAc,QAAQ,4EAAC;AACrC,IAAA,IAAI,GAAG,MAAM,CAAgC,QAAQ,2EAAC;AACtD,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAAgB,IAAI,2EAAC;AAClC,IAAA,UAAU,GAAG,MAAM,CAAsC,IAAI,iFAAC;AAC9D,IAAA,iBAAiB,GAAG,MAAM,CAAC,EAAE,wFAAC;AAC9B,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;IAEzB,IAAa,WAAW,CAAC,KAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGvB,IAAa,UAAU,CAAC,KAAoC,EAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGtB,IAAa,UAAU,CAAC,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG1B,IAAa,QAAQ,CAAC,KAAoB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGtB,IAAa,eAAe,CAAC,KAA0C,EAAA;AACrE,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG5B,IAAa,YAAY,CAAC,KAAa,EAAA;AACrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGnC,IAAa,WAAW,CAAC,KAAc,EAAA;QACrC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;;IAI5B,IAAa,YAAY,CAAC,KAAc,EAAA;QACtC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;;;IAIjB,SAAS,GAAI,EAAE;AAEd,IAAA,OAAO,GAAG,IAAI,YAAY,EAAS;IAE7C,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,6EAAC;AAE7D,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,uBAAuB,CAAC;AAEzC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAC,IAAI,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,KAAK,EAAE,CAAA,CAAE,CAAC;;QAGxD,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;;AAG1B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;;AAGxC,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,KAAC,oFAAC;AAEF,IAAA,OAAO,CAAC,KAAY,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,KAAK,CAAC,cAAc,EAAE;YACtB;;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;uGA5Ff,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZ/B,omBAeA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPY,YAAY,wMAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIvB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,YAAY,EAAA,OAAA,EACb,CAAC,YAAY,EAAE,UAAU,CAAC,EAAA,eAAA,EAElB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,omBAAA,EAAA;;sBAI9C,WAAW;uBAAC,OAAO;;sBAyBnB;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAIA;;sBAMA;;sBAMA;;sBAEA;;;MEzDU,sBAAsB,CAAA;IAEjC,IAAa,OAAO,CAAC,KAA0D,EAAA;AAC7E,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;IAEtC,UAAU,GAAG,KAAK;IAClB,iBAAiB,GAAG,WAAW;IAC/B,WAAW,GAAI,EAAE;AAEhB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAiB;AACnD,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAEnC,IAAA,MAAM;AAEnB,IAAA,QAAQ,GAAG,MAAM,CAAoB,EAAE,+EAAC;AAChD,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,4EAAC;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,iFAAC;AACvB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,uFAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACd,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAA,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,OAAO;AAEnC,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;QAC5C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,IAAG;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,MAAM,IACjD,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC1C;gBACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE;;iBAC3E;gBACL,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEhE,SAAC,CAAC;AACJ,KAAC,sFAAC;IAEF,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAChC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGvB,gBAAgB,GAAA;QACd,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;QACtD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGvB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGnC,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,WAAW,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE;;;QAIxB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,EAAE;AAC3F,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;gBACpD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;;;;AAK5B,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;;;IAIN,eAAe,CAAC,KAAoB,EAAE,WAAmB,EAAA;AACvD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;;;IAIN,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAiB,CAAC,KAAK,EAAE;;;AAI7D,IAAA,YAAY,CAAC,WAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,WAAW,EAAE;;IAGZ,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAI;AACnD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,KAAK,GAAG,IAAI,CAAC,OAAQ,CAAC,MAAM;;YAErC,OAAO,KAAK,GAAG,CAAC;SACjB,EAAE,CAAC,CAAC;;AAGC,IAAA,cAAc,CAAC,OAA4D,EAAA;AACjF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AACvB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AAC1B,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,KAAK,EAAE;iBACR;;AACI,iBAAA,IAAI,YAAY,IAAI,MAAM,EAAE;gBACjC,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,CAAC,UAAU;oBACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK;AACxC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK;AAClE,wBAAA,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAC9D,qBAAA,CAAC;iBACH;;iBACI;gBACL,OAAO;AACL,oBAAA,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC;iBACf;;AAEL,SAAC,CAAC;;IAGJ,oBAAoB,GAAA;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACpE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM;AACrD,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM;;aACvC;YACL,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;;;IAInD,mBAAmB,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;;uGAlLlC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBnC,w0DAyCA,EAAA,MAAA,EAAA,CAAA,yvCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BQ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMN,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB;wBACL;qBACH,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w0DAAA,EAAA,MAAA,EAAA,CAAA,yvCAAA,CAAA,EAAA;;sBAIhD;;sBAGA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,QAAQ;;;AEjCrB;MAwBa,kBAAkB,CAAA;AAEpB,IAAA,OAAO;IACP,UAAU,GAAG,IAAI;IACjB,WAAW,GAAmB,kBAAkB;IAChD,KAAK,GAAI,EAAE;IACX,WAAW,GAAI,EAAE;IACjB,aAAa,GAAsB,KAAK;AAEvC,IAAA,eAAe,GAAG,IAAI,YAAY,EAAiB;AAElC,IAAA,YAAY;AACd,IAAA,UAAU;AAEnC,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,4EAAC;AAEnC,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;QACjC,IAAI,YAAY,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,QAAA,MAAM,cAAc,GAAG,UAAU,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,CAAC;QAChF,OAAO,cAAc,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI;AACrD,KAAC,mFAAC;AAEF,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,kBAAkB;AACvD,KAAC,2FAAC;AAEM,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AACrC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AAErC,IAAA,QAAQ,GAAmC,MAAK,GAAI;AACpD,IAAA,SAAS,GAAe,MAAK,GAAI;AAGjC,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;AACtE,YAAA,CAAE,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,gBAAgB,CAAC;AACxD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;;IAIjC,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;aACxB;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;;AAIhC,IAAA,gBAAgB,CAAC,WAA0B,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGxC,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGvB,IAAA,gBAAgB,CAAC,EAAkC,EAAA;AACjD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE;YACpC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;;;AAIjD,IAAA,cAAc,CAAC,OAA4D,EAAA;AACjF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AAEvB,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AAC9B,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;AAClC,iBAAA,IAAI,YAAY,IAAI,MAAM,EAAE;gBACjC,OAAO,MAAM,CAAC,OAAO;;iBAChB;AACL,gBAAA,OAAO,MAAM;;AAEjB,SAAC,CAAC;;uGAxFO,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EARhB;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE;AACV;AACJ,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBL,yxCA8BA,EAAA,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrBQ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,+BACnB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAajB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlB9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,WAAW;wBACX,mBAAmB;wBACnB;qBACH,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EAEpC;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE;AACV;AACJ,qBAAA,EAAA,QAAA,EAAA,yxCAAA,EAAA,MAAA,EAAA,CAAA,ijCAAA,CAAA,EAAA;;sBAIF;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,YAAY;;sBAuBtB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MEvC/B,2BAA2B,CAAA;IAEtC,IAAa,OAAO,CAAC,KAA0D,EAAA;AAC7E,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;IAEtC,UAAU,GAAG,KAAK;IAClB,iBAAiB,GAAG,WAAW;IAC/B,WAAW,GAAI,EAAE;IACjB,cAAc,GAAa,EAAE;AAC7B,IAAA,aAAa;IACb,aAAa,GAAG,IAAI;AAEnB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAC9C,IAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;AACvC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAU;AAEnC,IAAA,MAAM;AAEnB,IAAA,QAAQ,GAAG,MAAM,CAAoB,EAAE,+EAAC;AAChD,IAAA,aAAa,GAAG,MAAM,CAAW,EAAE,oFAAC;AACpC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,iFAAC;AACvB,IAAA,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,uFAAC;AAC7B,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACd,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAA,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,OAAO;AAEnC,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;QAC5C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,IAAG;AACpC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;gBACzB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,MAAM,IACjD,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC1C;gBACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,GAAG,EAAE;;iBAC3E;gBACL,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEhE,SAAC,CAAC;AACJ,KAAC,sFAAC;;AAGF,IAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;QACtC,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,IAAI,IAAG;AAC3C,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,IAAI,CAAC,OAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAM,CAAC;;iBAC5C;AACL,gBAAA,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC;;AAExB,SAAC,CAAC;AACJ,KAAC,8FAAC;;AAGF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAChD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,EAAE;AAE3C,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAExC,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;QAEtF,IAAI,aAAa,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACrC,QAAA,IAAI,aAAa,KAAK,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACnD,OAAO,eAAe,CAAC;AACzB,KAAC,uFAAC;;AAGF,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,EAAE;;QAGhD,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,KAAK;;AAGrC,QAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK;;QAGvC,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,KAAK;AAE7E,QAAA,OAAO,IAAI;AACb,KAAC,0FAAC;IAEF,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;QAChC,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGvB,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;QACtD,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGvB,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,mBAAmB,EAAE;;AAG5B,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGnC,IAAA,eAAe,CAAC,KAAoB,EAAA;AAClC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,WAAW,EAAE;YAClB,KAAK,CAAC,cAAc,EAAE;;;QAIxB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,EAAE;AAC3F,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;gBACpD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;;;;AAK5B,IAAA,cAAc,CAAC,KAAoB,EAAA;AACjC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;;;IAIN,eAAe,CAAC,KAAoB,EAAE,WAAmB,EAAA;AACvD,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBAC9B,KAAK,CAAC,cAAc,EAAE;gBACtB;;;AAIN,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AACrC,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,SAAS;gBACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,WAAW,EAAE;gBAClB,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;gBACN,IAAI,CAAC,eAAe,EAAE;gBACtB,KAAK,CAAC,cAAc,EAAE;gBACtB;;;IAIN,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE;AAChC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAiB,CAAC,KAAK,EAAE;;;AAI7D,IAAA,YAAY,CAAC,WAAmB,EAAA;AAC9B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE;QAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC;QAExD,IAAI,UAAU,EAAE;;AAEd,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,WAAW,CAAC;AAC1E,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;aACjC;;AAEL,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;gBACtE,MAAM,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE,WAAW,CAAC;AACrD,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;;;IAK5C,eAAe,GAAA;AACb,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,EAAE;AAChD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE;AAC5C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEhD,QAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;;AAE7B,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;aACjC;;AAEL,YAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpF,YAAA,IAAI,WAAW,GAAG,CAAC,GAAG,eAAe,CAAC;AAEtC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC,MAAM;AAClE,gBAAA,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;;iBAC3E;gBACL,WAAW,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,gBAAgB,CAAC;;AAGzD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;;AAI1C,IAAA,gBAAgB,CAAC,WAAmB,EAAA;QAClC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;;IAGnD,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI;QACpC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;;IAGjD,oBAAoB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAI;AACnD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,OAAO,KAAK,GAAG,IAAI,CAAC,OAAQ,CAAC,MAAM;;YAErC,OAAO,KAAK,GAAG,CAAC;SACjB,EAAE,CAAC,CAAC;;AAGC,IAAA,cAAc,CAAC,OAA4D,EAAA;AACjF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AACvB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;AAC1B,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,KAAK,EAAE;iBACR;;AACI,iBAAA,IAAI,YAAY,IAAI,MAAM,EAAE;gBACjC,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,CAAC,UAAU;oBACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK;AACxC,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK;AAClE,wBAAA,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAC9D,qBAAA,CAAC;iBACH;;iBACI;gBACL,OAAO;AACL,oBAAA,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC;iBACf;;AAEL,SAAC,CAAC;;IAGJ,oBAAoB,GAAA;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;AACpE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC,MAAM;AACrD,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM;;aACvC;YACL,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;;;IAInD,mBAAmB,GAAA;QACjB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;;uGArSlC,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBxC,45FAsDA,EAAA,MAAA,EAAA,CAAA,qjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDxCQ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,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,EAAAA,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,yEAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMN,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBATvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACL;qBACH,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,45FAAA,EAAA,MAAA,EAAA,CAAA,qjDAAA,CAAA,EAAA;;sBAIhD;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,QAAQ;;;AEpCrB;MAwBa,uBAAuB,CAAA;AAEzB,IAAA,OAAO;IACP,UAAU,GAAG,IAAI;IACjB,WAAW,GAAmB,gBAAgB;IAC9C,KAAK,GAAI,EAAE;IACX,WAAW,GAAI,EAAE;IACjB,aAAa,GAAsB,KAAK;AACxC,IAAA,aAAa;IACb,aAAa,GAAG,IAAI;AAEnB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAE7B,IAAA,YAAY;AACd,IAAA,UAAU;AAEnC,IAAA,KAAK,GAAG,MAAM,CAAW,EAAE,4EAAC;AAE5B,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;AACpD,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,KAAC,sFAAC;AAEF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;AAC7D,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;AACnD,QAAA,OAAO,CAAA,EAAG,QAAQ,CAAC,MAAM,mBAAmB;AAC9C,KAAC,kFAAC;AAEF,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,gBAAgB;AACrD,KAAC,2FAAC;AAEM,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AACrC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AAErC,IAAA,QAAQ,GAA8B,MAAK,GAAI;AAC/C,IAAA,SAAS,GAAe,MAAK,GAAI;AAGjC,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;AACtE,YAAA,CAAE,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC9D,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;;IAIjC,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;aACxB;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;;;AAIhC,IAAA,kBAAkB,CAAC,cAAwB,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;;AAG3C,IAAA,kBAAkB,CAAC,aAAqB,EAAA;AACtC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,EAAE;AAClC,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,aAAa,CAAC;AAC5E,QAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC;;AAGxC,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;;AAG7B,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE;YACpC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;;;AAIjD,IAAA,cAAc,CAAC,OAA4D,EAAA;AACjF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE;AAEvB,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AAC9B,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;;AAClC,iBAAA,IAAI,YAAY,IAAI,MAAM,EAAE;gBACjC,OAAO,MAAM,CAAC,OAAO;;iBAChB;AACL,gBAAA,OAAO,MAAM;;AAEjB,SAAC,CAAC;;uGAtGO,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EARvB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBH,y2DA0CA,EAAA,MAAA,EAAA,CAAA,i1EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjCI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,+BACnB,2BAA2B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAalB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAlBnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACP,WAAW;wBACX,mBAAmB;wBACnB;qBACD,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EAEpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,y2DAAA,EAAA,MAAA,EAAA,CAAA,i1EAAA,CAAA,EAAA;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBAEA,SAAS;uBAAC,cAAc;;sBACxB,SAAS;uBAAC,YAAY;;sBA6BtB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AEnE5C;MAyBa,iBAAiB,CAAA;IAEnB,IAAI,GAAkG,MAAM;IAC5G,KAAK,GAAG,EAAE;IACV,WAAW,GAAmB,EAAE;IAChC,YAAY,GAAI,EAAE;IAClB,WAAW,GAAI,EAAE;IACjB,cAAc,GAAI,EAAE;AACpB,IAAA,QAAQ;IACR,aAAa,GAAsB,KAAK;AAE7B,IAAA,KAAK;AACA,IAAA,UAAU;AAE3B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,QAAQ,GAAG,CAAC;AACZ,IAAA,WAAW,GAAG,IAAI,OAAO,EAAU;IACnC,iBAAiB,GAAG,KAAK;AAEjC,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AACrC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,iFAAC;AACvB,IAAA,mBAAmB,GAAG,MAAM,CAAW,EAAE,0FAAC;AAC1C,IAAA,QAAQ,GAA4B,MAAK,GAAI;AAC7C,IAAA,SAAS,GAAe,MAAK,GAAI;AAGjC,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE;AACtG,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;;;IAKnC,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;;IAGZ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/E,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC,CAAC,SAAS,CAAC,OAAO,IAAG;AACpB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;gBACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AACzC,oBAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;;qBAC7B;AACL,oBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;AAEjC,aAAC,CAAC;;;AAIN,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7E,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;;AAE9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;;AAGhC,IAAA,gBAAgB,CAAC,WAA0B,EAAA;AACzC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAE7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;;;IAIjC,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACvF,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;;;IAItC,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;AAGlB,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;;AAGlC,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAE,UAAmB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,GAAG,UAAU;;;uGArGvC,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBH,k7CAkCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvBI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,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,UAAA,EAAA,IAAA,EACX,mBAAmB,+BACnB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAYb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAAA,OAAA,EACZ;wBACP,WAAW;wBACX,mBAAmB;wBACnB;qBACD,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,k7CAAA,EAAA;;sBAIA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA,SAAS;uBAAC,OAAO;;sBACjB,SAAS;uBAAC,YAAY;;sBAetB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AEpD5C;MA2Ba,qBAAqB,CAAA;IACvB,KAAK,GAAG,EAAE;IACV,WAAW,GAAmB,aAAa;IAC3C,WAAW,GAAI,EAAE;IACjB,aAAa,GAAsB,KAAK;AACxC,IAAA,QAAQ;AACR,IAAA,WAAW;AACpB;;;AAGG;IACM,qBAAqB,GAAG,IAAI;AAEb,IAAA,SAAS;AACR,IAAA,UAAU;AAE3B,IAAA,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,IAAA,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,QAAQ;AAErC,IAAA,UAAU,GAAG,MAAM,CAAC,EAAE,iFAAC;AACvB,IAAA,SAAS,GAAG,MAAM,CAAW,EAAE,gFAAC;AAChC,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAE1B,IAAA,gBAAgB,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAEtC,IAAA,QAAQ,GAA8B,MAAK,GAAI;AAC/C,IAAA,SAAS,GAAe,MAAK,GAAI;IAEjC,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;AAClC,SAAC,CAAC;;IAGJ,OAAO,GAAA;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE;QACtC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE;;YAExE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;AAC7C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAEzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;YACxC,IAAI,CAAC,iBAAiB,EAAE;;;AAIxB,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACtC,QAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAGzB,IAAA,SAAS,CAAC,KAAoB,EAAA;;AAE5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACxI,IAAI,CAAC,UAAU,EAAE;;AAEnB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,OAAO,EAAE;;AACT,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;;AACZ,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACjC,IAAI,CAAC,WAAW,EAAE;;aACb,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEzF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;;;IAIhD,MAAM,GAAA;;;AAGJ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5D,IAAI,CAAC,OAAO,EAAE;;QAEhB,IAAI,CAAC,SAAS,EAAE;;AAIlB,IAAA,eAAe,CAAC,KAAiB,EAAA;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,aAAwC;AAClF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,aAAwC;AACxE,QAAA,IACE,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI;AAC3B,YAAA,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EACpC;YACA,IAAI,CAAC,WAAW,EAAE;;;IAItB,UAAU,GAAA;QACV,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;YAAE;QACpG,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE;AACtD,QAAA,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI;;IAGjC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,EAAE,WAAW,IAAI;;AAGlC,IAAA,oBAAoB,CAAC,WAA0B,EAAA;QAC7C,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE;YAClB;;QAEF,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,iBAAiB,EAAE;;AAGhB,IAAA,gBAAgB,CAAC,KAAa,EAAA;AACpC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YAAE;QAC7E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACvC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC;AAC/C,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;AAGzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,EAAE;;IAG/B,iBAAiB,GAAA;QACvB,IACE,IAAI,CAAC,qBAAqB;YAC1B,CAAC,IAAI,CAAC,UAAU,EAAE;AAClB,aAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3D,YAAA,IAAI,CAAC,cAAc,EAAE,EACrB;YACA,cAAc,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;;;IAInC,cAAc,GAAA;AACpB,QAAA,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;;AAG5D,IAAA,UAAU,CAAC,KAAe,EAAA;QACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;;AAGjC,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGrB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/B,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;;aAC1B;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;;;uGApKvB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EARrB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBH,w1DAwCA,orCD9BI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,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,EACnB,kBAAkB,6NAClB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAcb,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBApBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACP,WAAW;wBACX,mBAAmB;wBACnB,kBAAkB;wBAClB;AACH,qBAAA,EAAA,eAAA,EAGkB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,w1DAAA,EAAA,MAAA,EAAA,CAAA,6nCAAA,CAAA,EAAA;;sBAGA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAKA;;sBAEA,SAAS;uBAAC,WAAW;;sBACrB,SAAS;uBAAC,YAAY;;sBAsEtB,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;MEtF/B,gBAAgB,CAAA;AAElB,IAAA,MAAM;IACN,OAAO,GAAG,KAAK;IACf,KAAK,GAAkB,IAAI;;AAG1B,IAAA,UAAU,GAAG,IAAI,YAAY,EAAO;AACpC,IAAA,gBAAgB,GAAG,IAAI,YAAY,EAAa;AAE1D,IAAA,SAAS;AAED,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAEvC,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1C,IAAI,CAAC,qBAAqB,EAAE;;IAG9B,SAAS,GAAA;QACP,MAAM,KAAK,GAA4B,EAAE;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;;AAEjC,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AAC3D,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;;iBAC1D;AACL,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;;AAEnE,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC;;IAGvH,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;;IAIvC,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AACjC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9C,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AAC3D,gBAAA,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;iBACrD;AACL,gBAAA,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAE9D,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;;IAIzB,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAC9B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACpC,CAAC,SAAS,CAAC,MAAK;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,KAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,EAAE;AAChC,YAAA,OAAO,IAAI;;QAEb,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAY;;AAG7E,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE;YAC7B,OAAO,KAAK,CAAC,KAAK;;AAEpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AACrE,QAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK;;AAG1D,IAAA,mBAAmB,CAAC,KAAmB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE;AACnC,YAAA,OAAO,KAAK,CAAC,WAAW,IAAI,EAAE;;AAEhC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC;AAC3E,QAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;;AAG9D,IAAA,wBAAwB,CAAC,KAA2B,EAAA;AAC1D,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK;AACxD,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,EAAE;gBAC7B,OAAO,IAAI,CAAC,MAAM;;;AAGtB,QAAA,OAAO,KAAK;;uGA9FH,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzB7B,qhIAyFA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3EQ,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,iBAAiB,8KACjB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,aAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,OAAA,EACX;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,kBAAkB;wBAClB,uBAAuB;wBACvB,iBAAiB;wBACjB;qBACH,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qhIAAA,EAAA;;sBAIhD;;sBACA;;sBACA;;sBAGA;;sBACA;;;MEtBU,iBAAiB,CAAA;IAEnB,UAAU,GAAG,aAAa;IAC1B,iBAAiB,GAAG,EAAE;IACtB,gBAAgB,GAAG,KAAK;AAEzB,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,aAAa;AACb,IAAA,UAAU;IAEV,QAAQ,GAAA;AACN,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC1C,MAAM,CAAC,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAAC,EACzE,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAC9C;QAED,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CACjC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CACjD;QAED,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,IAAI,CACpC,GAAG,CAAC,KAAK,IAAG;YACV,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACpC,gBAAA,OAAO,EAAE;;;YAGX,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;YAC9D,IAAI,kBAAkB,EAAE;AACtB,gBAAA,OAAO,kBAAkB;;;AAG3B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvF,YAAA,OAAO,aAAa;;;SAGrB,CAAC,CACH;;AAGK,IAAA,QAAQ,CAAC,KAAqB,EAAA;AACpC,QAAA,OAAO,KAAK,CAAC,UAAU,EAAE;AACvB,YAAA,KAAK,GAAG,KAAK,CAAC,UAAU;;AAE1B,QAAA,OAAO,KAAK;;uGA/CH,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX9B,gXASA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,YAAY,CAAC,EAAA,eAAA,EAEN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gXAAA,EAAA;;sBAIhD;;sBACA;;sBACA;;;MENU,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+EAJzB,CAAA,wCAAA,CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qwCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI3C,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,WACtB,EAAE,EAAA,QAAA,EACD,0CAA0C,EAAA,eAAA,EAEnC,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,qwCAAA,CAAA,EAAA;;;MCDtC,0BAA0B,CAAA;AAE7B,IAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC;AAC7B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,IAAA,eAAe;AACf,IAAA,OAAO;IAEgB,YAAY,GAAG,UAAU;IAExD,IAA+B,iBAAiB,CAAC,OAAgB,EAAA;QAC/D,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,2BAA2B,EAAE;;aAC7B;YACL,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,8BAA8B,EAAE;;;IAIzC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;QAC/B,IAAI,CAAC,gBAAgB,EAAE;;IAGjB,2BAA2B,GAAA;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,0BAA0B,CAAC;AACxF,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC;;IAGhE,8BAA8B,GAAA;AACpC,QAAA,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE;;IAGzB,UAAU,GAAA;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;AAC5D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;AACjD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;AAE1D,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;;IAG9D,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC;AACpE,YAAA,IAAI,CAAC,OAAO,GAAG,SAAS;;;IAIpB,aAAa,GAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAClD,QAAA,MAAM,QAAQ,GAAG;;;;;KAKhB;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;;IAGjE,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;;uGAzEjE,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;sBAUE,WAAW;uBAAC,gBAAgB;;sBAE5B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;;ACf3B;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAIU,iBAAiB,CAAA;AAEpB,IAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;AAC3B,IAAA,YAAY,GAAG,IAAI,GAAG,EAA6C;AAE3E,IAAA,SAAS,CAAC,IAAa,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;;QAGnD,OAAO,QAAQ,CAAC,MAAK;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9C,YAAA,OAAO,UAAU,GAAG,UAAU,EAAE,GAAG,CAAC,GAAG,KAAK;AAC9C,SAAC,CAAC;;IAGJ,YAAY,GAAA;QACV,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI;YAC3C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;gBACnD,IAAI,UAAU,EAAE,GAAG,CAAC;AAAE,oBAAA,OAAO,IAAI;;AAEnC,YAAA,OAAO,KAAK;AACd,SAAC,CAAC;;IAGJ,UAAU,CAAC,KAAc,EAAE,IAAa,EAAA;QACtC,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC;;aAC5C;AACL,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC;;;AAI5C,IAAA,YAAY,CAAC,IAAa,EAAA;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;;aACtB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;IAI1B,sBAAsB,CAAC,IAAY,EAAE,SAAkB,EAAA;QAC7D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;AAC5B,YAAA,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;;QAGzC,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,MAAM,CAAC,KAAK,IAAG;gBACxB,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;AAC/D,gBAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;AAClB,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;AAEhC,gBAAA,OAAO,QAAQ;AACjB,aAAC,CAAC;;;IAIE,eAAe,CAAC,SAA4C,EAAE,SAAkB,EAAA;AACtF,QAAA,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;;uGA9DhE,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCVY,kBAAkB,CAAA;AAED,IAAA,aAAa;IAEhC,KAAK,GAAG,EAAE;IACV,OAAO,GAAG,EAAE;IACZ,UAAU,GAAG,SAAS;IACtB,WAAW,GAAqC,QAAQ;IACxD,eAAe,GAAgC,IAAI;IACnD,iBAAiB,GAAG,IAAI;IACxB,IAAI,GAAa,IAAI;AAEpB,IAAA,MAAM,GAAG,IAAI,YAAY,EAAmB;IAEtD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,EAAE;;IAG9C,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE;;IAG1C,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE;;IAGd,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC;;AAGpD,IAAA,OAAO,CAAC,IAAO,EAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;uGAhCP,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnB/B,24BAwBA,EAAA,MAAA,EAAA,CAAA,gjCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDZQ,kBAAkB,4NAClB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,OAAA,EACb;wBACL,kBAAkB;wBAClB;qBACH,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,24BAAA,EAAA,MAAA,EAAA,CAAA,gjCAAA,CAAA,EAAA;;sBAIhD,SAAS;uBAAC,eAAe;;sBAEzB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;;MEdU,gBAAgB,CAAA;AACnB,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEtC,kBAAkB,GAAqD,IAAI;AAEnF,IAAA,IAAI,CAAc,OAA4B,EAAA;AAC5C,QAAA,MAAM,aAAa,GAAG,IAAI,OAAO,EAAmB;AAEpD,QAAA,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,kBAAuD,EAAE;YACjG,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AACnC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;;AAGtD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,kBAAkB;AAE5C,QAAA,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;QAC9B,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE;QACxC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,SAAS;QACrD,QAAQ,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ;AAEtD,QAAA,IAAI,OAAO,CAAC,eAAe,EAAE;AAC3B,YAAA,QAAQ,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe;AAClD,YAAA,QAAQ,CAAC,iBAAiB,GAAG,CAAC,OAAO,CAAC,eAAe;;AAGvD,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9B,YAAA,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAe;;AAGzC,QAAA,QAAQ,CAAC;AACN,aAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,aAAA,SAAS,CAAC,CAAC,MAA6B,KAAI;YAC3C,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,aAAa,CAAC,IAAI,CAAC,MAAoC,CAAC;YACxD,aAAa,CAAC,QAAQ,EAAE;AAC1B,SAAC,CAAC;AAEJ,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAExD,QAAA,OAAO,aAAa,CAAC,YAAY,EAAE;;IAG7B,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AACxD,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;;;uGAnDvB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;MAUa,mBAAmB,CAAA;IAErB,OAAO,GAAG,EAAE;AAEO,IAAA,aAAa;AAEjC,IAAA,YAAY;IAEpB,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,EAAE;AACzC,SAAC,EAAE,GAAG,CAAC,CAAC;;IAGV,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1C,SAAC,EAAE,GAAG,CAAC,CAAC;;uGAnBC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,uNCVhC,2PAKS,EAAA,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDKI,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,OAAA,EACd,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2PAAA,EAAA,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA;;sBAIhD;;sBAEA,SAAS;uBAAC,eAAe;;;MEFf,uBAAuB,CAAA;IAEzB,kBAAkB,GAAG,IAAI;AAE1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAEvC,WAAW,GAAG,QAAQ,CAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrB,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC,EAC/C,oBAAoB,EAAE,CACvB,CACF;AAED,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC1B,IAAI,CAAC,WAAW,EAAE;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzD,KAAC,kFAAC;IAEM,iBAAiB,CAAC,KAAqB,EAAE,QAAQ,GAAG,EAAE,EAAE,cAA+B,EAAE,EAAA;AAC/F,QAAA,MAAM,aAAa,GAAqB,KAAK,CAAC,QAAQ;AACtD,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,WAAW;;AAEpB,QAAA,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE;YACjC,MAAM,QAAQ,GAAW,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAClF,YAAA,IAAI,QAAQ,KAAK,EAAE,EAAE;AACnB,gBAAA,QAAQ,IAAI,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE;;AAE5B,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;YAGnD,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AACzF,gBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;;YAGnD,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC;;AAE7D,QAAA,OAAO,WAAW;;AAGZ,IAAA,gBAAgB,CAAC,KAAqB,EAAA;QAC5C,MAAM,oBAAoB,GAAwB,EAAE;QACpD,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAoC;QAE7F,IAAI,gBAAgB,EAAE;AACpB,YAAA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC1B,gBAAA,oBAAoB,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK;;AAErD,YAAA,IAAI,gBAAgB,CAAC,GAAG,EAAE;AACxB,gBAAA,oBAAoB,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG;;;AAE5C,aAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC/B,oBAAoB,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;;AAGnD,QAAA,OAAO,oBAAoB;;uGAxDlB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZpC,iqBAgBA,EAAA,MAAA,EAAA,CAAA,49BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKb,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,WAClB,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iqBAAA,EAAA,MAAA,EAAA,CAAA,49BAAA,CAAA,EAAA;;sBAIhD;;;MEPU,eAAe,CAAA;AACjB,IAAA,KAAK;AACL,IAAA,IAAI;AAEb,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;uGAJX,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,6GAHhB,0CAA0C,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGzC,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE,0CAA0C;oBACpD,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;;sBAEE;;sBACA;;;MCKU,gBAAgB,CAAA;AAEO,IAAA,aAAa;AACpB,IAAA,OAAO;AAE1B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,IAAA,IAAI,GAAG,MAAM,CAAoB,EAAE,2EAAC;AACpC,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,qFAAC;AAC1B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,IAAA,cAAc,GAAG,MAAM,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,qFAAC;AAEnE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;AACvD,YAAA,IAAI,SAAS,EAAE,IAAI,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;YAExC,IAAI,CAAC,oBAAoB,EAAE;AAC7B,SAAC,CAAC;;IAGJ,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,UAAU,EAAE;AACnB,SAAC,CAAC;QACJ,IAAI,CAAC,UAAU,EAAE;;IAGnB,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;AACpE,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;aACZ;YACL,IAAI,CAAC,oBAAoB,EAAE;;;AAI/B,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;;IAGhC,oBAAoB,GAAA;AAClB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,aAAa;QAC5E,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,YAAY;AAChD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBACtB,SAAS,EAAE,CAAA,WAAA,EAAc,UAAU,CAAA,GAAA,CAAK;gBACxC,KAAK,EAAE,CAAA,EAAG,WAAW,CAAA,EAAA;AACtB,aAAA,CAAC;;;uGAtDK,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAEV,eAAe,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBlC,qiBAcA,+jBDLc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qiBAAA,EAAA,MAAA,EAAA,CAAA,wgBAAA,CAAA,EAAA;;sBAIhD,eAAe;uBAAC,eAAe;;sBAC/B,YAAY;uBAAC,WAAW;;;METd,iBAAiB,CAAA;AAEpB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAE/B,IAAA,MAAM,GAAG,MAAM,CAAa,EAAE,6EAAC;IAC/B,OAAO,GAAG,CAAC;IACX,mBAAmB,GAAiC,IAAI;AAEhE,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,sBAAsB,EAAE;;IAGvB,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B;;QAGF,oEAA6C,CAAC,IAAI,CAAC,MAAM,IAAG;YAC1D,IAAI,CAAC,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACrE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;gBAC7C,eAAe,EAAE,IAAI,CAAC;AACvB,aAAA,CAAC;YAEF,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa;AAC/D,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;AAC3D,SAAC,CAAC;;IAGG,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;;AAG1B,IAAA,IAAI,CAAC,OAAe,EAAE,IAAA,GAAyB,MAAM,EAAA;AAC1D,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,KAAK,CAAC,KAAK;AACR,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;;AAG9B,IAAA,MAAM,CAAC,EAAU,EAAA;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;;uGA9CpD,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCIY,mBAAmB,CAAA;AACpB,IAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;uGADzC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXhC,yXAQA,EAAA,MAAA,EAAA,CAAA,8pBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDFc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,YAAY,CAAC,EAAA,eAAA,EAGN,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yXAAA,EAAA,MAAA,EAAA,CAAA,8pBAAA,CAAA,EAAA;;;;;;;;AETnD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-multi-select/ptr-multi-select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-multi-select/ptr-multi-select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-chip-input/ptr-chip-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-chip-input/ptr-chip-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.html","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.component.ts","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.directive.ts","../../../../projects/patter/ngx-components/src/lib/services/loading.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.html","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.html","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tab/ptr-tab.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster.service.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.html","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nexport interface PtrMenuItem {\n label: string;\n link?: string;\n children?: PtrMenuItem[];\n}\n\n@Component({\n selector: 'ptr-menu',\n imports: [RouterModule],\n templateUrl: './menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./menu.component.scss']\n})\nexport class PtrMenuComponent {\n\n @Input() menuItems: PtrMenuItem[] = [];\n\n}\n","<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, EventEmitter, HostBinding, Input, Output, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\ntype ButtonStyle = 'normal' | 'error' | 'secondary' | 'icon';\n\n@Component({\n selector: 'ptr-button',\n imports: [CommonModule, RouterLink],\n templateUrl: './ptr-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrButtonComponent {\n\n @HostBinding('class') get hostClasses() {\n const hostClass = [];\n if (this.style() === 'secondary') {\n hostClass.push('is-style-outline');\n }\n if (this.style() === 'error') {\n hostClass.push('is-style-error-button');\n }\n if (this.style() === 'icon') {\n hostClass.push('is-style-icon-button');\n }\n if (this.smallSize()) {\n hostClass.push('is-style-smaller-element');\n }\n return hostClass.join(' ');\n }\n\n style = signal<ButtonStyle>('normal');\n type = signal<'button' | 'submit' | 'reset'>('button');\n disabled = signal(false);\n href = signal<string | null>(null);\n routerLink = signal<string | (string | number)[] | null>(null);\n additionalClasses = signal('');\n smallSize = signal(false);\n\n @Input() set buttonStyle(value: ButtonStyle) {\n this.style.set(value);\n }\n\n @Input() set buttonType(value: 'button' | 'submit' | 'reset') {\n this.type.set(value);\n }\n\n @Input() set isDisabled(value: boolean) {\n this.disabled.set(value);\n }\n\n @Input() set hrefLink(value: string | null) {\n this.href.set(value);\n }\n\n @Input() set routerLinkValue(value: string | (string | number)[] | null) {\n this.routerLink.set(value);\n }\n\n @Input() set extraClasses(value: string) {\n this.additionalClasses.set(value);\n }\n\n @Input() set isSmallSize(value: boolean) {\n if (value) {\n this.smallSize.set(true);\n }\n }\n\n @Input() set isIconButton(value: boolean) {\n if (value) {\n this.style.set('icon');\n }\n }\n\n @Input() ariaLabel? = '';\n\n @Output() clicked = new EventEmitter<Event>();\n\n isLink = computed(() => !!this.href() || !!this.routerLink());\n\n buttonClasses = computed(() => {\n const classes = ['wp-block-button__link'];\n\n if (this.style() !== 'normal') {\n classes.push(`wp-block-button__link--${this.style()}`);\n }\n\n if (this.disabled() && this.isLink()) {\n classes.push('disabled');\n }\n\n if (this.additionalClasses()) {\n classes.push(this.additionalClasses());\n }\n\n return classes.join(' ');\n });\n\n onClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n return;\n }\n this.clicked.emit(event);\n }\n\n}\n","<ng-template #contentTpl>\n <ng-content></ng-content>\n</ng-template>\n\n@if (isLink()) {\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n</a>\n} @else {\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\n [attr.aria-label]=\"ariaLabel ?? null\">\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\n</button>\n}\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\ninterface ProcessedOption {\n type: 'option' | 'group';\n label: string;\n value?: string;\n options?: ProcessedOption[];\n}\n\n@Component({\n selector: 'ptr-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-dialog-list.component.html',\n styleUrls: ['./ptr-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrDialogListComponent {\n\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\n this._options.set(this.processOptions(value));\n }\n @Input() showSearch = false;\n @Input() searchPlaceholder = 'Search...';\n @Input() dialogTitle? = '';\n\n @Output() selectionChange = new EventEmitter<string | null>();\n @Output() dialogClosed = new EventEmitter<void>();\n @Output() searchTermChanged = new EventEmitter<string>();\n\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\n\n private _options = signal<ProcessedOption[]>([]);\n value = signal<string | null>(null);\n searchTerm = signal('');\n highlightedIndex = signal(-1);\n isOpen = signal(false);\n private componentId = Math.random().toString(36).substring(2);\n listId = `${this.componentId}-list`;\n\n filteredOptions = computed(() => {\n const term = this.searchTerm().toLowerCase();\n return this._options().flatMap(item => {\n if (item.type === 'group') {\n const filteredOptions = item.options!.filter(option =>\n option.label.toLowerCase().includes(term)\n );\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\n } else {\n return item.label.toLowerCase().includes(term) ? [item] : [];\n }\n });\n });\n\n openDialog() {\n this.dialog.nativeElement.show();\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n openDialogSilent() {\n this.dialog.nativeElement.setAttribute('open', 'true');\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n closeDialog() {\n this.dialog.nativeElement.close();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.highlightedIndex.set(-1);\n this.dialogClosed.emit();\n this.resetDialogPosition();\n }\n\n updateSearchTerm(term: string) {\n this.searchTerm.set(term);\n this.highlightedIndex.set(-1);\n this.searchTermChanged.emit(term);\n }\n\n onDialogKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closeDialog();\n event.preventDefault();\n }\n\n // When there is no search input and there are options, move input into the first option\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n }\n }\n }\n\n onInputKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeDialog();\n event.preventDefault();\n break;\n }\n }\n\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.selectOption(optionValue);\n event.preventDefault();\n break;\n }\n }\n\n focusOption() {\n if (this.highlightedIndex() >= 0) {\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\n (options[this.highlightedIndex()] as HTMLElement).focus();\n }\n }\n\n selectOption(optionValue: string) {\n this.value.set(optionValue);\n this.selectionChange.emit(optionValue);\n this.closeDialog();\n }\n\n private getTotalOptionsCount(): number {\n return this.filteredOptions().reduce((count, item) => {\n if (item.type === 'group') {\n return count + item.options!.length;\n }\n return count + 1;\n }, 0);\n }\n\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\n if (!options) return [];\n return options.map(option => {\n if (typeof option === 'string') {\n return {\n type: 'option',\n label: option,\n value: option\n };\n } else if ('groupLabel' in option) {\n return {\n type: 'group',\n label: option.groupLabel,\n options: option.options.map(subOption => ({\n type: 'option',\n label: typeof subOption === 'string' ? subOption : subOption.label,\n value: typeof subOption === 'string' ? subOption : subOption.value\n }))\n };\n } else {\n return {\n type: 'option',\n label: option.label,\n value: option.value\n };\n }\n });\n }\n\n adjustDialogPosition() {\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - dialogRect.bottom;\n if (spaceBelow > 0) {\n this.dialog.nativeElement.style.top = '100%';\n } else {\n this.dialog.nativeElement.style.bottom = '100%';\n }\n }\n\n resetDialogPosition() {\n this.dialog.nativeElement.style.top = '';\n this.dialog.nativeElement.style.bottom = '';\n }\n\n}\n","<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\n\n @if(dialogTitle) {\n <p class=\"dialog-title\">{{dialogTitle}}</p>\n }\n\n @if (showSearch) {\n <div>\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\n class=\"search-input\">\n </div>\n }\n\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\n @for (item of filteredOptions(); track item.label) {\n @if (item.type === 'option') {\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n {{ item.label }}\n </li>\n } @else {\n <li role=\"group\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </li>\n @for (option of item.options!; track option.value) {\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n {{ option.label }}\n </li>\n }\n }\n }\n </ul>\n\n</dialog>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\n\n@Component({\n selector: 'ptr-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrSelectComponent),\n multi: true\n }\n ]\n})\nexport class PtrSelectComponent {\n\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\n @Input() showSearch = true;\n @Input() placeholder?: string | null = 'Select an option';\n @Input() label? = '';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n\n @Output() selectionChange = new EventEmitter<string | null>();\n\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\n\n value = signal<string | null>(null);\n\n displayValue = computed(() => {\n const currentValue = this.value();\n if (currentValue === null) return null;\n const allOptions = this.flattenOptions(this.options);\n const selectedOption = allOptions?.find(option => option.value === currentValue);\n return selectedOption ? selectedOption.label : null;\n });\n\n effectivePlaceholder = computed(() => {\n return this.placeholder?.trim() || 'Select an option';\n });\n\n private componentId = Math.random().toString(36).substring(2);\n labelId = `${this.componentId}-label`;\n inputId = `${this.componentId}-input`;\n\n onChange: (value: string | null) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\n !(event.target as HTMLElement).closest('.select-button') &&\n this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n\n toggleDialog() {\n if (this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n } else {\n this.dialogList.openDialog();\n }\n }\n\n onOptionSelected(optionValue: string | null) {\n this.value.set(optionValue);\n this.onChange(optionValue);\n this.onTouched();\n this.selectionChange.emit(optionValue);\n }\n\n writeValue(value: string): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.selectButton?.nativeElement) {\n this.selectButton.nativeElement.disabled = isDisabled;\n }\n }\n\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\n if (!options) return [];\n\n return options.flatMap(option => {\n if (typeof option === 'string') {\n return { value: option, label: option };\n } else if ('groupLabel' in option) {\n return option.options;\n } else {\n return option;\n }\n });\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <button #selectButton type=\"button\" class=\"select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\n <span [attr.id]=\"labelId\" class=\"select-display\">\n @if (displayValue(); as dValue) { {{dValue}} } @else {\n <span class=\"placeholder\">{{effectivePlaceholder()}}</span>\n }\n </span>\n <span class=\"select-arrow\">⏷</span>\n </button>\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n <ptr-dialog-list #dialogList [options]=\"options\" (selectionChange)=\"onOptionSelected($event)\"\n [showSearch]=\"showSearch\" />\n\n</div>\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\ninterface ProcessedOption {\n type: 'option' | 'group';\n label: string;\n value?: string;\n options?: ProcessedOption[];\n}\n\n@Component({\n selector: 'ptr-multi-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-multi-dialog-list.component.html',\n styleUrls: ['./ptr-multi-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrMultiDialogListComponent {\n\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\n this._options.set(this.processOptions(value));\n }\n @Input() showSearch = false;\n @Input() searchPlaceholder = 'Search...';\n @Input() dialogTitle? = '';\n @Input() selectedValues: string[] = [];\n @Input() maxSelections?: number;\n @Input() showSelectAll = true;\n\n @Output() selectionChange = new EventEmitter<string[]>();\n @Output() dialogClosed = new EventEmitter<void>();\n @Output() searchTermChanged = new EventEmitter<string>();\n\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\n\n private _options = signal<ProcessedOption[]>([]);\n selectedItems = signal<string[]>([]);\n searchTerm = signal('');\n highlightedIndex = signal(-1);\n isOpen = signal(false);\n private componentId = Math.random().toString(36).substring(2);\n listId = `${this.componentId}-list`;\n\n filteredOptions = computed(() => {\n const term = this.searchTerm().toLowerCase();\n return this._options().flatMap(item => {\n if (item.type === 'group') {\n const filteredOptions = item.options!.filter(option =>\n option.label.toLowerCase().includes(term)\n );\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\n } else {\n return item.label.toLowerCase().includes(term) ? [item] : [];\n }\n });\n });\n\n // Get all available option values (for select all functionality)\n allFilteredOptionValues = computed(() => {\n return this.filteredOptions().flatMap(item => {\n if (item.type === 'group') {\n return item.options!.map(option => option.value!);\n } else {\n return [item.value!];\n }\n });\n });\n\n // Check if all filtered options are selected\n allSelectedState = computed(() => {\n const allValues = this.allFilteredOptionValues();\n const selectedValues = this.selectedItems();\n\n if (allValues.length === 0) return false;\n\n const selectedCount = allValues.filter(value => selectedValues.includes(value)).length;\n\n if (selectedCount === 0) return false;\n if (selectedCount === allValues.length) return true;\n return 'indeterminate'; // Some but not all selected\n });\n\n // Determine if select all should be shown\n shouldShowSelectAll = computed(() => {\n const allValues = this.allFilteredOptionValues();\n\n // Don't show if feature is disabled\n if (!this.showSelectAll) return false;\n\n // Don't show if there's only 1 or no options\n if (allValues.length <= 1) return false;\n\n // Don't show if there are more options than maxSelections\n if (this.maxSelections && allValues.length > this.maxSelections) return false;\n\n return true;\n });\n\n openDialog() {\n this.selectedItems.set([...this.selectedValues]);\n this.dialog.nativeElement.show();\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n openDialogSilent() {\n this.selectedItems.set([...this.selectedValues]);\n this.dialog.nativeElement.setAttribute('open', 'true');\n this.adjustDialogPosition();\n this.isOpen.set(true);\n }\n\n closeDialog() {\n this.dialog.nativeElement.close();\n this.isOpen.set(false);\n this.searchTerm.set('');\n this.highlightedIndex.set(-1);\n this.dialogClosed.emit();\n this.resetDialogPosition();\n }\n\n updateSearchTerm(term: string) {\n this.searchTerm.set(term);\n this.highlightedIndex.set(-1);\n this.searchTermChanged.emit(term);\n }\n\n onDialogKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.closeDialog();\n event.preventDefault();\n }\n\n // When there is no search input and there are options, move input into the first option\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n }\n }\n }\n\n onInputKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeDialog();\n event.preventDefault();\n break;\n }\n }\n\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.toggleOption(optionValue);\n event.preventDefault();\n break;\n }\n }\n\n onSelectAllKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\n this.focusOption();\n event.preventDefault();\n break;\n case 'Enter':\n case ' ':\n this.toggleSelectAll();\n event.preventDefault();\n break;\n }\n }\n\n focusOption() {\n if (this.highlightedIndex() >= 0) {\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\n (options[this.highlightedIndex()] as HTMLElement).focus();\n }\n }\n\n toggleOption(optionValue: string) {\n const currentSelected = this.selectedItems();\n const isSelected = currentSelected.includes(optionValue);\n\n if (isSelected) {\n // Remove from selection\n const newSelected = currentSelected.filter(value => value !== optionValue);\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n } else {\n // Add to selection (if not at max)\n if (!this.maxSelections || currentSelected.length < this.maxSelections) {\n const newSelected = [...currentSelected, optionValue];\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n }\n }\n }\n\n toggleSelectAll() {\n const allValues = this.allFilteredOptionValues();\n const currentSelected = this.selectedItems();\n const allSelectedState = this.allSelectedState();\n\n if (allSelectedState === true) {\n // Deselect all filtered options\n const newSelected = currentSelected.filter(value => !allValues.includes(value));\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n } else {\n // Select all filtered options (respecting max selections)\n const unselectedValues = allValues.filter(value => !currentSelected.includes(value));\n let newSelected = [...currentSelected];\n\n if (this.maxSelections) {\n const remainingSlots = this.maxSelections - currentSelected.length;\n newSelected = [...currentSelected, ...unselectedValues.slice(0, remainingSlots)];\n } else {\n newSelected = [...currentSelected, ...unselectedValues];\n }\n\n this.selectedItems.set(newSelected);\n this.selectionChange.emit(newSelected);\n }\n }\n\n isOptionSelected(optionValue: string): boolean {\n return this.selectedItems().includes(optionValue);\n }\n\n canSelectMore(): boolean {\n if (!this.maxSelections) return true;\n return this.selectedItems().length < this.maxSelections;\n }\n\n private getTotalOptionsCount(): number {\n return this.filteredOptions().reduce((count, item) => {\n if (item.type === 'group') {\n return count + item.options!.length;\n }\n return count + 1;\n }, 0);\n }\n\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\n if (!options) return [];\n return options.map(option => {\n if (typeof option === 'string') {\n return {\n type: 'option',\n label: option,\n value: option\n };\n } else if ('groupLabel' in option) {\n return {\n type: 'group',\n label: option.groupLabel,\n options: option.options.map(subOption => ({\n type: 'option',\n label: typeof subOption === 'string' ? subOption : subOption.label,\n value: typeof subOption === 'string' ? subOption : subOption.value\n }))\n };\n } else {\n return {\n type: 'option',\n label: option.label,\n value: option.value\n };\n }\n });\n }\n\n adjustDialogPosition() {\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - dialogRect.bottom;\n if (spaceBelow > 0) {\n this.dialog.nativeElement.style.top = '100%';\n } else {\n this.dialog.nativeElement.style.bottom = '100%';\n }\n }\n\n resetDialogPosition() {\n this.dialog.nativeElement.style.top = '';\n this.dialog.nativeElement.style.bottom = '';\n }\n\n}\n","<dialog #dialog class=\"ptr-multi-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\n\n @if(dialogTitle) {\n <p class=\"dialog-title\">{{dialogTitle}}</p>\n }\n\n @if (showSearch) {\n <div>\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\n class=\"search-input\">\n </div>\n }\n<form>\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\" [attr.aria-multiselectable]=\"true\">\n @if (shouldShowSelectAll()) {\n <li role=\"option\" class=\"select-all-option\" [attr.aria-selected]=\"allSelectedState() === true\"\n [class.selected]=\"allSelectedState() === true\" [class.indeterminate]=\"allSelectedState() === 'indeterminate'\"\n (click)=\"toggleSelectAll()\" (keydown)=\"onSelectAllKeyDown($event)\" [attr.tabindex]=\"0\">\n <input type=\"checkbox\" [checked]=\"allSelectedState() === true\"\n [indeterminate]=\"allSelectedState() === 'indeterminate'\" readonly>\n Select All\n </li>\n }\n @for (item of filteredOptions(); track item.label) {\n @if (item.type === 'option') {\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"isOptionSelected(item.value!)\"\n [class.selected]=\"isOptionSelected(item.value!)\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\n [class.disabled]=\"!canSelectMore() && !isOptionSelected(item.value!)\"\n (click)=\"toggleOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(item.value!)\" [disabled]=\"!canSelectMore() && !isOptionSelected(item.value!)\" readonly>\n {{ item.label }}\n </li>\n } @else {\n <li role=\"group\" [attr.aria-label]=\"item.label\">\n {{ item.label }}\n </li>\n @for (option of item.options!; track option.value) {\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"isOptionSelected(option.value!)\"\n [class.selected]=\"isOptionSelected(option.value!)\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\n [class.disabled]=\"!canSelectMore() && !isOptionSelected(option.value!)\"\n (click)=\"toggleOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\n <input type=\"checkbox\" [checked]=\"isOptionSelected(option.value!)\" [disabled]=\"!canSelectMore() && !isOptionSelected(option.value!)\" readonly>\n {{ option.label }}\n </li>\n }\n }\n }\n </ul>\n</form>\n</dialog>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\nimport { PtrMultiDialogListComponent } from '../../shared/ptr-multi-dialog-list/ptr-multi-dialog-list.component';\n\n@Component({\n selector: 'ptr-multi-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrMultiDialogListComponent\n ],\n templateUrl: './ptr-multi-select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./ptr-multi-select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrMultiSelectComponent),\n multi: true\n }\n ]\n})\nexport class PtrMultiSelectComponent {\n\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\n @Input() showSearch = true;\n @Input() placeholder?: string | null = 'Select options';\n @Input() label? = '';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n @Input() maxSelections?: number;\n @Input() showSelectAll = true;\n\n @Output() selectionChange = new EventEmitter<string[]>();\n\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\n @ViewChild('dialogList') dialogList!: PtrMultiDialogListComponent;\n\n value = signal<string[]>([]);\n\n selectedOptions = computed(() => {\n const currentValues = this.value();\n if (currentValues.length === 0) return [];\n const allOptions = this.flattenOptions(this.options);\n return allOptions.filter(option => currentValues.includes(option.value));\n });\n\n displayText = computed(() => {\n const selected = this.selectedOptions();\n if (selected.length === 0) return this.effectivePlaceholder();\n if (selected.length === 1) return selected[0].label;\n return `${selected.length} options selected`;\n });\n\n effectivePlaceholder = computed(() => {\n return this.placeholder?.trim() || 'Select options';\n });\n\n private componentId = Math.random().toString(36).substring(2);\n labelId = `${this.componentId}-label`;\n inputId = `${this.componentId}-input`;\n\n onChange: (value: string[]) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\n !(event.target as HTMLElement).closest('.multi-select-button') &&\n this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n\n toggleDialog() {\n if (this.dialogList.isOpen()) {\n this.dialogList.closeDialog();\n } else {\n this.dialogList.openDialog();\n }\n }\n\n onSelectionChanged(selectedValues: string[]) {\n this.value.set(selectedValues);\n this.onChange(selectedValues);\n this.onTouched();\n this.selectionChange.emit(selectedValues);\n }\n\n removeSelectedItem(valueToRemove: string) {\n const currentValues = this.value();\n const updatedValues = currentValues.filter(value => value !== valueToRemove);\n this.onSelectionChanged(updatedValues);\n }\n\n writeValue(value: string[]): void {\n this.value.set(value || []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.selectButton?.nativeElement) {\n this.selectButton.nativeElement.disabled = isDisabled;\n }\n }\n\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\n if (!options) return [];\n\n return options.flatMap(option => {\n if (typeof option === 'string') {\n return { value: option, label: option };\n } else if ('groupLabel' in option) {\n return option.options;\n } else {\n return option;\n }\n });\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <button #selectButton type=\"button\" class=\"multi-select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\n <span [attr.id]=\"labelId\" class=\"select-display\">\n @if (selectedOptions().length === 0) {\n <span class=\"placeholder\">{{effectivePlaceholder()}}</span>\n } @else {\n <div class=\"selected-items\">\n @for (option of selectedOptions(); track option.value) {\n <span class=\"selected-chip\">\n {{option.label}}\n <button type=\"button\" class=\"remove-chip\" (click)=\"removeSelectedItem(option.value); $event.stopPropagation()\"\n [attr.aria-label]=\"'Remove ' + option.label\">\n ×\n </button>\n </span>\n }\n </div>\n }\n </span>\n <span class=\"select-arrow\">⏷</span>\n </button>\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n <ptr-multi-dialog-list #dialogList [options]=\"options\" [selectedValues]=\"value()\" [maxSelections]=\"maxSelections\"\n [showSelectAll]=\"showSelectAll\" (selectionChange)=\"onSelectionChanged($event)\" [showSearch]=\"showSearch\" />\n\n</div>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, forwardRef, HostListener, inject, Input, OnInit, signal, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\nimport { debounceTime, distinctUntilChanged, Observable, of, Subject, switchMap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n@Component({\n selector: 'ptr-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './ptr-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrInputComponent),\n multi: true\n }\n ]\n})\nexport class PtrInputComponent implements ControlValueAccessor, OnInit {\n\n @Input() type: 'text' | 'number' | 'email' | 'password' | 'search' | 'hidden' | 'date' | 'time' | 'textarea' = 'text';\n @Input() label = '';\n @Input() placeholder?: string | null = '';\n @Input() autocomplete? = '';\n @Input() description? = '';\n @Input() dialogHelpText? = '';\n @Input() searchFn?: (term: string) => Observable<string[]>;\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n\n @ViewChild('input') input!: ElementRef<HTMLInputElement>;\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\n\n private destroyRef = inject(DestroyRef);\n\n private componentId = Math.random().toString(36).substring(2);\n private minChars = 3;\n private searchTerms = new Subject<string>();\n private hasSelectedOption = false;\n\n inputId = `${this.componentId}-input`;\n inputValue = signal('');\n searchResultOptions = signal<string[]>([]);\n onChange: (value: string) => void = () => { };\n onTouched: () => void = () => { };\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n if (this.searchFn) {\n if (!this.dialogList?.dialog.nativeElement.contains(event.target as Node) && this.dialogList?.isOpen()) {\n this.dialogList.closeDialog();\n }\n }\n }\n\n ngOnInit(): void {\n this.setupSearch();\n }\n\n private setupSearch() {\n if (this.searchFn) {\n this.searchTerms.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(term => term.length >= this.minChars ? this.searchFn!(term) : of([])),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(results => {\n this.searchResultOptions.set(results);\n if (results.length > 0 && this.dialogList) {\n this.dialogList.openDialogSilent();\n } else {\n this.dialogList.closeDialog();\n }\n });\n }\n }\n\n onInputChange(value: string) {\n this.inputValue.set(value);\n this.onChange(value);\n if (!this.hasSelectedOption && this.searchFn && value.length >= this.minChars) {\n this.searchTerms.next(value);\n }\n this.hasSelectedOption = false;\n }\n\n onOptionSelected(optionValue: string | null) {\n this.hasSelectedOption = true;\n\n this.inputValue.set(optionValue ?? '');\n this.onChange(optionValue ?? '');\n if (this.dialogList) {\n this.dialogList.closeDialog();\n }\n }\n\n onFocus() {\n if (this.searchResultOptions().length > 0 && this.dialogList && !this.hasSelectedOption) {\n this.dialogList.openDialogSilent();\n }\n }\n\n onBlur() {\n this.onTouched();\n }\n\n writeValue(value: string): void {\n this.inputValue.set(value ?? '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.input?.nativeElement) {\n this.input.nativeElement.disabled = isDisabled;\n }\n }\n\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n <div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n @switch (type) {\n @case ('textarea') {\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\n }\n @default {\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\n }\n }\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n\n @if (searchFn) {\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\n [dialogTitle]=\"dialogHelpText\" />\n }\n\n</div>\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, Input, OnInit, signal, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { PtrButtonComponent } from '../../../ptr-button/ptr-button.component';\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\n\n@Component({\n selector: 'ptr-chip-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrButtonComponent,\n PtrDialogListComponent\n],\n templateUrl: './ptr-chip-input.component.html',\n styleUrls: ['./ptr-chip-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrChipInputComponent),\n multi: true\n }\n ]\n})\nexport class PtrChipInputComponent implements ControlValueAccessor, OnInit {\n @Input() label = '';\n @Input() placeholder?: string | null = 'Add item...';\n @Input() description? = '';\n @Input() labelPosition?: 'top' | 'inline' = 'top';\n @Input() maxItems?: number;\n @Input() suggestions: (PtrOption | PtrOptionGroup | string)[] | undefined;\n /**\n * Auto reopen the suggestions dialog after adding/selecting a chip (default true)\n * as long as maxItems has not been reached.\n */\n @Input() autoReopenAfterSelect = true;\n\n @ViewChild('chipInput') chipInput!: ElementRef<HTMLInputElement>;\n @ViewChild('dialogList') dialogList?: PtrDialogListComponent;\n\n private componentId = Math.random().toString(36).substring(2);\n inputId = `${this.componentId}-input`;\n\n inputValue = signal('');\n chipItems = signal<string[]>([]);\n isDisabled = signal(false);\n\n tempInputControl = new FormControl('');\n\n onChange: (value: string[]) => void = () => { };\n onTouched: () => void = () => { };\n\n ngOnInit(): void {\n this.tempInputControl.valueChanges.subscribe(value => {\n this.inputValue.set(value || '');\n });\n }\n\n addChip(): void {\n const value = this.inputValue().trim();\n if (value && (!this.maxItems || this.chipItems().length < this.maxItems)) {\n // Don't add duplicates\n if (!this.chipItems().includes(value)) {\n const newChips = [...this.chipItems(), value];\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n this.tempInputControl.setValue('');\n this.chipInput.nativeElement.focus();\n this.maybeReopenDialog();\n }\n }\n\n removeChip(index: number): void {\n const newChips = [...this.chipItems()];\n newChips.splice(index, 1);\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // Re-open dialog when typing if closed\n if (!this.dialogList?.isOpen?.() && this.hasSuggestions() && event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n this.openDialog();\n }\n if (event.key === 'Enter' || event.key === ',') {\n event.preventDefault();\n this.addChip();\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.openDialog();\n } else if (event.key === 'Escape') {\n this.closeDialog();\n } else if (event.key === 'Backspace' && !this.inputValue() && this.chipItems().length > 0) {\n // Remove the last chip when backspace is pressed and input is empty\n this.removeChip(this.chipItems().length - 1);\n }\n }\n\n onBlur(): void {\n // Add the chip when the input loses focus if there's a value\n // but only if the suggestions dialog isn't open\n if (!this.dialogList?.isOpen?.() && this.inputValue().trim()) {\n this.addChip();\n }\n this.onTouched();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent) {\n const target = event.target as Node;\n const dialogEl = this.dialogList?.dialog?.nativeElement as HTMLElement | undefined;\n const inputEl = this.chipInput?.nativeElement as HTMLElement | undefined;\n if (\n this.dialogList?.isOpen?.() &&\n dialogEl && !dialogEl.contains(target) &&\n inputEl && !inputEl.contains(target)\n ) {\n this.closeDialog();\n }\n }\n\n openDialog(): void {\n if (this.isDisabled() || (this.maxItems !== undefined && this.chipItems().length >= this.maxItems)) return;\n if (!this.suggestions || this.suggestions.length === 0) return;\n this.dialogList?.openDialog?.();\n }\n\n closeDialog(): void {\n this.dialogList?.closeDialog?.();\n }\n\n onSuggestionSelected(optionValue: string | null) {\n if (!optionValue) {\n this.closeDialog();\n return;\n }\n this.closeDialog();\n this.addChipFromValue(optionValue);\n this.maybeReopenDialog();\n }\n\n private addChipFromValue(value: string) {\n const trimmed = value.trim();\n if (!trimmed) return;\n if (this.maxItems !== undefined && this.chipItems().length >= this.maxItems) return;\n if (!this.chipItems().includes(trimmed)) {\n const newChips = [...this.chipItems(), trimmed];\n this.chipItems.set(newChips);\n this.onChange(newChips);\n }\n // Clear input and refocus for quick entry\n this.tempInputControl.setValue('');\n this.chipInput?.nativeElement.focus();\n }\n\n private maybeReopenDialog() {\n if (\n this.autoReopenAfterSelect &&\n !this.isDisabled() &&\n (!this.maxItems || this.chipItems().length < this.maxItems) &&\n this.hasSuggestions()\n ) {\n queueMicrotask(() => this.openDialog());\n }\n }\n\n private hasSuggestions(): boolean {\n return !!(this.suggestions && this.suggestions.length > 0);\n }\n\n writeValue(value: string[]): void {\n this.chipItems.set(value || []);\n }\n\n registerOnChange(fn: (value: string[]) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isDisabled.set(isDisabled);\n if (isDisabled) {\n this.tempInputControl.disable();\n } else {\n this.tempInputControl.enable();\n }\n }\n}\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\n@if(description){\n<div class=\"gfield_description\">{{description}}</div>\n}\n<div class=\"gfield--input-wrapper ginput_container\"\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\n\n <div class=\"ptr-chip-container\">\n <div class=\"ptr-chip-list\">\n @for (chip of chipItems(); track chip; let i = $index) {\n <div class=\"ptr-chip\">\n <span class=\"ptr-chip-text\">{{ chip }}</span>\n <button type=\"button\" class=\"ptr-chip-remove\" (click)=\"removeChip(i)\" [disabled]=\"isDisabled()\"\n aria-label=\"Remove item\">×</button>\n </div>\n }\n </div>\n\n <div class=\"ptr-chip-input-wrapper\">\n <input #chipInput [id]=\"inputId\" type=\"text\" [placeholder]=\"placeholder || ''\" [formControl]=\"tempInputControl\"\n (keydown)=\"onKeyDown($event)\" (blur)=\"onBlur()\" (focus)=\"openDialog()\"\n (input)=\"dialogList?.updateSearchTerm(inputValue())\"\n [disabled]=\"isDisabled() || (maxItems !== undefined && chipItems().length >= maxItems)\" />\n <ptr-button (clicked)=\"addChip()\"\n [isDisabled]=\"!inputValue().trim() || isDisabled() || (maxItems !== undefined && chipItems().length >= maxItems)\">Add</ptr-button>\n </div>\n </div>\n\n <ptr-dialog-list #dialogList [options]=\"suggestions\" [showSearch]=\"false\" [dialogTitle]=\"label\"\n (selectionChange)=\"onSuggestionSelected($event)\" />\n\n @if (labelPosition === 'inline') {\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\n <span>{{label}}</span>\n </legend>\n </fieldset>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { PtrConditionalRule, PtrFormConfig, PtrFormField } from '../interfaces';\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\nimport { PtrSelectComponent } from \"../input/ptr-select/select.component\";\nimport { PtrMultiSelectComponent } from \"../input/ptr-multi-select/ptr-multi-select.component\";\nimport { PtrInputComponent } from '../input/ptr-input/ptr-input.component';\nimport { PtrChipInputComponent } from '../input/ptr-chip-input/ptr-chip-input.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ptr-form',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PtrButtonComponent,\n PtrSelectComponent,\n PtrMultiSelectComponent,\n PtrInputComponent,\n PtrChipInputComponent\n ],\n templateUrl: './form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrFormComponent implements OnInit {\n\n @Input() config!: PtrFormConfig;\n @Input() loading = false;\n @Input() error: string | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Output() formSubmit = new EventEmitter<any>();\n @Output() formGroupCreated = new EventEmitter<FormGroup>();\n\n formGroup!: FormGroup;\n\n private fb = inject(FormBuilder);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.buildForm();\n this.formGroupCreated.emit(this.formGroup);\n this.setupConditionalLogic();\n }\n\n buildForm(): void {\n const group: Record<string, unknown> = {};\n this.config.fields.forEach(field => {\n // Initialize array fields with empty arrays\n if (field.type === 'chips' || field.type === 'multi-select') {\n group[field.name] = [field.value || [], field.validators || []];\n } else {\n group[field.name] = [field.value || '', field.validators || []];\n }\n });\n\n this.formGroup = this.fb.group(group, this.config.formValidators ? { validators: this.config.formValidators } : null);\n }\n\n onSubmit(): void {\n if (this.formGroup.valid) {\n this.formSubmit.emit(this.formGroup.value);\n }\n }\n\n public resetForm(): void {\n this.formGroup.reset();\n this.config.fields.forEach(field => {\n const control = this.formGroup.get(field.name);\n if (field.type === 'chips' || field.type === 'multi-select') {\n control?.setValue(field.value || [], { emitEvent: false });\n } else {\n control?.setValue(field.value || '', { emitEvent: false });\n }\n });\n this.cdr.markForCheck();\n }\n\n // Conditional logic\n setupConditionalLogic(): void {\n this.formGroup.valueChanges.pipe(\n takeUntilDestroyed(this.destroyRef)\n ).subscribe(() => {\n this.cdr.markForCheck();\n });\n }\n\n isFieldVisible(field: PtrFormField): boolean {\n if (!field.conditional?.showWhen) {\n return true;\n }\n return this.evaluateConditionalRules(field.conditional.showWhen) as boolean;\n }\n\n getFieldLabel(field: PtrFormField): string {\n if (!field.conditional?.label) {\n return field.label;\n }\n const result = this.evaluateConditionalRules(field.conditional.label);\n return typeof result === 'string' ? result : field.label;\n }\n\n getFieldPlaceholder(field: PtrFormField): string {\n if (!field.conditional?.placeholder) {\n return field.placeholder || '';\n }\n const result = this.evaluateConditionalRules(field.conditional.placeholder);\n return typeof result === 'string' ? result : field.placeholder || '';\n }\n\n private evaluateConditionalRules(rules: PtrConditionalRule[]): string | boolean {\n for (const rule of rules) {\n const fieldValue = this.formGroup.get(rule.field)?.value;\n if (fieldValue === rule.value) {\n return rule.result;\n }\n }\n return false;\n }\n}\n","<div [class]=\"'gform_wrapper ' + config.formClass\">\n\n @if (error) {\n <div class=\"gform_validation_errors\">\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\n </div>\n }\n\n @if (config.title) {\n <div class=\"gform_heading\">\n <h2 class=\"gform_title\">{{ config.title }}</h2>\n </div>\n }\n\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n\n <div class=\"gform_fields\">\n\n @for (field of config.fields; track field.name) {\n @if(isFieldVisible(field)) {\n\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\n\n @switch (field.type) {\n @case ('select') {\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\n }\n @case ('multi-select') {\n <ptr-multi-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\"\n [maxSelections]=\"field.maxSelections\" />\n }\n @case ('chips') {\n <ptr-chip-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\"\n [placeholder]=\"getFieldPlaceholder(field)\" [description]=\"field.description\"\n [maxItems]=\"field.maxItems\" [labelPosition]=\"config.labelPosition\" />\n }\n @default {\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\n }\n }\n\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\n <div class=\"gfield_description validation_message gfield_validation_message\">\n @if (formGroup.get(field.name)?.errors?.['required']) {\n This field is required.\n }\n @if (formGroup.get(field.name)?.errors?.['email']) {\n Please enter a valid email address.\n }\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\n }\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\n }\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\n Please match the required format.\n }\n </div>\n }\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\n formGroup.get(field.name)?.touched) {\n @for (error of formGroup.errors | keyvalue; track error) {\n @if (field.validationMessages[error.key]) {\n <div class=\"gfield_description validation_message gfield_validation_message\">\n {{ field.validationMessages[error.key] }}\n </div>\n }\n }\n }\n </div>\n }\n }\n </div>\n\n @if(config.submitText){\n <div class=\"gform_footer\">\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\n </div>\n }\n\n </form>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';\nimport { filter, map, Observable, startWith } from 'rxjs';\n\n@Component({\n selector: 'ptr-title',\n imports: [CommonModule],\n templateUrl: './ptr-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTitleComponent implements OnInit {\n\n @Input() styleClass = 'entry-title';\n @Input() wrapperStyleClass = '';\n @Input() screenReaderOnly = false;\n\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n private titleStrategy = inject(TitleStrategy);\n\n displayTitle$!: Observable<string>;\n hideTitle$!: Observable<boolean>;\n\n ngOnInit() {\n const routeEvents$ = this.router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n startWith(null),\n map(() => this.getRoute(this.activatedRoute))\n );\n\n this.hideTitle$ = routeEvents$.pipe(\n map(route => !!route.snapshot.data['hideTitle'])\n );\n\n this.displayTitle$ = routeEvents$.pipe(\n map(route => {\n if (route.snapshot.data['hideTitle']) {\n return '';\n }\n // Check for a custom display title in the route data\n const customDisplayTitle = route.snapshot.data['displayTitle'];\n if (customDisplayTitle) {\n return customDisplayTitle;\n }\n // If no custom display title, use the resolved title from TitleStrategy\n const resolvedTitle = this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';\n return resolvedTitle;\n // Remove any common suffix (checking for both ' | ' and ' - ' separators)\n // return this.removeCommonSuffix(resolvedTitle);\n })\n );\n }\n\n private getRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n return route;\n }\n\n}\n","@if ((hideTitle$|async) === false) {\n @if(wrapperStyleClass) {\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\n </header>\n } @else {\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'ptr-loading-spinner',\n imports: [],\n template: `<div class=\"ptr-progress-spinner\"></div>`,\n styleUrls: [\"./loading-spinner.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrLoadingSpinnerComponent { }\n","import { ComponentRef, Directive, ElementRef, HostBinding, inject, Input, OnDestroy, Renderer2, ViewContainerRef } from '@angular/core';\nimport { PtrLoadingSpinnerComponent } from './loading-spinner.component';\n\n@Directive({\n selector: '[ptrLoadingSpinner]'\n})\nexport class PtrLoadingSpinnerDirective implements OnDestroy {\n\n private targetEl = inject(ElementRef);\n private viewContainerRef = inject(ViewContainerRef);\n private renderer = inject(Renderer2);\n\n private spinnerInstance?: ComponentRef<PtrLoadingSpinnerComponent>;\n private overlay?: HTMLElement;\n\n @HostBinding('style.position') hostPosition = 'relative';\n\n @Input({ required: true }) set ptrLoadingSpinner(loading: boolean) {\n if (loading) {\n this.addBlurEffect();\n this.addOverlay();\n this.addProgressSpinnerComponent();\n } else {\n this.removeBlurEffect();\n this.removeOverlay();\n this.removeProgressSpinnerComponent();\n }\n }\n\n ngOnDestroy(): void {\n this.spinnerInstance?.destroy();\n this.removeBlurEffect();\n }\n\n private addProgressSpinnerComponent(): void {\n this.spinnerInstance = this.viewContainerRef.createComponent(PtrLoadingSpinnerComponent);\n this.overlay?.appendChild(this.spinnerInstance.location.nativeElement);\n }\n\n private removeProgressSpinnerComponent(): void {\n this.spinnerInstance?.destroy();\n }\n\n private addOverlay(): void {\n this.overlay = this.renderer.createElement('div');\n this.renderer.setStyle(this.overlay, 'display', 'flex');\n this.renderer.setStyle(this.overlay, 'justify-content', 'center');\n this.renderer.setStyle(this.overlay, 'align-items', 'center');\n this.renderer.setStyle(this.overlay, 'position', 'absolute');\n this.renderer.setStyle(this.overlay, 'top', '0');\n this.renderer.setStyle(this.overlay, 'left', '0');\n this.renderer.setStyle(this.overlay, 'width', '100%');\n this.renderer.setStyle(this.overlay, 'height', '100%');\n this.renderer.setStyle(this.overlay, 'min-height', '25px');\n\n this.renderer.appendChild(this.targetEl.nativeElement, this.overlay);\n }\n\n private removeOverlay(): void {\n if (this.overlay) {\n this.renderer.removeChild(this.targetEl.nativeElement, this.overlay);\n this.overlay = undefined;\n }\n }\n\n private addBlurEffect(): void {\n const style = this.renderer.createElement('style');\n const blurRule = `\n .ptr-loading-blur > *:not(:last-child) {\n filter: blur(2px);\n transition: filter 0.3s ease;\n }\n `;\n this.renderer.appendChild(style, this.renderer.createText(blurRule));\n this.renderer.appendChild(document.head, style);\n this.renderer.addClass(this.targetEl.nativeElement, 'ptr-loading-blur');\n }\n\n private removeBlurEffect(): void {\n this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');\n }\n\n}\n","import { computed, Injectable, signal, Signal } from '@angular/core';\n\n/**\n * Optimized Async Loading Service using Angular Signals\n * Supports global loading state and named loading areas with auto-cleanup\n *\n * To use as a non-singleton service, add to providers array in @Component decorator:\n * @Component({\n * selector: 'app-example',\n * templateUrl: './example.component.html',\n * providers: [PtrLoadingService]\n * })\n *\n * Usage:\n * Set loading: this.loadingService.setLoading(true)\n * - Set loading: this.loadingService.setLoading(true, 'areaName')\n *\n * - Get loading (template): {{ loadingService.isLoading()() }}\n * - Get loading (template): {{ loadingService.isLoading('areaName')() }}\n *\n * - Get loading (component): this.loadingService.isLoading()()\n * - Get loading (component): this.loadingService.isLoading('areaName')()\n *\n * - Check if any loading: {{ loadingService.isAnyLoading()() }}\n *\n * - React to loading changes: effect(() => console.log('Loading:', this.loadingService.isLoading('areaName')()))\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrLoadingService {\n\n private globalTaskCount = signal(0);\n private loadingAreas = new Map<string, ReturnType<typeof signal<number>>>();\n\n isLoading(area?: string): Signal<boolean> {\n if (!area) {\n return computed(() => this.globalTaskCount() > 0);\n }\n\n return computed(() => {\n const areaSignal = this.loadingAreas.get(area);\n return areaSignal ? areaSignal() > 0 : false;\n });\n }\n\n isAnyLoading(): Signal<boolean> {\n return computed(() => {\n if (this.globalTaskCount() > 0) return true;\n for (const areaSignal of this.loadingAreas.values()) {\n if (areaSignal() > 0) return true;\n }\n return false;\n });\n }\n\n setLoading(value: boolean, area?: string): void {\n if (!area) {\n this.updateTaskCount(this.globalTaskCount, value);\n } else {\n this.updateNamedAreaLoading(area, value);\n }\n }\n\n resetLoading(area?: string): void {\n if (!area) {\n this.globalTaskCount.set(0);\n } else if (this.loadingAreas.has(area)) {\n this.loadingAreas.get(area)!.set(0);\n this.loadingAreas.delete(area);\n }\n }\n\n private updateNamedAreaLoading(area: string, increment: boolean): void {\n let areaSignal = this.loadingAreas.get(area);\n if (!areaSignal && increment) {\n areaSignal = signal(0);\n this.loadingAreas.set(area, areaSignal);\n }\n\n if (areaSignal) {\n areaSignal.update(count => {\n const newCount = increment ? count + 1 : Math.max(0, count - 1);\n if (newCount === 0) {\n this.loadingAreas.delete(area);\n }\n return newCount;\n });\n }\n }\n\n private updateTaskCount(taskCount: ReturnType<typeof signal<number>>, increment: boolean): void {\n taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));\n }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, AfterViewInit, TemplateRef } from '@angular/core';\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\nimport { CommonModule } from '@angular/common';\n\nexport interface DialogResult<T = unknown> {\n result: boolean;\n data: T | null;\n}\n\n@Component({\n selector: 'ptr-dialog',\n imports: [\n PtrButtonComponent,\n CommonModule\n ],\n templateUrl: './ptr-dialog.component.html',\n styleUrls: [\"./ptr-dialog.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrDialogComponent<T = unknown> implements AfterViewInit {\n\n @ViewChild('dialogElement') dialogElement!: ElementRef<HTMLDialogElement>;\n\n @Input() title = '';\n @Input() message = '';\n @Input() buttonText = 'Confirm';\n @Input() buttonStyle: 'normal' | 'error' | 'secondary' = 'normal';\n @Input() contentTemplate: TemplateRef<unknown> | null = null;\n @Input() hasDefaultContent = true;\n @Input() data: T | null = null;\n\n @Output() closed = new EventEmitter<DialogResult<T>>();\n\n ngAfterViewInit() {\n this.dialogElement.nativeElement.showModal();\n }\n\n close() {\n this.dialogElement.nativeElement.close();\n }\n\n confirm() {\n this.closed.emit({result: true, data: this.data});\n this.close();\n }\n\n onClose() {\n this.closed.emit({result: false, data: this.data});\n }\n\n setData(data: T) {\n this.data = data;\n }\n}\n","<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\n <div class=\"ptr-modal__content\">\n\n <div class=\"ptr-modal__header\">\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\n </div>\n\n @if (hasDefaultContent && !contentTemplate) {\n <p>{{ message }}</p>\n }\n\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: data, dialogInstance: this}\"></ng-container>\n }\n\n <div class=\"ptr-modal__actions\">\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\n </div>\n\n </div>\n</dialog>\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable, TemplateRef, Type, inject } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { DialogResult, PtrDialogComponent } from './ptr-dialog/ptr-dialog.component';\n\nexport interface PtrDialogOptions<T = unknown> {\n title: string;\n message?: string;\n buttonText?: string;\n buttonStyle?: 'normal' | 'error' | 'secondary';\n contentTemplate?: TemplateRef<unknown>;\n data?: T;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrDialogService {\n private appRef = inject(ApplicationRef);\n private injector = inject(EnvironmentInjector);\n\n private dialogComponentRef: ComponentRef<PtrDialogComponent<unknown>> | null = null;\n\n open<T = unknown>(options: PtrDialogOptions<T>): Observable<DialogResult<T>> {\n const dialogResult$ = new Subject<DialogResult<T>>();\n\n this.dialogComponentRef = createComponent(PtrDialogComponent as Type<PtrDialogComponent<unknown>>, {\n environmentInjector: this.injector,\n });\n\n if (!this.dialogComponentRef) {\n throw new Error('Failed to create dialog component');\n }\n\n const { instance } = this.dialogComponentRef;\n\n instance.title = options.title;\n instance.message = options.message || '';\n instance.buttonText = options.buttonText || 'Confirm';\n instance.buttonStyle = options.buttonStyle || 'normal';\n\n if (options.contentTemplate) {\n instance.contentTemplate = options.contentTemplate;\n instance.hasDefaultContent = !options.contentTemplate;\n }\n\n if (options.data !== undefined) {\n instance.data = options.data as unknown;\n }\n\n instance.closed\n .pipe(take(1))\n .subscribe((result: DialogResult<unknown>) => {\n this.removeDialog();\n dialogResult$.next(result as unknown as DialogResult<T>);\n dialogResult$.complete();\n });\n\n document.body.appendChild(this.dialogComponentRef.location.nativeElement);\n this.appRef.attachView(this.dialogComponentRef.hostView);\n\n return dialogResult$.asObservable();\n }\n\n private removeDialog() {\n if (this.dialogComponentRef) {\n this.appRef.detachView(this.dialogComponentRef.hostView);\n this.dialogComponentRef.destroy();\n this.dialogComponentRef = null;\n }\n }\n\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'ptr-tooltip',\n imports: [],\n templateUrl: './ptr-tooltip.component.html',\n styleUrls: [\"./ptr-tooltip.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTooltipComponent {\n\n @Input() content = '';\n\n @ViewChild('tooltipDialog') tooltipDialog!: ElementRef<HTMLDialogElement>;\n\n private tooltipTimer: any;\n\n showTooltip() {\n clearTimeout(this.tooltipTimer);\n this.tooltipTimer = setTimeout(() => {\n this.tooltipDialog.nativeElement.show();\n }, 200); // Small delay to prevent flickering on quick mouse movements\n }\n\n hideTooltip() {\n clearTimeout(this.tooltipTimer);\n this.tooltipTimer = setTimeout(() => {\n this.tooltipDialog.nativeElement.close();\n }, 200); // Small delay to allow moving mouse to tooltip\n }\n\n}\n","<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\n <ng-content></ng-content>\n</span>\n<dialog #tooltipDialog class=\"ptr-tooltip\">\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\n</dialog>","import { ChangeDetectionStrategy, Component, computed, inject, Input } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, distinctUntilChanged } from 'rxjs';\nimport { BreadcrumbRouteInfo, PtrBreadcrumb } from './interfaces';\n@Component({\n selector: 'ptr-breadcrumbs',\n imports: [RouterModule],\n templateUrl: './ptr-breadcrumbs.component.html',\n styleUrl: './ptr-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrBreadcrumbsComponent {\n\n @Input() showFirstSeparator = true;\n\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n\n private routeEvents = toSignal(\n this.router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n distinctUntilChanged()\n )\n );\n\n breadcrumbs = computed(() => {\n this.routeEvents();\n return this.createBreadcrumbs(this.activatedRoute.root);\n });\n\n private createBreadcrumbs(route: ActivatedRoute, routeUrl = '', breadcrumbs: PtrBreadcrumb[] = []): PtrBreadcrumb[] {\n const routeChildren: ActivatedRoute[] = route.children;\n if (routeChildren.length === 0) {\n return breadcrumbs;\n }\n for (const child of routeChildren) {\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\n if (routeURL !== '') {\n routeUrl += `/${routeURL}`;\n }\n const { label, url } = this.getLabelForRoute(child);\n\n // Skip if the label is undefined or empty and the path is empty\n if (label && (!breadcrumbs.length || breadcrumbs[breadcrumbs.length - 1].label !== label)) {\n breadcrumbs.push({ label, url: url ?? routeUrl });\n }\n\n return this.createBreadcrumbs(child, routeUrl, breadcrumbs);\n }\n return breadcrumbs;\n }\n\n private getLabelForRoute(route: ActivatedRoute): BreadcrumbRouteInfo {\n const breadcrumbReturnInfo: BreadcrumbRouteInfo = {};\n const customBreadcrumb = route.snapshot.data['breadcrumb'] as BreadcrumbRouteInfo | undefined;\n\n if (customBreadcrumb) {\n if (customBreadcrumb.label) {\n breadcrumbReturnInfo.label = customBreadcrumb.label;\n }\n if (customBreadcrumb.url) {\n breadcrumbReturnInfo.url = customBreadcrumb.url;\n }\n } else if (route.snapshot.title) {\n breadcrumbReturnInfo.label = route.snapshot.title;\n }\n\n return breadcrumbReturnInfo;\n }\n\n}\n","@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n","import { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core';\n\n@Component({\n selector: 'ptr-tab',\n template: '@if(active()){<ng-content></ng-content>}',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTabComponent {\n @Input() label!: string;\n @Input() link?: string;\n\n active = signal(false);\n}\n","\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, effect, ElementRef, inject, QueryList, signal, ViewChildren } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { PtrTabComponent } from '../ptr-tab/ptr-tab.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n\n@Component({\n selector: 'ptr-tabs',\n imports: [RouterModule],\n templateUrl: './ptr-tabs.component.html',\n styleUrl: './ptr-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrTabsComponent implements AfterViewInit {\n\n @ContentChildren(PtrTabComponent) tabComponents!: QueryList<PtrTabComponent>;\n @ViewChildren('tabButton') buttons!: QueryList<ElementRef>;\n\n private router = inject(Router);\n private destroyRef = inject(DestroyRef);\n\n tabs = signal<PtrTabComponent[]>([]);\n activeTabIndex = signal(0);\n useLinks = signal(false);\n sliderPosition = signal({ transform: 'translateX(0)', width: '0' });\n\n constructor() {\n effect(() => {\n const activeTab = this.tabs().find(tab => tab.active());\n if (activeTab?.link) {\n this.router.navigate([activeTab.link]);\n }\n this.updateSliderPosition();\n });\n }\n\n ngAfterViewInit() {\n this.tabComponents.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.updateTabs();\n });\n this.updateTabs();\n }\n\n updateTabs() {\n this.tabs.set(this.tabComponents.toArray());\n this.useLinks.set(this.tabs().some(tab => !!tab.link));\n if (this.tabs().length > 0 && !this.tabs().some(tab => tab.active())) {\n this.selectTab(0);\n } else {\n this.updateSliderPosition();\n }\n }\n\n selectTab(index: number) {\n this.tabs().forEach((tab, i) => tab.active.set(i === index));\n this.activeTabIndex.set(index);\n }\n\n updateSliderPosition() {\n const activeButton = this.buttons?.get(this.activeTabIndex())?.nativeElement;\n if (activeButton) {\n const { offsetLeft, offsetWidth } = activeButton;\n this.sliderPosition.set({\n transform: `translateX(${offsetLeft}px)`,\n width: `${offsetWidth}px`\n });\n }\n }\n\n}\n","<div class=\"tabs-container\" role=\"tablist\">\n @for (tab of tabs(); track $index; let i = $index) {\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\n }\n\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\n</div>\n\n@if (!useLinks()) {\n<div class=\"tab-content\">\n <ng-content></ng-content>\n</div>\n}\n","import { ApplicationRef, ComponentRef, createComponent, DestroyRef, EnvironmentInjector, inject, Injectable, Injector, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { timer } from 'rxjs';\nimport { PtrToast } from './interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PtrToasterService {\n\n private destroyRef = inject(DestroyRef);\n private injector = inject(Injector);\n private environmentInjector = inject(EnvironmentInjector);\n private appRef = inject(ApplicationRef);\n\n private toasts = signal<PtrToast[]>([]);\n private counter = 0;\n private toasterComponentRef: ComponentRef<unknown> | null = null;\n\n constructor() {\n this.injectToasterComponent();\n }\n\n private injectToasterComponent() {\n if (this.toasterComponentRef) {\n return;\n }\n\n import('./ptr-toaster/ptr-toaster.component').then(module => {\n this.toasterComponentRef = createComponent(module.PtrToasterComponent, {\n environmentInjector: this.environmentInjector,\n elementInjector: this.injector\n });\n\n const domElem = this.toasterComponentRef.location.nativeElement;\n document.body.appendChild(domElem);\n this.appRef.attachView(this.toasterComponentRef.hostView);\n });\n }\n\n public getToasts() {\n return this.toasts.asReadonly();\n }\n\n public show(message: string, type: PtrToast['type'] = 'info') {\n const id = this.counter++;\n this.toasts.update(toasts => [...toasts, { id, message, type }]);\n\n timer(10000)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.remove(id));\n }\n\n public remove(id: number) {\n this.toasts.update(toasts => toasts.filter(t => t.id !== id));\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { PtrToasterService } from '../ptr-toaster.service';\n\n@Component({\n selector: 'ptr-toaster',\n imports: [CommonModule],\n templateUrl: './ptr-toaster.component.html',\n styleUrl: './ptr-toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PtrToasterComponent {\n protected toasterService = inject(PtrToasterService);\n}\n","<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\n @for (toast of toasterService.getToasts()(); track toast.id) {\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\n <span>{{toast.message}}</span>\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\n </div>\n }\n</div>\n","/*\n * Public API Surface of ngx-components\n */\n\nexport * from './lib/menu/menu.component';\n\nexport * from './lib/forms/interfaces';\nexport { PtrFormComponent } from './lib/forms/form/form.component';\nexport { PtrSelectComponent } from './lib/forms/input/ptr-select/select.component';\nexport { PtrMultiSelectComponent } from './lib/forms/input/ptr-multi-select/ptr-multi-select.component';\nexport { PtrInputComponent } from './lib/forms/input/ptr-input/ptr-input.component';\nexport { PtrChipInputComponent } from './lib/forms/input/ptr-chip-input/ptr-chip-input.component';\n\nexport { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';\n\nexport { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';\nexport { PtrLoadingSpinnerDirective } from './lib/loading-spinner/loading-spinner.directive';\n\nexport { PtrLoadingService } from './lib/services/loading.service';\n\nexport { PtrButtonComponent } from './lib/ptr-button/ptr-button.component';\n\nexport { PtrDialogService } from './lib/dialog/ptr-dialog.service';\nexport { PtrDialogComponent } from './lib/dialog/ptr-dialog/ptr-dialog.component';\nexport { PtrTooltipComponent } from './lib/dialog/ptr-tooltip/ptr-tooltip.component';\n\nexport { PtrBreadcrumbsComponent } from './lib/ptr-breadcrumbs/ptr-breadcrumbs.component';\nexport { PtrBreadcrumb } from './lib/ptr-breadcrumbs/interfaces';\n\nexport { PtrTabsComponent } from './lib/components/tabs/ptr-tabs/ptr-tabs.component';\nexport { PtrTabComponent } from './lib/components/tabs/ptr-tab/ptr-tab.component';\n\nexport { PtrToasterService } from './lib/ptr-toaster/ptr-toaster.service';\nexport { PtrToasterComponent } from './lib/ptr-toaster/ptr-toaster/ptr-toaster.component';\nexport { PtrToast } from './lib/ptr-toaster/interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}