@ngstarter-ui/components 21.0.24 → 21.0.25

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.
Files changed (103) hide show
  1. package/ai/component-registry.json +13 -4
  2. package/fesm2022/ngstarter-ui-components-avatar.mjs +3 -3
  3. package/fesm2022/ngstarter-ui-components-avatar.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-badge.mjs +1 -2
  5. package/fesm2022/ngstarter-ui-components-badge.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs +0 -2
  7. package/fesm2022/ngstarter-ui-components-breadcrumbs.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-button-toggle.mjs +1 -1
  9. package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-button.mjs +2 -2
  11. package/fesm2022/ngstarter-ui-components-button.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-calendar.mjs +1 -1
  13. package/fesm2022/ngstarter-ui-components-calendar.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-card-overlay.mjs +0 -1
  15. package/fesm2022/ngstarter-ui-components-card-overlay.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-card.mjs +7 -12
  17. package/fesm2022/ngstarter-ui-components-card.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-carousel.mjs +0 -3
  19. package/fesm2022/ngstarter-ui-components-carousel.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-chips.mjs +13 -16
  21. package/fesm2022/ngstarter-ui-components-chips.mjs.map +1 -1
  22. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +4 -1
  23. package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
  24. package/fesm2022/ngstarter-ui-components-command-bar.mjs +2 -2
  25. package/fesm2022/ngstarter-ui-components-command-bar.mjs.map +1 -1
  26. package/fesm2022/ngstarter-ui-components-comment-editor.mjs +4 -16
  27. package/fesm2022/ngstarter-ui-components-comment-editor.mjs.map +1 -1
  28. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs} +2 -2
  29. package/fesm2022/{ngstarter-ui-components-content-editor-code-block.component-Czb0bvcr.mjs.map → ngstarter-ui-components-content-editor-code-block.component-CKrOhA7h.mjs.map} +1 -1
  30. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs} +2 -2
  31. package/fesm2022/{ngstarter-ui-components-content-editor-embed-block-c8Pq0Jdq.mjs.map → ngstarter-ui-components-content-editor-embed-block-zSApBzF3.mjs.map} +1 -1
  32. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs} +2 -2
  33. package/fesm2022/{ngstarter-ui-components-content-editor-heading-block.component-CT5g3MLZ.mjs.map → ngstarter-ui-components-content-editor-heading-block.component-Dv8d0nCy.mjs.map} +1 -1
  34. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs} +2 -2
  35. package/fesm2022/{ngstarter-ui-components-content-editor-image-block.component-Cp_Yo7zI.mjs.map → ngstarter-ui-components-content-editor-image-block.component-g-H7a5Z_.mjs.map} +1 -1
  36. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs} +2 -2
  37. package/fesm2022/{ngstarter-ui-components-content-editor-list-block.component-BvineUWy.mjs.map → ngstarter-ui-components-content-editor-list-block.component-PgqisgxY.mjs.map} +1 -1
  38. package/fesm2022/{ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs → ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs} +12 -13
  39. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-BuMm25ea.mjs.map +1 -0
  40. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs} +2 -2
  41. package/fesm2022/{ngstarter-ui-components-content-editor-paragraph-block.component-sH44U1I8.mjs.map → ngstarter-ui-components-content-editor-paragraph-block.component-DS_6CzuA.mjs.map} +1 -1
  42. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs} +2 -2
  43. package/fesm2022/{ngstarter-ui-components-content-editor-quote-block.component-CA3KoZ-u.mjs.map → ngstarter-ui-components-content-editor-quote-block.component-Df92Nqvp.mjs.map} +1 -1
  44. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs} +2 -2
  45. package/fesm2022/{ngstarter-ui-components-content-editor-table-block.component-GTZiYUjU.mjs.map → ngstarter-ui-components-content-editor-table-block.component-D4rdPkGz.mjs.map} +1 -1
  46. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs} +2 -2
  47. package/fesm2022/{ngstarter-ui-components-content-editor-video-block.component-CzMZ1s6C.mjs.map → ngstarter-ui-components-content-editor-video-block.component-DqS9Lhp_.mjs.map} +1 -1
  48. package/fesm2022/ngstarter-ui-components-content-editor.mjs +1 -1
  49. package/fesm2022/ngstarter-ui-components-core.mjs +0 -9
  50. package/fesm2022/ngstarter-ui-components-core.mjs.map +1 -1
  51. package/fesm2022/ngstarter-ui-components-country-select.mjs +11 -11
  52. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  53. package/fesm2022/ngstarter-ui-components-data-view.mjs +0 -3
  54. package/fesm2022/ngstarter-ui-components-data-view.mjs.map +1 -1
  55. package/fesm2022/ngstarter-ui-components-datepicker.mjs +21 -17
  56. package/fesm2022/ngstarter-ui-components-datepicker.mjs.map +1 -1
  57. package/fesm2022/ngstarter-ui-components-dialog.mjs +0 -1
  58. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
  59. package/fesm2022/ngstarter-ui-components-empty-state.mjs +6 -6
  60. package/fesm2022/ngstarter-ui-components-empty-state.mjs.map +1 -1
  61. package/fesm2022/ngstarter-ui-components-expansion.mjs +6 -6
  62. package/fesm2022/ngstarter-ui-components-expansion.mjs.map +1 -1
  63. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +0 -3
  64. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  65. package/fesm2022/ngstarter-ui-components-form-field.mjs +4 -4
  66. package/fesm2022/ngstarter-ui-components-form-field.mjs.map +1 -1
  67. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs} +2 -2
  68. package/fesm2022/{ngstarter-ui-components-form-renderer-autocomplete-many-field-BLhfO1zC.mjs.map → ngstarter-ui-components-form-renderer-autocomplete-many-field-CGQ3pJaG.mjs.map} +1 -1
  69. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs} +2 -2
  70. package/fesm2022/{ngstarter-ui-components-form-renderer-datepicker-field-DRSVe0gK.mjs.map → ngstarter-ui-components-form-renderer-datepicker-field-Cf3jfPv7.mjs.map} +1 -1
  71. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs} +2 -2
  72. package/fesm2022/{ngstarter-ui-components-form-renderer-input-field-DpGLKZjz.mjs.map → ngstarter-ui-components-form-renderer-input-field-tZHU8-_L.mjs.map} +1 -1
  73. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs} +2 -2
  74. package/fesm2022/{ngstarter-ui-components-form-renderer-radio-group-field-DUCSU3iT.mjs.map → ngstarter-ui-components-form-renderer-radio-group-field-lc1V-NeL.mjs.map} +1 -1
  75. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs} +2 -2
  76. package/fesm2022/{ngstarter-ui-components-form-renderer-select-field-CCbpYyZo.mjs.map → ngstarter-ui-components-form-renderer-select-field-DyBidcIU.mjs.map} +1 -1
  77. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs} +2 -2
  78. package/fesm2022/{ngstarter-ui-components-form-renderer-textarea-field-D89GlMDO.mjs.map → ngstarter-ui-components-form-renderer-textarea-field-DxbPsw3z.mjs.map} +1 -1
  79. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs} +2 -2
  80. package/fesm2022/{ngstarter-ui-components-form-renderer-timezone-field-C9wz7zPg.mjs.map → ngstarter-ui-components-form-renderer-timezone-field-DAWrM-jS.mjs.map} +1 -1
  81. package/fesm2022/ngstarter-ui-components-form-renderer.mjs +9 -9
  82. package/fesm2022/ngstarter-ui-components-form-renderer.mjs.map +1 -1
  83. package/fesm2022/ngstarter-ui-components-guided-tour.mjs +4 -5
  84. package/fesm2022/ngstarter-ui-components-guided-tour.mjs.map +1 -1
  85. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs +2 -2
  86. package/fesm2022/ngstarter-ui-components-headless-stepper.mjs.map +1 -1
  87. package/fesm2022/ngstarter-ui-components-icon.mjs +1 -1
  88. package/fesm2022/ngstarter-ui-components-icon.mjs.map +1 -1
  89. package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
  90. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  91. package/fesm2022/ngstarter-ui-components-marquee.mjs +78 -8
  92. package/fesm2022/ngstarter-ui-components-marquee.mjs.map +1 -1
  93. package/fesm2022/ngstarter-ui-components-notifications.mjs +4 -5
  94. package/fesm2022/ngstarter-ui-components-notifications.mjs.map +1 -1
  95. package/package.json +1 -1
  96. package/types/ngstarter-ui-components-card.d.ts +1 -1
  97. package/types/ngstarter-ui-components-chips.d.ts +2 -2
  98. package/types/ngstarter-ui-components-datepicker.d.ts +6 -6
  99. package/types/ngstarter-ui-components-expansion.d.ts +2 -2
  100. package/types/ngstarter-ui-components-form-field.d.ts +2 -2
  101. package/types/ngstarter-ui-components-guided-tour.d.ts +1 -1
  102. package/types/ngstarter-ui-components-marquee.d.ts +19 -11
  103. package/fesm2022/ngstarter-ui-components-content-editor-ngstarter-ui-components-content-editor-4_TqxgpH.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-data-view.mjs","sources":["../../../projects/components/data-view/src/types.ts","../../../projects/components/data-view/src/data-view-empty-data.directive.ts","../../../projects/components/data-view/src/data-view-empty-filter-results.directive.ts","../../../projects/components/data-view/src/data-view-action-bar.directive.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.html","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.ts","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.html","../../../projects/components/data-view/src/config.ts","../../../projects/components/data-view/src/data-view/data-view.ts","../../../projects/components/data-view/src/data-view/data-view.html","../../../projects/components/data-view/src/cell-renderer.ts","../../../projects/components/data-view/ngstarter-ui-components-data-view.ts"],"sourcesContent":["import { CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { InjectionToken } from '@angular/core';\n\nexport interface DataViewInterface {\n api: DataViewAPI;\n}\n\nexport interface DataViewAPI {\n search(value: string): void;\n selectAll(): void;\n unselectAll(): void;\n refresh(): void;\n getSnapshot(): DataViewState[];\n}\n\nexport interface DataViewColumnDef {\n name: string;\n field: string;\n cellRenderer?: string;\n visible?: boolean;\n width?: string;\n flex?: number;\n type?: string;\n valueGetter?: (value: any) => any;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n sortable?: boolean;\n resizable?: boolean;\n withColumnSettings?: boolean;\n minWidth?: string | number;\n maxWidth?: string | number;\n params?: {\n [prop: string]: any,\n }\n}\n\nexport interface DataViewRowSelectionEvent<T> {\n checkboxChange: CheckboxChange;\n row: T;\n checked: boolean;\n}\n\nexport interface DataViewCellRendererDef {\n cellRenderer: string;\n component: () => Promise<any>;\n}\n\nexport interface DataViewCellRenderer {\n element: any;\n columnDef: any;\n fieldData: any;\n}\n\nexport interface DataViewActionBarAPI {\n setForceVisible: (visible: boolean) => void;\n}\n\nexport type DataViewRowModelType = 'clientSide' | 'serverSide';\n\nexport interface DataViewGetRowsParams {\n startRow: number;\n endRow: number;\n page: number;\n pageSize: number;\n sortModel: { colId: string; sort: 'asc' | 'desc' | '' }[];\n filterModel: string;\n successCallback(rowsThisBlock: any[], lastRow?: number): void;\n failCallback(): void;\n}\n\nexport interface DataViewDatasource {\n getItems(params: DataViewGetRowsParams): void;\n}\n\nexport type DataViewPinAlign = 'start' | 'end' | undefined;\n\nexport interface DataViewState {\n field: string;\n visible?: boolean;\n width?: string;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n}\n\nexport const DATA_VIEW = new InjectionToken<DataViewInterface>('DATA_VIEW');\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyData]',\n exportAs: 'ngsDataViewEmptyData',\n standalone: true,\n host: {\n 'class': 'ngs-data-view-empty-data',\n }\n})\nexport class DataViewEmptyDataDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyFilterResults]',\n exportAs: 'ngsDataViewEmptyFilterResults',\n standalone: true,\n host: {\n 'class': 'ngs-data-view-empty-filter-results',\n }\n})\nexport class DataViewEmptyFilterResultsDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { booleanAttribute, Directive, inject, input, numberAttribute, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewActionBar]',\n standalone: true\n})\nexport class DataViewActionBarDirective {\n readonly templateRef = inject(TemplateRef);\n readonly width = input(100, {\n alias: 'ngsDataViewActionBarWidth',\n transform: numberAttribute\n });\n}\n","import { booleanAttribute, Component, input, numberAttribute } from '@angular/core';\nimport { DataViewActionBarAPI } from '../types';\n\n@Component({\n selector: 'ngs-data-view-action-bar',\n exportAs: 'ngsDataViewActionBar',\n templateUrl: './data-view-action-bar.html',\n styleUrl: './data-view-action-bar.scss',\n host: {\n 'class': 'ngs-data-view-action-bar',\n '[class.force-visible]': 'forceVisible() || _forceVisible'\n }\n})\nexport class DataViewActionBar {\n forceVisible = input(false, {\n transform: booleanAttribute\n });\n width = input(100, {\n transform: numberAttribute\n });\n protected _forceVisible = false;\n\n get api(): DataViewActionBarAPI {\n return {\n setForceVisible: (forceVisible: boolean): void => {\n this._forceVisible = forceVisible;\n },\n }\n }\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { DIALOG_DATA, DialogRef, DialogTitle, DialogContent, DialogActions } from '@ngstarter-ui/components/dialog';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Menu, MenuTrigger, MenuContent, MenuItem } from '@ngstarter-ui/components/menu';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DataViewColumnDef, DataViewPinAlign } from '../../types';\n\nexport interface ColumnSettingsDialogData {\n columns: DataViewColumnDef[];\n}\n\nexport interface ColumnSettingsDialogResult {\n columns: DataViewColumnDef[];\n}\n\n@Component({\n selector: 'ngs-data-view-column-settings-dialog',\n templateUrl: './column-settings-dialog.html',\n styleUrl: './column-settings-dialog.scss',\n imports: [\n DialogTitle,\n DialogContent,\n DialogActions,\n Checkbox,\n Button,\n Icon,\n Menu,\n MenuTrigger,\n MenuContent,\n MenuItem,\n DragDropModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewColumnSettingsDialog {\n private _dialogRef = inject(DialogRef<DataViewColumnSettingsDialog, ColumnSettingsDialogResult>);\n private _data = inject<ColumnSettingsDialogData>(DIALOG_DATA);\n\n columns = signal<DataViewColumnDef[]>(this._data.columns\n .filter(c => c.withColumnSettings !== false)\n .map(c => ({ ...c }))\n );\n\n drop(event: CdkDragDrop<DataViewColumnDef[]>) {\n const updated = [...this.columns()];\n moveItemInArray(updated, event.previousIndex, event.currentIndex);\n this.columns.set(updated);\n }\n\n toggleVisibility(index: number, visible: boolean) {\n const updated = [...this.columns()];\n updated[index] = { ...updated[index], visible };\n this.columns.set(updated);\n }\n\n pinColumn(index: number, align: DataViewPinAlign | null) {\n const updated = [...this.columns()];\n if (align === null) {\n updated[index] = { ...updated[index], pinned: false, pinAlign: undefined };\n } else {\n updated[index] = { ...updated[index], pinned: true, pinAlign: align };\n }\n this.columns.set(updated);\n }\n\n apply() {\n this._dialogRef.close({ columns: this.columns() });\n }\n\n cancel() {\n this._dialogRef.close();\n }\n}\n","<h3 ngsDialogTitle>Choose Columns</h3>\n<div ngsDialogContent>\n <div class=\"columns flex flex-col gap-2 min-w-[300px]\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (col of columns(); track col.field; let i = $index) {\n <div class=\"flex items-center gap-1 px-1 py-2 bg-surface-container rounded-lg cursor-default\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\"columns\">\n <div class=\"cursor-move text-[var(--ngs-text-secondary)] flex items-center\" cdkDragHandle>\n <ngs-icon name=\"fluent:re-order-dots-vertical-24-regular\"/>\n </div>\n <ngs-checkbox [checked]=\"col.visible !== false\"\n (change)=\"toggleVisibility(i, $event.checked)\">\n {{ col.name }}\n </ngs-checkbox>\n <div class=\"grow\"></div>\n <button ngsIconButton\n class=\"shrink-0\"\n [ngsMenuTriggerFor]=\"pinMenu\"\n [ngsMenuTriggerData]=\"{ col: col, index: i }\">\n <ngs-icon [name]=\"col.pinned ? (col.pinAlign === 'end' ? 'fluent:pin-off-24-filled' : 'fluent:pin-24-filled') : 'fluent:pin-24-regular'\"\n size=\"20\"/>\n </button>\n </div>\n }\n </div>\n</div>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n<div ngsDialogActions align=\"end\">\n <button ngsButton (click)=\"cancel()\">Cancel</button>\n <button ngsButton=\"filled\" (click)=\"apply()\">Apply</button>\n</div>\n","import { InjectionToken, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\nimport { DataViewColumnDef } from './types';\n\nexport interface DataViewConfig {\n embedded?: boolean;\n rowHeight?: number;\n headerHeight?: number;\n bufferRows?: number;\n pageSizeOptions?: number[];\n pageSize?: number;\n rowSelection?: 'single' | 'multiple';\n selectionWidth?: number;\n stickyHeader?: boolean;\n withPagination?: boolean;\n showFirstLastButtons?: boolean;\n minColumnWidth?: number;\n defaultColDef?: Partial<DataViewColumnDef>;\n autoHeight?: boolean;\n}\n\nexport const DATA_VIEW_CONFIG = new InjectionToken<DataViewConfig>('DATA_VIEW_CONFIG');\n\nexport function provideDataView(config: DataViewConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: DATA_VIEW_CONFIG, useValue: config }\n ]);\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed, contentChild, DestroyRef, effect, ElementRef, forwardRef,\n inject, Injector,\n input,\n model,\n NgZone,\n OnInit,\n output, PLATFORM_ID, signal, TemplateRef, untracked,\n viewChild\n} from '@angular/core';\nimport {\n Table, TableDataSource\n} from '@ngstarter-ui/components/table';\nimport {\n EmptyState,\n EmptyStateContent,\n EmptyStateIcon\n} from '@ngstarter-ui/components/empty-state';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport {\n DataViewInterface,\n DataViewAPI,\n DataViewCellRendererDef,\n DataViewColumnDef,\n DataViewDatasource,\n DataViewGetRowsParams,\n DataViewRowModelType,\n DataViewRowSelectionEvent, DATA_VIEW, DataViewState, DataViewPinAlign,\n} from '../types';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { PageEvent, Paginator } from '@ngstarter-ui/components/paginator';\nimport { SortDirective, SortHeader, Sort } from '@ngstarter-ui/components/sort';\nimport { SortDirection } from '@ngstarter-ui/components/sort';\nimport { isPlatformBrowser, NgComponentOutlet, NgStyle, NgTemplateOutlet, DOCUMENT } from '@angular/common';\nimport { DataViewEmptyDataDirective } from '../data-view-empty-data.directive';\nimport { DataViewEmptyFilterResultsDirective } from '../data-view-empty-filter-results.directive';\nimport { DataViewActionBarDirective } from '../data-view-action-bar.directive';\nimport { DataViewActionBar } from '../data-view-action-bar/data-view-action-bar';\nimport { Checkbox, CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { BlockLoader, BlockLoaderContainerDirective } from '@ngstarter-ui/components/block-loader';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Menu, MenuItem, MenuTrigger, MenuDivider, MenuContent } from '@ngstarter-ui/components/menu';\nimport { Dialog } from '@ngstarter-ui/components/dialog';\nimport { DataViewColumnSettingsDialog, ColumnSettingsDialogResult } from './column-settings-dialog/column-settings-dialog';\nimport { DATA_VIEW_CONFIG } from '../config';\nimport { fromEvent, takeUntil, finalize, take, timer, Subject, merge } from 'rxjs';\n\n@Component({\n selector: 'ngs-data-view',\n exportAs: 'ngsDataView',\n imports: [\n Checkbox,\n SortHeader,\n SortDirective,\n NgComponentOutlet,\n NgTemplateOutlet,\n Paginator,\n ScrollbarArea,\n NgStyle,\n EmptyState,\n EmptyStateIcon,\n EmptyStateContent,\n Icon,\n BlockLoader,\n BlockLoaderContainerDirective,\n Button,\n Menu,\n MenuItem,\n MenuTrigger,\n MenuDivider,\n MenuContent,\n ],\n templateUrl: './data-view.html',\n styleUrl: './data-view.scss',\n providers: [\n {\n provide: DATA_VIEW,\n useExisting: forwardRef(() => DataView),\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-data-view',\n '[class.highlight-header]': 'highlightHeader()',\n '[class.pinned-header]': 'stickyHeader()',\n '[class.hover-rows]': 'hoverRows()',\n '[class.is-loading]': '_isLoading()',\n '[class.embedded]': 'embedded()',\n '[class.has-horizontal-scroll]': 'hasHorizontalScroll()',\n '[class.is-browser]': 'isBrowser()',\n '[style.--ngs-data-view-header-height.px]': 'headerHeight()',\n '[style.--ngs-data-view-selection-column-width.px]': 'selectionWidth()',\n '[class.is-auto-height]': 'autoHeight()',\n }\n})\nexport class DataView<T> implements OnInit, AfterViewInit, DataViewInterface {\n private _cdr = inject(ChangeDetectorRef);\n private _destroyRef = inject(DestroyRef);\n private _platformId = inject(PLATFORM_ID);\n private _ngZone = inject(NgZone);\n private _doc = inject(DOCUMENT);\n private _config = inject(DATA_VIEW_CONFIG, { optional: true });\n private _elRef = inject<ElementRef<HTMLElement>>(ElementRef as any);\n private _dialog = inject(Dialog);\n\n private _isDestroyed = false;\n\n private _requestId = 0;\n private _lastRequestKey: string | null = null;\n private _refreshTrigger = signal(0);\n private _serverSideRowCount = signal(0);\n private _manualOrder = signal<string[] | null>(null);\n private _manualVisibility = signal<Record<string, boolean>>({});\n private _hasDataOnServer = signal<boolean | undefined>(undefined);\n\n private _internalLoading = signal(false);\n protected _isFiltering = signal(false);\n protected _isSorting = signal(false);\n\n private _emptyDataRef = contentChild(DataViewEmptyDataDirective);\n protected _emptyFilterResults = contentChild(DataViewEmptyFilterResultsDirective);\n protected _actionBarRef = contentChild(DataViewActionBarDirective);\n protected _actionBarComp = contentChild(DataViewActionBarDirective, { read: DataViewActionBar });\n private _table = viewChild<Table<T>>('table');\n private _ngsSort = viewChild(SortDirective);\n private _internalPaginator = viewChild(Paginator);\n // Optional external paginator passed from parent. If provided, it overrides the internal one.\n paginator = input<Paginator | null>(null);\n\n private _dataSource = new TableDataSource<T>([]);\n\n // ViewChildren for scroll synchronization\n private _headerCenter = viewChild('headerCenter', { read: ElementRef<HTMLElement> });\n private _headerCenterInner = viewChild('headerCenterInner', { read: ElementRef<HTMLElement> });\n private _bodyLeftContent = viewChild('bodyLeftContent', { read: ElementRef<HTMLElement> });\n private _scrollbarArea = viewChild(ScrollbarArea);\n private _bodyCenterContent = viewChild('bodyCenterContent', { read: ElementRef<HTMLElement> });\n private _bodyRightContent = viewChild('bodyRightContent', { read: ElementRef<HTMLElement> });\n\n columnDefs = input<DataViewColumnDef[]>([]);\n defaultColDef = input<Partial<DataViewColumnDef>>(this._config?.defaultColDef ?? {});\n data = input<T[]>([]);\n datasource = input<DataViewDatasource | null>(null);\n rowHeight = input(this._config?.rowHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.rowHeight || 50 });\n headerHeight = input(this._config?.headerHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.headerHeight || 50 });\n bufferRows = input(this._config?.bufferRows ?? 10, { transform: (v: any) => parseInt(v, 10) || this._config?.bufferRows || 10 });\n withSelection = input(false, {\n transform: booleanAttribute\n });\n highlightHeader = input(false, {\n transform: booleanAttribute\n });\n rowModelType = input<DataViewRowModelType>('clientSide');\n autoHeight = input(this._config?.autoHeight ?? false, {\n transform: booleanAttribute\n });\n stickyHeader = input(this._config?.stickyHeader ?? true, {\n transform: booleanAttribute\n });\n withPagination = input(this._config?.withPagination ?? false, {\n transform: booleanAttribute\n });\n bodyScroll = input(false, {\n transform: booleanAttribute\n });\n pageSizeOptions = input<number[]>(this._config?.pageSizeOptions ?? [5, 10, 20]);\n showFirstLastButtons = input(this._config?.showFirstLastButtons ?? false, {\n transform: booleanAttribute\n });\n paginatorAriaLabel = input<string>('');\n pageSize = model<number>(this._config?.pageSize ?? 10);\n pageIndex = model<number>(0);\n snapshot = input<DataViewState[] | null>(null);\n withColumnSettings = input(false, { transform: booleanAttribute });\n embedded = input(this._config?.embedded ?? false, { transform: booleanAttribute });\n rowSelection = input<'single' | 'multiple'>(this._config?.rowSelection ?? 'multiple');\n selectionWidth = input(this._config?.selectionWidth ?? 52, { transform: (v: any) => parseInt(v, 10) || this._config?.selectionWidth || 52 });\n minColumnWidth = input(this._config?.minColumnWidth ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.minColumnWidth || 40 });\n\n private _lastScrollTop = 0;\n private _lastScrollLeft = 0;\n\n // Virtualization state\n private _scrollTop = signal(0);\n private _viewportHeight = signal(0);\n private _viewportWidth = signal(0);\n protected loaded = signal(false);\n protected isBrowser = signal(false);\n\n protected hoveredRowIndex = signal<number | null>(null);\n\n private _initialViewState = signal<DataViewState[]>([]);\n\n // Resize and Pin state\n private _manualWidths = signal<Record<string, string | undefined>>({});\n private _manualPinned = signal<Record<string, { pinned: boolean, pinAlign: DataViewPinAlign } | undefined>>({});\n private _isResizing = signal(false);\n private _resizeLineLeft = signal(0);\n private _resizeStartX = 0;\n private _resizeStartWidth = 0;\n private _resizeColField: string | null = null;\n\n protected isResizing() { return this._isResizing(); }\n protected resizeLineLeft() { return this._resizeLineLeft(); }\n\n private _normalizeWidth(width?: string | number): string | undefined {\n if (width === null || width === undefined || width === '') return undefined;\n const sWidth = String(width);\n return /^\\d+$/.test(sWidth) ? `${sWidth}px` : sWidth;\n }\n\n protected normalizedColumns = computed(() => {\n const overrides = this._manualWidths();\n const pinOverrides = this._manualPinned();\n const order = this._manualOrder();\n const visibility = this._manualVisibility();\n\n const defs = this.columnDefs();\n let orderedDefs = [...defs];\n\n if (order) {\n orderedDefs.sort((a, b) => {\n const indexA = order.indexOf(a.field);\n const indexB = order.indexOf(b.field);\n if (indexA === -1 && indexB === -1) return 0;\n if (indexA === -1) return 1;\n if (indexB === -1) return -1;\n return indexA - indexB;\n });\n }\n\n const defaultColDef = this.defaultColDef() || {};\n\n return orderedDefs.map(col => {\n const mergedCol = {\n ...defaultColDef,\n ...col\n };\n const overrideWidth = overrides[mergedCol.field];\n const pinOverride = pinOverrides[mergedCol.field];\n const visibleOverride = visibility[mergedCol.field];\n const width = this._normalizeWidth(overrideWidth ?? mergedCol.width);\n const flex = (overrideWidth ? undefined : mergedCol.flex) ?? (width ? undefined : 1);\n const pinned = pinOverride ? pinOverride.pinned : mergedCol.pinned;\n const pinAlign = pinOverride ? pinOverride.pinAlign : mergedCol.pinAlign;\n return {\n ...mergedCol,\n visible: visibleOverride ?? mergedCol.visible ?? true,\n width,\n flex,\n pinned,\n pinAlign: pinned && !pinAlign ? 'start' : pinAlign\n };\n });\n });\n\n protected isSortingEnabled = computed(() => {\n return this.normalizedColumns().some(col => col.sortable);\n });\n\n protected pinnedLeftColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'start'));\n protected pinnedRightColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'end'));\n protected centerColumns = computed(() => this.normalizedColumns().filter(c => c.visible && !c.pinned));\n\n protected leftPinnedWidth = computed(() => {\n let width = 0;\n if (this.withSelection()) {\n width += this.selectionWidth();\n }\n width += this.pinnedLeftColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n return width;\n });\n\n protected leftPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.leftPinnedWidth(),\n 'min-width.px': this.leftPinnedWidth()\n };\n });\n\n protected rightPinnedWidth = computed(() => {\n let width = 0;\n width += this.pinnedRightColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n if (this.actionBarTemplateRef) width += this.actionBarWidth();\n return width;\n });\n\n protected rightPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.rightPinnedWidth(),\n 'min-width.px': this.rightPinnedWidth()\n };\n });\n\n protected centerWidth = computed(() => {\n const totalFixed = this.centerColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : 0), 0);\n const hasFlex = this.centerColumns().some(c => !!c.flex);\n const availableWidth = this._viewportWidth();\n if (hasFlex) {\n const isBrowser = this.isBrowser();\n // Ensure we have at least some width for flex columns, and handle initial zero viewportWidth\n if (availableWidth === 0 && !isBrowser) {\n // In SSR, we don't know the viewport width, but we want flex columns to expand.\n // Returning totalFixed might cause the center to collapse if all columns are flex.\n return '100%' as any;\n }\n return Math.max(totalFixed, availableWidth, 300);\n }\n return Math.max(totalFixed, availableWidth);\n });\n\n protected onColumnResizeStart(event: MouseEvent, col: any) {\n if (!this.isBrowser() || !col?.resizable || event.button !== 0 || this._isResizing()) return;\n event.preventDefault();\n event.stopPropagation();\n\n // Determine initial width from DOM if not fixed yet\n const target = event.currentTarget as HTMLElement;\n const cell = target.closest('.header-cell') as HTMLElement | null;\n const startWidth = (col?.width ? parseInt(col.width, 10) : (cell ? cell.getBoundingClientRect().width : 0)) || 0;\n\n // Before starting resize — freeze widths of all columns to the left within the same section\n try {\n const overrides = { ...this._manualWidths() };\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const freezeAll = (cols: any[], containerSelector: string, extraOffset = 0) => {\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n if (!container) return;\n const cells = Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[];\n for (let i = 0; i < cols.length; i++) {\n const colDef = cols[i];\n if (!colDef) continue;\n if (!overrides[colDef.field]) {\n const domIndex = i + extraOffset;\n const cellEl = cells[domIndex];\n const w = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (colDef.width ? parseInt(colDef.width, 10) : undefined);\n if (w && w > 0) {\n overrides[colDef.field] = `${w}px`;\n }\n }\n }\n };\n\n const extraLeft = this.withSelection() ? 1 : 0;\n freezeAll(leftCols, '.grid-header-left .header-inner', extraLeft);\n freezeAll(centerCols, '.grid-header-center .header-inner');\n freezeAll(rightCols, '.grid-header-right .header-inner');\n\n this._manualWidths.set(overrides);\n } catch {\n // best-effort freezing; ignore errors and continue\n }\n\n let nextCol: any = null;\n let nextColStartWidth = 0;\n try {\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const findNextInfo = (cols: any[], idx: number, containerSelector: string, extraOffset = 0) => {\n if (idx < 0 || idx >= cols.length - 1) return null;\n const next = cols[idx + 1];\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n const cells = container ? Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[] : [];\n const domIndex = idx + 1 + extraOffset;\n const cellEl = cells[domIndex];\n const width = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (next.width ? parseInt(next.width, 10) : 0);\n return { col: next, width };\n };\n\n let nextInfo: any = null;\n if (leftIdx >= 0) {\n nextInfo = findNextInfo(leftCols, leftIdx, '.grid-header-left .header-inner', this.withSelection() ? 1 : 0);\n } else if (rightIdx >= 0) {\n nextInfo = findNextInfo(rightCols, rightIdx, '.grid-header-right .header-inner');\n }\n\n if (nextInfo) {\n nextCol = nextInfo.col;\n nextColStartWidth = nextInfo.width;\n }\n } catch { }\n\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement;\n const hostRect = gridRoot.getBoundingClientRect();\n const handleRect = (target as HTMLElement).getBoundingClientRect();\n const borderLeft = gridRoot.clientLeft || 0;\n const scrollbarArea = this._scrollbarArea();\n const initialScrollLeft = (!col.pinned && scrollbarArea) ? scrollbarArea.scrollableContentRef().nativeElement.scrollLeft : 0;\n\n const initialManualWidths = { ...this._manualWidths() };\n this._resizeStartX = event.clientX;\n this._resizeStartWidth = startWidth;\n this._resizeColField = col?.field ?? null;\n this._resizeLineLeft.set(handleRect.right - hostRect.left - borderLeft);\n this._isResizing.set(true);\n\n const rightPinnedWidth = this.rightPinnedWidth();\n const maxLineLeft = hostRect.width - borderLeft - rightPinnedWidth;\n const leftPinnedWidth = this.leftPinnedWidth();\n const minLineLeft = leftPinnedWidth;\n\n let moved = false;\n const colStartInHost = (handleRect.right - this._resizeStartWidth) - hostRect.left - borderLeft + initialScrollLeft;\n\n this._ngZone.runOutsideAngular(() => {\n const mouseMove$ = fromEvent<MouseEvent>(this._doc, 'mousemove', { capture: true });\n const mouseUp$ = fromEvent<MouseEvent>(this._doc, 'mouseup', { capture: true });\n const blur$ = fromEvent<FocusEvent>(window, 'blur');\n const dragStart$ = fromEvent<DragEvent>(window, 'dragstart');\n const selectStart$ = fromEvent<Event>(window, 'selectstart');\n\n const stopResize$ = new Subject<void>();\n\n // Prevent native drag and selection\n dragStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n selectStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n\n // Fix cursor for the whole document and block interactions\n const originalCursor = this._doc.body.style.cursor;\n this._doc.body.style.cursor = 'col-resize';\n this._doc.body.style.userSelect = 'none';\n const overlay = this._doc.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.zIndex = '9999';\n overlay.style.cursor = 'col-resize';\n this._doc.body.appendChild(overlay);\n\n const endResize = () => {\n stopResize$.next();\n stopResize$.complete();\n this._doc.body.style.cursor = originalCursor;\n this._doc.body.style.userSelect = '';\n if (overlay.parentNode) {\n overlay.parentNode.removeChild(overlay);\n }\n\n if (moved) {\n // More aggressive click suppression\n const clickSub = fromEvent<MouseEvent>(this._doc, 'click', { capture: true })\n .pipe(\n takeUntil(timer(50)),\n take(1)\n )\n .subscribe(clickEvent => {\n clickEvent.stopImmediatePropagation();\n clickEvent.preventDefault();\n });\n }\n\n this._ngZone.run(() => {\n this._isResizing.set(false);\n\n if (!moved) {\n this._manualWidths.set(initialManualWidths);\n } else {\n // Restore flex for columns that were not manually resized but were frozen\n const finalManualWidths = { ...this._manualWidths() };\n const currentFields = new Set([this._resizeColField, nextCol?.field].filter(Boolean));\n\n for (const field of Object.keys(finalManualWidths)) {\n if (!currentFields.has(field) && !initialManualWidths[field]) {\n delete finalManualWidths[field];\n }\n }\n this._manualWidths.set(finalManualWidths);\n }\n\n this._resizeColField = null;\n });\n };\n\n merge(mouseUp$, blur$).pipe(\n take(1)\n ).subscribe(e => {\n if (e instanceof MouseEvent) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n endResize();\n });\n\n mouseMove$.pipe(\n takeUntil(stopResize$)\n ).subscribe(e => {\n if (!this._isResizing()) return;\n\n const dx = e.clientX - this._resizeStartX;\n if (Math.abs(dx) > 2) moved = true;\n\n const minWidthVal = col.minWidth !== undefined ? parseInt(col.minWidth, 10) : this.minColumnWidth();\n const maxWidthVal = col.maxWidth !== undefined ? parseInt(col.maxWidth, 10) : Infinity;\n\n // 1. Initial width based on mouse movement\n let newWidth = Math.round(this._resizeStartWidth + dx);\n\n // 2. Constraints for the column itself\n newWidth = Math.max(minWidthVal, Math.min(maxWidthVal, newWidth));\n\n // 3. Constraint by next column (if exists, e.g. in pinned sections)\n if (nextCol) {\n const nextMinWidth = nextCol.minWidth !== undefined ? parseInt(nextCol.minWidth, 10) : this.minColumnWidth();\n const maxPossibleWidth = (this._resizeStartWidth + nextColStartWidth) - nextMinWidth;\n if (newWidth > maxPossibleWidth) {\n newWidth = maxPossibleWidth;\n }\n }\n\n // 4. Final check on newWidth\n newWidth = Math.max(minWidthVal, newWidth);\n\n const isCenterCol = !col.pinned;\n const isLeftPinned = col.pinned && col.pinAlign !== 'end';\n const isRightPinned = col.pinned && col.pinAlign === 'end';\n\n this._ngZone.run(() => {\n // Update line position with latest scroll\n const currentScrollLeft = (!col.pinned && scrollbarArea) ? scrollbarArea.scrollableContentRef().nativeElement.scrollLeft : 0;\n let lineLeft = colStartInHost + newWidth - (col.pinned ? 0 : currentScrollLeft);\n\n const hostWidth = hostRect.width - borderLeft;\n // Visual clamping: stop the line at viewport/pinned boundaries\n if (isCenterCol) {\n lineLeft = Math.max(minLineLeft, Math.min(maxLineLeft, lineLeft));\n } else if (isLeftPinned) {\n lineLeft = Math.max(0, Math.min(maxLineLeft, lineLeft));\n } else if (isRightPinned) {\n lineLeft = Math.max(minLineLeft, Math.min(hostWidth, lineLeft));\n }\n\n this._resizeLineLeft.set(lineLeft);\n\n if (this._resizeColField) {\n const map = { ...this._manualWidths() };\n map[this._resizeColField] = `${newWidth}px`;\n\n // If we have a next column, it gets squeezed/expanded\n if (nextCol) {\n const currentNextWidth = Math.max(\n 0,\n nextColStartWidth - (newWidth - this._resizeStartWidth)\n );\n map[nextCol.field] = `${currentNextWidth}px`;\n }\n\n this._manualWidths.set(map);\n }\n });\n });\n });\n }\n\n protected effectiveDataLength = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n const dataSource = this.dataSource();\n // Use filteredData because it contains all items that passed filtering\n // and is what we should base pagination on.\n const totalDataLength = (this.rowModelType() === 'serverSide' ? dataSource.data : dataSource.filteredData)?.length || 0;\n const pSize = this.pageSize();\n const pIndex = this.pageIndex();\n\n if (this.rowModelType() === 'serverSide') {\n return totalDataLength;\n }\n\n if (this.withPagination()) {\n const start = pIndex * pSize;\n const end = Math.min(start + pSize, totalDataLength);\n return Math.max(0, end - start);\n }\n\n return totalDataLength;\n });\n\n protected effectivePaginatorLength = computed(() => {\n this._dsRenderTick();\n if (this.rowModelType() === 'serverSide') {\n return this._serverSideRowCount() || 0;\n }\n // Since we now manage pagination ourselves and don't set dataSource.paginator,\n // we should use the length of filtered data for the paginator.\n const ds = this.dataSource();\n return ds.filteredData?.length || 0;\n });\n\n protected totalHeight = computed(() => {\n return this.effectiveDataLength() * this.rowHeight();\n });\n\n protected visibleRange = computed(() => {\n // We still use signals here for parts that should trigger re-computation\n // like dataSource changes, but we access _scrollTop and _viewportHeight\n // which are updated manually.\n const top = this._scrollTop();\n const height = this._viewportHeight();\n const rowHeight = this.rowHeight();\n const buffer = this.bufferRows();\n const dataSource = this.dataSource();\n const dataLength = this.effectiveDataLength();\n\n let start = Math.floor(top / rowHeight) - buffer;\n let end = Math.ceil((top + height) / rowHeight) + buffer;\n\n start = Math.max(0, start);\n end = Math.min(dataLength, end);\n\n return { start, end };\n });\n\n protected visibleRows = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n this.columnDefs(); // depend on columns\n this.data(); // depend on data\n this.loaded(); // depend on loaded state to ensure re-calculation after loading\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const { start, end } = this.visibleRange();\n const dataSource = this.dataSource();\n\n let data: T[];\n if (this.rowModelType() === 'serverSide') {\n data = dataSource.data;\n } else if (this.withPagination()) {\n data = dataSource.sortedData.slice(pIndex * pSize, (pIndex + 1) * pSize);\n } else {\n data = dataSource.sortedData;\n }\n\n // For serverSide, if we are loading but have some data already, we might want to keep it or show a loader.\n // The current logic in noFilteredResults handles the switch between table and empty state.\n // We only clear rows here if we are NOT in serverSide and loading, or if we want to force empty.\n if (this.rowModelType() !== 'serverSide' && (this._isLoading() || this._isFiltering()) && data.length === 0) {\n data = [];\n }\n\n return data.slice(start, end).map((item, index) => ({\n item,\n index: start + index,\n top: (start + index) * this.rowHeight(),\n isLast: (start + index) === data.length - 1\n }));\n });\n\n displayedColumns = computed((): string[] => {\n const displayedColumns = this\n .normalizedColumns()\n .filter(colDef => colDef.visible)\n .map(colDef => colDef.field);\n\n if (this.withSelection()) {\n displayedColumns.unshift('selection');\n }\n\n if (this.actionBarTemplateRef) {\n displayedColumns.push('__actionBar');\n }\n\n return [...displayedColumns];\n });\n\n protected isSelectionSticky = computed(() => {\n if (!this.withSelection()) {\n return false;\n }\n return this.normalizedColumns().some(col => col.pinned && (col.pinAlign === 'start' || !col.pinAlign));\n });\n\n protected hasHorizontalScroll = computed(() => {\n return this.centerWidth() > this._viewportWidth() + 1;\n });\n\n protected dataSource = computed(() => {\n return this._dataSource;\n });\n\n private _syncEffect = effect(() => {\n const data = this.data();\n const search = this.search().trim().toLowerCase();\n const rowModelType = this.rowModelType();\n const refreshTriggerValue = this._refreshTrigger();\n if (rowModelType === 'serverSide') {\n return;\n }\n untracked(() => {\n this._dataSource.data = data;\n if (rowModelType === 'clientSide') {\n this._dataSource.filter = search;\n }\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n });\n });\n\n private _loadDataEffect = effect(() => {\n const datasource = this.datasource();\n if (!datasource || this.rowModelType() !== 'serverSide' || this._isDestroyed) {\n return;\n }\n\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const search = this._debouncedSearch()?.trim() || '';\n\n // Capture sort params outside untracked but avoid triggering when sort is null due to @if toggling\n const sort = this._ngsSort();\n const sortActive = sort?.active();\n const sortDirection = sort?.direction();\n const sortModel = sortActive ? [{ colId: sortActive, sort: (sortDirection as any) || '' }] : [];\n\n const refreshTriggerValue = this._refreshTrigger();\n\n // Build a stable request key to avoid refetch loops when the view toggles (e.g. empty state removes ngsSort)\n const requestKey = `${pIndex}|${pSize}|${JSON.stringify(sortModel)}|${search}|${refreshTriggerValue}`;\n if (this._lastRequestKey === requestKey) {\n return; // no meaningful params change — skip triggering a new request\n }\n\n // Special case: if sort was active and now is undefined because component was removed from DOM,\n // but we ARE loading or in a state where we expect it to come back, we might want to wait.\n // However, the requestKey should handle it. If sortActive becomes undefined, requestKey changes.\n\n const isFilterRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[3] !== search;\n const isSortRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[2] !== JSON.stringify(sortModel);\n this._lastRequestKey = requestKey;\n\n untracked(() => {\n const currentRequestId = ++this._requestId;\n if (isFilterRequest) {\n this._isFiltering.set(true);\n }\n if (isSortRequest) {\n this._isSorting.set(true);\n }\n this._internalLoading.set(true);\n const params: DataViewGetRowsParams = {\n startRow: pIndex * pSize,\n endRow: (pIndex + 1) * pSize,\n page: pIndex,\n pageSize: pSize,\n sortModel,\n filterModel: search,\n successCallback: (rows: any[], lastRow?: number) => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this._dataSource.data = rows;\n if (lastRow !== undefined) {\n this._serverSideRowCount.set(lastRow);\n\n // Update _hasDataOnServer if we have any rows OR if we are doing a clean request (no filters)\n if (lastRow > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n } else {\n // If lastRow is not provided, we can only infer _hasDataOnServer if we actually got rows\n if (rows.length > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n }\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n },\n failCallback: () => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n }\n };\n this._ngZone.runOutsideAngular(() => {\n datasource.getItems(params);\n });\n });\n });\n\n private _dsRenderTick = signal(0);\n private _connectEffect = effect((onCleanup) => {\n const ds = this.dataSource();\n const sub = ds.connect().subscribe(() => {\n // bump a signal to re-compute derived values depending on sortedData\n this._dsRenderTick.update(v => v + 1);\n untracked(() => this._cdr.markForCheck());\n });\n onCleanup(() => sub.unsubscribe());\n });\n\n cellRenderers = input<DataViewCellRendererDef[]>([]);\n loading = input(false, {\n transform: booleanAttribute\n });\n hoverRows = input(false, {\n transform: booleanAttribute\n });\n search = input<string>('');\n private _debouncedSearch = signal('');\n\n private _debounceSearchEffect = effect((onCleanup) => {\n const search = this.search();\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(true);\n }\n const timeout = setTimeout(() => {\n untracked(() => {\n this._debouncedSearch.set(search);\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(false);\n }\n });\n }, 300);\n onCleanup(() => clearTimeout(timeout));\n });\n emptyIcon = input('fluent:document-search-24-regular');\n emptyText = input('There are no data to display');\n emptyFilterResultsIcon = input('fluent:search-info-24-regular');\n emptyFilterResultsText = input('No data matching the filter \"{{ search }}\"');\n\n protected interpolatedEmptyFilterResultsText = computed(() => {\n return this.emptyFilterResultsText().replace('{{ search }}', this.search());\n });\n\n protected _isLoading = computed(() => (this.loading() || this._internalLoading() || this._isFiltering()));\n\n protected injector = inject(Injector);\n protected selection = new SelectionModel<T>(this.rowSelection() === 'multiple', []);\n protected cellRenderersMap = new Map<string, any>();\n protected loadingCellRenderers = signal(false);\n\n readonly rowSelectionChanged = output<DataViewRowSelectionEvent<T>>();\n readonly selectionChanged = output<T[]>();\n readonly allRowsSelectionChanged = output<boolean>();\n readonly sortChange = output<Sort>();\n readonly loadEnd = output<void>();\n readonly refreshEnd = output<void>();\n\n get api(): DataViewAPI {\n return {\n search: (value: string): void => {\n this.dataSource().filter = value.trim().toLowerCase();\n },\n selectAll: (): void => {\n this._selectAll();\n },\n unselectAll: (): void => {\n this._unselectAll();\n },\n refresh: (): void => {\n this.refresh();\n },\n getSnapshot: (): DataViewState[] => {\n return this.getSnapshot();\n }\n }\n }\n\n refresh(): void {\n this._lastRequestKey = null;\n this._refreshTrigger.update(v => v + 1);\n }\n\n get noFilteredResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const currentlyEmpty = rawDataLength === 0;\n\n // During client-side filtering, immediately show empty state if filtered data is empty,\n // to avoid a short flash of an empty table before debounce takes effect.\n if (isClientSide && (this._isFiltering() || this.hasFilterValue)) {\n const filteredEmpty = (dataSource.filteredData?.length ?? 0) === 0;\n if (filteredEmpty) {\n return true;\n }\n }\n\n if (this._isLoading() || this.loadingCellRenderers()) {\n // For serverSide, while loading the first time (when we don't know yet if we have data),\n // we show the table (potentially for skeletons) instead of empty state.\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n // If we are already in an empty state (data is empty and no previous data was confirmed on server),\n // keep showing it during loading/filtering to avoid flashing the table headers/structure.\n if (currentlyEmpty && !this.isBrowser()) {\n return true;\n }\n return false;\n }\n\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n return this.isNoData || this.isNoResults;\n }\n\n protected get isNoResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n const filteredDataLength = dataSource.filteredData?.length ?? 0;\n\n if (isClientSide) {\n return filteredDataLength === 0 && (this.hasFilterValue || this._isSorting());\n }\n\n if (this.rowModelType() === 'serverSide') {\n const loadingTransition = this._isLoading() && this._hasDataOnServer() === true;\n // If we have 0 data, but loading is in progress (and we don't know if there will be data), we show skeletons, so isNoResults should be false\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && (this.hasFilterValue || this._isSorting() || loadingTransition) && this._hasDataOnServer() !== false;\n }\n\n return false;\n }\n\n protected get isNoData(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n\n if (isClientSide) {\n return rawDataLength === 0 && !this.hasFilterValue && !this._isSorting();\n }\n\n if (this.rowModelType() === 'serverSide') {\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && !this.hasFilterValue && !this._isSorting() && this._hasDataOnServer() === false;\n }\n\n return false;\n }\n\n get actionBarTemplateRef(): TemplateRef<any> | undefined {\n return this._actionBarRef()?.templateRef;\n }\n\n protected actionBarWidth = computed(() => {\n return this._actionBarComp()?.width() ?? this._actionBarRef()?.width() ?? 100;\n });\n\n protected get emptyTemplateRef(): TemplateRef<any> {\n return this._emptyDataRef()?.templateRef as TemplateRef<any>;\n }\n\n protected get emptyFilterResultsTemplateRef(): TemplateRef<any> {\n return this._emptyFilterResults()?.templateRef as TemplateRef<any>;\n }\n\n protected get hasFilterValue(): boolean {\n return !!this.search().trim();\n }\n\n getNestedValue(item: any, path: string): any {\n if (!item || !path) {\n return null;\n }\n\n if (!path.includes('.')) {\n return item[path];\n }\n\n return path.split('.').reduce((obj, key) => obj?.[key], item);\n }\n\n constructor() {\n effect(() => {\n const mode = this.rowSelection();\n untracked(() => {\n const currentSelection = this.selection.selected;\n this.selection = new SelectionModel<T>(mode === 'multiple', currentSelection);\n });\n });\n\n this._destroyRef.onDestroy(() => {\n this._isDestroyed = true;\n });\n\n // Reactively bind scroll-sync and ResizeObserver to the current ScrollbarArea,\n // to work correctly with conditional rendering (empty state / table)\n effect((onCleanup) => {\n const scrollbarArea = this._scrollbarArea();\n const isBrowser = this.isBrowser();\n if (!scrollbarArea || !isBrowser || this._isDestroyed) {\n return;\n }\n\n const centerEl = scrollbarArea.scrollableContentRef().nativeElement as HTMLElement;\n\n // Set initial viewport dimensions to avoid 0 width after returning from empty state\n const rect = centerEl.getBoundingClientRect();\n this._viewportHeight.set(rect.height);\n this._viewportWidth.set(rect.width);\n\n // Attach scroll-sync\n const scrollHandler = () => {\n if (this._isDestroyed) return;\n this._syncScrolls(centerEl);\n };\n\n this._ngZone.runOutsideAngular(() => {\n centerEl.addEventListener('scroll', scrollHandler, { passive: true });\n });\n\n // Bind ResizeObserver with safe layout\n const observer = new ResizeObserver((entries) => {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._isDestroyed) return;\n this._ngZone.run(() => {\n try {\n for (const entry of entries) {\n const { height, width } = entry.contentRect;\n // Use 1px threshold to prevent infinite loops due to subpixels\n if (Math.abs(this._viewportHeight() - height) > 1) {\n this._viewportHeight.set(height);\n }\n if (Math.abs(this._viewportWidth() - width) > 1) {\n this._viewportWidth.set(width);\n }\n }\n } catch {\n // ignore, dimensions will be delivered on the next tick\n }\n });\n });\n });\n });\n observer.observe(centerEl);\n\n // Synchronize transforms immediately after rebinding\n this._lastScrollTop = centerEl.scrollTop;\n this._lastScrollLeft = centerEl.scrollLeft;\n this._syncTransforms();\n\n onCleanup(() => {\n try { centerEl.removeEventListener('scroll', scrollHandler as any); } catch {}\n try { observer.disconnect(); } catch {}\n });\n });\n\n effect(() => {\n const sort = this._ngsSort();\n const dataSource = this.dataSource();\n if (sort && dataSource && !this._isDestroyed && this.rowModelType() !== 'serverSide') {\n dataSource.sort = sort;\n dataSource._updateChangeSubscription();\n }\n });\n\n effect(() => {\n const active = this.paginator() ?? this._internalPaginator();\n const dataSource = this.dataSource();\n if (dataSource && !this._isDestroyed) {\n if (this.withPagination() && this.rowModelType() !== 'serverSide' && active && this.isBrowser()) {\n // We handle pagination manually in visibleRows to have better control over virtualization.\n // If we assign it to dataSource.paginator, TableDataSource would also start paging data,\n // which would cause issues when we also slice data in visibleRows (double paging).\n dataSource.paginator = null as any;\n } else {\n dataSource.paginator = null as any;\n }\n }\n });\n\n // Sync external paginator page events with internal page state when provided\n effect((onCleanup) => {\n const ext = this.paginator();\n if (ext) {\n const sub = ext.page.subscribe(event => this.onPageChange(event));\n onCleanup(() => sub.unsubscribe());\n }\n });\n\n effect(() => {\n this.dataSource().sortingDataAccessor = (item: any, property) => {\n const columnDef = this.columnDefs().find(colDef => colDef.field === property);\n\n if (columnDef) {\n if (columnDef.valueGetter) {\n return columnDef.valueGetter(this.getNestedValue(item, property));\n }\n }\n\n switch (property) {\n default: {\n return this.getNestedValue(item, property);\n }\n }\n };\n });\n\n effect(() => {\n // Force table to re-render when column definitions change\n // to avoid \"Could not find column\" errors when using signals\n this.columnDefs();\n this.displayedColumns();\n untracked(() => {\n this.table?.renderRows();\n // CdkTable uses _cacheColumnDefs internally, but it's private.\n // renderRows should trigger it if definitions changed.\n });\n });\n\n effect(() => {\n this.hoveredRowIndex();\n this._syncHoverState();\n });\n }\n\n ngOnDestroy() {\n this._isDestroyed = true;\n }\n\n ngOnInit() {\n this._initialViewState.set(this.columnDefs().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n })));\n\n const snapshot = this.snapshot();\n if (snapshot) {\n this.applyState(snapshot);\n }\n\n if (this.rowModelType() !== 'serverSide') {\n this.loaded.set(true);\n }\n if (this.rowModelType() === 'serverSide' && this._dataSource.data.length === 0) {\n this._internalLoading.set(true);\n }\n\n if (this.cellRenderers().length === 0) {\n return;\n }\n\n this.loadingCellRenderers.set(true);\n const components = this.cellRenderers().map(cellRenderer => cellRenderer.component());\n Promise.all(components).then(components => {\n components.forEach((component: any, index: number) => {\n this.cellRenderersMap.set(this.cellRenderers()[index].cellRenderer, component)\n });\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n }).catch(() => {\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n });\n }\n\n ngAfterViewInit() {\n this.isBrowser.set(isPlatformBrowser(this._platformId));\n this._cdr.detectChanges();\n }\n\n private _syncScrolls(source: HTMLElement) {\n const scrollTop = source.scrollTop;\n const scrollLeft = source.scrollLeft;\n\n this._lastScrollTop = scrollTop;\n this._lastScrollLeft = scrollLeft;\n\n if (this._isDestroyed) return;\n\n this._syncTransforms();\n\n this._ngZone.run(() => {\n this._scheduleVirtualUpdate(scrollTop);\n });\n }\n\n private _scheduleVirtualUpdate(scrollTop: number): void {\n const delta = Math.abs(this._scrollTop() - scrollTop);\n const threshold = this.rowHeight() * (this.bufferRows() / 2);\n\n if (delta >= threshold || scrollTop === 0 || scrollTop + this._viewportHeight() >= this.totalHeight()) {\n this._scrollTop.set(scrollTop);\n this._syncTransforms();\n }\n }\n\n private _syncTransforms() {\n const scrollTop = this._lastScrollTop;\n const scrollLeft = this._lastScrollLeft;\n\n const headerCenterInner = this._headerCenterInner()?.nativeElement;\n if (headerCenterInner) {\n headerCenterInner.style.transform = `translate3d(${-scrollLeft}px, 0, 0)`;\n }\n\n const bodyLeftContent = this._bodyLeftContent()?.nativeElement;\n const bodyRightContent = this._bodyRightContent()?.nativeElement;\n const bodyCenterContent = this._bodyCenterContent()?.nativeElement;\n\n if (bodyLeftContent) {\n bodyLeftContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyRightContent) {\n bodyRightContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyCenterContent) {\n bodyCenterContent.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n // Sync hovered row if needed\n this._syncHoverState();\n }\n\n private _syncHoverState() {\n // if (!isPlatformBrowser(this._platformId)) return;\n //\n // this._ngZone.runOutsideAngular(() => {\n // const rows = Array.from(document.querySelectorAll('.ngs-data-view .grid-row'));\n // const hoveredIndex = this.hoveredRowIndex();\n // rows.forEach(row => {\n // const indexAttr = row.getAttribute('data-row-index');\n // if (indexAttr !== null) {\n // const index = parseInt(indexAttr, 10);\n // if (index === hoveredIndex) {\n // row.classList.add('is-hovered');\n // } else {\n // row.classList.remove('is-hovered');\n // }\n // }\n // });\n // });\n }\n\n get table(): Table<T> {\n return this._table() as Table<T>;\n }\n\n get ngsSort(): SortDirective {\n return this._ngsSort() as SortDirective;\n }\n\n hasCellRenderer(cellRenderer: string): boolean {\n return this.cellRenderersMap.has(cellRenderer);\n }\n\n getCellRenderer(cellRenderer: string): any {\n return this.cellRenderersMap.get(cellRenderer);\n }\n\n isAllSelected(): boolean {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n return this.selection.selected.length === data.length;\n }\n\n toggleAllRows(): void {\n if (this.isAllSelected()) {\n this._unselectAll();\n } else {\n this._selectAll();\n }\n }\n\n rowSelectionToggle(event: CheckboxChange, row: T): void {\n if (event.checked) {\n this.selection.select(row);\n } else {\n this.selection.deselect(row);\n }\n\n this.rowSelectionChanged.emit({\n checkboxChange: event,\n row,\n checked: event.checked\n });\n\n this.selectionChanged.emit(this.selection.selected);\n }\n\n onPageChange(event: PageEvent): void {\n this.pageIndex.set(event.pageIndex);\n this.pageSize.set(event.pageSize);\n }\n\n protected sortColumn(col: DataViewColumnDef, direction: SortDirection): void {\n const sort = this.ngsSort;\n if (sort) {\n sort.active.set(col.field);\n sort.direction.set(direction);\n sort.sortChange.emit({ active: col.field, direction });\n }\n this.onSortChange({ active: col.field, direction });\n }\n\n getSnapshot(): DataViewState[] {\n return this.normalizedColumns().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n }));\n }\n\n applyState(state: DataViewState[]): void {\n if (!state || state.length === 0) return;\n\n const pinOverrides = { ...this._manualPinned() };\n const widthOverrides = { ...this._manualWidths() };\n this.columnDefs().forEach(col => {\n const colState = state.find(s => s.field === col.field);\n if (colState) {\n if (colState.width !== undefined) {\n widthOverrides[col.field] = colState.width;\n }\n pinOverrides[col.field] = {\n pinned: !!colState.pinned,\n pinAlign: colState.pinAlign\n };\n }\n });\n\n this._manualPinned.set(pinOverrides);\n this._manualWidths.set(widthOverrides);\n this._cdr.markForCheck();\n }\n\n protected pinColumn(col: any, align: DataViewPinAlign | null): void {\n const pinOverrides = { ...this._manualPinned() };\n\n if (align === null) {\n pinOverrides[col.field] = { pinned: false, pinAlign: undefined };\n } else {\n pinOverrides[col.field] = { pinned: true, pinAlign: align };\n }\n this._manualPinned.set(pinOverrides);\n this._cdr.markForCheck();\n }\n\n protected autosizeColumn(col: DataViewColumnDef): void {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n const widths = { ...this._manualWidths() };\n widths[col.field] = `${width}px`;\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n protected autosizeAllColumns(): void {\n const widths = { ...this._manualWidths() };\n let changed = false;\n this.normalizedColumns().forEach(col => {\n if (col.visible) {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n widths[col.field] = `${width}px`;\n changed = true;\n }\n }\n });\n\n if (changed) {\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n private _calculateColumnAutosize(col: DataViewColumnDef): number {\n if (!isPlatformBrowser(this._platformId)) return 0;\n\n const gridRoot = this._elRef.nativeElement;\n const headerCells = Array.from(gridRoot.querySelectorAll(`.header-cell`)) as HTMLElement[];\n const targetHeaderCell = headerCells.find(cell => {\n const sortHeader = cell.querySelector('[ngs-sort-header]');\n return sortHeader?.getAttribute('ngs-sort-header') === col.field;\n });\n\n if (!targetHeaderCell) return 0;\n\n const headerContent = targetHeaderCell.querySelector('.grow') as HTMLElement;\n const headerWidth = (headerContent?.scrollWidth ?? 0)\n + 32 // padding-left/right\n + 32; // extra space for sort icon and menu button\n\n let maxContentWidth = headerWidth;\n const visibleCols = this.normalizedColumns().filter(c => c.visible);\n const colIndex = visibleCols.indexOf(visibleCols.find(c => c.field === col.field)!);\n\n if (colIndex !== -1) {\n const rows = Array.from(gridRoot.querySelectorAll('.grid-row')) as HTMLElement[];\n const rowsToMeasure = rows.slice(0, 50);\n\n rowsToMeasure.forEach(row => {\n const cells = Array.from(row.querySelectorAll('.cell')) as HTMLElement[];\n const cell = cells[colIndex];\n if (cell) {\n const content = cell.firstElementChild as HTMLElement;\n if (content) {\n const width = content.scrollWidth + 32; // + padding\n if (width > maxContentWidth) {\n maxContentWidth = width;\n }\n }\n }\n });\n }\n\n return Math.min(Math.max(maxContentWidth, 60), 500);\n }\n\n protected resetColumns(): void {\n const initialState = this._initialViewState();\n if (initialState.length > 0) {\n this.applyState(initialState);\n }\n\n this._manualWidths.set({});\n this._manualPinned.set({});\n this._manualOrder.set(null);\n this._manualVisibility.set({});\n this._cdr.markForCheck();\n }\n\n protected openColumnSettingsDialog(): void {\n const dialogRef = this._dialog.open<DataViewColumnSettingsDialog, any, ColumnSettingsDialogResult>(DataViewColumnSettingsDialog, {\n minWidth: '400px',\n data: {\n columns: this.normalizedColumns(),\n },\n });\n\n dialogRef.afterClosed().subscribe((result: ColumnSettingsDialogResult | undefined) => {\n if (result) {\n const newOrder = result.columns.map((c: any) => c.field);\n const newVisibility = { ...this._manualVisibility() };\n const newPinned = { ...this._manualPinned() };\n\n result.columns.forEach((c: any) => {\n newVisibility[c.field] = c.visible !== false;\n newPinned[c.field] = { pinned: !!c.pinned, pinAlign: c.pinAlign };\n });\n\n // Add back missing columns that were filtered out in dialog\n const currentOrder = this._manualOrder() || this.columnDefs().map(c => c.field);\n const resultFields = new Set(newOrder);\n const fullOrder = [...newOrder];\n\n currentOrder.forEach(field => {\n if (!resultFields.has(field)) {\n // Find where it should be inserted to keep relative order if possible,\n // but just appending is also a common strategy for \"static\" columns.\n // Let's try to maintain the original relative order.\n fullOrder.push(field);\n }\n });\n\n this._manualOrder.set(fullOrder);\n this._manualVisibility.set(newVisibility);\n this._manualPinned.set(newPinned);\n this._cdr.markForCheck();\n }\n });\n }\n\n protected onSortChange(event: Sort): void {\n if (this.rowModelType() !== 'serverSide') {\n this.dataSource().sort = this.ngsSort || null;\n }\n this.sortChange.emit(event);\n }\n\n private _selectAll(): void {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n this.selection.select(...data);\n this.selectionChanged.emit(data);\n this.allRowsSelectionChanged.emit(true);\n }\n\n private _unselectAll(): void {\n this.selection.clear();\n this.selectionChanged.emit([]);\n this.allRowsSelectionChanged.emit(false);\n }\n}\n","<div class=\"flex flex-col h-full overflow-hidden relative\"\n ngsBlockLoaderContainer>\n <ngs-block-loader [loading]=\"_isLoading()\"/>\n @if (loaded()) {\n @if (!noFilteredResults) {\n <div class=\"grid-root flex flex-col grow overflow-hidden relative\">\n @if (isResizing()) {\n <div class=\"ngs-data-view-resize-line\" [style.left.px]=\"resizeLineLeft()\"></div>\n }\n\n <!-- GRID HEADER -->\n <div class=\"grid-header pinned top-0 z-20 flex overflow-hidden shrink-0 font-medium\"\n ngsSort\n [style.height.px]=\"headerHeight()\"\n [ngsSortDisabled]=\"!isSortingEnabled() || _isLoading() || _isFiltering()\"\n (ngsSortChange)=\"onSortChange($event)\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div class=\"grid-header-left shrink-0 flex z-30\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"leftPinnedWidth()\">\n @if (withSelection()) {\n <div class=\"header-cell cell-selection flex items-center justify-center shrink-0\">\n @if (rowSelection() === 'multiple') {\n <ngs-checkbox (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\" />\n }\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div #headerCenter class=\"grid-header-center grow flex overflow-hidden\">\n <div #headerCenterInner class=\"flex header-inner\" [style.width.px]=\"centerWidth()\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div class=\"grid-header-right shrink-0 flex z-30\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"rightPinnedWidth()\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"header-cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n &nbsp;\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"grid-body grow flex relative\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div #bodyLeft class=\"grid-body-left pinned-viewport shrink-0 overflow-hidden z-10 pinned left-0\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div #bodyLeftCanvas class=\"pinned-canvas\">\n <div #bodyLeftContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @if (withSelection()) {\n <div class=\"cell cell-selection flex items-center justify-center shrink-0\">\n <ngs-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? rowSelectionToggle($event, row.item) : null\"\n [checked]=\"selection.isSelected(row.item)\" />\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <div #bodyCenter class=\"grid-body-center grow overflow-hidden relative\">\n <ngs-scrollbar-area>\n <div #bodyCenterContent class=\"rows-container\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [style.width.px]=\"centerWidth()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"/>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"virtual-spacer relative\" [style.height.px]=\"totalHeight()\" [style.width.px]=\"centerWidth()\"></div>\n </ngs-scrollbar-area>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div #bodyRight class=\"grid-body-right pinned-viewport shrink-0 overflow-hidden z-10 pinned right-0\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div #bodyRightCanvas class=\"pinned-canvas\">\n <div #bodyRightContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\"/>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (withPagination() && !paginator()) {\n <ngs-paginator [pageSizeOptions]=\"pageSizeOptions()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [pageSize]=\"pageSize()\"\n [pageIndex]=\"pageIndex()\"\n [length]=\"effectivePaginatorLength()\"\n [disabled]=\"_isLoading() || _isFiltering()\"\n (page)=\"onPageChange($event)\"/>\n }\n </div>\n } @else {\n @if (isNoResults) {\n @if (emptyFilterResultsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyFilterResultsIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ interpolatedEmptyFilterResultsText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n } @else {\n @if (emptyTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ emptyText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n }\n }\n }\n</div>\n\n<ng-template #cellContent let-row=\"row\" let-col=\"col\">\n <div class=\"overflow-hidden w-full\">\n @if (col.cellRenderer && hasCellRenderer(col.cellRenderer)) {\n <ng-container [ngComponentOutlet]=\"getCellRenderer(col.cellRenderer)\"\n [ngComponentOutletInputs]=\"{ element: row, columnDef: col, fieldData: getNestedValue(row, col.field) }\"\n [ngComponentOutletInjector]=\"injector\"/>\n } @else {\n {{ getNestedValue(row, col.field) }}\n }\n </div>\n</ng-template>\n\n<ngs-menu #columnMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n @if (col.sortable) {\n <button ngs-menu-item (click)=\"sortColumn(col, 'asc')\">\n <ngs-icon name=\"fluent:arrow-sort-up-24-regular\" size=\"20\"/>\n Sort Ascending\n </button>\n <button ngs-menu-item (click)=\"sortColumn(col, 'desc')\">\n <ngs-icon name=\"fluent:arrow-sort-down-24-regular\" size=\"20\"/>\n Sort Descending\n </button>\n <ngs-menu-divider/>\n }\n <button ngs-menu-item [ngsMenuTriggerFor]=\"pinMenu\" [ngsMenuTriggerData]=\"{ col: col }\">\n <ngs-icon name=\"fluent:pin-24-regular\" size=\"20\"/>\n Pin Column\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"autosizeColumn(col)\">\n Autosize This Column\n </button>\n <button ngs-menu-item (click)=\"autosizeAllColumns()\">\n Autosize All Columns\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"openColumnSettingsDialog()\">\n Choose Columns\n </button>\n <button ngs-menu-item (click)=\"resetColumns()\">\n Reset Columns\n </button>\n </ng-template>\n</ngs-menu>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n","import { DataViewCellRendererDef } from './types';\n\nexport function cellRenderer<T>(cellRenderer: string, component: any): DataViewCellRendererDef {\n return {\n cellRenderer,\n component\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-data-view.mjs","sources":["../../../projects/components/data-view/src/types.ts","../../../projects/components/data-view/src/data-view-empty-data.directive.ts","../../../projects/components/data-view/src/data-view-empty-filter-results.directive.ts","../../../projects/components/data-view/src/data-view-action-bar.directive.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.html","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.ts","../../../projects/components/data-view/src/data-view/column-settings-dialog/column-settings-dialog.html","../../../projects/components/data-view/src/config.ts","../../../projects/components/data-view/src/data-view/data-view.ts","../../../projects/components/data-view/src/data-view/data-view.html","../../../projects/components/data-view/src/cell-renderer.ts","../../../projects/components/data-view/ngstarter-ui-components-data-view.ts"],"sourcesContent":["import { CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { InjectionToken } from '@angular/core';\n\nexport interface DataViewInterface {\n api: DataViewAPI;\n}\n\nexport interface DataViewAPI {\n search(value: string): void;\n selectAll(): void;\n unselectAll(): void;\n refresh(): void;\n getSnapshot(): DataViewState[];\n}\n\nexport interface DataViewColumnDef {\n name: string;\n field: string;\n cellRenderer?: string;\n visible?: boolean;\n width?: string;\n flex?: number;\n type?: string;\n valueGetter?: (value: any) => any;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n sortable?: boolean;\n resizable?: boolean;\n withColumnSettings?: boolean;\n minWidth?: string | number;\n maxWidth?: string | number;\n params?: {\n [prop: string]: any,\n }\n}\n\nexport interface DataViewRowSelectionEvent<T> {\n checkboxChange: CheckboxChange;\n row: T;\n checked: boolean;\n}\n\nexport interface DataViewCellRendererDef {\n cellRenderer: string;\n component: () => Promise<any>;\n}\n\nexport interface DataViewCellRenderer {\n element: any;\n columnDef: any;\n fieldData: any;\n}\n\nexport interface DataViewActionBarAPI {\n setForceVisible: (visible: boolean) => void;\n}\n\nexport type DataViewRowModelType = 'clientSide' | 'serverSide';\n\nexport interface DataViewGetRowsParams {\n startRow: number;\n endRow: number;\n page: number;\n pageSize: number;\n sortModel: { colId: string; sort: 'asc' | 'desc' | '' }[];\n filterModel: string;\n successCallback(rowsThisBlock: any[], lastRow?: number): void;\n failCallback(): void;\n}\n\nexport interface DataViewDatasource {\n getItems(params: DataViewGetRowsParams): void;\n}\n\nexport type DataViewPinAlign = 'start' | 'end' | undefined;\n\nexport interface DataViewState {\n field: string;\n visible?: boolean;\n width?: string;\n pinned?: boolean;\n pinAlign?: DataViewPinAlign;\n}\n\nexport const DATA_VIEW = new InjectionToken<DataViewInterface>('DATA_VIEW');\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyData]',\n exportAs: 'ngsDataViewEmptyData',\n host: {\n 'class': 'ngs-data-view-empty-data',\n }\n})\nexport class DataViewEmptyDataDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewEmptyFilterResults]',\n exportAs: 'ngsDataViewEmptyFilterResults',\n host: {\n 'class': 'ngs-data-view-empty-filter-results',\n }\n})\nexport class DataViewEmptyFilterResultsDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, input, numberAttribute, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsDataViewActionBar]',\n})\nexport class DataViewActionBarDirective {\n readonly templateRef = inject(TemplateRef);\n readonly width = input(100, {\n alias: 'ngsDataViewActionBarWidth',\n transform: numberAttribute\n });\n}\n","import { booleanAttribute, Component, input, numberAttribute } from '@angular/core';\nimport { DataViewActionBarAPI } from '../types';\n\n@Component({\n selector: 'ngs-data-view-action-bar',\n exportAs: 'ngsDataViewActionBar',\n templateUrl: './data-view-action-bar.html',\n styleUrl: './data-view-action-bar.scss',\n host: {\n 'class': 'ngs-data-view-action-bar',\n '[class.force-visible]': 'forceVisible() || _forceVisible'\n }\n})\nexport class DataViewActionBar {\n forceVisible = input(false, {\n transform: booleanAttribute\n });\n width = input(100, {\n transform: numberAttribute\n });\n protected _forceVisible = false;\n\n get api(): DataViewActionBarAPI {\n return {\n setForceVisible: (forceVisible: boolean): void => {\n this._forceVisible = forceVisible;\n },\n }\n }\n}\n","<ng-content/>\n","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { DIALOG_DATA, DialogRef, DialogTitle, DialogContent, DialogActions } from '@ngstarter-ui/components/dialog';\nimport { Checkbox } from '@ngstarter-ui/components/checkbox';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Menu, MenuTrigger, MenuContent, MenuItem } from '@ngstarter-ui/components/menu';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { DataViewColumnDef, DataViewPinAlign } from '../../types';\n\nexport interface ColumnSettingsDialogData {\n columns: DataViewColumnDef[];\n}\n\nexport interface ColumnSettingsDialogResult {\n columns: DataViewColumnDef[];\n}\n\n@Component({\n selector: 'ngs-data-view-column-settings-dialog',\n templateUrl: './column-settings-dialog.html',\n styleUrl: './column-settings-dialog.scss',\n imports: [\n DialogTitle,\n DialogContent,\n DialogActions,\n Checkbox,\n Button,\n Icon,\n Menu,\n MenuTrigger,\n MenuContent,\n MenuItem,\n DragDropModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DataViewColumnSettingsDialog {\n private _dialogRef = inject(DialogRef<DataViewColumnSettingsDialog, ColumnSettingsDialogResult>);\n private _data = inject<ColumnSettingsDialogData>(DIALOG_DATA);\n\n columns = signal<DataViewColumnDef[]>(this._data.columns\n .filter(c => c.withColumnSettings !== false)\n .map(c => ({ ...c }))\n );\n\n drop(event: CdkDragDrop<DataViewColumnDef[]>) {\n const updated = [...this.columns()];\n moveItemInArray(updated, event.previousIndex, event.currentIndex);\n this.columns.set(updated);\n }\n\n toggleVisibility(index: number, visible: boolean) {\n const updated = [...this.columns()];\n updated[index] = { ...updated[index], visible };\n this.columns.set(updated);\n }\n\n pinColumn(index: number, align: DataViewPinAlign | null) {\n const updated = [...this.columns()];\n if (align === null) {\n updated[index] = { ...updated[index], pinned: false, pinAlign: undefined };\n } else {\n updated[index] = { ...updated[index], pinned: true, pinAlign: align };\n }\n this.columns.set(updated);\n }\n\n apply() {\n this._dialogRef.close({ columns: this.columns() });\n }\n\n cancel() {\n this._dialogRef.close();\n }\n}\n","<h3 ngsDialogTitle>Choose Columns</h3>\n<div ngsDialogContent>\n <div class=\"columns flex flex-col gap-2 min-w-[300px]\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (col of columns(); track col.field; let i = $index) {\n <div class=\"flex items-center gap-1 px-1 py-2 bg-surface-container rounded-lg cursor-default\"\n cdkDrag\n cdkDragLockAxis=\"y\"\n cdkDragBoundary=\"columns\">\n <div class=\"cursor-move text-[var(--ngs-text-secondary)] flex items-center\" cdkDragHandle>\n <ngs-icon name=\"fluent:re-order-dots-vertical-24-regular\"/>\n </div>\n <ngs-checkbox [checked]=\"col.visible !== false\"\n (change)=\"toggleVisibility(i, $event.checked)\">\n {{ col.name }}\n </ngs-checkbox>\n <div class=\"grow\"></div>\n <button ngsIconButton\n class=\"shrink-0\"\n [ngsMenuTriggerFor]=\"pinMenu\"\n [ngsMenuTriggerData]=\"{ col: col, index: i }\">\n <ngs-icon [name]=\"col.pinned ? (col.pinAlign === 'end' ? 'fluent:pin-off-24-filled' : 'fluent:pin-24-filled') : 'fluent:pin-24-regular'\"\n size=\"20\"/>\n </button>\n </div>\n }\n </div>\n</div>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n<div ngsDialogActions align=\"end\">\n <button ngsButton (click)=\"cancel()\">Cancel</button>\n <button ngsButton=\"filled\" (click)=\"apply()\">Apply</button>\n</div>\n","import { InjectionToken, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\nimport { DataViewColumnDef } from './types';\n\nexport interface DataViewConfig {\n embedded?: boolean;\n rowHeight?: number;\n headerHeight?: number;\n bufferRows?: number;\n pageSizeOptions?: number[];\n pageSize?: number;\n rowSelection?: 'single' | 'multiple';\n selectionWidth?: number;\n stickyHeader?: boolean;\n withPagination?: boolean;\n showFirstLastButtons?: boolean;\n minColumnWidth?: number;\n defaultColDef?: Partial<DataViewColumnDef>;\n autoHeight?: boolean;\n}\n\nexport const DATA_VIEW_CONFIG = new InjectionToken<DataViewConfig>('DATA_VIEW_CONFIG');\n\nexport function provideDataView(config: DataViewConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: DATA_VIEW_CONFIG, useValue: config }\n ]);\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed, contentChild, DestroyRef, effect, ElementRef, forwardRef,\n inject, Injector,\n input,\n model,\n NgZone,\n OnInit,\n output, PLATFORM_ID, signal, TemplateRef, untracked,\n viewChild\n} from '@angular/core';\nimport {\n Table, TableDataSource\n} from '@ngstarter-ui/components/table';\nimport {\n EmptyState,\n EmptyStateContent,\n EmptyStateIcon\n} from '@ngstarter-ui/components/empty-state';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport {\n DataViewInterface,\n DataViewAPI,\n DataViewCellRendererDef,\n DataViewColumnDef,\n DataViewDatasource,\n DataViewGetRowsParams,\n DataViewRowModelType,\n DataViewRowSelectionEvent, DATA_VIEW, DataViewState, DataViewPinAlign,\n} from '../types';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { PageEvent, Paginator } from '@ngstarter-ui/components/paginator';\nimport { SortDirective, SortHeader, Sort } from '@ngstarter-ui/components/sort';\nimport { SortDirection } from '@ngstarter-ui/components/sort';\nimport { isPlatformBrowser, NgComponentOutlet, NgStyle, NgTemplateOutlet, DOCUMENT } from '@angular/common';\nimport { DataViewEmptyDataDirective } from '../data-view-empty-data.directive';\nimport { DataViewEmptyFilterResultsDirective } from '../data-view-empty-filter-results.directive';\nimport { DataViewActionBarDirective } from '../data-view-action-bar.directive';\nimport { DataViewActionBar } from '../data-view-action-bar/data-view-action-bar';\nimport { Checkbox, CheckboxChange } from '@ngstarter-ui/components/checkbox';\nimport { ScrollbarArea } from '@ngstarter-ui/components/scrollbar-area';\nimport { BlockLoader, BlockLoaderContainerDirective } from '@ngstarter-ui/components/block-loader';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Menu, MenuItem, MenuTrigger, MenuDivider, MenuContent } from '@ngstarter-ui/components/menu';\nimport { Dialog } from '@ngstarter-ui/components/dialog';\nimport { DataViewColumnSettingsDialog, ColumnSettingsDialogResult } from './column-settings-dialog/column-settings-dialog';\nimport { DATA_VIEW_CONFIG } from '../config';\nimport { fromEvent, takeUntil, finalize, take, timer, Subject, merge } from 'rxjs';\n\n@Component({\n selector: 'ngs-data-view',\n exportAs: 'ngsDataView',\n imports: [\n Checkbox,\n SortHeader,\n SortDirective,\n NgComponentOutlet,\n NgTemplateOutlet,\n Paginator,\n ScrollbarArea,\n NgStyle,\n EmptyState,\n EmptyStateIcon,\n EmptyStateContent,\n Icon,\n BlockLoader,\n BlockLoaderContainerDirective,\n Button,\n Menu,\n MenuItem,\n MenuTrigger,\n MenuDivider,\n MenuContent,\n ],\n templateUrl: './data-view.html',\n styleUrl: './data-view.scss',\n providers: [\n {\n provide: DATA_VIEW,\n useExisting: forwardRef(() => DataView),\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-data-view',\n '[class.highlight-header]': 'highlightHeader()',\n '[class.pinned-header]': 'stickyHeader()',\n '[class.hover-rows]': 'hoverRows()',\n '[class.is-loading]': '_isLoading()',\n '[class.embedded]': 'embedded()',\n '[class.has-horizontal-scroll]': 'hasHorizontalScroll()',\n '[class.is-browser]': 'isBrowser()',\n '[style.--ngs-data-view-header-height.px]': 'headerHeight()',\n '[style.--ngs-data-view-selection-column-width.px]': 'selectionWidth()',\n '[class.is-auto-height]': 'autoHeight()',\n }\n})\nexport class DataView<T> implements OnInit, AfterViewInit, DataViewInterface {\n private _cdr = inject(ChangeDetectorRef);\n private _destroyRef = inject(DestroyRef);\n private _platformId = inject(PLATFORM_ID);\n private _ngZone = inject(NgZone);\n private _doc = inject(DOCUMENT);\n private _config = inject(DATA_VIEW_CONFIG, { optional: true });\n private _elRef = inject<ElementRef<HTMLElement>>(ElementRef as any);\n private _dialog = inject(Dialog);\n\n private _isDestroyed = false;\n\n private _requestId = 0;\n private _lastRequestKey: string | null = null;\n private _refreshTrigger = signal(0);\n private _serverSideRowCount = signal(0);\n private _manualOrder = signal<string[] | null>(null);\n private _manualVisibility = signal<Record<string, boolean>>({});\n private _hasDataOnServer = signal<boolean | undefined>(undefined);\n\n private _internalLoading = signal(false);\n protected _isFiltering = signal(false);\n protected _isSorting = signal(false);\n\n private _emptyDataRef = contentChild(DataViewEmptyDataDirective);\n protected _emptyFilterResults = contentChild(DataViewEmptyFilterResultsDirective);\n protected _actionBarRef = contentChild(DataViewActionBarDirective);\n protected _actionBarComp = contentChild(DataViewActionBarDirective, { read: DataViewActionBar });\n private _table = viewChild<Table<T>>('table');\n private _ngsSort = viewChild(SortDirective);\n private _internalPaginator = viewChild(Paginator);\n // Optional external paginator passed from parent. If provided, it overrides the internal one.\n paginator = input<Paginator | null>(null);\n\n private _dataSource = new TableDataSource<T>([]);\n\n // ViewChildren for scroll synchronization\n private _headerCenter = viewChild('headerCenter', { read: ElementRef<HTMLElement> });\n private _headerCenterInner = viewChild('headerCenterInner', { read: ElementRef<HTMLElement> });\n private _bodyLeftContent = viewChild('bodyLeftContent', { read: ElementRef<HTMLElement> });\n private _scrollbarArea = viewChild(ScrollbarArea);\n private _bodyCenterContent = viewChild('bodyCenterContent', { read: ElementRef<HTMLElement> });\n private _bodyRightContent = viewChild('bodyRightContent', { read: ElementRef<HTMLElement> });\n\n columnDefs = input<DataViewColumnDef[]>([]);\n defaultColDef = input<Partial<DataViewColumnDef>>(this._config?.defaultColDef ?? {});\n data = input<T[]>([]);\n datasource = input<DataViewDatasource | null>(null);\n rowHeight = input(this._config?.rowHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.rowHeight || 50 });\n headerHeight = input(this._config?.headerHeight ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.headerHeight || 50 });\n bufferRows = input(this._config?.bufferRows ?? 10, { transform: (v: any) => parseInt(v, 10) || this._config?.bufferRows || 10 });\n withSelection = input(false, {\n transform: booleanAttribute\n });\n highlightHeader = input(false, {\n transform: booleanAttribute\n });\n rowModelType = input<DataViewRowModelType>('clientSide');\n autoHeight = input(this._config?.autoHeight ?? false, {\n transform: booleanAttribute\n });\n stickyHeader = input(this._config?.stickyHeader ?? true, {\n transform: booleanAttribute\n });\n withPagination = input(this._config?.withPagination ?? false, {\n transform: booleanAttribute\n });\n bodyScroll = input(false, {\n transform: booleanAttribute\n });\n pageSizeOptions = input<number[]>(this._config?.pageSizeOptions ?? [5, 10, 20]);\n showFirstLastButtons = input(this._config?.showFirstLastButtons ?? false, {\n transform: booleanAttribute\n });\n paginatorAriaLabel = input<string>('');\n pageSize = model<number>(this._config?.pageSize ?? 10);\n pageIndex = model<number>(0);\n snapshot = input<DataViewState[] | null>(null);\n withColumnSettings = input(false, { transform: booleanAttribute });\n embedded = input(this._config?.embedded ?? false, { transform: booleanAttribute });\n rowSelection = input<'single' | 'multiple'>(this._config?.rowSelection ?? 'multiple');\n selectionWidth = input(this._config?.selectionWidth ?? 52, { transform: (v: any) => parseInt(v, 10) || this._config?.selectionWidth || 52 });\n minColumnWidth = input(this._config?.minColumnWidth ?? 50, { transform: (v: any) => parseInt(v, 10) || this._config?.minColumnWidth || 40 });\n\n private _lastScrollTop = 0;\n private _lastScrollLeft = 0;\n\n // Virtualization state\n private _scrollTop = signal(0);\n private _viewportHeight = signal(0);\n private _viewportWidth = signal(0);\n protected loaded = signal(false);\n protected isBrowser = signal(false);\n\n protected hoveredRowIndex = signal<number | null>(null);\n\n private _initialViewState = signal<DataViewState[]>([]);\n\n // Resize and Pin state\n private _manualWidths = signal<Record<string, string | undefined>>({});\n private _manualPinned = signal<Record<string, { pinned: boolean, pinAlign: DataViewPinAlign } | undefined>>({});\n private _isResizing = signal(false);\n private _resizeLineLeft = signal(0);\n private _resizeStartX = 0;\n private _resizeStartWidth = 0;\n private _resizeColField: string | null = null;\n\n protected isResizing() { return this._isResizing(); }\n protected resizeLineLeft() { return this._resizeLineLeft(); }\n\n private _normalizeWidth(width?: string | number): string | undefined {\n if (width === null || width === undefined || width === '') return undefined;\n const sWidth = String(width);\n return /^\\d+$/.test(sWidth) ? `${sWidth}px` : sWidth;\n }\n\n protected normalizedColumns = computed(() => {\n const overrides = this._manualWidths();\n const pinOverrides = this._manualPinned();\n const order = this._manualOrder();\n const visibility = this._manualVisibility();\n\n const defs = this.columnDefs();\n let orderedDefs = [...defs];\n\n if (order) {\n orderedDefs.sort((a, b) => {\n const indexA = order.indexOf(a.field);\n const indexB = order.indexOf(b.field);\n if (indexA === -1 && indexB === -1) return 0;\n if (indexA === -1) return 1;\n if (indexB === -1) return -1;\n return indexA - indexB;\n });\n }\n\n const defaultColDef = this.defaultColDef() || {};\n\n return orderedDefs.map(col => {\n const mergedCol = {\n ...defaultColDef,\n ...col\n };\n const overrideWidth = overrides[mergedCol.field];\n const pinOverride = pinOverrides[mergedCol.field];\n const visibleOverride = visibility[mergedCol.field];\n const width = this._normalizeWidth(overrideWidth ?? mergedCol.width);\n const flex = (overrideWidth ? undefined : mergedCol.flex) ?? (width ? undefined : 1);\n const pinned = pinOverride ? pinOverride.pinned : mergedCol.pinned;\n const pinAlign = pinOverride ? pinOverride.pinAlign : mergedCol.pinAlign;\n return {\n ...mergedCol,\n visible: visibleOverride ?? mergedCol.visible ?? true,\n width,\n flex,\n pinned,\n pinAlign: pinned && !pinAlign ? 'start' : pinAlign\n };\n });\n });\n\n protected isSortingEnabled = computed(() => {\n return this.normalizedColumns().some(col => col.sortable);\n });\n\n protected pinnedLeftColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'start'));\n protected pinnedRightColumns = computed(() => this.normalizedColumns().filter(c => c.visible && c.pinned && c.pinAlign === 'end'));\n protected centerColumns = computed(() => this.normalizedColumns().filter(c => c.visible && !c.pinned));\n\n protected leftPinnedWidth = computed(() => {\n let width = 0;\n if (this.withSelection()) {\n width += this.selectionWidth();\n }\n width += this.pinnedLeftColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n return width;\n });\n\n protected leftPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.leftPinnedWidth(),\n 'min-width.px': this.leftPinnedWidth()\n };\n });\n\n protected rightPinnedWidth = computed(() => {\n let width = 0;\n width += this.pinnedRightColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : (col.flex ? 150 : 0)), 0);\n if (this.actionBarTemplateRef) width += this.actionBarWidth();\n return width;\n });\n\n protected rightPinnedWidthStyles = computed(() => {\n return {\n 'width.px': this.rightPinnedWidth(),\n 'min-width.px': this.rightPinnedWidth()\n };\n });\n\n protected centerWidth = computed(() => {\n const totalFixed = this.centerColumns().reduce((acc, col) => acc + (col.width ? parseInt(col.width, 10) : 0), 0);\n const hasFlex = this.centerColumns().some(c => !!c.flex);\n const availableWidth = this._viewportWidth();\n if (hasFlex) {\n const isBrowser = this.isBrowser();\n // Ensure we have at least some width for flex columns, and handle initial zero viewportWidth\n if (availableWidth === 0 && !isBrowser) {\n // In SSR, we don't know the viewport width, but we want flex columns to expand.\n // Returning totalFixed might cause the center to collapse if all columns are flex.\n return '100%' as any;\n }\n return Math.max(totalFixed, availableWidth, 300);\n }\n return Math.max(totalFixed, availableWidth);\n });\n\n protected onColumnResizeStart(event: MouseEvent, col: any) {\n if (!this.isBrowser() || !col?.resizable || event.button !== 0 || this._isResizing()) return;\n event.preventDefault();\n event.stopPropagation();\n\n // Determine initial width from DOM if not fixed yet\n const target = event.currentTarget as HTMLElement;\n const cell = target.closest('.header-cell') as HTMLElement | null;\n const startWidth = (col?.width ? parseInt(col.width, 10) : (cell ? cell.getBoundingClientRect().width : 0)) || 0;\n\n // Before starting resize — freeze widths of all columns to the left within the same section\n try {\n const overrides = { ...this._manualWidths() };\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const freezeAll = (cols: any[], containerSelector: string, extraOffset = 0) => {\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n if (!container) return;\n const cells = Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[];\n for (let i = 0; i < cols.length; i++) {\n const colDef = cols[i];\n if (!colDef) continue;\n if (!overrides[colDef.field]) {\n const domIndex = i + extraOffset;\n const cellEl = cells[domIndex];\n const w = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (colDef.width ? parseInt(colDef.width, 10) : undefined);\n if (w && w > 0) {\n overrides[colDef.field] = `${w}px`;\n }\n }\n }\n };\n\n const extraLeft = this.withSelection() ? 1 : 0;\n freezeAll(leftCols, '.grid-header-left .header-inner', extraLeft);\n freezeAll(centerCols, '.grid-header-center .header-inner');\n freezeAll(rightCols, '.grid-header-right .header-inner');\n\n this._manualWidths.set(overrides);\n } catch {\n // best-effort freezing; ignore errors and continue\n }\n\n let nextCol: any = null;\n let nextColStartWidth = 0;\n try {\n const leftCols = this.pinnedLeftColumns();\n const centerCols = this.centerColumns();\n const rightCols = this.pinnedRightColumns();\n\n const byField = (arr: any[]) => arr.findIndex(c => c.field === col.field);\n const leftIdx = byField(leftCols);\n const centerIdx = byField(centerCols);\n const rightIdx = byField(rightCols);\n\n const findNextInfo = (cols: any[], idx: number, containerSelector: string, extraOffset = 0) => {\n if (idx < 0 || idx >= cols.length - 1) return null;\n const next = cols[idx + 1];\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement | null;\n const container = gridRoot?.querySelector(containerSelector) as HTMLElement | null;\n const cells = container ? Array.from(container.querySelectorAll(':scope .header-cell')) as HTMLElement[] : [];\n const domIndex = idx + 1 + extraOffset;\n const cellEl = cells[domIndex];\n const width = cellEl ? Math.round(cellEl.getBoundingClientRect().width) : (next.width ? parseInt(next.width, 10) : 0);\n return { col: next, width };\n };\n\n let nextInfo: any = null;\n if (leftIdx >= 0) {\n nextInfo = findNextInfo(leftCols, leftIdx, '.grid-header-left .header-inner', this.withSelection() ? 1 : 0);\n } else if (rightIdx >= 0) {\n nextInfo = findNextInfo(rightCols, rightIdx, '.grid-header-right .header-inner');\n }\n\n if (nextInfo) {\n nextCol = nextInfo.col;\n nextColStartWidth = nextInfo.width;\n }\n } catch { }\n\n const gridRoot = this._elRef.nativeElement.querySelector('.grid-root') as HTMLElement;\n const hostRect = gridRoot.getBoundingClientRect();\n const handleRect = (target as HTMLElement).getBoundingClientRect();\n const borderLeft = gridRoot.clientLeft || 0;\n const scrollbarArea = this._scrollbarArea();\n const initialScrollLeft = (!col.pinned && scrollbarArea) ? scrollbarArea.scrollableContentRef().nativeElement.scrollLeft : 0;\n\n const initialManualWidths = { ...this._manualWidths() };\n this._resizeStartX = event.clientX;\n this._resizeStartWidth = startWidth;\n this._resizeColField = col?.field ?? null;\n this._resizeLineLeft.set(handleRect.right - hostRect.left - borderLeft);\n this._isResizing.set(true);\n\n const rightPinnedWidth = this.rightPinnedWidth();\n const maxLineLeft = hostRect.width - borderLeft - rightPinnedWidth;\n const leftPinnedWidth = this.leftPinnedWidth();\n const minLineLeft = leftPinnedWidth;\n\n let moved = false;\n const colStartInHost = (handleRect.right - this._resizeStartWidth) - hostRect.left - borderLeft + initialScrollLeft;\n\n this._ngZone.runOutsideAngular(() => {\n const mouseMove$ = fromEvent<MouseEvent>(this._doc, 'mousemove', { capture: true });\n const mouseUp$ = fromEvent<MouseEvent>(this._doc, 'mouseup', { capture: true });\n const blur$ = fromEvent<FocusEvent>(window, 'blur');\n const dragStart$ = fromEvent<DragEvent>(window, 'dragstart');\n const selectStart$ = fromEvent<Event>(window, 'selectstart');\n\n const stopResize$ = new Subject<void>();\n\n // Prevent native drag and selection\n dragStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n selectStart$.pipe(takeUntil(stopResize$)).subscribe(e => e.preventDefault());\n\n // Fix cursor for the whole document and block interactions\n const originalCursor = this._doc.body.style.cursor;\n this._doc.body.style.cursor = 'col-resize';\n this._doc.body.style.userSelect = 'none';\n const overlay = this._doc.createElement('div');\n overlay.style.position = 'fixed';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.zIndex = '9999';\n overlay.style.cursor = 'col-resize';\n this._doc.body.appendChild(overlay);\n\n const endResize = () => {\n stopResize$.next();\n stopResize$.complete();\n this._doc.body.style.cursor = originalCursor;\n this._doc.body.style.userSelect = '';\n if (overlay.parentNode) {\n overlay.parentNode.removeChild(overlay);\n }\n\n if (moved) {\n // More aggressive click suppression\n const clickSub = fromEvent<MouseEvent>(this._doc, 'click', { capture: true })\n .pipe(\n takeUntil(timer(50)),\n take(1)\n )\n .subscribe(clickEvent => {\n clickEvent.stopImmediatePropagation();\n clickEvent.preventDefault();\n });\n }\n\n this._ngZone.run(() => {\n this._isResizing.set(false);\n\n if (!moved) {\n this._manualWidths.set(initialManualWidths);\n } else {\n // Restore flex for columns that were not manually resized but were frozen\n const finalManualWidths = { ...this._manualWidths() };\n const currentFields = new Set([this._resizeColField, nextCol?.field].filter(Boolean));\n\n for (const field of Object.keys(finalManualWidths)) {\n if (!currentFields.has(field) && !initialManualWidths[field]) {\n delete finalManualWidths[field];\n }\n }\n this._manualWidths.set(finalManualWidths);\n }\n\n this._resizeColField = null;\n });\n };\n\n merge(mouseUp$, blur$).pipe(\n take(1)\n ).subscribe(e => {\n if (e instanceof MouseEvent) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n endResize();\n });\n\n mouseMove$.pipe(\n takeUntil(stopResize$)\n ).subscribe(e => {\n if (!this._isResizing()) return;\n\n const dx = e.clientX - this._resizeStartX;\n if (Math.abs(dx) > 2) moved = true;\n\n const minWidthVal = col.minWidth !== undefined ? parseInt(col.minWidth, 10) : this.minColumnWidth();\n const maxWidthVal = col.maxWidth !== undefined ? parseInt(col.maxWidth, 10) : Infinity;\n\n // 1. Initial width based on mouse movement\n let newWidth = Math.round(this._resizeStartWidth + dx);\n\n // 2. Constraints for the column itself\n newWidth = Math.max(minWidthVal, Math.min(maxWidthVal, newWidth));\n\n // 3. Constraint by next column (if exists, e.g. in pinned sections)\n if (nextCol) {\n const nextMinWidth = nextCol.minWidth !== undefined ? parseInt(nextCol.minWidth, 10) : this.minColumnWidth();\n const maxPossibleWidth = (this._resizeStartWidth + nextColStartWidth) - nextMinWidth;\n if (newWidth > maxPossibleWidth) {\n newWidth = maxPossibleWidth;\n }\n }\n\n // 4. Final check on newWidth\n newWidth = Math.max(minWidthVal, newWidth);\n\n const isCenterCol = !col.pinned;\n const isLeftPinned = col.pinned && col.pinAlign !== 'end';\n const isRightPinned = col.pinned && col.pinAlign === 'end';\n\n this._ngZone.run(() => {\n // Update line position with latest scroll\n const currentScrollLeft = (!col.pinned && scrollbarArea) ? scrollbarArea.scrollableContentRef().nativeElement.scrollLeft : 0;\n let lineLeft = colStartInHost + newWidth - (col.pinned ? 0 : currentScrollLeft);\n\n const hostWidth = hostRect.width - borderLeft;\n // Visual clamping: stop the line at viewport/pinned boundaries\n if (isCenterCol) {\n lineLeft = Math.max(minLineLeft, Math.min(maxLineLeft, lineLeft));\n } else if (isLeftPinned) {\n lineLeft = Math.max(0, Math.min(maxLineLeft, lineLeft));\n } else if (isRightPinned) {\n lineLeft = Math.max(minLineLeft, Math.min(hostWidth, lineLeft));\n }\n\n this._resizeLineLeft.set(lineLeft);\n\n if (this._resizeColField) {\n const map = { ...this._manualWidths() };\n map[this._resizeColField] = `${newWidth}px`;\n\n // If we have a next column, it gets squeezed/expanded\n if (nextCol) {\n const currentNextWidth = Math.max(\n 0,\n nextColStartWidth - (newWidth - this._resizeStartWidth)\n );\n map[nextCol.field] = `${currentNextWidth}px`;\n }\n\n this._manualWidths.set(map);\n }\n });\n });\n });\n }\n\n protected effectiveDataLength = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n const dataSource = this.dataSource();\n // Use filteredData because it contains all items that passed filtering\n // and is what we should base pagination on.\n const totalDataLength = (this.rowModelType() === 'serverSide' ? dataSource.data : dataSource.filteredData)?.length || 0;\n const pSize = this.pageSize();\n const pIndex = this.pageIndex();\n\n if (this.rowModelType() === 'serverSide') {\n return totalDataLength;\n }\n\n if (this.withPagination()) {\n const start = pIndex * pSize;\n const end = Math.min(start + pSize, totalDataLength);\n return Math.max(0, end - start);\n }\n\n return totalDataLength;\n });\n\n protected effectivePaginatorLength = computed(() => {\n this._dsRenderTick();\n if (this.rowModelType() === 'serverSide') {\n return this._serverSideRowCount() || 0;\n }\n // Since we now manage pagination ourselves and don't set dataSource.paginator,\n // we should use the length of filtered data for the paginator.\n const ds = this.dataSource();\n return ds.filteredData?.length || 0;\n });\n\n protected totalHeight = computed(() => {\n return this.effectiveDataLength() * this.rowHeight();\n });\n\n protected visibleRange = computed(() => {\n // We still use signals here for parts that should trigger re-computation\n // like dataSource changes, but we access _scrollTop and _viewportHeight\n // which are updated manually.\n const top = this._scrollTop();\n const height = this._viewportHeight();\n const rowHeight = this.rowHeight();\n const buffer = this.bufferRows();\n const dataSource = this.dataSource();\n const dataLength = this.effectiveDataLength();\n\n let start = Math.floor(top / rowHeight) - buffer;\n let end = Math.ceil((top + height) / rowHeight) + buffer;\n\n start = Math.max(0, start);\n end = Math.min(dataLength, end);\n\n return { start, end };\n });\n\n protected visibleRows = computed(() => {\n // depend on data source render changes\n this._dsRenderTick();\n this.columnDefs(); // depend on columns\n this.data(); // depend on data\n this.loaded(); // depend on loaded state to ensure re-calculation after loading\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const { start, end } = this.visibleRange();\n const dataSource = this.dataSource();\n\n let data: T[];\n if (this.rowModelType() === 'serverSide') {\n data = dataSource.data;\n } else if (this.withPagination()) {\n data = dataSource.sortedData.slice(pIndex * pSize, (pIndex + 1) * pSize);\n } else {\n data = dataSource.sortedData;\n }\n\n // For serverSide, if we are loading but have some data already, we might want to keep it or show a loader.\n // The current logic in noFilteredResults handles the switch between table and empty state.\n // We only clear rows here if we are NOT in serverSide and loading, or if we want to force empty.\n if (this.rowModelType() !== 'serverSide' && (this._isLoading() || this._isFiltering()) && data.length === 0) {\n data = [];\n }\n\n return data.slice(start, end).map((item, index) => ({\n item,\n index: start + index,\n top: (start + index) * this.rowHeight(),\n isLast: (start + index) === data.length - 1\n }));\n });\n\n displayedColumns = computed((): string[] => {\n const displayedColumns = this\n .normalizedColumns()\n .filter(colDef => colDef.visible)\n .map(colDef => colDef.field);\n\n if (this.withSelection()) {\n displayedColumns.unshift('selection');\n }\n\n if (this.actionBarTemplateRef) {\n displayedColumns.push('__actionBar');\n }\n\n return [...displayedColumns];\n });\n\n protected isSelectionSticky = computed(() => {\n if (!this.withSelection()) {\n return false;\n }\n return this.normalizedColumns().some(col => col.pinned && (col.pinAlign === 'start' || !col.pinAlign));\n });\n\n protected hasHorizontalScroll = computed(() => {\n return this.centerWidth() > this._viewportWidth() + 1;\n });\n\n protected dataSource = computed(() => {\n return this._dataSource;\n });\n\n private _syncEffect = effect(() => {\n const data = this.data();\n const search = this.search().trim().toLowerCase();\n const rowModelType = this.rowModelType();\n const refreshTriggerValue = this._refreshTrigger();\n if (rowModelType === 'serverSide') {\n return;\n }\n untracked(() => {\n this._dataSource.data = data;\n if (rowModelType === 'clientSide') {\n this._dataSource.filter = search;\n }\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n });\n });\n\n private _loadDataEffect = effect(() => {\n const datasource = this.datasource();\n if (!datasource || this.rowModelType() !== 'serverSide' || this._isDestroyed) {\n return;\n }\n\n const pIndex = this.pageIndex();\n const pSize = this.pageSize();\n const search = this._debouncedSearch()?.trim() || '';\n\n // Capture sort params outside untracked but avoid triggering when sort is null due to @if toggling\n const sort = this._ngsSort();\n const sortActive = sort?.active();\n const sortDirection = sort?.direction();\n const sortModel = sortActive ? [{ colId: sortActive, sort: (sortDirection as any) || '' }] : [];\n\n const refreshTriggerValue = this._refreshTrigger();\n\n // Build a stable request key to avoid refetch loops when the view toggles (e.g. empty state removes ngsSort)\n const requestKey = `${pIndex}|${pSize}|${JSON.stringify(sortModel)}|${search}|${refreshTriggerValue}`;\n if (this._lastRequestKey === requestKey) {\n return; // no meaningful params change — skip triggering a new request\n }\n\n // Special case: if sort was active and now is undefined because component was removed from DOM,\n // but we ARE loading or in a state where we expect it to come back, we might want to wait.\n // However, the requestKey should handle it. If sortActive becomes undefined, requestKey changes.\n\n const isFilterRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[3] !== search;\n const isSortRequest = this._lastRequestKey !== null && this._lastRequestKey.split('|')[2] !== JSON.stringify(sortModel);\n this._lastRequestKey = requestKey;\n\n untracked(() => {\n const currentRequestId = ++this._requestId;\n if (isFilterRequest) {\n this._isFiltering.set(true);\n }\n if (isSortRequest) {\n this._isSorting.set(true);\n }\n this._internalLoading.set(true);\n const params: DataViewGetRowsParams = {\n startRow: pIndex * pSize,\n endRow: (pIndex + 1) * pSize,\n page: pIndex,\n pageSize: pSize,\n sortModel,\n filterModel: search,\n successCallback: (rows: any[], lastRow?: number) => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this._dataSource.data = rows;\n if (lastRow !== undefined) {\n this._serverSideRowCount.set(lastRow);\n\n // Update _hasDataOnServer if we have any rows OR if we are doing a clean request (no filters)\n if (lastRow > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n } else {\n // If lastRow is not provided, we can only infer _hasDataOnServer if we actually got rows\n if (rows.length > 0) {\n this._hasDataOnServer.set(true);\n } else if (!search && !sortModel.length) {\n this._hasDataOnServer.set(false);\n }\n }\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n },\n failCallback: () => {\n this._ngZone.run(() => {\n if (this._isDestroyed || currentRequestId !== this._requestId) return;\n this.loaded.set(true);\n this._internalLoading.set(false);\n this._isFiltering.set(false);\n this._isSorting.set(false);\n if (refreshTriggerValue > 0) {\n this.refreshEnd.emit();\n } else {\n this.loadEnd.emit();\n }\n this._cdr.markForCheck();\n });\n }\n };\n this._ngZone.runOutsideAngular(() => {\n datasource.getItems(params);\n });\n });\n });\n\n private _dsRenderTick = signal(0);\n private _connectEffect = effect((onCleanup) => {\n const ds = this.dataSource();\n const sub = ds.connect().subscribe(() => {\n // bump a signal to re-compute derived values depending on sortedData\n this._dsRenderTick.update(v => v + 1);\n untracked(() => this._cdr.markForCheck());\n });\n onCleanup(() => sub.unsubscribe());\n });\n\n cellRenderers = input<DataViewCellRendererDef[]>([]);\n loading = input(false, {\n transform: booleanAttribute\n });\n hoverRows = input(false, {\n transform: booleanAttribute\n });\n search = input<string>('');\n private _debouncedSearch = signal('');\n\n private _debounceSearchEffect = effect((onCleanup) => {\n const search = this.search();\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(true);\n }\n const timeout = setTimeout(() => {\n untracked(() => {\n this._debouncedSearch.set(search);\n if (this.rowModelType() === 'clientSide') {\n this._isFiltering.set(false);\n }\n });\n }, 300);\n onCleanup(() => clearTimeout(timeout));\n });\n emptyIcon = input('fluent:document-search-24-regular');\n emptyText = input('There are no data to display');\n emptyFilterResultsIcon = input('fluent:search-info-24-regular');\n emptyFilterResultsText = input('No data matching the filter \"{{ search }}\"');\n\n protected interpolatedEmptyFilterResultsText = computed(() => {\n return this.emptyFilterResultsText().replace('{{ search }}', this.search());\n });\n\n protected _isLoading = computed(() => (this.loading() || this._internalLoading() || this._isFiltering()));\n\n protected injector = inject(Injector);\n protected selection = new SelectionModel<T>(this.rowSelection() === 'multiple', []);\n protected cellRenderersMap = new Map<string, any>();\n protected loadingCellRenderers = signal(false);\n\n readonly rowSelectionChanged = output<DataViewRowSelectionEvent<T>>();\n readonly selectionChanged = output<T[]>();\n readonly allRowsSelectionChanged = output<boolean>();\n readonly sortChange = output<Sort>();\n readonly loadEnd = output<void>();\n readonly refreshEnd = output<void>();\n\n get api(): DataViewAPI {\n return {\n search: (value: string): void => {\n this.dataSource().filter = value.trim().toLowerCase();\n },\n selectAll: (): void => {\n this._selectAll();\n },\n unselectAll: (): void => {\n this._unselectAll();\n },\n refresh: (): void => {\n this.refresh();\n },\n getSnapshot: (): DataViewState[] => {\n return this.getSnapshot();\n }\n }\n }\n\n refresh(): void {\n this._lastRequestKey = null;\n this._refreshTrigger.update(v => v + 1);\n }\n\n get noFilteredResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const currentlyEmpty = rawDataLength === 0;\n\n // During client-side filtering, immediately show empty state if filtered data is empty,\n // to avoid a short flash of an empty table before debounce takes effect.\n if (isClientSide && (this._isFiltering() || this.hasFilterValue)) {\n const filteredEmpty = (dataSource.filteredData?.length ?? 0) === 0;\n if (filteredEmpty) {\n return true;\n }\n }\n\n if (this._isLoading() || this.loadingCellRenderers()) {\n // For serverSide, while loading the first time (when we don't know yet if we have data),\n // we show the table (potentially for skeletons) instead of empty state.\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n // If we are already in an empty state (data is empty and no previous data was confirmed on server),\n // keep showing it during loading/filtering to avoid flashing the table headers/structure.\n if (currentlyEmpty && !this.isBrowser()) {\n return true;\n }\n return false;\n }\n\n if (this.rowModelType() === 'serverSide' && this._hasDataOnServer() === undefined) {\n return false;\n }\n\n return this.isNoData || this.isNoResults;\n }\n\n protected get isNoResults(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n const filteredDataLength = dataSource.filteredData?.length ?? 0;\n\n if (isClientSide) {\n return filteredDataLength === 0 && (this.hasFilterValue || this._isSorting());\n }\n\n if (this.rowModelType() === 'serverSide') {\n const loadingTransition = this._isLoading() && this._hasDataOnServer() === true;\n // If we have 0 data, but loading is in progress (and we don't know if there will be data), we show skeletons, so isNoResults should be false\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && (this.hasFilterValue || this._isSorting() || loadingTransition) && this._hasDataOnServer() !== false;\n }\n\n return false;\n }\n\n protected get isNoData(): boolean {\n const dataSource = this.dataSource();\n const isClientSide = this.rowModelType() === 'clientSide';\n const rawDataLength = isClientSide ? this.data().length : (dataSource.data?.length ?? 0);\n const dataLength = dataSource.data?.length ?? 0;\n\n if (isClientSide) {\n return rawDataLength === 0 && !this.hasFilterValue && !this._isSorting();\n }\n\n if (this.rowModelType() === 'serverSide') {\n if (this._isLoading() && this._hasDataOnServer() === undefined) {\n return false;\n }\n return dataLength === 0 && !this.hasFilterValue && !this._isSorting() && this._hasDataOnServer() === false;\n }\n\n return false;\n }\n\n get actionBarTemplateRef(): TemplateRef<any> | undefined {\n return this._actionBarRef()?.templateRef;\n }\n\n protected actionBarWidth = computed(() => {\n return this._actionBarComp()?.width() ?? this._actionBarRef()?.width() ?? 100;\n });\n\n protected get emptyTemplateRef(): TemplateRef<any> {\n return this._emptyDataRef()?.templateRef as TemplateRef<any>;\n }\n\n protected get emptyFilterResultsTemplateRef(): TemplateRef<any> {\n return this._emptyFilterResults()?.templateRef as TemplateRef<any>;\n }\n\n protected get hasFilterValue(): boolean {\n return !!this.search().trim();\n }\n\n getNestedValue(item: any, path: string): any {\n if (!item || !path) {\n return null;\n }\n\n if (!path.includes('.')) {\n return item[path];\n }\n\n return path.split('.').reduce((obj, key) => obj?.[key], item);\n }\n\n constructor() {\n effect(() => {\n const mode = this.rowSelection();\n untracked(() => {\n const currentSelection = this.selection.selected;\n this.selection = new SelectionModel<T>(mode === 'multiple', currentSelection);\n });\n });\n\n this._destroyRef.onDestroy(() => {\n this._isDestroyed = true;\n });\n\n // Reactively bind scroll-sync and ResizeObserver to the current ScrollbarArea,\n // to work correctly with conditional rendering (empty state / table)\n effect((onCleanup) => {\n const scrollbarArea = this._scrollbarArea();\n const isBrowser = this.isBrowser();\n if (!scrollbarArea || !isBrowser || this._isDestroyed) {\n return;\n }\n\n const centerEl = scrollbarArea.scrollableContentRef().nativeElement as HTMLElement;\n\n // Set initial viewport dimensions to avoid 0 width after returning from empty state\n const rect = centerEl.getBoundingClientRect();\n this._viewportHeight.set(rect.height);\n this._viewportWidth.set(rect.width);\n\n // Attach scroll-sync\n const scrollHandler = () => {\n if (this._isDestroyed) return;\n this._syncScrolls(centerEl);\n };\n\n this._ngZone.runOutsideAngular(() => {\n centerEl.addEventListener('scroll', scrollHandler, { passive: true });\n });\n\n // Bind ResizeObserver with safe layout\n const observer = new ResizeObserver((entries) => {\n this._ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n if (this._isDestroyed) return;\n this._ngZone.run(() => {\n try {\n for (const entry of entries) {\n const { height, width } = entry.contentRect;\n // Use 1px threshold to prevent infinite loops due to subpixels\n if (Math.abs(this._viewportHeight() - height) > 1) {\n this._viewportHeight.set(height);\n }\n if (Math.abs(this._viewportWidth() - width) > 1) {\n this._viewportWidth.set(width);\n }\n }\n } catch {\n // ignore, dimensions will be delivered on the next tick\n }\n });\n });\n });\n });\n observer.observe(centerEl);\n\n // Synchronize transforms immediately after rebinding\n this._lastScrollTop = centerEl.scrollTop;\n this._lastScrollLeft = centerEl.scrollLeft;\n this._syncTransforms();\n\n onCleanup(() => {\n try { centerEl.removeEventListener('scroll', scrollHandler as any); } catch {}\n try { observer.disconnect(); } catch {}\n });\n });\n\n effect(() => {\n const sort = this._ngsSort();\n const dataSource = this.dataSource();\n if (sort && dataSource && !this._isDestroyed && this.rowModelType() !== 'serverSide') {\n dataSource.sort = sort;\n dataSource._updateChangeSubscription();\n }\n });\n\n effect(() => {\n const active = this.paginator() ?? this._internalPaginator();\n const dataSource = this.dataSource();\n if (dataSource && !this._isDestroyed) {\n if (this.withPagination() && this.rowModelType() !== 'serverSide' && active && this.isBrowser()) {\n // We handle pagination manually in visibleRows to have better control over virtualization.\n // If we assign it to dataSource.paginator, TableDataSource would also start paging data,\n // which would cause issues when we also slice data in visibleRows (double paging).\n dataSource.paginator = null as any;\n } else {\n dataSource.paginator = null as any;\n }\n }\n });\n\n // Sync external paginator page events with internal page state when provided\n effect((onCleanup) => {\n const ext = this.paginator();\n if (ext) {\n const sub = ext.page.subscribe(event => this.onPageChange(event));\n onCleanup(() => sub.unsubscribe());\n }\n });\n\n effect(() => {\n this.dataSource().sortingDataAccessor = (item: any, property) => {\n const columnDef = this.columnDefs().find(colDef => colDef.field === property);\n\n if (columnDef) {\n if (columnDef.valueGetter) {\n return columnDef.valueGetter(this.getNestedValue(item, property));\n }\n }\n\n switch (property) {\n default: {\n return this.getNestedValue(item, property);\n }\n }\n };\n });\n\n effect(() => {\n // Force table to re-render when column definitions change\n // to avoid \"Could not find column\" errors when using signals\n this.columnDefs();\n this.displayedColumns();\n untracked(() => {\n this.table?.renderRows();\n // CdkTable uses _cacheColumnDefs internally, but it's private.\n // renderRows should trigger it if definitions changed.\n });\n });\n\n effect(() => {\n this.hoveredRowIndex();\n this._syncHoverState();\n });\n }\n\n ngOnDestroy() {\n this._isDestroyed = true;\n }\n\n ngOnInit() {\n this._initialViewState.set(this.columnDefs().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n })));\n\n const snapshot = this.snapshot();\n if (snapshot) {\n this.applyState(snapshot);\n }\n\n if (this.rowModelType() !== 'serverSide') {\n this.loaded.set(true);\n }\n if (this.rowModelType() === 'serverSide' && this._dataSource.data.length === 0) {\n this._internalLoading.set(true);\n }\n\n if (this.cellRenderers().length === 0) {\n return;\n }\n\n this.loadingCellRenderers.set(true);\n const components = this.cellRenderers().map(cellRenderer => cellRenderer.component());\n Promise.all(components).then(components => {\n components.forEach((component: any, index: number) => {\n this.cellRenderersMap.set(this.cellRenderers()[index].cellRenderer, component)\n });\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n }).catch(() => {\n this.loadingCellRenderers.set(false);\n this._cdr.detectChanges();\n });\n }\n\n ngAfterViewInit() {\n this.isBrowser.set(isPlatformBrowser(this._platformId));\n this._cdr.detectChanges();\n }\n\n private _syncScrolls(source: HTMLElement) {\n const scrollTop = source.scrollTop;\n const scrollLeft = source.scrollLeft;\n\n this._lastScrollTop = scrollTop;\n this._lastScrollLeft = scrollLeft;\n\n if (this._isDestroyed) return;\n\n this._syncTransforms();\n\n this._ngZone.run(() => {\n this._scheduleVirtualUpdate(scrollTop);\n });\n }\n\n private _scheduleVirtualUpdate(scrollTop: number): void {\n const delta = Math.abs(this._scrollTop() - scrollTop);\n const threshold = this.rowHeight() * (this.bufferRows() / 2);\n\n if (delta >= threshold || scrollTop === 0 || scrollTop + this._viewportHeight() >= this.totalHeight()) {\n this._scrollTop.set(scrollTop);\n this._syncTransforms();\n }\n }\n\n private _syncTransforms() {\n const scrollTop = this._lastScrollTop;\n const scrollLeft = this._lastScrollLeft;\n\n const headerCenterInner = this._headerCenterInner()?.nativeElement;\n if (headerCenterInner) {\n headerCenterInner.style.transform = `translate3d(${-scrollLeft}px, 0, 0)`;\n }\n\n const bodyLeftContent = this._bodyLeftContent()?.nativeElement;\n const bodyRightContent = this._bodyRightContent()?.nativeElement;\n const bodyCenterContent = this._bodyCenterContent()?.nativeElement;\n\n if (bodyLeftContent) {\n bodyLeftContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyRightContent) {\n bodyRightContent.style.transform = `translate3d(0, ${-scrollTop}px, 0)`;\n }\n if (bodyCenterContent) {\n bodyCenterContent.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n // Sync hovered row if needed\n this._syncHoverState();\n }\n\n private _syncHoverState() {\n // if (!isPlatformBrowser(this._platformId)) return;\n //\n // this._ngZone.runOutsideAngular(() => {\n // const rows = Array.from(document.querySelectorAll('.ngs-data-view .grid-row'));\n // const hoveredIndex = this.hoveredRowIndex();\n // rows.forEach(row => {\n // const indexAttr = row.getAttribute('data-row-index');\n // if (indexAttr !== null) {\n // const index = parseInt(indexAttr, 10);\n // if (index === hoveredIndex) {\n // row.classList.add('is-hovered');\n // } else {\n // row.classList.remove('is-hovered');\n // }\n // }\n // });\n // });\n }\n\n get table(): Table<T> {\n return this._table() as Table<T>;\n }\n\n get ngsSort(): SortDirective {\n return this._ngsSort() as SortDirective;\n }\n\n hasCellRenderer(cellRenderer: string): boolean {\n return this.cellRenderersMap.has(cellRenderer);\n }\n\n getCellRenderer(cellRenderer: string): any {\n return this.cellRenderersMap.get(cellRenderer);\n }\n\n isAllSelected(): boolean {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n return this.selection.selected.length === data.length;\n }\n\n toggleAllRows(): void {\n if (this.isAllSelected()) {\n this._unselectAll();\n } else {\n this._selectAll();\n }\n }\n\n rowSelectionToggle(event: CheckboxChange, row: T): void {\n if (event.checked) {\n this.selection.select(row);\n } else {\n this.selection.deselect(row);\n }\n\n this.rowSelectionChanged.emit({\n checkboxChange: event,\n row,\n checked: event.checked\n });\n\n this.selectionChanged.emit(this.selection.selected);\n }\n\n onPageChange(event: PageEvent): void {\n this.pageIndex.set(event.pageIndex);\n this.pageSize.set(event.pageSize);\n }\n\n protected sortColumn(col: DataViewColumnDef, direction: SortDirection): void {\n const sort = this.ngsSort;\n if (sort) {\n sort.active.set(col.field);\n sort.direction.set(direction);\n sort.sortChange.emit({ active: col.field, direction });\n }\n this.onSortChange({ active: col.field, direction });\n }\n\n getSnapshot(): DataViewState[] {\n return this.normalizedColumns().map(col => ({\n field: col.field,\n visible: col.visible ?? true,\n width: col.width,\n pinned: col.pinned,\n pinAlign: col.pinAlign\n }));\n }\n\n applyState(state: DataViewState[]): void {\n if (!state || state.length === 0) return;\n\n const pinOverrides = { ...this._manualPinned() };\n const widthOverrides = { ...this._manualWidths() };\n this.columnDefs().forEach(col => {\n const colState = state.find(s => s.field === col.field);\n if (colState) {\n if (colState.width !== undefined) {\n widthOverrides[col.field] = colState.width;\n }\n pinOverrides[col.field] = {\n pinned: !!colState.pinned,\n pinAlign: colState.pinAlign\n };\n }\n });\n\n this._manualPinned.set(pinOverrides);\n this._manualWidths.set(widthOverrides);\n this._cdr.markForCheck();\n }\n\n protected pinColumn(col: any, align: DataViewPinAlign | null): void {\n const pinOverrides = { ...this._manualPinned() };\n\n if (align === null) {\n pinOverrides[col.field] = { pinned: false, pinAlign: undefined };\n } else {\n pinOverrides[col.field] = { pinned: true, pinAlign: align };\n }\n this._manualPinned.set(pinOverrides);\n this._cdr.markForCheck();\n }\n\n protected autosizeColumn(col: DataViewColumnDef): void {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n const widths = { ...this._manualWidths() };\n widths[col.field] = `${width}px`;\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n protected autosizeAllColumns(): void {\n const widths = { ...this._manualWidths() };\n let changed = false;\n this.normalizedColumns().forEach(col => {\n if (col.visible) {\n const width = this._calculateColumnAutosize(col);\n if (width > 0) {\n widths[col.field] = `${width}px`;\n changed = true;\n }\n }\n });\n\n if (changed) {\n this._manualWidths.set(widths);\n this._cdr.markForCheck();\n }\n }\n\n private _calculateColumnAutosize(col: DataViewColumnDef): number {\n if (!isPlatformBrowser(this._platformId)) return 0;\n\n const gridRoot = this._elRef.nativeElement;\n const headerCells = Array.from(gridRoot.querySelectorAll(`.header-cell`)) as HTMLElement[];\n const targetHeaderCell = headerCells.find(cell => {\n const sortHeader = cell.querySelector('[ngs-sort-header]');\n return sortHeader?.getAttribute('ngs-sort-header') === col.field;\n });\n\n if (!targetHeaderCell) return 0;\n\n const headerContent = targetHeaderCell.querySelector('.grow') as HTMLElement;\n const headerWidth = (headerContent?.scrollWidth ?? 0)\n + 32 // padding-left/right\n + 32; // extra space for sort icon and menu button\n\n let maxContentWidth = headerWidth;\n const visibleCols = this.normalizedColumns().filter(c => c.visible);\n const colIndex = visibleCols.indexOf(visibleCols.find(c => c.field === col.field)!);\n\n if (colIndex !== -1) {\n const rows = Array.from(gridRoot.querySelectorAll('.grid-row')) as HTMLElement[];\n const rowsToMeasure = rows.slice(0, 50);\n\n rowsToMeasure.forEach(row => {\n const cells = Array.from(row.querySelectorAll('.cell')) as HTMLElement[];\n const cell = cells[colIndex];\n if (cell) {\n const content = cell.firstElementChild as HTMLElement;\n if (content) {\n const width = content.scrollWidth + 32; // + padding\n if (width > maxContentWidth) {\n maxContentWidth = width;\n }\n }\n }\n });\n }\n\n return Math.min(Math.max(maxContentWidth, 60), 500);\n }\n\n protected resetColumns(): void {\n const initialState = this._initialViewState();\n if (initialState.length > 0) {\n this.applyState(initialState);\n }\n\n this._manualWidths.set({});\n this._manualPinned.set({});\n this._manualOrder.set(null);\n this._manualVisibility.set({});\n this._cdr.markForCheck();\n }\n\n protected openColumnSettingsDialog(): void {\n const dialogRef = this._dialog.open<DataViewColumnSettingsDialog, any, ColumnSettingsDialogResult>(DataViewColumnSettingsDialog, {\n minWidth: '400px',\n data: {\n columns: this.normalizedColumns(),\n },\n });\n\n dialogRef.afterClosed().subscribe((result: ColumnSettingsDialogResult | undefined) => {\n if (result) {\n const newOrder = result.columns.map((c: any) => c.field);\n const newVisibility = { ...this._manualVisibility() };\n const newPinned = { ...this._manualPinned() };\n\n result.columns.forEach((c: any) => {\n newVisibility[c.field] = c.visible !== false;\n newPinned[c.field] = { pinned: !!c.pinned, pinAlign: c.pinAlign };\n });\n\n // Add back missing columns that were filtered out in dialog\n const currentOrder = this._manualOrder() || this.columnDefs().map(c => c.field);\n const resultFields = new Set(newOrder);\n const fullOrder = [...newOrder];\n\n currentOrder.forEach(field => {\n if (!resultFields.has(field)) {\n // Find where it should be inserted to keep relative order if possible,\n // but just appending is also a common strategy for \"static\" columns.\n // Let's try to maintain the original relative order.\n fullOrder.push(field);\n }\n });\n\n this._manualOrder.set(fullOrder);\n this._manualVisibility.set(newVisibility);\n this._manualPinned.set(newPinned);\n this._cdr.markForCheck();\n }\n });\n }\n\n protected onSortChange(event: Sort): void {\n if (this.rowModelType() !== 'serverSide') {\n this.dataSource().sort = this.ngsSort || null;\n }\n this.sortChange.emit(event);\n }\n\n private _selectAll(): void {\n const data = this.rowModelType() === 'serverSide' ? this.dataSource().data : this.data();\n this.selection.select(...data);\n this.selectionChanged.emit(data);\n this.allRowsSelectionChanged.emit(true);\n }\n\n private _unselectAll(): void {\n this.selection.clear();\n this.selectionChanged.emit([]);\n this.allRowsSelectionChanged.emit(false);\n }\n}\n","<div class=\"flex flex-col h-full overflow-hidden relative\"\n ngsBlockLoaderContainer>\n <ngs-block-loader [loading]=\"_isLoading()\"/>\n @if (loaded()) {\n @if (!noFilteredResults) {\n <div class=\"grid-root flex flex-col grow overflow-hidden relative\">\n @if (isResizing()) {\n <div class=\"ngs-data-view-resize-line\" [style.left.px]=\"resizeLineLeft()\"></div>\n }\n\n <!-- GRID HEADER -->\n <div class=\"grid-header pinned top-0 z-20 flex overflow-hidden shrink-0 font-medium\"\n ngsSort\n [style.height.px]=\"headerHeight()\"\n [ngsSortDisabled]=\"!isSortingEnabled() || _isLoading() || _isFiltering()\"\n (ngsSortChange)=\"onSortChange($event)\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div class=\"grid-header-left shrink-0 flex z-30\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"leftPinnedWidth()\">\n @if (withSelection()) {\n <div class=\"header-cell cell-selection flex items-center justify-center shrink-0\">\n @if (rowSelection() === 'multiple') {\n <ngs-checkbox (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\" />\n }\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div #headerCenter class=\"grid-header-center grow flex overflow-hidden\">\n <div #headerCenterInner class=\"flex header-inner\" [style.width.px]=\"centerWidth()\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div class=\"grid-header-right shrink-0 flex z-30\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div class=\"header-inner flex\" [style.width.px]=\"rightPinnedWidth()\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"header-cell flex items-center truncate relative\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <div class=\"flex items-center grow truncate\"\n [ngs-sort-header]=\"col.field\"\n [disabled]=\"!col.sortable\">\n <span class=\"truncate\">{{ col.name }}</span>\n </div>\n @if (col.withColumnSettings !== false && withColumnSettings()) {\n <button ngsIconButton\n #menuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"columnMenu\"\n [ngsMenuTriggerData]=\"{ col: col }\"\n class=\"ngs-data-view-column-settings-btn shrink-0\"\n [class.is-menu-open]=\"menuTrigger.menuOpen()\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" size=\"20\"/>\n </button>\n }\n @if (col.resizable) {\n <div class=\"col-resize-handle\" (mousedown)=\"onColumnResizeStart($event, col)\"></div>\n }\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"header-cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n &nbsp;\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <div class=\"grid-body grow flex relative\">\n @if (pinnedLeftColumns().length > 0 || withSelection()) {\n <div #bodyLeft class=\"grid-body-left pinned-viewport shrink-0 overflow-hidden z-10 pinned left-0\"\n [ngStyle]=\"leftPinnedWidthStyles()\">\n <div #bodyLeftCanvas class=\"pinned-canvas\">\n <div #bodyLeftContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @if (withSelection()) {\n <div class=\"cell cell-selection flex items-center justify-center shrink-0\">\n <ngs-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? rowSelectionToggle($event, row.item) : null\"\n [checked]=\"selection.isSelected(row.item)\" />\n </div>\n }\n @for (col of pinnedLeftColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n\n <div #bodyCenter class=\"grid-body-center grow overflow-hidden relative\">\n <ngs-scrollbar-area>\n <div #bodyCenterContent class=\"rows-container\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [style.width.px]=\"centerWidth()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of centerColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"/>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"virtual-spacer relative\" [style.height.px]=\"totalHeight()\" [style.width.px]=\"centerWidth()\"></div>\n </ngs-scrollbar-area>\n </div>\n\n @if (pinnedRightColumns().length > 0 || actionBarTemplateRef) {\n <div #bodyRight class=\"grid-body-right pinned-viewport shrink-0 overflow-hidden z-10 pinned right-0\"\n [ngStyle]=\"rightPinnedWidthStyles()\">\n <div #bodyRightCanvas class=\"pinned-canvas\">\n <div #bodyRightContent class=\"pinned-content relative\" [style.height.px]=\"totalHeight()\">\n @for (row of visibleRows(); track row.index) {\n <div class=\"grid-row flex absolute left-0 right-0 hover:bg-[var(--ngs-data-view-row-hover-bg)]\"\n [style.top.px]=\"row.top\"\n [style.height.px]=\"rowHeight()\"\n [attr.data-row-index]=\"row.index\"\n [class.is-selected]=\"selection.isSelected(row.item)\"\n [class.is-hovered]=\"hoveredRowIndex() === row.index\"\n [class.is-last]=\"row.isLast\"\n (mouseenter)=\"hoveredRowIndex.set(row.index)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\">\n @for (col of pinnedRightColumns(); track col.field) {\n <div class=\"cell flex items-center truncate\"\n [class.shrink-0]=\"!col.flex\"\n [style.flex]=\"col.flex\"\n [style.width]=\"col.width\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\">\n <ng-container *ngTemplateOutlet=\"cellContent; context: { row: row.item, col: col }\"></ng-container>\n </div>\n }\n @if (actionBarTemplateRef) {\n <div class=\"cell flex items-center shrink-0\"\n [style.width.px]=\"actionBarWidth()\"\n [style.min-width.px]=\"actionBarWidth()\"\n [style.max-width.px]=\"actionBarWidth()\">\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: row.item }\"/>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (withPagination() && !paginator()) {\n <ngs-paginator [pageSizeOptions]=\"pageSizeOptions()\"\n [showFirstLastButtons]=\"showFirstLastButtons()\"\n [pageSize]=\"pageSize()\"\n [pageIndex]=\"pageIndex()\"\n [length]=\"effectivePaginatorLength()\"\n [disabled]=\"_isLoading() || _isFiltering()\"\n (page)=\"onPageChange($event)\"/>\n }\n </div>\n } @else {\n @if (isNoResults) {\n @if (emptyFilterResultsTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyFilterResultsIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ interpolatedEmptyFilterResultsText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n } @else {\n @if (emptyTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\n } @else {\n <ngs-empty-state>\n <ngs-empty-state-icon>\n <ngs-icon [name]=\"emptyIcon()\"/>\n </ngs-empty-state-icon>\n <ngs-empty-state-content>{{ emptyText() }}</ngs-empty-state-content>\n </ngs-empty-state>\n }\n }\n }\n }\n</div>\n\n<ng-template #cellContent let-row=\"row\" let-col=\"col\">\n <div class=\"overflow-hidden w-full\">\n @if (col.cellRenderer && hasCellRenderer(col.cellRenderer)) {\n <ng-container [ngComponentOutlet]=\"getCellRenderer(col.cellRenderer)\"\n [ngComponentOutletInputs]=\"{ element: row, columnDef: col, fieldData: getNestedValue(row, col.field) }\"\n [ngComponentOutletInjector]=\"injector\"/>\n } @else {\n {{ getNestedValue(row, col.field) }}\n }\n </div>\n</ng-template>\n\n<ngs-menu #columnMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n @if (col.sortable) {\n <button ngs-menu-item (click)=\"sortColumn(col, 'asc')\">\n <ngs-icon name=\"fluent:arrow-sort-up-24-regular\" size=\"20\"/>\n Sort Ascending\n </button>\n <button ngs-menu-item (click)=\"sortColumn(col, 'desc')\">\n <ngs-icon name=\"fluent:arrow-sort-down-24-regular\" size=\"20\"/>\n Sort Descending\n </button>\n <ngs-menu-divider/>\n }\n <button ngs-menu-item [ngsMenuTriggerFor]=\"pinMenu\" [ngsMenuTriggerData]=\"{ col: col }\">\n <ngs-icon name=\"fluent:pin-24-regular\" size=\"20\"/>\n Pin Column\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"autosizeColumn(col)\">\n Autosize This Column\n </button>\n <button ngs-menu-item (click)=\"autosizeAllColumns()\">\n Autosize All Columns\n </button>\n <ngs-menu-divider/>\n <button ngs-menu-item (click)=\"openColumnSettingsDialog()\">\n Choose Columns\n </button>\n <button ngs-menu-item (click)=\"resetColumns()\">\n Reset Columns\n </button>\n </ng-template>\n</ngs-menu>\n\n<ngs-menu #pinMenu=\"ngsMenu\">\n <ng-template ngsMenuContent let-col=\"col\">\n <button ngs-menu-item\n [selected]=\"!col.pinned\"\n (click)=\"pinColumn(col, null)\">\n No Pin\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'start'\"\n (click)=\"pinColumn(col, 'start')\">\n Pin Left\n </button>\n <button ngs-menu-item\n [selected]=\"col.pinned && col.pinAlign === 'end'\"\n (click)=\"pinColumn(col, 'end')\">\n Pin Right\n </button>\n </ng-template>\n</ngs-menu>\n","import { DataViewCellRendererDef } from './types';\n\nexport function cellRenderer<T>(cellRenderer: string, component: any): DataViewCellRendererDef {\n return {\n cellRenderer,\n component\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;MAoFa,SAAS,GAAG,IAAI,cAAc,CAAoB,WAAW;;MC3E7D,0BAA0B,CAAA;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;uGAD/B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,0BAA0B;AACpC;AACF,iBAAA;;;MCCY,mCAAmC,CAAA;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;uGAD/B,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oCAAA,EAAA,EAAA,QAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAP/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,oCAAoC;AAC9C;AACF,iBAAA;;;MCHY,0BAA0B,CAAA;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,KAAK,GAAG,KAAK,CAAC,GAAG,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,8BAAA,EAAA,CAAA,EACxB,KAAK,EAAE,2BAA2B;QAClC,SAAS,EAAE,eAAe,EAAA,CAC1B;uGALS,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,wBAAwB;AACnC,iBAAA;;;MCSY,iBAAiB,CAAA;IAC5B,YAAY,GAAG,KAAK,CAAC,KAAK,oFACxB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACF,KAAK,GAAG,KAAK,CAAC,GAAG,6EACf,SAAS,EAAE,eAAe,EAAA,CAC1B;IACQ,aAAa,GAAG,KAAK;AAE/B,IAAA,IAAI,GAAG,GAAA;QACL,OAAO;AACL,YAAA,eAAe,EAAE,CAAC,YAAqB,KAAU;AAC/C,gBAAA,IAAI,CAAC,aAAa,GAAG,YAAY;YACnC,CAAC;SACF;IACH;uGAfW,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,ygBCb9B,iBACA,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA,CAAA;;2FDYa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAC1B,sBAAsB,EAAA,IAAA,EAG1B;AACJ,wBAAA,OAAO,EAAE,0BAA0B;AACnC,wBAAA,uBAAuB,EAAE;AAC1B,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,gLAAA,CAAA,EAAA;;;MEyBU,4BAA4B,CAAA;AAC/B,IAAA,UAAU,GAAG,MAAM,EAAC,SAAmE,EAAC;AACxF,IAAA,KAAK,GAAG,MAAM,CAA2B,WAAW,CAAC;AAE7D,IAAA,OAAO,GAAG,MAAM,CAAsB,IAAI,CAAC,KAAK,CAAC;SAC9C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,KAAK,KAAK;AAC1C,SAAA,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,8EACtB;AAED,IAAA,IAAI,CAAC,KAAuC,EAAA;QAC1C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACnC,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;AACjE,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B;IAEA,gBAAgB,CAAC,KAAa,EAAE,OAAgB,EAAA;QAC9C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B;IAEA,SAAS,CAAC,KAAa,EAAE,KAA8B,EAAA;QACrD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;QAC5E;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QACvE;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAC3B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;IACpD;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;uGArCW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCzC,igEAmDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7BI,WAAW,iJACX,aAAa,EAAA,QAAA,EAAA,4DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,aAAa,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,QAAQ,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,MAAM,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,WAAW,qQACX,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACR,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIL,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAnBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EAAA,OAAA,EAGvC;wBACP,WAAW;wBACX,aAAa;wBACb,aAAa;wBACb,QAAQ;wBACR,MAAM;wBACN,IAAI;wBACJ,IAAI;wBACJ,WAAW;wBACX,WAAW;wBACX,QAAQ;wBACR;qBACD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,igEAAA,EAAA;;;MEdpC,gBAAgB,GAAG,IAAI,cAAc,CAAiB,kBAAkB;AAE/E,SAAU,eAAe,CAAC,MAAsB,EAAA;AACpD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM;AAC9C,KAAA,CAAC;AACJ;;MC2Ea,QAAQ,CAAA;AACX,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;AACxB,IAAA,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IACvB,OAAO,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtD,IAAA,MAAM,GAAG,MAAM,CAA0B,UAAiB,CAAC;AAC3D,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,YAAY,GAAG,KAAK;IAEpB,UAAU,GAAG,CAAC;IACd,eAAe,GAAkB,IAAI;AACrC,IAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;AAC3B,IAAA,mBAAmB,GAAG,MAAM,CAAC,CAAC,0FAAC;AAC/B,IAAA,YAAY,GAAG,MAAM,CAAkB,IAAI,mFAAC;AAC5C,IAAA,iBAAiB,GAAG,MAAM,CAA0B,EAAE,wFAAC;AACvD,IAAA,gBAAgB,GAAG,MAAM,CAAsB,SAAS,uFAAC;AAEzD,IAAA,gBAAgB,GAAG,MAAM,CAAC,KAAK,uFAAC;AAC9B,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,mFAAC;AAC5B,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAE5B,IAAA,aAAa,GAAG,YAAY,CAAC,0BAA0B,oFAAC;AACtD,IAAA,mBAAmB,GAAG,YAAY,CAAC,mCAAmC,0FAAC;AACvE,IAAA,aAAa,GAAG,YAAY,CAAC,0BAA0B,oFAAC;IACxD,cAAc,GAAG,YAAY,CAAC,0BAA0B,sFAAI,IAAI,EAAE,iBAAiB,EAAA,CAAG;AACxF,IAAA,MAAM,GAAG,SAAS,CAAW,OAAO,6EAAC;AACrC,IAAA,QAAQ,GAAG,SAAS,CAAC,aAAa,+EAAC;AACnC,IAAA,kBAAkB,GAAG,SAAS,CAAC,SAAS,yFAAC;;AAEjD,IAAA,SAAS,GAAG,KAAK,CAAmB,IAAI,gFAAC;AAEjC,IAAA,WAAW,GAAG,IAAI,eAAe,CAAI,EAAE,CAAC;;IAGxC,aAAa,GAAG,SAAS,CAAC,cAAc,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,eAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;IAC5E,kBAAkB,GAAG,SAAS,CAAC,mBAAmB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;IACtF,gBAAgB,GAAG,SAAS,CAAC,iBAAiB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;AAClF,IAAA,cAAc,GAAG,SAAS,CAAC,aAAa,qFAAC;IACzC,kBAAkB,GAAG,SAAS,CAAC,mBAAmB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;IACtF,iBAAiB,GAAG,SAAS,CAAC,kBAAkB,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,IAAI,GAAE,UAAuB,CAAA,EAAA,CAAG;AAE5F,IAAA,UAAU,GAAG,KAAK,CAAsB,EAAE,iFAAC;IAC3C,aAAa,GAAG,KAAK,CAA6B,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACpF,IAAA,IAAI,GAAG,KAAK,CAAM,EAAE,2EAAC;AACrB,IAAA,UAAU,GAAG,KAAK,CAA4B,IAAI,iFAAC;AACnD,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,GAAG;AAC7H,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,GAAG;AACtI,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,GAAG;IAChI,aAAa,GAAG,KAAK,CAAC,KAAK,qFACzB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACF,eAAe,GAAG,KAAK,CAAC,KAAK,uFAC3B,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACF,IAAA,YAAY,GAAG,KAAK,CAAuB,YAAY,mFAAC;AACxD,IAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EAClD,SAAS,EAAE,gBAAgB,GAC3B;AACF,IAAA,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,IAAI,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EACrD,SAAS,EAAE,gBAAgB,GAC3B;AACF,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAC1D,SAAS,EAAE,gBAAgB,GAC3B;IACF,UAAU,GAAG,KAAK,CAAC,KAAK,kFACtB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACF,IAAA,eAAe,GAAG,KAAK,CAAW,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,sFAAC;AAC/E,IAAA,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,8BAAA,EAAA,CAAA,EACtE,SAAS,EAAE,gBAAgB,GAC3B;AACF,IAAA,kBAAkB,GAAG,KAAK,CAAS,EAAE,yFAAC;IACtC,QAAQ,GAAG,KAAK,CAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACtD,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,gFAAC;AAC5B,IAAA,QAAQ,GAAG,KAAK,CAAyB,IAAI,+EAAC;IAC9C,kBAAkB,GAAG,KAAK,CAAC,KAAK,0FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAClE,IAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,gBAAgB,GAAG;IAClF,YAAY,GAAG,KAAK,CAAwB,IAAI,CAAC,OAAO,EAAE,YAAY,IAAI,UAAU,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACrF,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,GAAG;AAC5I,IAAA,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAM,KAAK,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,cAAc,IAAI,EAAE,GAAG;IAEpI,cAAc,GAAG,CAAC;IAClB,eAAe,GAAG,CAAC;;AAGnB,IAAA,UAAU,GAAG,MAAM,CAAC,CAAC,iFAAC;AACtB,IAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;AAC3B,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,qFAAC;AACxB,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACtB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;AAEzB,IAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,sFAAC;AAE/C,IAAA,iBAAiB,GAAG,MAAM,CAAkB,EAAE,wFAAC;;AAG/C,IAAA,aAAa,GAAG,MAAM,CAAqC,EAAE,oFAAC;AAC9D,IAAA,aAAa,GAAG,MAAM,CAA8E,EAAE,oFAAC;AACvG,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAC3B,IAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;IAC3B,aAAa,GAAG,CAAC;IACjB,iBAAiB,GAAG,CAAC;IACrB,eAAe,GAAkB,IAAI;IAEnC,UAAU,GAAA,EAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,cAAc,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;AAEpD,IAAA,eAAe,CAAC,KAAuB,EAAA;QAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,YAAA,OAAO,SAAS;AAC3E,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,GAAG,MAAM;IACtD;AAEU,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAE3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;QAE3B,IAAI,KAAK,EAAE;YACT,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;gBACxB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;gBACrC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;gBACrC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC;AAAE,oBAAA,OAAO,CAAC;gBAC5C,IAAI,MAAM,KAAK,CAAC,CAAC;AAAE,oBAAA,OAAO,CAAC;gBAC3B,IAAI,MAAM,KAAK,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC;gBAC5B,OAAO,MAAM,GAAG,MAAM;AACxB,YAAA,CAAC,CAAC;QACJ;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;AAEhD,QAAA,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,IAAG;AAC3B,YAAA,MAAM,SAAS,GAAG;AAChB,gBAAA,GAAG,aAAa;AAChB,gBAAA,GAAG;aACJ;YACD,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;YAChD,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC;YACjD,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,IAAI,SAAS,CAAC,KAAK,CAAC;YACpE,MAAM,IAAI,GAAG,CAAC,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC,IAAI,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC;AACpF,YAAA,MAAM,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;AAClE,YAAA,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;YACxE,OAAO;AACL,gBAAA,GAAG,SAAS;AACZ,gBAAA,OAAO,EAAE,eAAe,IAAI,SAAS,CAAC,OAAO,IAAI,IAAI;gBACrD,KAAK;gBACL,IAAI;gBACJ,MAAM;AACN,gBAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG;aAC3C;AACH,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,wFAAC;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AAC3D,IAAA,CAAC,uFAAC;AAEQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,wFAAC;AACzH,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,yFAAC;IACxH,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE5F,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;QACxC,IAAI,KAAK,GAAG,CAAC;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;QAChC;QACA,KAAK,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7H,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,sFAAC;AAEQ,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;QAC9C,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE;AAClC,YAAA,cAAc,EAAE,IAAI,CAAC,eAAe;SACrC;AACH,IAAA,CAAC,4FAAC;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;QACzC,IAAI,KAAK,GAAG,CAAC;QACb,KAAK,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9H,IAAI,IAAI,CAAC,oBAAoB;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7D,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,uFAAC;AAEQ,IAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;QAC/C,OAAO;AACL,YAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACnC,YAAA,cAAc,EAAE,IAAI,CAAC,gBAAgB;SACtC;AACH,IAAA,CAAC,6FAAC;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAChH,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;;AAElC,YAAA,IAAI,cAAc,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE;;;AAGtC,gBAAA,OAAO,MAAa;YACtB;YACA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC;QAClD;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC;AAC7C,IAAA,CAAC,kFAAC;IAEQ,mBAAmB,CAAC,KAAiB,EAAE,GAAQ,EAAA;QACvD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE;QACtF,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;AAGvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAuB;AACjE,QAAA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;;AAGhH,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAuB;AAE5F,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAE3C,MAAM,OAAO,GAAG,CAAC,GAAU,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;AACzE,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;AACjC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;AACrC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YAEnC,MAAM,SAAS,GAAG,CAAC,IAAW,EAAE,iBAAyB,EAAE,WAAW,GAAG,CAAC,KAAI;gBAC5E,MAAM,SAAS,GAAG,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAuB;AAClF,gBAAA,IAAI,CAAC,SAAS;oBAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAkB;AAC5F,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,MAAM;wBAAE;oBACb,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC5B,wBAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW;AAChC,wBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC9B,wBAAA,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AAC7H,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;4BACd,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;wBACpC;oBACF;gBACF;AACF,YAAA,CAAC;AAED,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC;AAC9C,YAAA,SAAS,CAAC,QAAQ,EAAE,iCAAiC,EAAE,SAAS,CAAC;AACjE,YAAA,SAAS,CAAC,UAAU,EAAE,mCAAmC,CAAC;AAC1D,YAAA,SAAS,CAAC,SAAS,EAAE,kCAAkC,CAAC;AAExD,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC;AAAE,QAAA,MAAM;;QAER;QAEA,IAAI,OAAO,GAAQ,IAAI;QACvB,IAAI,iBAAiB,GAAG,CAAC;AACzB,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACzC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAE3C,MAAM,OAAO,GAAG,CAAC,GAAU,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;AACzE,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;AACjC,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;AACrC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;AAEnC,YAAA,MAAM,YAAY,GAAG,CAAC,IAAW,EAAE,GAAW,EAAE,iBAAyB,EAAE,WAAW,GAAG,CAAC,KAAI;gBAC5F,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,oBAAA,OAAO,IAAI;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAuB;gBAC5F,MAAM,SAAS,GAAG,QAAQ,EAAE,aAAa,CAAC,iBAAiB,CAAuB;gBAClF,MAAM,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAkB,GAAG,EAAE;AAC7G,gBAAA,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,WAAW;AACtC,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC9B,gBAAA,MAAM,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACrH,gBAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7B,YAAA,CAAC;YAED,IAAI,QAAQ,GAAQ,IAAI;AACxB,YAAA,IAAI,OAAO,IAAI,CAAC,EAAE;gBAChB,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7G;AAAO,iBAAA,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACxB,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,kCAAkC,CAAC;YAClF;YAEA,IAAI,QAAQ,EAAE;AACZ,gBAAA,OAAO,GAAG,QAAQ,CAAC,GAAG;AACtB,gBAAA,iBAAiB,GAAG,QAAQ,CAAC,KAAK;YACpC;QACF;QAAE,MAAM,EAAE;AAEV,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAgB;AACrF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,qBAAqB,EAAE;AACjD,QAAA,MAAM,UAAU,GAAI,MAAsB,CAAC,qBAAqB,EAAE;AAClE,QAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC;AAC3C,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;QAC3C,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,IAAI,aAAa,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC;QAE5H,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;AACvD,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,OAAO;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU;QACnC,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,KAAK,IAAI,IAAI;AACzC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,UAAU,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAE1B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAChD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,GAAG,UAAU,GAAG,gBAAgB;AAClE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,WAAW,GAAG,eAAe;QAEnC,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,IAAI,GAAG,UAAU,GAAG,iBAAiB;AAEnH,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,MAAM,UAAU,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,SAAS,CAAa,MAAM,EAAE,MAAM,CAAC;YACnD,MAAM,UAAU,GAAG,SAAS,CAAY,MAAM,EAAE,WAAW,CAAC;YAC5D,MAAM,YAAY,GAAG,SAAS,CAAQ,MAAM,EAAE,aAAa,CAAC;AAE5D,YAAA,MAAM,WAAW,GAAG,IAAI,OAAO,EAAQ;;YAGvC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YAC1E,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;;YAG5E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY;YAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,YAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAChC,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACvB,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACxB,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;AAC5B,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC7B,YAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAEnC,MAAM,SAAS,GAAG,MAAK;gBACrB,WAAW,CAAC,IAAI,EAAE;gBAClB,WAAW,CAAC,QAAQ,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc;gBAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;AACpC,gBAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,oBAAA,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC;gBACzC;gBAEA,IAAI,KAAK,EAAE;;AAET,oBAAA,MAAM,QAAQ,GAAG,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACzE,yBAAA,IAAI,CACH,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EACpB,IAAI,CAAC,CAAC,CAAC;yBAER,SAAS,CAAC,UAAU,IAAG;wBACtB,UAAU,CAAC,wBAAwB,EAAE;wBACrC,UAAU,CAAC,cAAc,EAAE;AAC7B,oBAAA,CAAC,CAAC;gBACN;AAEA,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;oBAE3B,IAAI,CAAC,KAAK,EAAE;AACV,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC;oBAC7C;yBAAO;;wBAEL,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;wBACrD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBAErF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;AAClD,4BAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC5D,gCAAA,OAAO,iBAAiB,CAAC,KAAK,CAAC;4BACjC;wBACF;AACA,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBAC3C;AAEA,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC7B,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AAED,YAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CACzB,IAAI,CAAC,CAAC,CAAC,CACR,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,YAAY,UAAU,EAAE;oBAC3B,CAAC,CAAC,wBAAwB,EAAE;oBAC5B,CAAC,CAAC,cAAc,EAAE;gBACpB;AACA,gBAAA,SAAS,EAAE;AACb,YAAA,CAAC,CAAC;AAEF,YAAA,UAAU,CAAC,IAAI,CACb,SAAS,CAAC,WAAW,CAAC,CACvB,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAAE;gBAEzB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa;AACzC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;oBAAE,KAAK,GAAG,IAAI;gBAElC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;gBACnG,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,QAAQ;;AAGtF,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;;AAGtD,gBAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;;gBAGjE,IAAI,OAAO,EAAE;oBACX,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE;oBAC5G,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,YAAY;AACpF,oBAAA,IAAI,QAAQ,GAAG,gBAAgB,EAAE;wBAC/B,QAAQ,GAAG,gBAAgB;oBAC7B;gBACF;;gBAGA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;AAE1C,gBAAA,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM;gBAC/B,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK;gBACzD,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK;AAE1D,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;;oBAEpB,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,IAAI,aAAa,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC;AAC5H,oBAAA,IAAI,QAAQ,GAAG,cAAc,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC;AAE/E,oBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,GAAG,UAAU;;oBAE7C,IAAI,WAAW,EAAE;AACf,wBAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACnE;yBAAO,IAAI,YAAY,EAAE;AACvB,wBAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACzD;yBAAO,IAAI,aAAa,EAAE;AACxB,wBAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACjE;AAEA,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAElC,oBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;wBACxB,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;wBACvC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI;;wBAG3C,IAAI,OAAO,EAAE;AACX,4BAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,CAAC,EACD,iBAAiB,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CACxD;4BACD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,gBAAgB,CAAA,EAAA,CAAI;wBAC9C;AAEA,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;oBAC7B;AACF,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;;QAE5C,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;;;QAGpC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,YAAY,GAAG,MAAM,IAAI,CAAC;AACvH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAE/B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,OAAO,eAAe;QACxB;AAEA,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACzB,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,eAAe,CAAC;YACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC;QACjC;AAEA,QAAA,OAAO,eAAe;AACxB,IAAA,CAAC,0FAAC;AAEQ,IAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;QACjD,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC;QACxC;;;AAGA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5B,QAAA,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;AACrC,IAAA,CAAC,+FAAC;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QACpC,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE;AACtD,IAAA,CAAC,kFAAC;AAEQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;;;;AAIrC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAE7C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,MAAM;AAChD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,IAAI,SAAS,CAAC,GAAG,MAAM;QAExD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;QAC1B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;AAE/B,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;AACvB,IAAA,CAAC,mFAAC;AAEQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;;QAEpC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAEpC,QAAA,IAAI,IAAS;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,IAAI,GAAG,UAAU,CAAC,IAAI;QACxB;AAAO,aAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AAChC,YAAA,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;QAC1E;aAAO;AACL,YAAA,IAAI,GAAG,UAAU,CAAC,UAAU;QAC9B;;;;QAKA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,KAAK,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3G,IAAI,GAAG,EAAE;QACX;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YAClD,IAAI;YACJ,KAAK,EAAE,KAAK,GAAG,KAAK;YACpB,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE;YACvC,MAAM,EAAE,CAAC,KAAK,GAAG,KAAK,MAAM,IAAI,CAAC,MAAM,GAAG;AAC3C,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,kFAAC;AAEF,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAe;QACzC,MAAM,gBAAgB,GAAG;AACtB,aAAA,iBAAiB;aACjB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO;aAC/B,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;QACvC;AAEA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;QACtC;AAEA,QAAA,OAAO,CAAC,GAAG,gBAAgB,CAAC;AAC9B,IAAA,CAAC,uFAAC;AAEQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,YAAA,OAAO,KAAK;QACd;AACA,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxG,IAAA,CAAC,wFAAC;AAEQ,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;QAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;AACvD,IAAA,CAAC,0FAAC;AAEQ,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;QACnC,OAAO,IAAI,CAAC,WAAW;AACzB,IAAA,CAAC,iFAAC;AAEM,IAAA,WAAW,GAAG,MAAM,CAAC,MAAK;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACjD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE;AAClD,QAAA,IAAI,YAAY,KAAK,YAAY,EAAE;YACjC;QACF;QACA,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AAC5B,YAAA,IAAI,YAAY,KAAK,YAAY,EAAE;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM;YAClC;AACA,YAAA,IAAI,mBAAmB,GAAG,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACxB;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACrB;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,kFAAC;AAEM,IAAA,eAAe,GAAG,MAAM,CAAC,MAAK;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,QAAA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5E;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;;AAGpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,EAAE;AACjC,QAAA,MAAM,aAAa,GAAG,IAAI,EAAE,SAAS,EAAE;QACvC,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAG,aAAqB,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE;AAE/F,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE;;AAGlD,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,mBAAmB,EAAE;AACrG,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE;AACvC,YAAA,OAAO;QACT;;;;QAMA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM;QACtG,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;AACvH,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU;QAEjC,SAAS,CAAC,MAAK;AACb,YAAA,MAAM,gBAAgB,GAAG,EAAE,IAAI,CAAC,UAAU;YAC1C,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B;YACA,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,YAAA,MAAM,MAAM,GAA0B;gBACpC,QAAQ,EAAE,MAAM,GAAG,KAAK;AACxB,gBAAA,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK;AAC5B,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,KAAK;gBACf,SAAS;AACT,gBAAA,WAAW,EAAE,MAAM;AACnB,gBAAA,eAAe,EAAE,CAAC,IAAW,EAAE,OAAgB,KAAI;AACjD,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;wBACpB,IAAI,IAAI,CAAC,YAAY,IAAI,gBAAgB,KAAK,IAAI,CAAC,UAAU;4BAAE;AAC/D,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AAC5B,wBAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,4BAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGrC,4BAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,gCAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;4BACjC;iCAAO,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvC,gCAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;4BAClC;wBACF;6BAAO;;AAEL,4BAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,gCAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;4BACjC;iCAAO,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvC,gCAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;4BAClC;wBACF;AACA,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,wBAAA,IAAI,mBAAmB,GAAG,CAAC,EAAE;AAC3B,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;wBACxB;6BAAO;AACL,4BAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;wBACrB;AACA,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,oBAAA,CAAC,CAAC;gBACJ,CAAC;gBACD,YAAY,EAAE,MAAK;AACjB,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;wBACpB,IAAI,IAAI,CAAC,YAAY,IAAI,gBAAgB,KAAK,IAAI,CAAC,UAAU;4BAAE;AAC/D,wBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,wBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,wBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5B,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,wBAAA,IAAI,mBAAmB,GAAG,CAAC,EAAE;AAC3B,4BAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;wBACxB;6BAAO;AACL,4BAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;wBACrB;AACA,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAC1B,oBAAA,CAAC,CAAC;gBACJ;aACD;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,gBAAA,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,sFAAC;AAEM,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,oFAAC;AACzB,IAAA,cAAc,GAAG,MAAM,CAAC,CAAC,SAAS,KAAI;AAC5C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;QAC5B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,MAAK;;AAEtC,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;QACF,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;AACpC,IAAA,CAAC,qFAAC;AAEF,IAAA,aAAa,GAAG,KAAK,CAA4B,EAAE,oFAAC;IACpD,OAAO,GAAG,KAAK,CAAC,KAAK,+EACnB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IACF,SAAS,GAAG,KAAK,CAAC,KAAK,iFACrB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACF,IAAA,MAAM,GAAG,KAAK,CAAS,EAAE,6EAAC;AAClB,IAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE,uFAAC;AAE7B,IAAA,qBAAqB,GAAG,MAAM,CAAC,CAAC,SAAS,KAAI;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7B;AACA,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;YAC9B,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9B;AACF,YAAA,CAAC,CAAC;QACJ,CAAC,EAAE,GAAG,CAAC;QACP,SAAS,CAAC,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;AACxC,IAAA,CAAC,4FAAC;AACF,IAAA,SAAS,GAAG,KAAK,CAAC,mCAAmC,gFAAC;AACtD,IAAA,SAAS,GAAG,KAAK,CAAC,8BAA8B,gFAAC;AACjD,IAAA,sBAAsB,GAAG,KAAK,CAAC,+BAA+B,6FAAC;AAC/D,IAAA,sBAAsB,GAAG,KAAK,CAAC,4CAA4C,6FAAC;AAElE,IAAA,kCAAkC,GAAG,QAAQ,CAAC,MAAK;AAC3D,QAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7E,IAAA,CAAC,yGAAC;IAEQ,UAAU,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAE/F,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,SAAS,GAAG,IAAI,cAAc,CAAI,IAAI,CAAC,YAAY,EAAE,KAAK,UAAU,EAAE,EAAE,CAAC;AACzE,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAe;AACzC,IAAA,oBAAoB,GAAG,MAAM,CAAC,KAAK,2FAAC;IAErC,mBAAmB,GAAG,MAAM,EAAgC;IAC5D,gBAAgB,GAAG,MAAM,EAAO;IAChC,uBAAuB,GAAG,MAAM,EAAW;IAC3C,UAAU,GAAG,MAAM,EAAQ;IAC3B,OAAO,GAAG,MAAM,EAAQ;IACxB,UAAU,GAAG,MAAM,EAAQ;AAEpC,IAAA,IAAI,GAAG,GAAA;QACL,OAAO;AACL,YAAA,MAAM,EAAE,CAAC,KAAa,KAAU;AAC9B,gBAAA,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACvD,CAAC;YACD,SAAS,EAAE,MAAW;gBACpB,IAAI,CAAC,UAAU,EAAE;YACnB,CAAC;YACD,WAAW,EAAE,MAAW;gBACtB,IAAI,CAAC,YAAY,EAAE;YACrB,CAAC;YACD,OAAO,EAAE,MAAW;gBAClB,IAAI,CAAC,OAAO,EAAE;YAChB,CAAC;YACD,WAAW,EAAE,MAAsB;AACjC,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE;YAC3B;SACD;IACH;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY;QACzD,MAAM,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;AACxF,QAAA,MAAM,cAAc,GAAG,aAAa,KAAK,CAAC;;;AAI1C,QAAA,IAAI,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE;AAChE,YAAA,MAAM,aAAa,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;YAClE,IAAI,aAAa,EAAE;AACjB,gBAAA,OAAO,IAAI;YACb;QACF;QAEA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;;;AAGpD,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS,EAAE;AACjF,gBAAA,OAAO,KAAK;YACd;;;YAIA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACvC,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS,EAAE;AACjF,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW;IAC1C;AAEA,IAAA,IAAc,WAAW,GAAA;AACvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY;QACzD,MAAM,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;QAC/C,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;QAE/D,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,kBAAkB,KAAK,CAAC,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/E;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAI;;AAE/E,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS,EAAE;AAC9D,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,UAAU,KAAK,CAAC,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK;QACjI;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAc,QAAQ,GAAA;AACpB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY;QACzD,MAAM,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;QACxF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;QAE/C,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAC1E;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,SAAS,EAAE;AAC9D,gBAAA,OAAO,KAAK;YACd;YACA,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,KAAK;QAC5G;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW;IAC1C;AAEU,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG;AAC/E,IAAA,CAAC,qFAAC;AAEF,IAAA,IAAc,gBAAgB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,WAA+B;IAC9D;AAEA,IAAA,IAAc,6BAA6B,GAAA;AACzC,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,EAAE,WAA+B;IACpE;AAEA,IAAA,IAAc,cAAc,GAAA;QAC1B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC/B;IAEA,cAAc,CAAC,IAAS,EAAE,IAAY,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB;QAEA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;IAC/D;AAEA,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;YAChC,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;AAChD,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAI,IAAI,KAAK,UAAU,EAAE,gBAAgB,CAAC;AAC/E,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AAC1B,QAAA,CAAC,CAAC;;;AAIF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;YAClC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrD;YACF;YAEA,MAAM,QAAQ,GAAG,aAAa,CAAC,oBAAoB,EAAE,CAAC,aAA4B;;AAGlF,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE;YAC7C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;;YAGnC,MAAM,aAAa,GAAG,MAAK;gBACzB,IAAI,IAAI,CAAC,YAAY;oBAAE;AACvB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC7B,YAAA,CAAC;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,YAAA,CAAC,CAAC;;YAGF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AAC9C,gBAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;oBAClC,qBAAqB,CAAC,MAAK;wBACzB,IAAI,IAAI,CAAC,YAAY;4BAAE;AACvB,wBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,4BAAA,IAAI;AACF,gCAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;oCAC3B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,WAAW;;AAE3C,oCAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE;AACjD,wCAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;oCAClC;AACA,oCAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE;AAC/C,wCAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;oCAChC;gCACF;4BACF;AAAE,4BAAA,MAAM;;4BAER;AACF,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAG1B,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,SAAS;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,UAAU;YAC1C,IAAI,CAAC,eAAe,EAAE;YAEtB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI;AAAE,oBAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAoB,CAAC;gBAAE;gBAAE,MAAM,EAAC;AAC7E,gBAAA,IAAI;oBAAE,QAAQ,CAAC,UAAU,EAAE;gBAAE;gBAAE,MAAM,EAAC;AACxC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,IAAI,IAAI,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACpF,gBAAA,UAAU,CAAC,IAAI,GAAG,IAAI;gBACtB,UAAU,CAAC,yBAAyB,EAAE;YACxC;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC5D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACpC,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;;;;AAI/F,oBAAA,UAAU,CAAC,SAAS,GAAG,IAAW;gBACpC;qBAAO;AACL,oBAAA,UAAU,CAAC,SAAS,GAAG,IAAW;gBACpC;YACF;AACA,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE;YAC5B,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACjE,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,UAAU,EAAE,CAAC,mBAAmB,GAAG,CAAC,IAAS,EAAE,QAAQ,KAAI;AAC9D,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC;gBAE7E,IAAI,SAAS,EAAE;AACb,oBAAA,IAAI,SAAS,CAAC,WAAW,EAAE;AACzB,wBAAA,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACnE;gBACF;gBAEA,QAAQ,QAAQ;oBACd,SAAS;wBACP,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC;oBAC5C;;AAEJ,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;;;YAGV,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,gBAAgB,EAAE;YACvB,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE;;;AAG1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;IAC1B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK;YACvD,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,YAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;YAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC;SACf,CAAC,CAAC,CAAC;AAEJ,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC3B;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9E,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC;QAEA,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC;QACF;AAEA,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,IAAG;YACxC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAc,EAAE,KAAa,KAAI;AACnD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC;AAChF,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAC3B,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC3B;AAEQ,IAAA,YAAY,CAAC,MAAmB,EAAA;AACtC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AAClC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;AAEpC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;AAC/B,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU;QAEjC,IAAI,IAAI,CAAC,YAAY;YAAE;QAEvB,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC;AACxC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,sBAAsB,CAAC,SAAiB,EAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC;AACrD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE5D,IAAI,KAAK,IAAI,SAAS,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrG,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc;AACrC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe;QAEvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,aAAa;QAClE,IAAI,iBAAiB,EAAE;YACrB,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,CAAC,UAAU,CAAA,SAAA,CAAW;QAC3E;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;QAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa;QAChE,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,aAAa;QAElE,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,CAAC,SAAS,CAAA,MAAA,CAAQ;QACxE;QACA,IAAI,gBAAgB,EAAE;YACpB,gBAAgB,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,eAAA,EAAkB,CAAC,SAAS,CAAA,MAAA,CAAQ;QACzE;QACA,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,CAAC,UAAU,CAAA,IAAA,EAAO,CAAC,SAAS,CAAA,MAAA,CAAQ;QACzF;;QAGA,IAAI,CAAC,eAAe,EAAE;IACxB;IAEQ,eAAe,GAAA;;;;;;;;;;;;;;;;;;IAkBvB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAc;IAClC;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAmB;IACzC;AAEA,IAAA,eAAe,CAAC,YAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;IAChD;AAEA,IAAA,eAAe,CAAC,YAAoB,EAAA;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC;IAChD;IAEA,aAAa,GAAA;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;IACvD;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,IAAI,CAAC,YAAY,EAAE;QACrB;aAAO;YACL,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEA,kBAAkB,CAAC,KAAqB,EAAE,GAAM,EAAA;AAC9C,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC9B;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAC5B,YAAA,cAAc,EAAE,KAAK;YACrB,GAAG;YACH,OAAO,EAAE,KAAK,CAAC;AAChB,SAAA,CAAC;QAEF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IACrD;AAEA,IAAA,YAAY,CAAC,KAAgB,EAAA;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;IACnC;IAEU,UAAU,CAAC,GAAsB,EAAE,SAAwB,EAAA;AACnE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;QACzB,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;QACxD;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IACrD;IAEA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK;YAC1C,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,YAAA,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;YAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC;AACf,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,UAAU,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE;QAElC,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;QAChD,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AAC9B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;YACvD,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;oBAChC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK;gBAC5C;AACA,gBAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG;AACxB,oBAAA,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM;oBACzB,QAAQ,EAAE,QAAQ,CAAC;iBACpB;YACH;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;IAEU,SAAS,CAAC,GAAQ,EAAE,KAA8B,EAAA;QAC1D,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;AAEhD,QAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE;QAClE;aAAO;AACL,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC7D;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;AAEU,IAAA,cAAc,CAAC,GAAsB,EAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;AAChD,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;YAC1C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAC1B;IACF;IAEU,kBAAkB,GAAA;QAC1B,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;QAC1C,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AACrC,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;AAChD,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;oBAChC,OAAO,GAAG,IAAI;gBAChB;YACF;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;QAC1B;IACF;AAEQ,IAAA,wBAAwB,CAAC,GAAsB,EAAA;AACrD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AAAE,YAAA,OAAO,CAAC;AAElD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;AAC1C,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA,YAAA,CAAc,CAAC,CAAkB;QAC1F,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAG;YAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC;YAC1D,OAAO,UAAU,EAAE,YAAY,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,KAAK;AAClE,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,CAAC;QAE/B,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAgB;QAC5E,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,WAAW,IAAI,CAAC;AAChD,cAAA,EAAE;cACF,EAAE,CAAC;QAEP,IAAI,eAAe,GAAG,WAAW;AACjC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QACnE,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAE,CAAC;AAEnF,QAAA,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAkB;YAChF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAEvC,YAAA,aAAa,CAAC,OAAO,CAAC,GAAG,IAAG;AAC1B,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAkB;AACxE,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAC5B,IAAI,IAAI,EAAE;AACR,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAgC;oBACrD,IAAI,OAAO,EAAE;wBACX,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;AACvC,wBAAA,IAAI,KAAK,GAAG,eAAe,EAAE;4BAC3B,eAAe,GAAG,KAAK;wBACzB;oBACF;gBACF;AACF,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACrD;IAEU,YAAY,GAAA;AACpB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC7C,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC/B;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC1B;IAEU,wBAAwB,GAAA;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAgE,4BAA4B,EAAE;AAC/H,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE;AACJ,gBAAA,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE;AAClC,aAAA;AACF,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAA8C,KAAI;YACnF,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,KAAK,CAAC;gBACxD,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBACrD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE;gBAE7C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAM,KAAI;oBAChC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,KAAK;oBAC5C,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;AACnE,gBAAA,CAAC,CAAC;;gBAGF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC/E,gBAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACtC,gBAAA,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;AAE/B,gBAAA,YAAY,CAAC,OAAO,CAAC,KAAK,IAAG;oBAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;;;AAI5B,wBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;oBACvB;AACF,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAChC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC1B;AACF,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,YAAY,CAAC,KAAW,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,EAAE;YACxC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI;QAC/C;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;IAEQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1C;uGA95CW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,6BAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,wCAAA,EAAA,gBAAA,EAAA,iDAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EArBR;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,QAAQ,CAAC;AACxC,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwCoC,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAClB,mCAAmC,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACzC,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACzB,0BAA0B,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAU,iBAAiB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAEhE,aAAa,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACH,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOU,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACA,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACd,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACvC,aAAa,qJACoB,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACZ,UAAU,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/I9E,w1iBA+VA,EAAA,MAAA,EAAA,CAAA,0uPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtSI,QAAQ,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,UAAU,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,aAAa,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,EAAA,wBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,aAAa,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,UAAU,EAAA,QAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,cAAc,kGACd,iBAAiB,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,6BAA6B,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC7B,MAAM,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,WAAW,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,WAAW,6DACX,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAyBF,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAhDpB,SAAS;+BACE,eAAe,EAAA,QAAA,EACf,aAAa,EAAA,OAAA,EACd;wBACP,QAAQ;wBACR,UAAU;wBACV,aAAa;wBACb,iBAAiB;wBACjB,gBAAgB;wBAChB,SAAS;wBACT,aAAa;wBACb,OAAO;wBACP,UAAU;wBACV,cAAc;wBACd,iBAAiB;wBACjB,IAAI;wBACJ,WAAW;wBACX,6BAA6B;wBAC7B,MAAM;wBACN,IAAI;wBACJ,QAAQ;wBACR,WAAW;wBACX,WAAW;wBACX,WAAW;qBACZ,EAAA,SAAA,EAGU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,SAAS;AAClB,4BAAA,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC;AACxC,yBAAA;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,eAAe;AACxB,wBAAA,0BAA0B,EAAE,mBAAmB;AAC/C,wBAAA,uBAAuB,EAAE,gBAAgB;AACzC,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,oBAAoB,EAAE,cAAc;AACpC,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,+BAA+B,EAAE,uBAAuB;AACxD,wBAAA,oBAAoB,EAAE,aAAa;AACnC,wBAAA,0CAA0C,EAAE,gBAAgB;AAC5D,wBAAA,mDAAmD,EAAE,kBAAkB;AACvE,wBAAA,wBAAwB,EAAE,cAAc;AACzC,qBAAA,EAAA,QAAA,EAAA,w1iBAAA,EAAA,MAAA,EAAA,CAAA,0uPAAA,CAAA,EAAA;AA0BoC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAClB,mCAAmC,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACzC,0BAA0B,gGACzB,0BAA0B,CAAA,EAAA,EAAA,GAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC1D,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACf,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACH,SAAS,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAOd,cAAc,EAAA,EAAA,GAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAC5C,mBAAmB,EAAA,EAAA,GAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACxD,iBAAiB,OAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACtD,aAAa,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACT,mBAAmB,EAAA,EAAA,GAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACvD,kBAAkB,EAAA,EAAA,GAAE,EAAE,IAAI,GAAE,UAAuB,CAAA,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,yBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE7IvF,SAAU,YAAY,CAAI,YAAoB,EAAE,SAAc,EAAA;IAClE,OAAO;QACL,YAAY;QACZ;KACD;AACH;;ACPA;;AAEG;;;;"}