UNPKG

@angular/material

Version:
1 lines 34.3 kB
{"version":3,"file":"sort.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort-errors.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort-header-intl.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort-header.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort-header.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/material/sort/sort-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/** @docs-private */\nexport function getSortDuplicateSortableIdError(id: string): Error {\n return Error(`Cannot have two MatSortables with the same id (${id}).`);\n}\n\n/** @docs-private */\nexport function getSortHeaderNotContainedWithinSortError(): Error {\n return Error(`MatSortHeader must be placed within a parent element with the MatSort directive.`);\n}\n\n/** @docs-private */\nexport function getSortHeaderMissingIdError(): Error {\n return Error(`MatSortHeader must be provided with a unique id.`);\n}\n\n/** @docs-private */\nexport function getSortInvalidDirectionError(direction: string): Error {\n return Error(`${direction} is not a valid sort direction ('asc' or 'desc').`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n Directive,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n booleanAttribute,\n} from '@angular/core';\nimport {Observable, ReplaySubject, Subject} from 'rxjs';\nimport {SortDirection} from './sort-direction';\nimport {\n getSortDuplicateSortableIdError,\n getSortHeaderMissingIdError,\n getSortInvalidDirectionError,\n} from './sort-errors';\n\n/** Position of the arrow that displays when sorted. */\nexport type SortHeaderArrowPosition = 'before' | 'after';\n\n/** Interface for a directive that holds sorting state consumed by `MatSortHeader`. */\nexport interface MatSortable {\n /** The id of the column being sorted. */\n id: string;\n\n /** Starting sort direction. */\n start: SortDirection;\n\n /** Whether to disable clearing the sorting state. */\n disableClear: boolean;\n}\n\n/** The current sort state. */\nexport interface Sort {\n /** The id of the column being sorted. */\n active: string;\n\n /** The sort direction. */\n direction: SortDirection;\n}\n\n/** Default options for `mat-sort`. */\nexport interface MatSortDefaultOptions {\n /** Whether to disable clearing the sorting state. */\n disableClear?: boolean;\n /** Position of the arrow that displays when sorted. */\n arrowPosition?: SortHeaderArrowPosition;\n}\n\n/** Injection token to be used to override the default options for `mat-sort`. */\nexport const MAT_SORT_DEFAULT_OPTIONS = new InjectionToken<MatSortDefaultOptions>(\n 'MAT_SORT_DEFAULT_OPTIONS',\n);\n\n/** Container for MatSortables to manage the sort state and provide default sort parameters. */\n@Directive({\n selector: '[matSort]',\n exportAs: 'matSort',\n host: {\n 'class': 'mat-sort',\n },\n})\nexport class MatSort implements OnChanges, OnDestroy, OnInit {\n private _initializedStream = new ReplaySubject<void>(1);\n\n /** Collection of all registered sortables that this directive manages. */\n sortables = new Map<string, MatSortable>();\n\n /** Used to notify any child components listening to state changes. */\n readonly _stateChanges = new Subject<void>();\n\n /** The id of the most recently sorted MatSortable. */\n @Input('matSortActive') active: string;\n\n /**\n * The direction to set when an MatSortable is initially sorted.\n * May be overridden by the MatSortable's sort start.\n */\n @Input('matSortStart') start: SortDirection = 'asc';\n\n /** The sort direction of the currently active MatSortable. */\n @Input('matSortDirection')\n get direction(): SortDirection {\n return this._direction;\n }\n set direction(direction: SortDirection) {\n if (\n direction &&\n direction !== 'asc' &&\n direction !== 'desc' &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\n throw getSortInvalidDirectionError(direction);\n }\n this._direction = direction;\n }\n private _direction: SortDirection = '';\n\n /**\n * Whether to disable the user from clearing the sort by finishing the sort direction cycle.\n * May be overridden by the MatSortable's disable clear input.\n */\n @Input({alias: 'matSortDisableClear', transform: booleanAttribute})\n disableClear: boolean;\n\n /** Whether the sortable is disabled. */\n @Input({alias: 'matSortDisabled', transform: booleanAttribute})\n disabled: boolean = false;\n\n /** Event emitted when the user changes either the active sort or sort direction. */\n @Output('matSortChange') readonly sortChange: EventEmitter<Sort> = new EventEmitter<Sort>();\n\n /** Emits when the paginator is initialized. */\n initialized: Observable<void> = this._initializedStream;\n\n constructor(\n @Optional()\n @Inject(MAT_SORT_DEFAULT_OPTIONS)\n private _defaultOptions?: MatSortDefaultOptions,\n ) {}\n\n /**\n * Register function to be used by the contained MatSortables. Adds the MatSortable to the\n * collection of MatSortables.\n */\n register(sortable: MatSortable): void {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (!sortable.id) {\n throw getSortHeaderMissingIdError();\n }\n\n if (this.sortables.has(sortable.id)) {\n throw getSortDuplicateSortableIdError(sortable.id);\n }\n }\n\n this.sortables.set(sortable.id, sortable);\n }\n\n /**\n * Unregister function to be used by the contained MatSortables. Removes the MatSortable from the\n * collection of contained MatSortables.\n */\n deregister(sortable: MatSortable): void {\n this.sortables.delete(sortable.id);\n }\n\n /** Sets the active sort id and determines the new sort direction. */\n sort(sortable: MatSortable): void {\n if (this.active != sortable.id) {\n this.active = sortable.id;\n this.direction = sortable.start ? sortable.start : this.start;\n } else {\n this.direction = this.getNextSortDirection(sortable);\n }\n\n this.sortChange.emit({active: this.active, direction: this.direction});\n }\n\n /** Returns the next sort direction of the active sortable, checking for potential overrides. */\n getNextSortDirection(sortable: MatSortable): SortDirection {\n if (!sortable) {\n return '';\n }\n\n // Get the sort direction cycle with the potential sortable overrides.\n const disableClear =\n sortable?.disableClear ?? this.disableClear ?? !!this._defaultOptions?.disableClear;\n let sortDirectionCycle = getSortDirectionCycle(sortable.start || this.start, disableClear);\n\n // Get and return the next direction in the cycle\n let nextDirectionIndex = sortDirectionCycle.indexOf(this.direction) + 1;\n if (nextDirectionIndex >= sortDirectionCycle.length) {\n nextDirectionIndex = 0;\n }\n return sortDirectionCycle[nextDirectionIndex];\n }\n\n ngOnInit() {\n this._initializedStream.next();\n }\n\n ngOnChanges() {\n this._stateChanges.next();\n }\n\n ngOnDestroy() {\n this._stateChanges.complete();\n this._initializedStream.complete();\n }\n}\n\n/** Returns the sort direction cycle to use given the provided parameters of order and clear. */\nfunction getSortDirectionCycle(start: SortDirection, disableClear: boolean): SortDirection[] {\n let sortOrder: SortDirection[] = ['asc', 'desc'];\n if (start == 'desc') {\n sortOrder.reverse();\n }\n if (!disableClear) {\n sortOrder.push('');\n }\n\n return sortOrder;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * To modify the labels and text displayed, create a new instance of MatSortHeaderIntl and\n * include it in a custom provider.\n */\n@Injectable({providedIn: 'root'})\nexport class MatSortHeaderIntl {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {AriaDescriber, FocusMonitor} from '@angular/cdk/a11y';\nimport {ENTER, SPACE} from '@angular/cdk/keycodes';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n signal,\n ChangeDetectorRef,\n} from '@angular/core';\nimport {merge, Subscription} from 'rxjs';\nimport {\n MAT_SORT_DEFAULT_OPTIONS,\n MatSort,\n MatSortable,\n MatSortDefaultOptions,\n SortHeaderArrowPosition,\n} from './sort';\nimport {SortDirection} from './sort-direction';\nimport {getSortHeaderNotContainedWithinSortError} from './sort-errors';\nimport {MatSortHeaderIntl} from './sort-header-intl';\nimport {_CdkPrivateStyleLoader} from '@angular/cdk/private';\nimport {_animationsDisabled, _StructuralStylesLoader} from '../core';\n\n/**\n * Valid positions for the arrow to be in for its opacity and translation. If the state is a\n * sort direction, the position of the arrow will be above/below and opacity 0. If the state is\n * hint, the arrow will be in the center with a slight opacity. Active state means the arrow will\n * be fully opaque in the center.\n *\n * @docs-private\n * @deprecated No longer being used, to be removed.\n * @breaking-change 21.0.0\n */\nexport type ArrowViewState = SortDirection | 'hint' | 'active';\n\n/**\n * States describing the arrow's animated position (animating fromState to toState).\n * If the fromState is not defined, there will be no animated transition to the toState.\n * @docs-private\n * @deprecated No longer being used, to be removed.\n * @breaking-change 21.0.0\n */\nexport interface ArrowViewStateTransition {\n fromState?: ArrowViewState;\n toState?: ArrowViewState;\n}\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface MatSortHeaderColumnDef {\n name: string;\n}\n\n/**\n * Applies sorting behavior (click to change sort) and styles to an element, including an\n * arrow to display the current sort direction.\n *\n * Must be provided with an id and contained within a parent MatSort directive.\n *\n * If used on header cells in a CdkTable, it will automatically default its id from its containing\n * column definition.\n */\n@Component({\n selector: '[mat-sort-header]',\n exportAs: 'matSortHeader',\n templateUrl: 'sort-header.html',\n styleUrl: 'sort-header.css',\n host: {\n 'class': 'mat-sort-header',\n '(click)': '_toggleOnInteraction()',\n '(keydown)': '_handleKeydown($event)',\n '(mouseleave)': '_recentlyCleared.set(null)',\n '[attr.aria-sort]': '_getAriaSortAttribute()',\n '[class.mat-sort-header-disabled]': '_isDisabled()',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MatSortHeader implements MatSortable, OnDestroy, OnInit, AfterViewInit {\n _intl = inject(MatSortHeaderIntl);\n _sort = inject(MatSort, {optional: true})!;\n _columnDef = inject<MatSortHeaderColumnDef>('MAT_SORT_HEADER_COLUMN_DEF' as any, {\n optional: true,\n });\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _focusMonitor = inject(FocusMonitor);\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _ariaDescriber = inject(AriaDescriber, {optional: true});\n private _renderChanges: Subscription | undefined;\n protected _animationsDisabled = _animationsDisabled();\n\n /**\n * Indicates which state was just cleared from the sort header.\n * Will be reset on the next interaction. Used for coordinating animations.\n */\n protected _recentlyCleared = signal<SortDirection | null>(null);\n\n /**\n * The element with role=\"button\" inside this component's view. We need this\n * in order to apply a description with AriaDescriber.\n */\n private _sortButton: HTMLElement;\n\n /**\n * ID of this sort header. If used within the context of a CdkColumnDef, this will default to\n * the column's name.\n */\n @Input('mat-sort-header') id: string;\n\n /** Sets the position of the arrow that displays when sorted. */\n @Input() arrowPosition: SortHeaderArrowPosition = 'after';\n\n /** Overrides the sort start value of the containing MatSort for this MatSortable. */\n @Input() start: SortDirection;\n\n /** whether the sort header is disabled. */\n @Input({transform: booleanAttribute})\n disabled: boolean = false;\n\n /**\n * Description applied to MatSortHeader's button element with aria-describedby. This text should\n * describe the action that will occur when the user clicks the sort header.\n */\n @Input()\n get sortActionDescription(): string {\n return this._sortActionDescription;\n }\n set sortActionDescription(value: string) {\n this._updateSortActionDescription(value);\n }\n // Default the action description to \"Sort\" because it's better than nothing.\n // Without a description, the button's label comes from the sort header text content,\n // which doesn't give any indication that it performs a sorting operation.\n private _sortActionDescription: string = 'Sort';\n\n /** Overrides the disable clear value of the containing MatSort for this MatSortable. */\n @Input({transform: booleanAttribute})\n disableClear: boolean;\n\n constructor(...args: unknown[]);\n\n constructor() {\n inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n const defaultOptions = inject<MatSortDefaultOptions>(MAT_SORT_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n // Note that we use a string token for the `_columnDef`, because the value is provided both by\n // `material/table` and `cdk/table` and we can't have the CDK depending on Material,\n // and we want to avoid having the sort header depending on the CDK table because\n // of this single reference.\n if (!this._sort && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw getSortHeaderNotContainedWithinSortError();\n }\n\n if (defaultOptions?.arrowPosition) {\n this.arrowPosition = defaultOptions?.arrowPosition;\n }\n }\n\n ngOnInit() {\n if (!this.id && this._columnDef) {\n this.id = this._columnDef.name;\n }\n\n this._sort.register(this);\n this._renderChanges = merge(this._sort._stateChanges, this._sort.sortChange).subscribe(() =>\n this._changeDetectorRef.markForCheck(),\n );\n this._sortButton = this._elementRef.nativeElement.querySelector('.mat-sort-header-container')!;\n this._updateSortActionDescription(this._sortActionDescription);\n }\n\n ngAfterViewInit() {\n // We use the focus monitor because we also want to style\n // things differently based on the focus origin.\n this._focusMonitor.monitor(this._elementRef, true).subscribe(() => {\n // We need the delay here, because we can trigger a signal write error if the header\n // has a signal bound to `disabled` which causes it to be blurred (see #31723.)\n Promise.resolve().then(() => this._recentlyCleared.set(null));\n });\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._sort.deregister(this);\n this._renderChanges?.unsubscribe();\n\n if (this._sortButton) {\n this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n }\n }\n\n /** Triggers the sort on this sort header and removes the indicator hint. */\n _toggleOnInteraction() {\n if (!this._isDisabled()) {\n const wasSorted = this._isSorted();\n const prevDirection = this._sort.direction;\n this._sort.sort(this);\n this._recentlyCleared.set(wasSorted && !this._isSorted() ? prevDirection : null);\n }\n }\n\n _handleKeydown(event: KeyboardEvent) {\n if (event.keyCode === SPACE || event.keyCode === ENTER) {\n event.preventDefault();\n this._toggleOnInteraction();\n }\n }\n\n /** Whether this MatSortHeader is currently sorted in either ascending or descending order. */\n _isSorted() {\n return (\n this._sort.active == this.id &&\n (this._sort.direction === 'asc' || this._sort.direction === 'desc')\n );\n }\n\n _isDisabled() {\n return this._sort.disabled || this.disabled;\n }\n\n /**\n * Gets the aria-sort attribute that should be applied to this sort header. If this header\n * is not sorted, returns null so that the attribute is removed from the host element. Aria spec\n * says that the aria-sort property should only be present on one header at a time, so removing\n * ensures this is true.\n */\n _getAriaSortAttribute() {\n if (!this._isSorted()) {\n return 'none';\n }\n\n return this._sort.direction == 'asc' ? 'ascending' : 'descending';\n }\n\n /** Whether the arrow inside the sort header should be rendered. */\n _renderArrow() {\n return !this._isDisabled() || this._isSorted();\n }\n\n private _updateSortActionDescription(newDescription: string) {\n // We use AriaDescriber for the sort button instead of setting an `aria-label` because some\n // screen readers (notably VoiceOver) will read both the column header *and* the button's label\n // for every *cell* in the table, creating a lot of unnecessary noise.\n\n // If _sortButton is undefined, the component hasn't been initialized yet so there's\n // nothing to update in the DOM.\n if (this._sortButton) {\n // removeDescription will no-op if there is no existing message.\n // TODO(jelbourn): remove optional chaining when AriaDescriber is required.\n this._ariaDescriber?.removeDescription(this._sortButton, this._sortActionDescription);\n this._ariaDescriber?.describe(this._sortButton, newDescription);\n }\n\n this._sortActionDescription = newDescription;\n }\n}\n","<!--\n We set the `tabindex` on an element inside the table header, rather than the header itself,\n because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n over having a button with an `aria-label` inside the header, because the button's `aria-label`\n will be read out as the user is navigating the table's cell (see #13012).\n\n The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div class=\"mat-sort-header-container mat-focus-indicator\"\n [class.mat-sort-header-sorted]=\"_isSorted()\"\n [class.mat-sort-header-position-before]=\"arrowPosition === 'before'\"\n [class.mat-sort-header-descending]=\"_sort.direction === 'desc'\"\n [class.mat-sort-header-ascending]=\"_sort.direction === 'asc'\"\n [class.mat-sort-header-recently-cleared-ascending]=\"_recentlyCleared() === 'asc'\"\n [class.mat-sort-header-recently-cleared-descending]=\"_recentlyCleared() === 'desc'\"\n [class.mat-sort-header-animations-disabled]=\"_animationsDisabled\"\n [attr.tabindex]=\"_isDisabled() ? null : 0\"\n [attr.role]=\"_isDisabled() ? null : 'button'\">\n\n <!--\n TODO(crisbeto): this div isn't strictly necessary, but we have to keep it due to a large\n number of screenshot diff failures. It should be removed eventually. Note that the difference\n isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n causes it to be center-aligned, whereas removing it will keep the text to the left.\n -->\n <div class=\"mat-sort-header-content\">\n <ng-content></ng-content>\n </div>\n\n <!-- Disable animations while a current animation is running -->\n @if (_renderArrow()) {\n <div class=\"mat-sort-header-arrow\">\n <ng-content select=\"[matSortHeaderIcon]\">\n <svg viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\"/>\n </svg>\n </ng-content>\n </div>\n }\n</div>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {NgModule} from '@angular/core';\nimport {MatSortHeader} from './sort-header';\nimport {MatSort} from './sort';\n\n@NgModule({\n imports: [MatSort, MatSortHeader],\n exports: [MatSort, MatSortHeader, BidiModule],\n})\nexport class MatSortModule {}\n"],"names":["getSortDuplicateSortableIdError","id","Error","getSortHeaderNotContainedWithinSortError","getSortHeaderMissingIdError","getSortInvalidDirectionError","direction","MAT_SORT_DEFAULT_OPTIONS","InjectionToken","MatSort","_defaultOptions","_initializedStream","ReplaySubject","sortables","Map","_stateChanges","Subject","active","start","_direction","ngDevMode","disableClear","disabled","sortChange","EventEmitter","initialized","constructor","register","sortable","has","set","deregister","delete","sort","getNextSortDirection","emit","sortDirectionCycle","getSortDirectionCycle","nextDirectionIndex","indexOf","length","ngOnInit","next","ngOnChanges","ngOnDestroy","complete","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","type","optional","target","ɵɵFactoryTarget","Directive","isStandalone","selector","inputs","booleanAttribute","outputs","host","classAttribute","exportAs","usesOnChanges","decorators","args","Optional","Inject","Input","alias","transform","Output","sortOrder","reverse","push","MatSortHeaderIntl","changes","deps","Injectable","ɵprov","ɵɵngDeclareInjectable","providedIn","MatSortHeader","_intl","inject","_sort","_columnDef","_changeDetectorRef","ChangeDetectorRef","_focusMonitor","FocusMonitor","_elementRef","ElementRef","_ariaDescriber","AriaDescriber","_renderChanges","_animationsDisabled","_recentlyCleared","signal","_sortButton","arrowPosition","sortActionDescription","_sortActionDescription","value","_updateSortActionDescription","_CdkPrivateStyleLoader","load","_StructuralStylesLoader","defaultOptions","name","merge","subscribe","markForCheck","nativeElement","querySelector","ngAfterViewInit","monitor","Promise","resolve","then","stopMonitoring","unsubscribe","removeDescription","_toggleOnInteraction","_isDisabled","wasSorted","_isSorted","prevDirection","_handleKeydown","event","keyCode","SPACE","ENTER","preventDefault","_getAriaSortAttribute","_renderArrow","newDescription","describe","Component","ɵcmp","ɵɵngDeclareComponent","styles","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","template","MatSortModule","NgModule","imports","BidiModule","ɵinj","ɵɵngDeclareInjector","exports"],"mappings":";;;;;;;;;;;AASM,SAAUA,+BAA+BA,CAACC,EAAU,EAAA;AACxD,EAAA,OAAOC,KAAK,CAAC,CAAkDD,+CAAAA,EAAAA,EAAE,IAAI,CAAC;AACxE;SAGgBE,wCAAwCA,GAAA;EACtD,OAAOD,KAAK,CAAC,CAAA,gFAAA,CAAkF,CAAC;AAClG;SAGgBE,2BAA2BA,GAAA;EACzC,OAAOF,KAAK,CAAC,CAAA,gDAAA,CAAkD,CAAC;AAClE;AAGM,SAAUG,4BAA4BA,CAACC,SAAiB,EAAA;AAC5D,EAAA,OAAOJ,KAAK,CAAC,CAAGI,EAAAA,SAAS,mDAAmD,CAAC;AAC/E;;MCoCaC,wBAAwB,GAAG,IAAIC,cAAc,CACxD,0BAA0B;MAWfC,OAAO,CAAA;EAwDRC,eAAA;AAvDFC,EAAAA,kBAAkB,GAAG,IAAIC,aAAa,CAAO,CAAC,CAAC;AAGvDC,EAAAA,SAAS,GAAG,IAAIC,GAAG,EAAuB;AAGjCC,EAAAA,aAAa,GAAG,IAAIC,OAAO,EAAQ;EAGpBC,MAAM;AAMPC,EAAAA,KAAK,GAAkB,KAAK;EAGnD,IACIZ,SAASA,GAAA;IACX,OAAO,IAAI,CAACa,UAAU;AACxB;EACA,IAAIb,SAASA,CAACA,SAAwB,EAAA;AACpC,IAAA,IACEA,SAAS,IACTA,SAAS,KAAK,KAAK,IACnBA,SAAS,KAAK,MAAM,KACnB,OAAOc,SAAS,KAAK,WAAW,IAAIA,SAAS,CAAC,EAC/C;MACA,MAAMf,4BAA4B,CAACC,SAAS,CAAC;AAC/C;IACA,IAAI,CAACa,UAAU,GAAGb,SAAS;AAC7B;AACQa,EAAAA,UAAU,GAAkB,EAAE;EAOtCE,YAAY;AAIZC,EAAAA,QAAQ,GAAY,KAAK;AAGSC,EAAAA,UAAU,GAAuB,IAAIC,YAAY,EAAQ;EAG3FC,WAAW,GAAqB,IAAI,CAACd,kBAAkB;EAEvDe,WAAAA,CAGUhB,eAAuC,EAAA;IAAvC,IAAe,CAAAA,eAAA,GAAfA,eAAe;AACtB;EAMHiB,QAAQA,CAACC,QAAqB,EAAA;AAC5B,IAAA,IAAI,OAAOR,SAAS,KAAK,WAAW,IAAIA,SAAS,EAAE;AACjD,MAAA,IAAI,CAACQ,QAAQ,CAAC3B,EAAE,EAAE;QAChB,MAAMG,2BAA2B,EAAE;AACrC;MAEA,IAAI,IAAI,CAACS,SAAS,CAACgB,GAAG,CAACD,QAAQ,CAAC3B,EAAE,CAAC,EAAE;AACnC,QAAA,MAAMD,+BAA+B,CAAC4B,QAAQ,CAAC3B,EAAE,CAAC;AACpD;AACF;IAEA,IAAI,CAACY,SAAS,CAACiB,GAAG,CAACF,QAAQ,CAAC3B,EAAE,EAAE2B,QAAQ,CAAC;AAC3C;EAMAG,UAAUA,CAACH,QAAqB,EAAA;IAC9B,IAAI,CAACf,SAAS,CAACmB,MAAM,CAACJ,QAAQ,CAAC3B,EAAE,CAAC;AACpC;EAGAgC,IAAIA,CAACL,QAAqB,EAAA;AACxB,IAAA,IAAI,IAAI,CAACX,MAAM,IAAIW,QAAQ,CAAC3B,EAAE,EAAE;AAC9B,MAAA,IAAI,CAACgB,MAAM,GAAGW,QAAQ,CAAC3B,EAAE;AACzB,MAAA,IAAI,CAACK,SAAS,GAAGsB,QAAQ,CAACV,KAAK,GAAGU,QAAQ,CAACV,KAAK,GAAG,IAAI,CAACA,KAAK;AAC/D,KAAA,MAAO;MACL,IAAI,CAACZ,SAAS,GAAG,IAAI,CAAC4B,oBAAoB,CAACN,QAAQ,CAAC;AACtD;AAEA,IAAA,IAAI,CAACL,UAAU,CAACY,IAAI,CAAC;MAAClB,MAAM,EAAE,IAAI,CAACA,MAAM;MAAEX,SAAS,EAAE,IAAI,CAACA;AAAS,KAAC,CAAC;AACxE;EAGA4B,oBAAoBA,CAACN,QAAqB,EAAA;IACxC,IAAI,CAACA,QAAQ,EAAE;AACb,MAAA,OAAO,EAAE;AACX;AAGA,IAAA,MAAMP,YAAY,GAChBO,QAAQ,EAAEP,YAAY,IAAI,IAAI,CAACA,YAAY,IAAI,CAAC,CAAC,IAAI,CAACX,eAAe,EAAEW,YAAY;AACrF,IAAA,IAAIe,kBAAkB,GAAGC,qBAAqB,CAACT,QAAQ,CAACV,KAAK,IAAI,IAAI,CAACA,KAAK,EAAEG,YAAY,CAAC;IAG1F,IAAIiB,kBAAkB,GAAGF,kBAAkB,CAACG,OAAO,CAAC,IAAI,CAACjC,SAAS,CAAC,GAAG,CAAC;AACvE,IAAA,IAAIgC,kBAAkB,IAAIF,kBAAkB,CAACI,MAAM,EAAE;AACnDF,MAAAA,kBAAkB,GAAG,CAAC;AACxB;IACA,OAAOF,kBAAkB,CAACE,kBAAkB,CAAC;AAC/C;AAEAG,EAAAA,QAAQA,GAAA;AACN,IAAA,IAAI,CAAC9B,kBAAkB,CAAC+B,IAAI,EAAE;AAChC;AAEAC,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAAC5B,aAAa,CAAC2B,IAAI,EAAE;AAC3B;AAEAE,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAAC7B,aAAa,CAAC8B,QAAQ,EAAE;AAC7B,IAAA,IAAI,CAAClC,kBAAkB,CAACkC,QAAQ,EAAE;AACpC;AA/HW,EAAA,OAAAC,IAAA,GAAAC,EAAA,CAAAC,kBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAA3C,OAAO;;aAuDRF,wBAAwB;AAAA8C,MAAAA,QAAA,EAAA;AAAA,KAAA,CAAA;AAAAC,IAAAA,MAAA,EAAAP,EAAA,CAAAQ,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;UAvDvB/C,OAAO;AAAAgD,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,WAAA;AAAAC,IAAAA,MAAA,EAAA;AAAA1C,MAAAA,MAAA,EAAA,CAAA,eAAA,EAAA,QAAA,CAAA;AAAAC,MAAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA;AAAAZ,MAAAA,SAAA,EAAA,CAAA,kBAAA,EAAA,WAAA,CAAA;AAAAe,MAAAA,YAAA,EAAA,CAAA,qBAAA,EAAA,cAAA,EAwC+BuC,gBAAgB,CAAA;AAAAtC,MAAAA,QAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAIpBsC,gBAAgB;KAAA;AAAAC,IAAAA,OAAA,EAAA;AAAAtC,MAAAA,UAAA,EAAA;KAAA;AAAAuC,IAAAA,IAAA,EAAA;AAAAC,MAAAA,cAAA,EAAA;KAAA;IAAAC,QAAA,EAAA,CAAA,SAAA,CAAA;AAAAC,IAAAA,aAAA,EAAA,IAAA;AAAAd,IAAAA,QAAA,EAAAJ;AAAA,GAAA,CAAA;;;;;;QA5ClDtC,OAAO;AAAAyD,EAAAA,UAAA,EAAA,CAAA;UAPnBV,SAAS;AAACW,IAAAA,IAAA,EAAA,CAAA;AACTT,MAAAA,QAAQ,EAAE,WAAW;AACrBM,MAAAA,QAAQ,EAAE,SAAS;AACnBF,MAAAA,IAAI,EAAE;AACJ,QAAA,OAAO,EAAE;AACV;KACF;;;;;YAuDIM;;YACAC,MAAM;aAAC9D,wBAAwB;;;;;YA7CjC+D,KAAK;aAAC,eAAe;;;YAMrBA,KAAK;aAAC,cAAc;;;YAGpBA,KAAK;aAAC,kBAAkB;;;YAqBxBA,KAAK;AAACH,MAAAA,IAAA,EAAA,CAAA;AAACI,QAAAA,KAAK,EAAE,qBAAqB;AAAEC,QAAAA,SAAS,EAAEZ;OAAiB;;;YAIjEU,KAAK;AAACH,MAAAA,IAAA,EAAA,CAAA;AAACI,QAAAA,KAAK,EAAE,iBAAiB;AAAEC,QAAAA,SAAS,EAAEZ;OAAiB;;;YAI7Da,MAAM;aAAC,eAAe;;;;AAmFzB,SAASpC,qBAAqBA,CAACnB,KAAoB,EAAEG,YAAqB,EAAA;AACxE,EAAA,IAAIqD,SAAS,GAAoB,CAAC,KAAK,EAAE,MAAM,CAAC;EAChD,IAAIxD,KAAK,IAAI,MAAM,EAAE;IACnBwD,SAAS,CAACC,OAAO,EAAE;AACrB;EACA,IAAI,CAACtD,YAAY,EAAE;AACjBqD,IAAAA,SAAS,CAACE,IAAI,CAAC,EAAE,CAAC;AACpB;AAEA,EAAA,OAAOF,SAAS;AAClB;;MCvMaG,iBAAiB,CAAA;AAKnBC,EAAAA,OAAO,GAAkB,IAAI9D,OAAO,EAAQ;;;;;UAL1C6D,iBAAiB;AAAAE,IAAAA,IAAA,EAAA,EAAA;AAAAzB,IAAAA,MAAA,EAAAP,EAAA,CAAAQ,eAAA,CAAAyB;AAAA,GAAA,CAAA;AAAjB,EAAA,OAAAC,KAAA,GAAAlC,EAAA,CAAAmC,qBAAA,CAAA;AAAAjC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAAyB,iBAAiB;gBADL;AAAM,GAAA,CAAA;;;;;;QAClBA,iBAAiB;AAAAX,EAAAA,UAAA,EAAA,CAAA;UAD7Bc,UAAU;WAAC;AAACG,MAAAA,UAAU,EAAE;KAAO;;;;MC6EnBC,aAAa,CAAA;AACxBC,EAAAA,KAAK,GAAGC,MAAM,CAACT,iBAAiB,CAAC;AACjCU,EAAAA,KAAK,GAAGD,MAAM,CAAC7E,OAAO,EAAE;AAAC4C,IAAAA,QAAQ,EAAE;AAAK,GAAA,CAAE;AAC1CmC,EAAAA,UAAU,GAAGF,MAAM,CAAyB,4BAAmC,EAAE;AAC/EjC,IAAAA,QAAQ,EAAE;AACX,GAAA,CAAC;AACMoC,EAAAA,kBAAkB,GAAGH,MAAM,CAACI,iBAAiB,CAAC;AAC9CC,EAAAA,aAAa,GAAGL,MAAM,CAACM,YAAY,CAAC;AACpCC,EAAAA,WAAW,GAAGP,MAAM,CAA0BQ,UAAU,CAAC;AACzDC,EAAAA,cAAc,GAAGT,MAAM,CAACU,aAAa,EAAE;AAAC3C,IAAAA,QAAQ,EAAE;AAAK,GAAA,CAAC;EACxD4C,cAAc;EACZC,mBAAmB,GAAGA,mBAAmB,EAAE;EAM3CC,gBAAgB,GAAGC,MAAM,CAAuB,IAAI;;WAAC;EAMvDC,WAAW;EAMOpG,EAAE;AAGnBqG,EAAAA,aAAa,GAA4B,OAAO;EAGhDpF,KAAK;AAIdI,EAAAA,QAAQ,GAAY,KAAK;EAMzB,IACIiF,qBAAqBA,GAAA;IACvB,OAAO,IAAI,CAACC,sBAAsB;AACpC;EACA,IAAID,qBAAqBA,CAACE,KAAa,EAAA;AACrC,IAAA,IAAI,CAACC,4BAA4B,CAACD,KAAK,CAAC;AAC1C;AAIQD,EAAAA,sBAAsB,GAAW,MAAM;EAI/CnF,YAAY;AAIZK,EAAAA,WAAAA,GAAA;AACE4D,IAAAA,MAAM,CAACqB,sBAAsB,CAAC,CAACC,IAAI,CAACC,uBAAuB,CAAC;AAC5D,IAAA,MAAMC,cAAc,GAAGxB,MAAM,CAAwB/E,wBAAwB,EAAE;AAC7E8C,MAAAA,QAAQ,EAAE;AACX,KAAA,CAAC;AAMF,IAAA,IAAI,CAAC,IAAI,CAACkC,KAAK,KAAK,OAAOnE,SAAS,KAAK,WAAW,IAAIA,SAAS,CAAC,EAAE;MAClE,MAAMjB,wCAAwC,EAAE;AAClD;IAEA,IAAI2G,cAAc,EAAER,aAAa,EAAE;AACjC,MAAA,IAAI,CAACA,aAAa,GAAGQ,cAAc,EAAER,aAAa;AACpD;AACF;AAEA7D,EAAAA,QAAQA,GAAA;IACN,IAAI,CAAC,IAAI,CAACxC,EAAE,IAAI,IAAI,CAACuF,UAAU,EAAE;AAC/B,MAAA,IAAI,CAACvF,EAAE,GAAG,IAAI,CAACuF,UAAU,CAACuB,IAAI;AAChC;AAEA,IAAA,IAAI,CAACxB,KAAK,CAAC5D,QAAQ,CAAC,IAAI,CAAC;AACzB,IAAA,IAAI,CAACsE,cAAc,GAAGe,KAAK,CAAC,IAAI,CAACzB,KAAK,CAACxE,aAAa,EAAE,IAAI,CAACwE,KAAK,CAAChE,UAAU,CAAC,CAAC0F,SAAS,CAAC,MACrF,IAAI,CAACxB,kBAAkB,CAACyB,YAAY,EAAE,CACvC;AACD,IAAA,IAAI,CAACb,WAAW,GAAG,IAAI,CAACR,WAAW,CAACsB,aAAa,CAACC,aAAa,CAAC,4BAA4B,CAAE;AAC9F,IAAA,IAAI,CAACV,4BAA4B,CAAC,IAAI,CAACF,sBAAsB,CAAC;AAChE;AAEAa,EAAAA,eAAeA,GAAA;AAGb,IAAA,IAAI,CAAC1B,aAAa,CAAC2B,OAAO,CAAC,IAAI,CAACzB,WAAW,EAAE,IAAI,CAAC,CAACoB,SAAS,CAAC,MAAK;AAGhEM,MAAAA,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,MAAM,IAAI,CAACtB,gBAAgB,CAACrE,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/D,KAAC,CAAC;AACJ;AAEAc,EAAAA,WAAWA,GAAA;IACT,IAAI,CAAC+C,aAAa,CAAC+B,cAAc,CAAC,IAAI,CAAC7B,WAAW,CAAC;AACnD,IAAA,IAAI,CAACN,KAAK,CAACxD,UAAU,CAAC,IAAI,CAAC;AAC3B,IAAA,IAAI,CAACkE,cAAc,EAAE0B,WAAW,EAAE;IAElC,IAAI,IAAI,CAACtB,WAAW,EAAE;AACpB,MAAA,IAAI,CAACN,cAAc,EAAE6B,iBAAiB,CAAC,IAAI,CAACvB,WAAW,EAAE,IAAI,CAACG,sBAAsB,CAAC;AACvF;AACF;AAGAqB,EAAAA,oBAAoBA,GAAA;AAClB,IAAA,IAAI,CAAC,IAAI,CAACC,WAAW,EAAE,EAAE;AACvB,MAAA,MAAMC,SAAS,GAAG,IAAI,CAACC,SAAS,EAAE;AAClC,MAAA,MAAMC,aAAa,GAAG,IAAI,CAAC1C,KAAK,CAACjF,SAAS;AAC1C,MAAA,IAAI,CAACiF,KAAK,CAACtD,IAAI,CAAC,IAAI,CAAC;AACrB,MAAA,IAAI,CAACkE,gBAAgB,CAACrE,GAAG,CAACiG,SAAS,IAAI,CAAC,IAAI,CAACC,SAAS,EAAE,GAAGC,aAAa,GAAG,IAAI,CAAC;AAClF;AACF;EAEAC,cAAcA,CAACC,KAAoB,EAAA;IACjC,IAAIA,KAAK,CAACC,OAAO,KAAKC,KAAK,IAAIF,KAAK,CAACC,OAAO,KAAKE,KAAK,EAAE;MACtDH,KAAK,CAACI,cAAc,EAAE;MACtB,IAAI,CAACV,oBAAoB,EAAE;AAC7B;AACF;AAGAG,EAAAA,SAASA,GAAA;IACP,OACE,IAAI,CAACzC,KAAK,CAACtE,MAAM,IAAI,IAAI,CAAChB,EAAE,KAC3B,IAAI,CAACsF,KAAK,CAACjF,SAAS,KAAK,KAAK,IAAI,IAAI,CAACiF,KAAK,CAACjF,SAAS,KAAK,MAAM,CAAC;AAEvE;AAEAwH,EAAAA,WAAWA,GAAA;IACT,OAAO,IAAI,CAACvC,KAAK,CAACjE,QAAQ,IAAI,IAAI,CAACA,QAAQ;AAC7C;AAQAkH,EAAAA,qBAAqBA,GAAA;AACnB,IAAA,IAAI,CAAC,IAAI,CAACR,SAAS,EAAE,EAAE;AACrB,MAAA,OAAO,MAAM;AACf;IAEA,OAAO,IAAI,CAACzC,KAAK,CAACjF,SAAS,IAAI,KAAK,GAAG,WAAW,GAAG,YAAY;AACnE;AAGAmI,EAAAA,YAAYA,GAAA;IACV,OAAO,CAAC,IAAI,CAACX,WAAW,EAAE,IAAI,IAAI,CAACE,SAAS,EAAE;AAChD;EAEQtB,4BAA4BA,CAACgC,cAAsB,EAAA;IAOzD,IAAI,IAAI,CAACrC,WAAW,EAAE;AAGpB,MAAA,IAAI,CAACN,cAAc,EAAE6B,iBAAiB,CAAC,IAAI,CAACvB,WAAW,EAAE,IAAI,CAACG,sBAAsB,CAAC;MACrF,IAAI,CAACT,cAAc,EAAE4C,QAAQ,CAAC,IAAI,CAACtC,WAAW,EAAEqC,cAAc,CAAC;AACjE;IAEA,IAAI,CAAClC,sBAAsB,GAAGkC,cAAc;AAC9C;;;;;UAlLWtD,aAAa;AAAAL,IAAAA,IAAA,EAAA,EAAA;AAAAzB,IAAAA,MAAA,EAAAP,EAAA,CAAAQ,eAAA,CAAAqF;AAAA,GAAA,CAAA;AAAb,EAAA,OAAAC,IAAA,GAAA9F,EAAA,CAAA+F,oBAAA,CAAA;AAAA7F,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAE,IAAAA,IAAA,EAAAgC,aAAa;AAsCL3B,IAAAA,YAAA,EAAA,IAAA;AAAAC,IAAAA,QAAA,EAAA,mBAAA;AAAAC,IAAAA,MAAA,EAAA;AAAA1D,MAAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,IAAA,CAAA;AAAAqG,MAAAA,aAAA,EAAA,eAAA;AAAApF,MAAAA,KAAA,EAAA,OAAA;AAAAI,MAAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAAsC,gBAAgB,CAoBhB;AAAA2C,MAAAA,qBAAA,EAAA,uBAAA;AAAAlF,MAAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAAuC,gBAAgB;;;;;;;;;;;;;;;;cCtJrC,uuEA0CA;IAAAmF,MAAA,EAAA,CAAA,22EAAA,CAAA;AAAAC,IAAAA,eAAA,EAAAjG,EAAA,CAAAkG,uBAAA,CAAAC,MAAA;AAAAC,IAAAA,aAAA,EAAApG,EAAA,CAAAqG,iBAAA,CAAAC;AAAA,GAAA,CAAA;;;;;;QDkDajE,aAAa;AAAAlB,EAAAA,UAAA,EAAA,CAAA;UAhBzB0E,SAAS;;gBACE,mBAAmB;AAAA5E,MAAAA,QAAA,EACnB,eAAe;AAGnBF,MAAAA,IAAA,EAAA;AACJ,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,SAAS,EAAE,wBAAwB;AACnC,QAAA,WAAW,EAAE,wBAAwB;AACrC,QAAA,cAAc,EAAE,4BAA4B;AAC5C,QAAA,kBAAkB,EAAE,yBAAyB;AAC7C,QAAA,kCAAkC,EAAE;OACrC;MAAAqF,aAAA,EACcC,iBAAiB,CAACC,IAAI;MACpBL,eAAA,EAAAC,uBAAuB,CAACC,MAAM;AAAAI,MAAAA,QAAA,EAAA,uuEAAA;MAAAP,MAAA,EAAA,CAAA,22EAAA;KAAA;;;;;YA+B9CzE,KAAK;aAAC,iBAAiB;;;YAGvBA;;;YAGAA;;;YAGAA,KAAK;aAAC;AAACE,QAAAA,SAAS,EAAEZ;OAAiB;;;YAOnCU;;;YAaAA,KAAK;aAAC;AAACE,QAAAA,SAAS,EAAEZ;OAAiB;;;;;MErIzB2F,aAAa,CAAA;;;;;UAAbA,aAAa;AAAAxE,IAAAA,IAAA,EAAA,EAAA;AAAAzB,IAAAA,MAAA,EAAAP,EAAA,CAAAQ,eAAA,CAAAiG;AAAA,GAAA,CAAA;;;;;UAAbD,aAAa;AAAAE,IAAAA,OAAA,EAAA,CAHdhJ,OAAO,EAAE2E,aAAa;cACtB3E,OAAO,EAAE2E,aAAa,EAAEsE,UAAU;AAAA,GAAA,CAAA;AAEjC,EAAA,OAAAC,IAAA,GAAA5G,EAAA,CAAA6G,mBAAA,CAAA;AAAA3G,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,QAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAK,IAAAA,IAAA,EAAAmG,aAAa;cAFUG,UAAU;AAAA,GAAA,CAAA;;;;;;QAEjCH,aAAa;AAAArF,EAAAA,UAAA,EAAA,CAAA;UAJzBsF,QAAQ;AAACrF,IAAAA,IAAA,EAAA,CAAA;AACRsF,MAAAA,OAAO,EAAE,CAAChJ,OAAO,EAAE2E,aAAa,CAAC;AACjCyE,MAAAA,OAAO,EAAE,CAACpJ,OAAO,EAAE2E,aAAa,EAAEsE,UAAU;KAC7C;;;;;;"}