ngx-kit 8.4.0 → 8.4.1

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.
@@ -380,7 +380,7 @@ class ColumnFilterService {
380
380
  isFilterActive(filter) {
381
381
  if (!filter)
382
382
  return false;
383
- const { operator, value, valueTo } = filter;
383
+ const { operator, value, valueTo, values } = filter;
384
384
  const noValueOps = [
385
385
  DynamicDataFilterOperator.IsNull,
386
386
  DynamicDataFilterOperator.IsNotNull,
@@ -398,7 +398,7 @@ class ColumnFilterService {
398
398
  valueTo !== '');
399
399
  }
400
400
  if (operator === DynamicDataFilterOperator.In) {
401
- return Array.isArray(value) && value.length > 0;
401
+ return Array.isArray(values) && values.length > 0;
402
402
  }
403
403
  return value !== undefined && value !== null && value !== '';
404
404
  }
@@ -407,6 +407,7 @@ class ColumnFilterService {
407
407
  const op = filter.operator;
408
408
  const target = filter.value;
409
409
  const targetTo = filter.valueTo;
410
+ const targets = filter.values;
410
411
  if (op === DynamicDataFilterOperator.IsNull)
411
412
  return rawVal === null || rawVal === undefined;
412
413
  if (op === DynamicDataFilterOperator.IsNotNull)
@@ -417,7 +418,8 @@ class ColumnFilterService {
417
418
  return rawVal !== '' && rawVal !== null && rawVal !== undefined;
418
419
  if (rawVal === null || rawVal === undefined)
419
420
  return false;
420
- if (rawVal instanceof Date || (typeof rawVal === 'string' && !isNaN(Date.parse(rawVal)) && isNaN(Number(rawVal)))) {
421
+ if (rawVal instanceof Date ||
422
+ (typeof rawVal === 'string' && !isNaN(Date.parse(rawVal)) && isNaN(Number(rawVal)))) {
421
423
  const itemTime = new Date(rawVal).getTime();
422
424
  const targetTime = target ? new Date(target).getTime() : NaN;
423
425
  const targetToTime = targetTo ? new Date(targetTo).getTime() : NaN;
@@ -460,8 +462,8 @@ class ColumnFilterService {
460
462
  case DynamicDataFilterOperator.Between:
461
463
  return Number(rawVal) >= Number(target) && Number(rawVal) <= Number(targetTo);
462
464
  case DynamicDataFilterOperator.In:
463
- return Array.isArray(target)
464
- ? target.some((t) => String(t).toLowerCase() === String(rawVal).toLowerCase())
465
+ return Array.isArray(targets)
466
+ ? targets.some((t) => String(t).toLowerCase() === String(rawVal).toLowerCase())
465
467
  : false;
466
468
  default:
467
469
  return true;
@@ -643,8 +645,8 @@ class NgxColumnFilter {
643
645
  const type = this.filterType();
644
646
  if (cur) {
645
647
  this.selectedOperator.set(cur.operator);
646
- if (type === 'enum' && Array.isArray(cur.value)) {
647
- this.selectedEnumValues.set(new Set(cur.value));
648
+ if (type === 'enum' && Array.isArray(cur.values)) {
649
+ this.selectedEnumValues.set(new Set(cur.values));
648
650
  }
649
651
  else {
650
652
  this.filterValue.set(cur.value ?? '');
@@ -667,10 +669,11 @@ class NgxColumnFilter {
667
669
  onApply() {
668
670
  const type = this.filterType();
669
671
  let value = this.filterValue();
672
+ let values = [];
670
673
  let operator = this.selectedOperator();
671
674
  if (type === 'enum') {
672
675
  operator = DynamicDataFilterOperator.In;
673
- value = Array.from(this.selectedEnumValues());
676
+ values = Array.from(this.selectedEnumValues());
674
677
  }
675
678
  this.applyFilter.emit({
676
679
  field: this.field(),
@@ -679,6 +682,7 @@ class NgxColumnFilter {
679
682
  valueTo: this.selectedOperator() === DynamicDataFilterOperator.Between
680
683
  ? this.filterValueTo()
681
684
  : undefined,
685
+ values,
682
686
  });
683
687
  this.isOpen.set(false);
684
688
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-kit-data-table.mjs","sources":["../../../projects/libs/data-table/types/table-field.types.ts","../../../projects/libs/data-table/types/filter.type.ts","../../../projects/libs/data-table/tokens/defaults.ts","../../../projects/libs/data-table/localization/table.localization.ts","../../../projects/libs/data-table/tokens/table-config.token.ts","../../../projects/libs/data-table/localization/pagination.localization.ts","../../../projects/libs/data-table/tokens/pagination-config.token.ts","../../../projects/libs/data-table/providers/provide-table.ts","../../../projects/libs/data-table/providers/provide-pagination.ts","../../../projects/libs/data-table/directives/table-cell.directive.ts","../../../projects/libs/data-table/directives/column-resize.directive.ts","../../../projects/libs/data-table/components/pagination/pagination.ts","../../../projects/libs/data-table/components/pagination/pagination.html","../../../projects/libs/data-table/services/column-filter.service.ts","../../../projects/libs/data-table/components/column-filter/column-filter.ts","../../../projects/libs/data-table/components/column-filter/column-filter.html","../../../projects/libs/data-table/components/table/table.ts","../../../projects/libs/data-table/components/table/table.html","../../../projects/libs/data-table/public-api.ts","../../../projects/libs/data-table/ngx-kit-data-table.ts"],"sourcesContent":["import { InputSignal, TemplateRef, Type } from '@angular/core';\nimport type { ColumnFilterConfig } from './filter.type';\n\n// ----------------------------------------------------------------------------\n// قرارداد پایه‌ای که هر کامپوننت رندرر باید پیاده‌سازی کند.\n// value/row/field همیشه توسط جدول پر می‌شوند؛ هر ورودی دیگری که renderer\n// اضافه کند (مثل nameField در AvatarCellRenderer) به‌صورت خودکار استخراج و\n// در rendererInputs همان ستون در دسترس/چک می‌شود.\n// ----------------------------------------------------------------------------\nexport interface CellRendererComponent<TValue = unknown, TRow extends object = object> {\n value: InputSignal<TValue>;\n row: InputSignal<TRow>;\n field: InputSignal<TableFieldBase<TRow>>;\n}\n\nexport type RendererRegistry = Readonly<Record<string, Type<CellRendererComponent<any, any>>>>;\n\n/**\n * Identity helper: یک رجیستری رندرر را با inference کامل تعریف می‌کند.\n * همین آبجکت باید هم در provideTable({ renderers }) و هم در defineFields(renderers, ...)\n * استفاده شود تا کلیدها (و ورودی‌های اضافه‌ی هر رندرر) در کل پروژه type-check شوند.\n */\nexport function defineRenderers<R extends RendererRegistry>(registry: R): R {\n return registry;\n}\n\n// ----------------------------------------------------------------------------\n// استخراج ورودی‌های اضافه‌ی هر رندرر مستقیماً از روی خودِ کلاس کامپوننت، بدون\n// این‌که کاربر مجبور باشد آن‌ها را جای دیگری دوباره تایپ کند.\n// نکته: فقط اعضای «public» و «قابل فراخوانی بدون آرگومان» (شکل InputSignal/Signal)\n// در نظر گرفته می‌شوند؛ اعضای protected/private به‌طور خودکار (توسط خودِ\n// TypeScript) از keyof حذف می‌شوند. توصیه: هر computed/derived داخلی در\n// کامپوننت‌های رندرر را protected تعریف کنید تا اشتباهاً به‌عنوان ورودی قابل\n// تنظیم دیده نشود. متدهای عمومی بدون آرگومان (نادر) هم می‌توانند اشتباهاً در\n// این استخراج ظاهر شوند؛ چنین متدهایی را protected/private کنید.\n// ----------------------------------------------------------------------------\ntype InstanceOf<C> = C extends Type<infer I> ? I : never;\ntype UnwrapSignal<S> = S extends () => infer V ? V : never;\n\nexport type RendererExtraInputs<C extends Type<any>> = {\n [\n K in keyof InstanceOf<C> as K extends 'value' | 'row' | 'field'\n ? never\n : InstanceOf<C>[K] extends () => any\n ? K\n : never\n ]?: UnwrapSignal<InstanceOf<C>[K]>;\n};\n\n// ----------------------------------------------------------------------------\n// تعریف ستون‌ها\n// ----------------------------------------------------------------------------\nexport type ColumnAlign = 'start' | 'center' | 'end';\n\nexport type TableCellFormatter<T extends object = object> = (\n value: any,\n row: T,\n field: TableFieldBase<T>,\n) => any;\n\nexport interface CellTemplateContext<T extends object> {\n $implicit: T;\n row: T;\n value: unknown;\n rowIndex: number;\n field: TableFieldBase<T>;\n}\n\n/** شکل پایه‌ای مشترک بین همه‌ی ستون‌ها، صرف‌نظر از این‌که renderer دارند یا نه. */\nexport interface TableFieldBase<T extends object, K extends keyof T = keyof T> {\n column: Extract<keyof T, string>;\n title: string;\n /**\n * عرضِ این ستون. عدد یعنی پیکسل (`160` = `160px`)؛ رشته یعنی هر مقدار\n * معتبرِ CSS length برای flex-basis (`'20%'`, `'12rem'`, ...). اگه اصلاً\n * ندید، این ستون flex می‌شه (`flex: 1 1 0`) و فضای باقی‌مونده‌ی جدول رو پر\n * می‌کنه — دقیقاً برخلافِ ستون‌هایی که width دارن (که `flex: 0 0 <width>`\n * می‌گیرن و ثابت می‌مونن).\n */\n width?: number | string;\n minWidth?: number;\n maxWidth?: number;\n resizable?: boolean;\n sortable?: boolean;\n wrap?: boolean;\n align?: ColumnAlign;\n prefix?: string;\n formatter?: string | TableCellFormatter<T>;\n filterable?: boolean;\n filterConfig?: ColumnFilterConfig<T[K]>;\n}\n\n/** ستون بدون renderer (متن ساده / formatter / cellTemplate دستی). */\nexport interface PlainTableField<T extends object> extends TableFieldBase<T> {\n renderer?: undefined;\n rendererInputs?: undefined;\n cellTemplate?: TemplateRef<CellTemplateContext<T>>;\n}\n\n/** ستونی که یک renderer از رجیستری R انتخاب کرده؛ rendererInputs دقیقاً همان\n * ورودی‌های اضافه‌ی همان renderer است — نه یک Record<string, unknown> آزاد. */\nexport type RenderedTableField<T extends object, R extends RendererRegistry> = {\n [K in keyof R]: TableFieldBase<T> & {\n renderer: K;\n rendererInputs?: RendererExtraInputs<R[K]>;\n cellTemplate?: undefined;\n };\n}[keyof R];\n\nexport type TableField<T extends object, R extends RendererRegistry = {}> =\n PlainTableField<T> | RenderedTableField<T, R>;\n\n/**\n * Identity helper برای تعریف ستون‌های یک جدول با inference و type-check کامل\n * نسبت به هم مدل داده (T) و هم رجیستری رندررها (R).\n *\n * @example\n * const renderers = defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer });\n *\n * const fields = defineFields<Tenant, typeof renderers>(renderers, [\n * { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: true } }, // ✅\n * { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: 'x' } }, // ❌ باید boolean باشد\n * { column: 'isActive', title: 'فعال', renderer: 'bool' }, // ❌ کلید رجیستری نیست\n * { column: 'ageXYZ', title: '...' }, // ❌ فیلد Tenant نیست\n * ]);\n */\nexport function defineFields<T extends object, R extends RendererRegistry = {}>(\n _renderers: R,\n fields: TableField<T, R>[],\n): TableField<T, R>[] {\n return fields;\n}\n","export enum DynamicDataFilterOperator {\n Equal = 0,\n NotEqual = 1,\n Contains = 2,\n StartsWith = 3,\n EndsWith = 4,\n GreaterThan = 5,\n GreaterThanOrEqual = 6,\n LessThan = 7,\n LessThanOrEqual = 8,\n Between = 9,\n In = 10,\n IsNull = 11,\n IsNotNull = 12,\n IsEmpty = 13,\n IsNotEmpty = 14,\n}\n\nexport type FilterDataType = 'text' | 'number' | 'date' | 'boolean' | 'enum';\n\nexport interface EnumFilterOption<T = unknown> {\n label: string;\n value: T;\n}\n\nexport interface ColumnFilterConfig<T = unknown> {\n type?: FilterDataType;\n enabled?: boolean;\n options?: EnumFilterOption<T>[];\n placeholder?: string;\n defaultOperator?: DynamicDataFilterOperator;\n}\n\nexport interface ColumnFilterState {\n field: string;\n operator: DynamicDataFilterOperator;\n value: unknown;\n valueTo?: unknown; // مخصوص اپراتور Between\n}","import type { NgxPaginationOptions } from '../types/pagination.types';\nimport type { ResolvedTableOptions } from '../types/table-options.types';\n\nexport const NGX_PAGINATION_CONFIG_DEFAULT: NgxPaginationOptions = {\n defaultPageSize: 10,\n pageSizeOptions: [5, 10, 20, 30, 50, 100],\n};\nexport const NGX_TABLE_CONFIG_DEFAULT: ResolvedTableOptions = {\n showRecordNumber: false,\n hoverable: true,\n multiSort: true,\n resizable: true,\n stickyHeader: true,\n stripedRows: true,\n column: { minWidth: 60, maxWidth: 600, defaultWidth: 150 },\n\n renderers: {},\n formatters: {},\n lazy: false,\n};\n","export class TableLocalization {\n noData = 'There is no data to display!';\n loading = 'Loading...';\n operation = 'Operation';\n\n // Filters\n filter = 'Filter';\n clearFilter = 'Clear';\n applyFilter = 'Apply';\n search = 'Search...';\n selectAll = 'Select All';\n from = 'From';\n to = 'To';\n trueText = 'Yes';\n falseText = 'No';\n\n // Operators\n opEqual = 'Equals';\n opNotEqual = 'Does not equal';\n opContains = 'Contains';\n opStartsWith = 'Starts with';\n opEndsWith = 'Ends with';\n opGreaterThan = 'Greater than';\n opGreaterThanOrEqual = 'Greater than or equal';\n opLessThan = 'Less than';\n opLessThanOrEqual = 'Less than or equal';\n opBetween = 'Between';\n opIsNull = 'Is null';\n opIsNotNull = 'Is not null';\n opIsEmpty = 'Is empty';\n opIsNotEmpty = 'Is not empty';\n}","import { InjectionToken } from '@angular/core';\nimport { ResolvedTableOptions } from '../types/table-options.types';\nimport { NGX_TABLE_CONFIG_DEFAULT } from './defaults';\nimport { TableLocalization } from '../localization/table.localization';\n\nexport const NGX_TABLE_CONFIG = new InjectionToken<ResolvedTableOptions>('NGX_TABLE_CONFIG', {\n factory: () => NGX_TABLE_CONFIG_DEFAULT,\n});\n\nexport const NGX_TABLE_I18N = new InjectionToken<TableLocalization>('NGX_TABLE_I18N', {\n factory: () => new TableLocalization(),\n});\n","export class PaginationLocalization {\n first = 'First';\n last = 'Last';\n next = 'Next';\n previous = 'Previous';\n showing = 'Showing';\n to = 'to';\n of = 'of';\n results = 'results';\n pageSize = 'Page Size';\n}\n","import { InjectionToken } from '@angular/core';\nimport { NgxPaginationOptions } from '../types/pagination.types';\nimport { NGX_PAGINATION_CONFIG_DEFAULT } from './defaults';\nimport { PaginationLocalization } from '../localization/pagination.localization';\n\nexport const NGX_PAGINATION_CONFIG = new InjectionToken<NgxPaginationOptions>(\n 'NGX_PAGINATION_CONFIG',\n {\n factory: () => NGX_PAGINATION_CONFIG_DEFAULT,\n },\n);\n\nexport const NGX_PAGINATION_I18N = new InjectionToken<PaginationLocalization>(\n 'NGX_PAGINATION_I18N',\n {\n factory: () => new PaginationLocalization(),\n },\n);\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NGX_TABLE_CONFIG } from '../tokens/table-config.token';\nimport { NgxTableOptions, ResolvedTableOptions } from '../types/table-options.types';\nimport { NGX_TABLE_CONFIG_DEFAULT } from '../tokens/defaults';\n\nfunction mergeTableConfig(\n base: ResolvedTableOptions,\n override?: NgxTableOptions,\n): ResolvedTableOptions {\n if (!override) return base;\n return {\n ...base,\n ...override,\n column: { ...base.column, ...override.column },\n renderers: { ...base.renderers, ...override.renderers },\n formatters: { ...base.formatters, ...override.formatters },\n };\n}\n\n/**\n * کانفیگ سراسری <ngx-table>: جهت پیش‌فرض، حداقل/حداکثر عرض ستون، فعال بودن\n * پیش‌فرض سورت چندستونه، و از همه مهم‌تر رجیستری رندررها.\n *\n * @example\n * provideTable({\n * renderers: defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer }),\n * column: { minWidth: 80, maxWidth: 480, defaultWidth: 160 },\n * })\n */\nexport function provideTable(options?: NgxTableOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NGX_TABLE_CONFIG, useValue: mergeTableConfig(NGX_TABLE_CONFIG_DEFAULT, options) },\n ]);\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NGX_PAGINATION_CONFIG } from '../tokens/pagination-config.token';\nimport { NgxPaginationOptions } from '../types/pagination.types';\nimport { NGX_PAGINATION_CONFIG_DEFAULT } from '../tokens/defaults';\n\nfunction mergePaginationConfig(\n base: NgxPaginationOptions,\n override?: Partial<NgxPaginationOptions>,\n): NgxPaginationOptions {\n if (!override) return base;\n return {\n ...base,\n ...override,\n };\n}\n\nexport function providePagination(options?: Partial<NgxPaginationOptions>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_PAGINATION_CONFIG,\n useValue: mergePaginationConfig(NGX_PAGINATION_CONFIG_DEFAULT, options),\n },\n ]);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { CellTemplateContext } from '../types/table-field.types';\n\n/**\n * برای projection قالب سفارشی یک ستون بدون این‌که مجبور باشید cellTemplate را\n * از طریق ViewChild به آبجکت ستون وصل کنید:\n *\n * <ngx-table [fields]=\"fields\" [data]=\"rows()\">\n * <ng-template ngxTableCell=\"userName\" let-row let-value=\"value\">\n * <strong>{{ value }}</strong>\n * </ng-template>\n * </ngx-table>\n *\n * مهم: چون این دایرکتیو در تمپلیت *کامپوننت مصرف‌کننده* (نه ngx-table) استفاده\n * می‌شود، باید آن را در آرایه‌ی imports همان کامپوننت (standalone) وارد کنید:\n * imports: [NgxTable, TableCell]\n *\n * محدودیت شناخته‌شده: context این تمپلیت (row/value) از نوع T دقیق نیست\n * (چون TemplateRef اینجا به‌صورت پویا از ContentChildren جمع‌آوری می‌شود و\n * اطلاعات جنریک T در آن نقطه از بین می‌رود). برای type-safety کامل روی\n * row/value، از field.cellTemplate به همراه @ViewChild استفاده کنید (به README\n * بخش «Cell Template کاملاً Type-Safe» مراجعه کنید).\n */\n@Directive({\n selector: 'ng-template[ngxTableCell]',\n standalone: true,\n})\nexport class TableCell<T extends object = object> {\n readonly column = input.required<string>({ alias: 'ngxTableCell' });\n readonly templateRef = inject(TemplateRef<CellTemplateContext<T>>);\n}\n","import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';\n\n/**\n * دستگیره‌ی درگ برای ریسایز ستون. روی لبه‌ی «انتهای منطقی» (inline-end) قرار\n * می‌گیرد، یعنی خودش زیر [dir=\"rtl\"] جابه‌جا می‌شود؛ فقط جهت محاسبه‌ی دلتا هم\n * برعکس می‌شود تا حس درگ همیشه طبیعی باشد.\n *\n * مقدار نهایی توسط جدول در یک Map از عرض‌ها ذخیره می‌شود (نه در استایل مستقیم\n * ستون)، به همراه علامت‌گذاری «دستی ریسایز شده» — یعنی بعد از این، هیچ\n * re-render یا تغییر داده‌ای این عرض را از بین نمی‌برد.\n */\n@Directive({\n selector: '[ngxColumnResize]',\n standalone: true,\n host: {\n class: 'ngx-table__resize-handle',\n role: 'separator',\n 'aria-orientation': 'vertical',\n },\n})\nexport class ColumnResize {\n readonly startWidth = input.required<number>({ alias: 'ngxColumnResizeWidth' });\n readonly minWidth = input<number>(40, { alias: 'ngxColumnResizeMin' });\n readonly maxWidth = input<number>(1000, { alias: 'ngxColumnResizeMax' });\n readonly direction = input<'ltr' | 'rtl'>('ltr', { alias: 'ngxColumnResizeDir' });\n\n readonly resizing = output<number>();\n readonly resizeEnd = output<number>();\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n private dragging = false;\n private startX = 0;\n private baseWidth = 0;\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragging = true;\n this.startX = event.clientX;\n // اندازه‌ی واقعیِ رندرشده‌ی ستون رو می‌گیریم، نه فقط input ورودی — چون\n // ستون‌هایی که width صریح ندارن (flex:1 1 0، فضای باقی‌مونده رو پر\n // می‌کنن) هیچ عرض عددیِ از‌پیش‌شناخته‌شده‌ای ندارن؛ تنها منبع درستِ\n // «عرض فعلی» برای شروع محاسبه‌ی درگ، خودِ DOM هست.\n const measured = this.elementRef.nativeElement.parentElement?.getBoundingClientRect().width;\n this.baseWidth = measured && measured > 0 ? measured : this.startWidth();\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n }\n\n @HostListener('pointermove', ['$event'])\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n this.resizing.emit(this.computeWidth(event.clientX));\n }\n\n @HostListener('pointerup', ['$event'])\n @HostListener('pointercancel', ['$event'])\n onPointerUp(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n this.resizeEnd.emit(this.computeWidth(event.clientX));\n }\n\n private computeWidth(clientX: number): number {\n const delta = clientX - this.startX;\n const signedDelta = this.direction() === 'rtl' ? -delta : delta;\n const raw = this.baseWidth + signedDelta;\n return Math.min(this.maxWidth(), Math.max(this.minWidth(), raw));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NGX_PAGINATION_CONFIG, NGX_PAGINATION_I18N } from '../../tokens/pagination-config.token';\nimport { PageEvent } from '../../types/page.types';\n\n@Component({\n selector: 'ngx-pagination',\n standalone: true,\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n imports: [FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxPagination {\n protected readonly config = inject(NGX_PAGINATION_CONFIG);\n protected readonly lables = inject(NGX_PAGINATION_I18N);\n\n readonly total = input.required<number>();\n\n readonly page = model(1);\n readonly pageSize = model(this.config.defaultPageSize);\n\n readonly pageSizeOptions = input(this.config.pageSizeOptions);\n readonly siblingCount = input(1);\n readonly boundaryCount = input(1);\n\n readonly paginate = output<PageEvent>();\n\n protected readonly totalPages = computed(() =>\n Math.max(1, Math.ceil(this.total() / this.pageSize())),\n );\n\n protected readonly firstItem = computed(() =>\n this.total() === 0 ? 0 : (this.page() - 1) * this.pageSize() + 1,\n );\n\n protected readonly lastItem = computed(() =>\n Math.min(this.firstItem() + this.pageSize() - 1, this.total()),\n );\n\n protected readonly pages = computed(() =>\n this.buildPages(this.page(), this.totalPages(), this.siblingCount(), this.boundaryCount()),\n );\n\n constructor() {\n // هر تغییری در page/pageSize را برای مصرف‌کننده امیت کن.\n effect(() => {\n this.paginate.emit({ page: this.page(), pageSize: this.pageSize() });\n });\n\n // اگر بعد از کوچک‌شدن total، صفحه‌ی جاری خارج از بازه افتاد، اصلاحش کن.\n effect(() => {\n const max = this.totalPages();\n if (this.page() > max) this.page.set(max);\n });\n }\n\n private buildPages(\n current: number,\n total: number,\n sibling = 1,\n boundary = 1,\n ): (number | string)[] {\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalNumbers = sibling * 2 + boundary * 2 + 3;\n if (total <= totalNumbers) return range(1, total);\n\n const leftSibling = Math.max(current - sibling, boundary + 2);\n const rightSibling = Math.min(current + sibling, total - boundary - 1);\n const showLeftDots = leftSibling > boundary + 2;\n const showRightDots = rightSibling < total - boundary - 1;\n\n const pages: (number | string)[] = [];\n pages.push(...range(1, boundary));\n if (showLeftDots) pages.push('...');\n else pages.push(...range(boundary + 1, leftSibling - 1));\n pages.push(...range(leftSibling, rightSibling));\n if (showRightDots) pages.push('...');\n else pages.push(...range(rightSibling + 1, total - boundary));\n pages.push(...range(total - boundary + 1, total));\n return pages;\n }\n\n protected next(): void {\n this.page.update((p) => Math.min(p + 1, this.totalPages()));\n }\n protected previous(): void {\n this.page.update((p) => Math.max(1, p - 1));\n }\n protected first(): void {\n this.page.set(1);\n }\n protected last(): void {\n this.page.set(this.totalPages());\n }\n protected goto(page: number): void {\n if (typeof page !== 'number' || Number.isNaN(page)) return;\n this.page.set(page);\n }\n protected onPageSizeChange(value: number): void {\n this.pageSize.set(Number(value));\n this.page.set(1);\n }\n}\n","<nav class=\"ngx-pagination\">\n <div class=\"ngx-pagination__summary\">\n {{ lables.showing }}\n <span class=\"fw-semibold\">{{ firstItem() }}</span>\n {{ lables.to }}\n <span class=\"fw-semibold\">{{ lastItem() }}</span>\n {{ lables.of }}\n <span class=\"fw-semibold\">{{ total() }}</span>\n {{ lables.results }}\n </div>\n\n <div class=\"ngx-pagination__controls\">\n <ul class=\"ngx-pagination__list\">\n <li [class.disabled]=\"page() === 1\" [title]=\"lables.first\">\n <a (click)=\"first()\" class=\"icon\">«</a>\n </li>\n <li [class.disabled]=\"page() === 1\" [title]=\"lables.previous\">\n <a (click)=\"previous()\" class=\"icon\">‹</a>\n </li>\n\n @for (item of pages(); track $index) {\n <li class=\"ngx-pagination__page-num\" [class.active]=\"item === page()\">\n @if (item !== page() && item !== '...') {\n <a (click)=\"goto(+item)\">{{ item }}</a>\n }\n @if (item === page() || item === '...') {\n <span>{{ item }}</span>\n }\n </li>\n }\n\n <li [class.disabled]=\"page() === totalPages()\" [title]=\"lables.next\">\n <a (click)=\"next()\" class=\"icon\">›</a>\n </li>\n <li [class.disabled]=\"page() === totalPages()\" [title]=\"lables.last\">\n <a (click)=\"last()\" class=\"icon\">»</a>\n </li>\n </ul>\n\n <div class=\"ngx-pagination__page-size\">\n <span>{{ lables.pageSize }}:</span>\n <select [ngModel]=\"pageSize()\" (ngModelChange)=\"onPageSizeChange($event)\">\n @for (opt of pageSizeOptions(); track opt) {\n <option [value]=\"opt\" [selected]=\"opt === pageSize()\">{{ opt }}</option>\n }\n </select>\n </div>\n </div>\n</nav>\n","import { Injectable } from '@angular/core';\nimport { ColumnFilterState, DynamicDataFilterOperator } from '../types/filter.type';\n\n@Injectable({ providedIn: 'root' })\nexport class ColumnFilterService {\n applyFilters<T>(data: readonly T[], filters: Record<string, ColumnFilterState>): T[] {\n const activeFilters = Object.values(filters).filter((f) => this.isFilterActive(f));\n if (activeFilters.length === 0) return [...data];\n\n return data.filter((item) =>\n activeFilters.every((filter) => this.evaluateFilter(item, filter)),\n );\n }\n\n isFilterActive(filter?: ColumnFilterState | null): boolean {\n if (!filter) return false;\n const { operator, value, valueTo } = filter;\n const noValueOps = [\n DynamicDataFilterOperator.IsNull,\n DynamicDataFilterOperator.IsNotNull,\n DynamicDataFilterOperator.IsEmpty,\n DynamicDataFilterOperator.IsNotEmpty,\n ];\n if (noValueOps.includes(operator)) return true;\n\n if (operator === DynamicDataFilterOperator.Between) {\n return (\n value !== undefined &&\n value !== null &&\n value !== '' &&\n valueTo !== undefined &&\n valueTo !== null &&\n valueTo !== ''\n );\n }\n\n if (operator === DynamicDataFilterOperator.In) {\n return Array.isArray(value) && value.length > 0;\n }\n\n return value !== undefined && value !== null && value !== '';\n }\n\n private evaluateFilter(item: any, filter: ColumnFilterState): boolean {\n const rawVal = item?.[filter.field];\n const op = filter.operator;\n const target = filter.value;\n const targetTo = filter.valueTo;\n\n if (op === DynamicDataFilterOperator.IsNull) return rawVal === null || rawVal === undefined;\n if (op === DynamicDataFilterOperator.IsNotNull) return rawVal !== null && rawVal !== undefined;\n if (op === DynamicDataFilterOperator.IsEmpty)\n return rawVal === '' || rawVal === null || rawVal === undefined;\n if (op === DynamicDataFilterOperator.IsNotEmpty)\n return rawVal !== '' && rawVal !== null && rawVal !== undefined;\n\n if (rawVal === null || rawVal === undefined) return false;\n\n if (rawVal instanceof Date || (typeof rawVal === 'string' && !isNaN(Date.parse(rawVal)) && isNaN(Number(rawVal)))) {\n const itemTime = new Date(rawVal).getTime();\n const targetTime = target ? new Date(target as string).getTime() : NaN;\n const targetToTime = targetTo ? new Date(targetTo as string).getTime() : NaN;\n\n if (!isNaN(itemTime)) {\n switch (op) {\n case DynamicDataFilterOperator.Equal:\n return new Date(rawVal).toDateString() === new Date(target as string).toDateString();\n case DynamicDataFilterOperator.GreaterThan:\n return itemTime > targetTime;\n case DynamicDataFilterOperator.GreaterThanOrEqual:\n return itemTime >= targetTime;\n case DynamicDataFilterOperator.LessThan:\n return itemTime < targetTime;\n case DynamicDataFilterOperator.LessThanOrEqual:\n return itemTime <= targetTime;\n case DynamicDataFilterOperator.Between:\n return itemTime >= targetTime && itemTime <= targetToTime;\n }\n }\n }\n\n switch (op) {\n case DynamicDataFilterOperator.Equal:\n return String(rawVal).trim().toLowerCase() === String(target).trim().toLowerCase();\n case DynamicDataFilterOperator.NotEqual:\n return String(rawVal).trim().toLowerCase() !== String(target).trim().toLowerCase();\n case DynamicDataFilterOperator.Contains:\n return String(rawVal).toLowerCase().includes(String(target).toLowerCase());\n case DynamicDataFilterOperator.StartsWith:\n return String(rawVal).toLowerCase().startsWith(String(target).toLowerCase());\n case DynamicDataFilterOperator.EndsWith:\n return String(rawVal).toLowerCase().endsWith(String(target).toLowerCase());\n case DynamicDataFilterOperator.GreaterThan:\n return Number(rawVal) > Number(target);\n case DynamicDataFilterOperator.GreaterThanOrEqual:\n return Number(rawVal) >= Number(target);\n case DynamicDataFilterOperator.LessThan:\n return Number(rawVal) < Number(target);\n case DynamicDataFilterOperator.LessThanOrEqual:\n return Number(rawVal) <= Number(target);\n case DynamicDataFilterOperator.Between:\n return Number(rawVal) >= Number(target) && Number(rawVal) <= Number(targetTo);\n case DynamicDataFilterOperator.In:\n return Array.isArray(target)\n ? target.some((t) => String(t).toLowerCase() === String(rawVal).toLowerCase())\n : false;\n default:\n return true;\n }\n }\n}","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n ColumnFilterConfig,\n ColumnFilterState,\n DynamicDataFilterOperator,\n EnumFilterOption,\n FilterDataType,\n} from '../../types/filter.type';\nimport { NGX_TABLE_I18N } from '../../tokens/table-config.token';\n\n@Component({\n selector: 'ngx-column-filter',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './column-filter.html',\n styleUrl: './column-filter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxColumnFilter {\n protected readonly labels = inject(NGX_TABLE_I18N);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly tableEl = input.required<ElementRef<HTMLElement>>();\n readonly field = input.required<string>();\n readonly config = input<ColumnFilterConfig>();\n readonly currentFilter = input<ColumnFilterState | null>(null);\n readonly distinctValues = input<unknown[]>([]);\n\n readonly applyFilter = output<ColumnFilterState>();\n readonly clearFilter = output<string>();\n\n protected readonly isOpen = signal(false);\n protected readonly filterType = computed<FilterDataType>(() => this.config()?.type ?? 'text');\n\n protected readonly selectedOperator = signal<DynamicDataFilterOperator>(\n DynamicDataFilterOperator.Contains,\n );\n protected readonly filterValue = signal<any>('');\n protected readonly filterValueTo = signal<any>('');\n protected readonly selectedEnumValues = signal<Set<any>>(new Set());\n protected readonly enumSearchQuery = signal<string>('');\n\n protected readonly operators = computed(() => {\n const type = this.filterType();\n const l = this.labels;\n\n if (type === 'number') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opNotEqual, value: DynamicDataFilterOperator.NotEqual },\n { label: l.opGreaterThan, value: DynamicDataFilterOperator.GreaterThan },\n { label: l.opGreaterThanOrEqual, value: DynamicDataFilterOperator.GreaterThanOrEqual },\n { label: l.opLessThan, value: DynamicDataFilterOperator.LessThan },\n { label: l.opLessThanOrEqual, value: DynamicDataFilterOperator.LessThanOrEqual },\n { label: l.opBetween, value: DynamicDataFilterOperator.Between },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n if (type === 'date') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opGreaterThan, value: DynamicDataFilterOperator.GreaterThan },\n { label: l.opLessThan, value: DynamicDataFilterOperator.LessThan },\n { label: l.opBetween, value: DynamicDataFilterOperator.Between },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n if (type === 'boolean') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n // Default: text\n return [\n { label: l.opContains, value: DynamicDataFilterOperator.Contains },\n { label: l.opStartsWith, value: DynamicDataFilterOperator.StartsWith },\n { label: l.opEndsWith, value: DynamicDataFilterOperator.EndsWith },\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opNotEqual, value: DynamicDataFilterOperator.NotEqual },\n { label: l.opIsEmpty, value: DynamicDataFilterOperator.IsEmpty },\n { label: l.opIsNotEmpty, value: DynamicDataFilterOperator.IsNotEmpty },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n });\n\n protected readonly enumOptions = computed<EnumFilterOption[]>(() => {\n const cfg = this.config();\n if (cfg?.options && cfg.options.length > 0) return cfg.options;\n\n const values = this.distinctValues();\n return values\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => ({ label: String(v), value: v }));\n });\n\n protected readonly filteredEnumOptions = computed(() => {\n const q = this.enumSearchQuery().trim().toLowerCase();\n const opts = this.enumOptions();\n if (!q) return opts;\n return opts.filter((o) => o.label.toLowerCase().includes(q));\n });\n\n protected readonly isNoValueOperator = computed(() => {\n const op = this.selectedOperator();\n return [\n DynamicDataFilterOperator.IsNull,\n DynamicDataFilterOperator.IsNotNull,\n DynamicDataFilterOperator.IsEmpty,\n DynamicDataFilterOperator.IsNotEmpty,\n ].includes(op);\n });\n\n protected toggleDropdown(event: MouseEvent): void {\n event.stopPropagation();\n const nextState = !this.isOpen();\n if (nextState) {\n this.syncStateFromInput();\n this.isOpen.set(true);\n this.updatePosition();\n } else {\n this.isOpen.set(false);\n }\n }\n\n updatePosition(): void {\n if (!this.isOpen()) return;\n\n setTimeout(() => {\n const popover: HTMLDivElement | null =\n this.elementRef.nativeElement.querySelector('.filter-popover');\n if (!popover) return;\n\n // پیدا کردن کانتینر اسکرول جدول\n const containerEl =\n this.tableEl()?.nativeElement ??\n this.elementRef.nativeElement.closest('.ngx-table-scroll') ??\n this.elementRef.nativeElement.closest('.ngx-table-wrapper');\n\n if (!containerEl) {\n popover.style.visibility = 'visible';\n return;\n }\n\n // ۱. ریست کردن ترنسفورم قبلی تا موقعیت واقعی بدون تغییر سنجیده شود\n popover.style.transform = 'none';\n\n const rect = popover.getBoundingClientRect();\n const container = containerEl.getBoundingClientRect();\n const margin = 6; // فاصله ایمن از لبه جدول\n\n let x = 0;\n const threshold = 10;\n // اگر از لبه سمت راست کانتینر بیرون زده باشد (حالت ستون‌های آخر):\n if (rect.right > container.right - margin) {\n // شیفت به سمت چپ (مقدار منفی)\n x = container.right - margin - rect.right - threshold;\n }\n // اگر از لبه سمت چپ بیرون زده باشد:\n else if (rect.left < container.left + margin) {\n // شیفت به سمت راست (مقدار مثبت)\n x = container.left + margin - rect.left + threshold;\n }\n\n // اطمینان از اینکه شیفت به چپ، باعث خروج از سمت چپ کانتینر نشود\n if (rect.left + x < container.left + margin) {\n x = container.left + margin - rect.left;\n }\n\n // ۲. اعمال جابجایی\n if (x !== 0) {\n popover.style.transform = `translateX(${Math.round(x)}px)`;\n } else {\n popover.style.transform = 'none';\n }\n\n // ۳. نمایش پاپ‌آپ پس از تنظیم موقعیت بدون پرش تصویر (Flicker)\n popover.style.visibility = 'visible';\n }, 0);\n }\n\n private syncStateFromInput(): void {\n const cur = this.currentFilter();\n const type = this.filterType();\n\n if (cur) {\n this.selectedOperator.set(cur.operator);\n if (type === 'enum' && Array.isArray(cur.value)) {\n this.selectedEnumValues.set(new Set(cur.value));\n } else {\n this.filterValue.set(cur.value ?? '');\n this.filterValueTo.set(cur.valueTo ?? '');\n }\n } else {\n const defaultOp =\n this.config()?.defaultOperator ??\n (type === 'number' || type === 'date' || type === 'boolean'\n ? DynamicDataFilterOperator.Equal\n : DynamicDataFilterOperator.Contains);\n this.selectedOperator.set(defaultOp);\n this.filterValue.set('');\n this.filterValueTo.set('');\n if (type === 'enum') {\n this.selectedEnumValues.set(new Set(this.enumOptions().map((o) => o.value)));\n }\n }\n }\n\n protected onApply(): void {\n const type = this.filterType();\n let value = this.filterValue();\n let operator = this.selectedOperator();\n\n if (type === 'enum') {\n operator = DynamicDataFilterOperator.In;\n value = Array.from(this.selectedEnumValues());\n }\n\n this.applyFilter.emit({\n field: this.field(),\n operator,\n value,\n valueTo:\n this.selectedOperator() === DynamicDataFilterOperator.Between\n ? this.filterValueTo()\n : undefined,\n });\n this.isOpen.set(false);\n }\n\n protected onClear(): void {\n this.filterValue.set('');\n this.filterValueTo.set('');\n this.selectedEnumValues.set(new Set());\n this.clearFilter.emit(this.field());\n this.isOpen.set(false);\n }\n\n protected toggleEnumSelection(val: any): void {\n const current = new Set(this.selectedEnumValues());\n if (current.has(val)) current.delete(val);\n else current.add(val);\n this.selectedEnumValues.set(current);\n }\n\n protected toggleSelectAll(checked: boolean): void {\n if (checked) {\n this.selectedEnumValues.set(new Set(this.enumOptions().map((o) => o.value)));\n } else {\n this.selectedEnumValues.set(new Set());\n }\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n if (this.isOpen() && !this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.isOpen.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen()) this.isOpen.set(false);\n }\n}\n","<div class=\"ngx-col-filter\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"filter-trigger\"\n [class.active]=\"!!currentFilter()\"\n [title]=\"labels.filter\"\n (click)=\"toggleDropdown($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" class=\"funnel-icon\">\n <path\n fill=\"currentColor\"\n d=\"M3.9 54.9C10.5 36.5 28 24 47.6 24H464.4c19.6 0 37.1 12.5 43.7 30.9c6.6 18.4 0 38.8-16.1 49.9L320 223.5V432c0 13.5-8.4 25.5-21.1 30.2s-27 1.1-35.8-9.1l-64-75.1c-4.7-5.5-7.1-12.6-7.1-19.8V223.5L4.1 104.8C-1.9 93.7-2.6 73.3 3.9 54.9z\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"filter-popover\" role=\"dialog\">\n @if (filterType() !== 'enum') {\n <div class=\"filter-section\">\n <label class=\"filter-label\">{{ labels.filter }}:</label>\n <select\n class=\"filter-select\"\n [ngModel]=\"selectedOperator()\"\n (ngModelChange)=\"selectedOperator.set($event)\">\n @for (op of operators(); track op.value) {\n <option [ngValue]=\"op.value\">{{ op.label }}</option>\n }\n </select>\n </div>\n\n @if (!isNoValueOperator()) {\n <div class=\"filter-section\">\n @if (filterType() === 'number') {\n <input\n type=\"number\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n @if (selectedOperator() === 9) {\n <input\n type=\"number\"\n class=\"filter-input mt-1\"\n [placeholder]=\"labels.to\"\n [ngModel]=\"filterValueTo()\"\n (ngModelChange)=\"filterValueTo.set($event)\" />\n }\n } @else if (filterType() === 'date') {\n <input\n type=\"date\"\n class=\"filter-input\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n @if (selectedOperator() === 9) {\n <input\n type=\"date\"\n class=\"filter-input mt-1\"\n [ngModel]=\"filterValueTo()\"\n (ngModelChange)=\"filterValueTo.set($event)\" />\n }\n } @else if (filterType() === 'boolean') {\n <select\n class=\"filter-select\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\">\n <option [ngValue]=\"true\">{{ labels.trueText }}</option>\n <option [ngValue]=\"false\">{{ labels.falseText }}</option>\n </select>\n } @else {\n <input\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n }\n </div>\n }\n } @else {\n <!-- Excel-like Set Filter (Enum) -->\n <div class=\"filter-section\">\n <input\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"enumSearchQuery()\"\n (ngModelChange)=\"enumSearchQuery.set($event)\" />\n </div>\n <div class=\"filter-set-list\">\n <label class=\"filter-set-item font-bold\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedEnumValues().size === enumOptions().length\"\n (change)=\"toggleSelectAll($any($event.target).checked)\" />\n <span>({{ labels.selectAll }})</span>\n </label>\n @for (opt of filteredEnumOptions(); track opt.value) {\n <label class=\"filter-set-item\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedEnumValues().has(opt.value)\"\n (change)=\"toggleEnumSelection(opt.value)\" />\n <span>{{ opt.label }}</span>\n </label>\n }\n </div>\n }\n\n <div class=\"filter-actions\">\n <button type=\"button\" class=\"btn-clear\" (click)=\"onClear()\">\n {{ labels.clearFilter }}\n </button>\n <button type=\"button\" class=\"btn-apply\" (click)=\"onApply()\">\n {{ labels.applyFilter }}\n </button>\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n QueryList,\n signal,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TableCell } from '../../directives/table-cell.directive';\nimport { ColumnResize } from '../../directives/column-resize.directive';\nimport { NGX_TABLE_CONFIG, NGX_TABLE_I18N } from '../../tokens/table-config.token';\nimport { NGX_PAGINATION_CONFIG } from '../../tokens/pagination-config.token';\nimport { PageEvent, LazyLoadEvent } from '../../types/page.types';\nimport { SortDirection, SortMeta } from '../../types/sort.types';\nimport {\n CellRendererComponent,\n CellTemplateContext,\n TableField,\n} from '../../types/table-field.types';\nimport { NgxPagination } from '../pagination/pagination';\nimport { DirectionService } from 'ngx-kit/core';\nimport type { ColumnFilterState } from '../../types/filter.type';\nimport { ColumnFilterService } from '../../services/column-filter.service';\nimport { NgxColumnFilter } from '../column-filter/column-filter';\n\n@Component({\n selector: 'ngx-table',\n standalone: true,\n templateUrl: './table.html',\n styleUrl: './table.scss',\n imports: [CommonModule, NgxPagination, ColumnResize, NgxColumnFilter],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngx-table-host',\n '[style.--ngx-table-scroll-height]': 'height()',\n },\n})\nexport class NgxTable<T extends object> implements OnInit, AfterContentInit {\n protected readonly config = inject(NGX_TABLE_CONFIG);\n protected readonly labels = inject(NGX_TABLE_I18N);\n protected readonly paginationConfig = inject(NGX_PAGINATION_CONFIG);\n protected readonly columnFilterService = inject(ColumnFilterService);\n\n // ---------------------------------------------------------------- inputs\n readonly fields = input.required<TableField<T, any>[]>();\n readonly data = input.required<readonly T[]>();\n readonly totalRecords = input.required<number>();\n readonly showRecordNumber = input(this.config.showRecordNumber);\n readonly operations = input<TemplateRef<{ $implicit: T }>>();\n readonly operationWidth = input(80);\n readonly numWidth = input(80);\n readonly pageSize = input(this.paginationConfig.defaultPageSize);\n readonly page = input(1);\n readonly pageChange = output<number>();\n readonly loading = input(false);\n readonly multiSort = input<boolean | undefined>(undefined);\n readonly lazy = input(this.config.lazy);\n readonly resizable = input(this.config.resizable);\n readonly height = input<string>('75dvh');\n readonly trackBy = input<(index: number, row: T) => unknown>((index) => index);\n\n // --------------------------------------------------------------- outputs\n readonly lazyLoad = output<LazyLoadEvent<T>>();\n readonly sortChange = output<SortMeta<T>[]>();\n readonly columnResize = output<{ field: string; width: number }>();\n readonly filterChange = output<ColumnFilterState[]>();\n\n // ------------------------------------------------------------ int. state\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly pageIndex = signal(1);\n protected readonly pageSizeS = signal(this.paginationConfig.defaultPageSize);\n protected readonly sorts = signal<SortMeta<T>[]>([]);\n protected readonly widths = signal<Record<string, number>>({});\n protected readonly activeFilters = signal<Record<string, ColumnFilterState>>({});\n private readonly manuallyResized = new Set<string>();\n private readonly rendererInputsCache = new Map<\n TableField<T, any>,\n WeakMap<T, Record<string, unknown>>\n >();\n\n @ContentChildren(TableCell) private cellTemplates!: QueryList<TableCell<T>>;\n private templateMap = new Map<string, TemplateRef<CellTemplateContext<T>>>();\n\n protected readonly resolvedMultiSort = computed(() => this.multiSort() ?? this.config.multiSort);\n private readonly directionService = inject(DirectionService);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly resolvedDirection = computed(() => this.directionService.direction());\n\n constructor() {\n effect(() => {\n this.pageSizeS.set(this.pageSize());\n this.pageIndex.set(this.page());\n });\n\n effect(() => {\n const cols = this.fields();\n const current = this.widths();\n let changed = false;\n const next = { ...current };\n for (const f of cols) {\n if (this.manuallyResized.has(f.column)) continue;\n if (f.column in next) continue;\n if (typeof f.width === 'number') {\n next[f.column] = f.width;\n changed = true;\n }\n }\n if (changed) this.widths.set(next);\n });\n }\n\n ngOnInit(): void {}\n\n ngAfterContentInit(): void {\n this.syncTemplateMap();\n this.cellTemplates.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.syncTemplateMap());\n }\n\n private syncTemplateMap(): void {\n this.templateMap.clear();\n this.cellTemplates.forEach((cell) => {\n this.templateMap.set(cell.column(), cell.templateRef);\n });\n }\n\n // ------------------------------------------------------------- داده‌ها (فیلتر ➔ سورت ➔ صفحه‌بندی)\n protected readonly filteredData = computed<readonly T[]>(() => {\n const raw = this.data();\n if (this.lazy()) return raw;\n return this.columnFilterService.applyFilters(raw, this.activeFilters());\n });\n\n protected readonly sortedData = computed<readonly T[]>(() => {\n const source = this.filteredData();\n if (this.lazy()) return source;\n const sorts = this.sorts();\n if (sorts.length === 0) return source;\n const copy = [...source];\n copy.sort((a, b) => {\n for (const s of sorts) {\n const cmp = this.compare(a[s.field], b[s.field]);\n if (cmp !== 0) return s.direction === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n return copy;\n });\n\n protected readonly totalCount = computed(() =>\n this.lazy() ? this.totalRecords() : this.filteredData().length,\n );\n\n protected readonly pagedData = computed<readonly T[]>(() => {\n if (this.lazy()) return this.sortedData();\n const start = (this.pageIndex() - 1) * this.pageSizeS();\n return this.sortedData().slice(start, start + this.pageSizeS());\n });\n\n private compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n }\n\n protected recordNumber(rowIndex: number): number {\n return (this.pageIndex() - 1) * this.pageSizeS() + rowIndex + 1;\n }\n\n // -------------------------------------------------------------- سورت\n protected sortDirectionFor(column: string): SortDirection | null {\n return this.sorts().find((s) => s.field === column)?.direction ?? null;\n }\n\n protected onHeaderClick(field: TableField<T, any>, event: MouseEvent): void {\n if (field.sortable === false) return;\n const column = field.column;\n const current = this.sorts();\n const existingIndex = current.findIndex((s) => s.field === column);\n const isMultiGesture =\n this.resolvedMultiSort() && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n let next: SortMeta<T>[];\n if (isMultiGesture) {\n next = [...current];\n if (existingIndex === -1) {\n next.push({ field: column, direction: 'asc' });\n } else if (next[existingIndex].direction === 'asc') {\n next[existingIndex] = { field: column, direction: 'desc' };\n } else {\n next.splice(existingIndex, 1);\n }\n } else if (existingIndex === -1 || current.length > 1) {\n next = [{ field: column, direction: 'asc' }];\n } else if (current[0].direction === 'asc') {\n next = [{ field: column, direction: 'desc' }];\n } else {\n next = [];\n }\n\n this.sorts.set(next);\n this.pageIndex.set(1);\n this.pageChange.emit(this.pageIndex());\n this.sortChange.emit(next);\n this.emitLazyIfNeeded();\n }\n\n // ------------------------------------------------------------ فیلتر\n protected isFilterable(field: TableField<T, any>): boolean {\n return field.filterable === true || !!field.filterConfig?.enabled;\n }\n\n protected getFilterState(column: string): ColumnFilterState | null {\n const f = this.activeFilters()[column];\n return this.columnFilterService.isFilterActive(f) ? f : null;\n }\n\n protected getDistinctValues(column: string): unknown[] {\n const raw = this.data();\n if (!raw || raw.length === 0) return [];\n return Array.from(new Set(raw.map((r: any) => r[column])));\n }\n\n protected onFilterApply(state: ColumnFilterState): void {\n this.activeFilters.update((prev) => ({ ...prev, [state.field]: state }));\n this.pageIndex.set(1);\n this.pageChange.emit(1);\n\n const activeList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.filterChange.emit(activeList);\n this.emitLazyIfNeeded();\n }\n\n protected onFilterClear(field: string): void {\n this.activeFilters.update((prev) => {\n const copy = { ...prev };\n delete copy[field];\n return copy;\n });\n this.pageIndex.set(1);\n this.pageChange.emit(1);\n\n const activeList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.filterChange.emit(activeList);\n this.emitLazyIfNeeded();\n }\n\n // ------------------------------------------------------------ صفحه‌بندی\n protected onPaginate(event: PageEvent): void {\n this.pageIndex.set(event.page);\n this.pageSizeS.set(event.pageSize);\n this.pageChange.emit(this.pageIndex());\n this.emitLazyIfNeeded();\n }\n\n private emitLazyIfNeeded(): void {\n if (!this.lazy()) return;\n const pageIndex = this.pageIndex();\n const pageSize = this.pageSizeS();\n const activeFilterList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.lazyLoad.emit({\n pageIndex,\n pageSize,\n first: (pageIndex - 1) * pageSize,\n sorts: this.sorts(),\n sorting: this.sorts()\n ?.map((s) => `${s.field} ${s.direction}`)\n .join(','),\n filters: activeFilterList,\n });\n }\n\n // -------------------------------------------------------------- ریسایز\n protected columnWidth(column: string): number {\n return this.widths()[column] ?? this.config.column.defaultWidth;\n }\n\n protected columnFlex(field: TableField<T, any>): string {\n const resized = this.widths()[field.column];\n if (resized != null) return `0 0 ${resized}px`;\n if (typeof field.width === 'string') return `0 0 ${field.width}`;\n return '1 1 0';\n }\n\n protected columnMin(field: TableField<T, any>): number {\n return field.minWidth ?? this.config.column.minWidth;\n }\n\n protected columnMax(field: TableField<T, any>): number {\n return field.maxWidth ?? this.config.column.maxWidth;\n }\n\n protected isResizable(field: TableField<T, any>): boolean {\n return (field.resizable ?? this.resizable()) !== false;\n }\n\n protected onColumnResizing(column: string, width: number): void {\n this.widths.update((w) => ({ ...w, [column]: width }));\n }\n\n protected onColumnResizeEnd(column: string, width: number): void {\n this.manuallyResized.add(column);\n this.widths.update((w) => ({ ...w, [column]: width }));\n this.columnResize.emit({ field: column, width });\n }\n\n // --------------------------------------------------------------- سلول‌ها\n protected getTemplate(column: string): TemplateRef<CellTemplateContext<T>> | null {\n const fromDirective = this.templateMap.get(column);\n if (fromDirective) return fromDirective;\n const fromFieldConfig = this.fields().find((f) => f.column === column)?.cellTemplate;\n return fromFieldConfig ?? null;\n }\n\n protected getRenderer(field: TableField<T, any>): Type<CellRendererComponent> | null {\n if (!field.renderer) return null;\n return this.config.renderers[field.renderer as string] ?? null;\n }\n\n protected getCellValue(row: T, field: TableField<T, any>): unknown {\n return row[field.column];\n }\n\n protected formatCellValue(row: T, field: TableField<T, any>): string {\n const value = this.getCellValue(row, field);\n if (typeof field.formatter === 'function') {\n return this.stringify(field.formatter(value, row, field));\n }\n if (typeof field.formatter === 'string') {\n const formatter = this.config.formatters[field.formatter];\n if (formatter) return this.stringify(formatter(value, row, field));\n }\n return this.stringify(value);\n }\n\n private stringify(value: unknown): string {\n return value == null ? '' : String(value);\n }\n\n protected getRendererInputs(row: T, field: TableField<T, any>): Record<string, unknown> {\n let fieldCache = this.rendererInputsCache.get(field);\n if (!fieldCache) {\n fieldCache = new WeakMap();\n this.rendererInputsCache.set(field, fieldCache);\n }\n let inputs = fieldCache.get(row);\n if (!inputs) {\n inputs = {\n value: this.getCellValue(row, field),\n row,\n field,\n ...(field.renderer ? field.rendererInputs : undefined),\n };\n fieldCache.set(row, inputs);\n }\n return inputs;\n }\n}\n","<div class=\"ngx-table-wrapper\" [class.ngx-table--loading]=\"loading()\">\n <div class=\"ngx-table-scroll\">\n <div\n class=\"ngx-table\"\n [class.ngx-table--striped]=\"config.stripedRows\"\n [class.ngx-table--hover]=\"config.hoverable\"\n role=\"table\">\n <div class=\"thead-mrs\" [class.thead-mrs--sticky]=\"config.stickyHeader\" role=\"rowgroup\">\n <div class=\"tr-mrs\" role=\"row\">\n @if (operations()) {\n <div\n class=\"th-mrs operations\"\n role=\"columnheader\"\n [style.flex]=\"'0 0 ' + operationWidth() + 'px'\">\n {{ labels.operation }}\n </div>\n }\n @if (showRecordNumber()) {\n <div\n class=\"th-mrs operations\"\n role=\"columnheader\"\n [style.flex]=\"'0 0 ' + numWidth() + 'px'\">\n #\n </div>\n }\n\n @for (f of fields(); track f.column) {\n <div\n class=\"th-mrs\"\n role=\"columnheader\"\n [class.th-mrs--sortable]=\"f.sortable !== false\"\n [style.flex]=\"columnFlex(f)\"\n [attr.aria-sort]=\"\n sortDirectionFor(f.column) === 'asc'\n ? 'ascending'\n : sortDirectionFor(f.column) === 'desc'\n ? 'descending'\n : null\n \"\n (click)=\"onHeaderClick(f, $event)\">\n <span class=\"th-mrs__title\">{{ f.title }}</span>\n\n @if (f.sortable !== false) {\n <span class=\"sort-icon\" [class.active]=\"sortDirectionFor(f.column) !== null\">\n @if (sortDirectionFor(f.column) === 'asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H96V448c0 17.7 14.3 32 32 32s32-14.3 32-32V224h64c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\" />\n </svg>\n } @else if (sortDirectionFor(f.column) === 'desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M137.4 470.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H224V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V288H96c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\" />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l96 96c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H224v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V192H96c-12.9 0-24.6-7.8-29.6-19.8s-2.3-25.7 6.9-34.9l96-96zM32 400c0-17.7 14.3-32 32-32H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32z\"\n opacity=\".35\" />\n </svg>\n }\n </span>\n }\n\n @if (isFilterable(f)) {\n <ngx-column-filter\n [tableEl]=\"elementRef\"\n [field]=\"f.column\"\n [config]=\"f.filterConfig\"\n [currentFilter]=\"getFilterState(f.column)\"\n [distinctValues]=\"getDistinctValues(f.column)\"\n (applyFilter)=\"onFilterApply($event)\"\n (clearFilter)=\"onFilterClear($event)\"></ngx-column-filter>\n }\n\n @if (isResizable(f)) {\n <span\n ngxColumnResize\n [ngxColumnResizeWidth]=\"columnWidth(f.column)\"\n [ngxColumnResizeMin]=\"columnMin(f)\"\n [ngxColumnResizeMax]=\"columnMax(f)\"\n [ngxColumnResizeDir]=\"resolvedDirection()\"\n (resizing)=\"onColumnResizing(f.column, $event)\"\n (resizeEnd)=\"onColumnResizeEnd(f.column, $event)\"\n (click)=\"$event.stopPropagation()\"></span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"tbody-mrs\" role=\"rowgroup\">\n @if (!loading() && pagedData().length === 0) {\n <div class=\"no-data\">{{ labels.noData }}</div>\n }\n\n @for (row of pagedData(); track trackBy()($index, row); let rowIndex = $index) {\n <div class=\"tr-mrs\" role=\"row\">\n @if (operations()) {\n <div\n class=\"td-mrs operations\"\n role=\"cell\"\n [style.flex]=\"'0 0 ' + operationWidth() + 'px'\">\n <div class=\"cel\">\n <span class=\"cell-title\">{{ labels.operation }}:</span>\n <ng-container\n [ngTemplateOutlet]=\"operations()!\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-container>\n </div>\n </div>\n }\n\n @if (showRecordNumber()) {\n <div class=\"td-mrs operations\" role=\"cell\" [style.flex]=\"'0 0 ' + numWidth() + 'px'\">\n <div class=\"cel\">{{ recordNumber(rowIndex) }}</div>\n </div>\n }\n\n @for (f of fields(); track f.column) {\n @let template = getTemplate(f.column);\n @let renderer = getRenderer(f);\n\n <div class=\"td-mrs\" role=\"cell\" [style.flex]=\"columnFlex(f)\">\n <div class=\"cel\" [class.wrap]=\"f.wrap\">\n <span class=\"cell-title\">{{ f.title }}</span>\n\n @if (template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n row: row,\n value: getCellValue(row, f),\n rowIndex: rowIndex,\n field: f,\n }\"></ng-container>\n } @else if (renderer) {\n <ng-container\n *ngComponentOutlet=\"\n renderer;\n inputs: getRendererInputs(row, f)\n \"></ng-container>\n } @else {\n {{ formatCellValue(row, f) }}\n }\n\n @if (f.prefix) {\n <span>{{ f.prefix }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"loading-container\">\n <div class=\"loading\">{{ labels.loading }}</div>\n </div>\n }\n </div>\n</div>\n\n<ngx-pagination\n [page]=\"pageIndex()\"\n [pageSize]=\"pageSizeS()\"\n [total]=\"totalCount()\"\n (paginate)=\"onPaginate($event)\"></ngx-pagination>\n","// types\nexport * from './types/sort.types';\nexport * from './types/page.types';\nexport * from './types/pagination.types';\nexport * from './types/table-field.types';\nexport * from './types/table-options.types';\nexport * from './types/filter.type';\n\n// tokens\nexport * from './tokens/table-config.token';\nexport * from './tokens/pagination-config.token';\n\n// providers\nexport * from './providers/provide-table';\nexport * from './providers/provide-pagination';\n\n// directives\nexport * from './directives/table-cell.directive';\nexport * from './directives/column-resize.directive';\n\n// components\nexport * from './components/table/table';\nexport * from './components/pagination/pagination';\nexport * from './components/column-filter/column-filter';\n\n// services\nexport * from './services/column-filter.service';\n\n// localizations\nexport * from './localization/pagination.localization';\nexport * from './localization/table.localization';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-kit-data-table.mjs","sources":["../../../projects/libs/data-table/types/table-field.types.ts","../../../projects/libs/data-table/types/filter.type.ts","../../../projects/libs/data-table/tokens/defaults.ts","../../../projects/libs/data-table/localization/table.localization.ts","../../../projects/libs/data-table/tokens/table-config.token.ts","../../../projects/libs/data-table/localization/pagination.localization.ts","../../../projects/libs/data-table/tokens/pagination-config.token.ts","../../../projects/libs/data-table/providers/provide-table.ts","../../../projects/libs/data-table/providers/provide-pagination.ts","../../../projects/libs/data-table/directives/table-cell.directive.ts","../../../projects/libs/data-table/directives/column-resize.directive.ts","../../../projects/libs/data-table/components/pagination/pagination.ts","../../../projects/libs/data-table/components/pagination/pagination.html","../../../projects/libs/data-table/services/column-filter.service.ts","../../../projects/libs/data-table/components/column-filter/column-filter.ts","../../../projects/libs/data-table/components/column-filter/column-filter.html","../../../projects/libs/data-table/components/table/table.ts","../../../projects/libs/data-table/components/table/table.html","../../../projects/libs/data-table/public-api.ts","../../../projects/libs/data-table/ngx-kit-data-table.ts"],"sourcesContent":["import { InputSignal, TemplateRef, Type } from '@angular/core';\nimport type { ColumnFilterConfig } from './filter.type';\n\n// ----------------------------------------------------------------------------\n// قرارداد پایه‌ای که هر کامپوننت رندرر باید پیاده‌سازی کند.\n// value/row/field همیشه توسط جدول پر می‌شوند؛ هر ورودی دیگری که renderer\n// اضافه کند (مثل nameField در AvatarCellRenderer) به‌صورت خودکار استخراج و\n// در rendererInputs همان ستون در دسترس/چک می‌شود.\n// ----------------------------------------------------------------------------\nexport interface CellRendererComponent<TValue = unknown, TRow extends object = object> {\n value: InputSignal<TValue>;\n row: InputSignal<TRow>;\n field: InputSignal<TableFieldBase<TRow>>;\n}\n\nexport type RendererRegistry = Readonly<Record<string, Type<CellRendererComponent<any, any>>>>;\n\n/**\n * Identity helper: یک رجیستری رندرر را با inference کامل تعریف می‌کند.\n * همین آبجکت باید هم در provideTable({ renderers }) و هم در defineFields(renderers, ...)\n * استفاده شود تا کلیدها (و ورودی‌های اضافه‌ی هر رندرر) در کل پروژه type-check شوند.\n */\nexport function defineRenderers<R extends RendererRegistry>(registry: R): R {\n return registry;\n}\n\n// ----------------------------------------------------------------------------\n// استخراج ورودی‌های اضافه‌ی هر رندرر مستقیماً از روی خودِ کلاس کامپوننت، بدون\n// این‌که کاربر مجبور باشد آن‌ها را جای دیگری دوباره تایپ کند.\n// نکته: فقط اعضای «public» و «قابل فراخوانی بدون آرگومان» (شکل InputSignal/Signal)\n// در نظر گرفته می‌شوند؛ اعضای protected/private به‌طور خودکار (توسط خودِ\n// TypeScript) از keyof حذف می‌شوند. توصیه: هر computed/derived داخلی در\n// کامپوننت‌های رندرر را protected تعریف کنید تا اشتباهاً به‌عنوان ورودی قابل\n// تنظیم دیده نشود. متدهای عمومی بدون آرگومان (نادر) هم می‌توانند اشتباهاً در\n// این استخراج ظاهر شوند؛ چنین متدهایی را protected/private کنید.\n// ----------------------------------------------------------------------------\ntype InstanceOf<C> = C extends Type<infer I> ? I : never;\ntype UnwrapSignal<S> = S extends () => infer V ? V : never;\n\nexport type RendererExtraInputs<C extends Type<any>> = {\n [\n K in keyof InstanceOf<C> as K extends 'value' | 'row' | 'field'\n ? never\n : InstanceOf<C>[K] extends () => any\n ? K\n : never\n ]?: UnwrapSignal<InstanceOf<C>[K]>;\n};\n\n// ----------------------------------------------------------------------------\n// تعریف ستون‌ها\n// ----------------------------------------------------------------------------\nexport type ColumnAlign = 'start' | 'center' | 'end';\n\nexport type TableCellFormatter<T extends object = object> = (\n value: any,\n row: T,\n field: TableFieldBase<T>,\n) => any;\n\nexport interface CellTemplateContext<T extends object> {\n $implicit: T;\n row: T;\n value: unknown;\n rowIndex: number;\n field: TableFieldBase<T>;\n}\n\n/** شکل پایه‌ای مشترک بین همه‌ی ستون‌ها، صرف‌نظر از این‌که renderer دارند یا نه. */\nexport interface TableFieldBase<T extends object, K extends keyof T = keyof T> {\n column: Extract<keyof T, string>;\n title: string;\n /**\n * عرضِ این ستون. عدد یعنی پیکسل (`160` = `160px`)؛ رشته یعنی هر مقدار\n * معتبرِ CSS length برای flex-basis (`'20%'`, `'12rem'`, ...). اگه اصلاً\n * ندید، این ستون flex می‌شه (`flex: 1 1 0`) و فضای باقی‌مونده‌ی جدول رو پر\n * می‌کنه — دقیقاً برخلافِ ستون‌هایی که width دارن (که `flex: 0 0 <width>`\n * می‌گیرن و ثابت می‌مونن).\n */\n width?: number | string;\n minWidth?: number;\n maxWidth?: number;\n resizable?: boolean;\n sortable?: boolean;\n wrap?: boolean;\n align?: ColumnAlign;\n prefix?: string;\n formatter?: string | TableCellFormatter<T>;\n filterable?: boolean;\n filterConfig?: ColumnFilterConfig<T[K]>;\n}\n\n/** ستون بدون renderer (متن ساده / formatter / cellTemplate دستی). */\nexport interface PlainTableField<T extends object> extends TableFieldBase<T> {\n renderer?: undefined;\n rendererInputs?: undefined;\n cellTemplate?: TemplateRef<CellTemplateContext<T>>;\n}\n\n/** ستونی که یک renderer از رجیستری R انتخاب کرده؛ rendererInputs دقیقاً همان\n * ورودی‌های اضافه‌ی همان renderer است — نه یک Record<string, unknown> آزاد. */\nexport type RenderedTableField<T extends object, R extends RendererRegistry> = {\n [K in keyof R]: TableFieldBase<T> & {\n renderer: K;\n rendererInputs?: RendererExtraInputs<R[K]>;\n cellTemplate?: undefined;\n };\n}[keyof R];\n\nexport type TableField<T extends object, R extends RendererRegistry = {}> =\n PlainTableField<T> | RenderedTableField<T, R>;\n\n/**\n * Identity helper برای تعریف ستون‌های یک جدول با inference و type-check کامل\n * نسبت به هم مدل داده (T) و هم رجیستری رندررها (R).\n *\n * @example\n * const renderers = defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer });\n *\n * const fields = defineFields<Tenant, typeof renderers>(renderers, [\n * { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: true } }, // ✅\n * { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: 'x' } }, // ❌ باید boolean باشد\n * { column: 'isActive', title: 'فعال', renderer: 'bool' }, // ❌ کلید رجیستری نیست\n * { column: 'ageXYZ', title: '...' }, // ❌ فیلد Tenant نیست\n * ]);\n */\nexport function defineFields<T extends object, R extends RendererRegistry = {}>(\n _renderers: R,\n fields: TableField<T, R>[],\n): TableField<T, R>[] {\n return fields;\n}\n","export enum DynamicDataFilterOperator {\n Equal = 0,\n NotEqual = 1,\n Contains = 2,\n StartsWith = 3,\n EndsWith = 4,\n GreaterThan = 5,\n GreaterThanOrEqual = 6,\n LessThan = 7,\n LessThanOrEqual = 8,\n Between = 9,\n In = 10,\n IsNull = 11,\n IsNotNull = 12,\n IsEmpty = 13,\n IsNotEmpty = 14,\n}\n\nexport type FilterDataType = 'text' | 'number' | 'date' | 'boolean' | 'enum';\n\nexport interface EnumFilterOption<T = unknown> {\n label: string;\n value: T;\n}\n\nexport interface ColumnFilterConfig<T = unknown> {\n type?: FilterDataType;\n enabled?: boolean;\n options?: EnumFilterOption<T>[];\n placeholder?: string;\n defaultOperator?: DynamicDataFilterOperator;\n}\n\nexport interface ColumnFilterState {\n field: string;\n operator: DynamicDataFilterOperator;\n value: any;\n valueTo?: any; // for Between operator\n values?: any[]; // for In operator\n}\n","import type { NgxPaginationOptions } from '../types/pagination.types';\nimport type { ResolvedTableOptions } from '../types/table-options.types';\n\nexport const NGX_PAGINATION_CONFIG_DEFAULT: NgxPaginationOptions = {\n defaultPageSize: 10,\n pageSizeOptions: [5, 10, 20, 30, 50, 100],\n};\nexport const NGX_TABLE_CONFIG_DEFAULT: ResolvedTableOptions = {\n showRecordNumber: false,\n hoverable: true,\n multiSort: true,\n resizable: true,\n stickyHeader: true,\n stripedRows: true,\n column: { minWidth: 60, maxWidth: 600, defaultWidth: 150 },\n\n renderers: {},\n formatters: {},\n lazy: false,\n};\n","export class TableLocalization {\n noData = 'There is no data to display!';\n loading = 'Loading...';\n operation = 'Operation';\n\n // Filters\n filter = 'Filter';\n clearFilter = 'Clear';\n applyFilter = 'Apply';\n search = 'Search...';\n selectAll = 'Select All';\n from = 'From';\n to = 'To';\n trueText = 'Yes';\n falseText = 'No';\n\n // Operators\n opEqual = 'Equals';\n opNotEqual = 'Does not equal';\n opContains = 'Contains';\n opStartsWith = 'Starts with';\n opEndsWith = 'Ends with';\n opGreaterThan = 'Greater than';\n opGreaterThanOrEqual = 'Greater than or equal';\n opLessThan = 'Less than';\n opLessThanOrEqual = 'Less than or equal';\n opBetween = 'Between';\n opIsNull = 'Is null';\n opIsNotNull = 'Is not null';\n opIsEmpty = 'Is empty';\n opIsNotEmpty = 'Is not empty';\n}","import { InjectionToken } from '@angular/core';\nimport { ResolvedTableOptions } from '../types/table-options.types';\nimport { NGX_TABLE_CONFIG_DEFAULT } from './defaults';\nimport { TableLocalization } from '../localization/table.localization';\n\nexport const NGX_TABLE_CONFIG = new InjectionToken<ResolvedTableOptions>('NGX_TABLE_CONFIG', {\n factory: () => NGX_TABLE_CONFIG_DEFAULT,\n});\n\nexport const NGX_TABLE_I18N = new InjectionToken<TableLocalization>('NGX_TABLE_I18N', {\n factory: () => new TableLocalization(),\n});\n","export class PaginationLocalization {\n first = 'First';\n last = 'Last';\n next = 'Next';\n previous = 'Previous';\n showing = 'Showing';\n to = 'to';\n of = 'of';\n results = 'results';\n pageSize = 'Page Size';\n}\n","import { InjectionToken } from '@angular/core';\nimport { NgxPaginationOptions } from '../types/pagination.types';\nimport { NGX_PAGINATION_CONFIG_DEFAULT } from './defaults';\nimport { PaginationLocalization } from '../localization/pagination.localization';\n\nexport const NGX_PAGINATION_CONFIG = new InjectionToken<NgxPaginationOptions>(\n 'NGX_PAGINATION_CONFIG',\n {\n factory: () => NGX_PAGINATION_CONFIG_DEFAULT,\n },\n);\n\nexport const NGX_PAGINATION_I18N = new InjectionToken<PaginationLocalization>(\n 'NGX_PAGINATION_I18N',\n {\n factory: () => new PaginationLocalization(),\n },\n);\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NGX_TABLE_CONFIG } from '../tokens/table-config.token';\nimport { NgxTableOptions, ResolvedTableOptions } from '../types/table-options.types';\nimport { NGX_TABLE_CONFIG_DEFAULT } from '../tokens/defaults';\n\nfunction mergeTableConfig(\n base: ResolvedTableOptions,\n override?: NgxTableOptions,\n): ResolvedTableOptions {\n if (!override) return base;\n return {\n ...base,\n ...override,\n column: { ...base.column, ...override.column },\n renderers: { ...base.renderers, ...override.renderers },\n formatters: { ...base.formatters, ...override.formatters },\n };\n}\n\n/**\n * کانفیگ سراسری <ngx-table>: جهت پیش‌فرض، حداقل/حداکثر عرض ستون، فعال بودن\n * پیش‌فرض سورت چندستونه، و از همه مهم‌تر رجیستری رندررها.\n *\n * @example\n * provideTable({\n * renderers: defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer }),\n * column: { minWidth: 80, maxWidth: 480, defaultWidth: 160 },\n * })\n */\nexport function provideTable(options?: NgxTableOptions): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NGX_TABLE_CONFIG, useValue: mergeTableConfig(NGX_TABLE_CONFIG_DEFAULT, options) },\n ]);\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { NGX_PAGINATION_CONFIG } from '../tokens/pagination-config.token';\nimport { NgxPaginationOptions } from '../types/pagination.types';\nimport { NGX_PAGINATION_CONFIG_DEFAULT } from '../tokens/defaults';\n\nfunction mergePaginationConfig(\n base: NgxPaginationOptions,\n override?: Partial<NgxPaginationOptions>,\n): NgxPaginationOptions {\n if (!override) return base;\n return {\n ...base,\n ...override,\n };\n}\n\nexport function providePagination(options?: Partial<NgxPaginationOptions>): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_PAGINATION_CONFIG,\n useValue: mergePaginationConfig(NGX_PAGINATION_CONFIG_DEFAULT, options),\n },\n ]);\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\nimport { CellTemplateContext } from '../types/table-field.types';\n\n/**\n * برای projection قالب سفارشی یک ستون بدون این‌که مجبور باشید cellTemplate را\n * از طریق ViewChild به آبجکت ستون وصل کنید:\n *\n * <ngx-table [fields]=\"fields\" [data]=\"rows()\">\n * <ng-template ngxTableCell=\"userName\" let-row let-value=\"value\">\n * <strong>{{ value }}</strong>\n * </ng-template>\n * </ngx-table>\n *\n * مهم: چون این دایرکتیو در تمپلیت *کامپوننت مصرف‌کننده* (نه ngx-table) استفاده\n * می‌شود، باید آن را در آرایه‌ی imports همان کامپوننت (standalone) وارد کنید:\n * imports: [NgxTable, TableCell]\n *\n * محدودیت شناخته‌شده: context این تمپلیت (row/value) از نوع T دقیق نیست\n * (چون TemplateRef اینجا به‌صورت پویا از ContentChildren جمع‌آوری می‌شود و\n * اطلاعات جنریک T در آن نقطه از بین می‌رود). برای type-safety کامل روی\n * row/value، از field.cellTemplate به همراه @ViewChild استفاده کنید (به README\n * بخش «Cell Template کاملاً Type-Safe» مراجعه کنید).\n */\n@Directive({\n selector: 'ng-template[ngxTableCell]',\n standalone: true,\n})\nexport class TableCell<T extends object = object> {\n readonly column = input.required<string>({ alias: 'ngxTableCell' });\n readonly templateRef = inject(TemplateRef<CellTemplateContext<T>>);\n}\n","import { Directive, ElementRef, HostListener, inject, input, output } from '@angular/core';\n\n/**\n * دستگیره‌ی درگ برای ریسایز ستون. روی لبه‌ی «انتهای منطقی» (inline-end) قرار\n * می‌گیرد، یعنی خودش زیر [dir=\"rtl\"] جابه‌جا می‌شود؛ فقط جهت محاسبه‌ی دلتا هم\n * برعکس می‌شود تا حس درگ همیشه طبیعی باشد.\n *\n * مقدار نهایی توسط جدول در یک Map از عرض‌ها ذخیره می‌شود (نه در استایل مستقیم\n * ستون)، به همراه علامت‌گذاری «دستی ریسایز شده» — یعنی بعد از این، هیچ\n * re-render یا تغییر داده‌ای این عرض را از بین نمی‌برد.\n */\n@Directive({\n selector: '[ngxColumnResize]',\n standalone: true,\n host: {\n class: 'ngx-table__resize-handle',\n role: 'separator',\n 'aria-orientation': 'vertical',\n },\n})\nexport class ColumnResize {\n readonly startWidth = input.required<number>({ alias: 'ngxColumnResizeWidth' });\n readonly minWidth = input<number>(40, { alias: 'ngxColumnResizeMin' });\n readonly maxWidth = input<number>(1000, { alias: 'ngxColumnResizeMax' });\n readonly direction = input<'ltr' | 'rtl'>('ltr', { alias: 'ngxColumnResizeDir' });\n\n readonly resizing = output<number>();\n readonly resizeEnd = output<number>();\n\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n\n private dragging = false;\n private startX = 0;\n private baseWidth = 0;\n\n @HostListener('pointerdown', ['$event'])\n onPointerDown(event: PointerEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragging = true;\n this.startX = event.clientX;\n // اندازه‌ی واقعیِ رندرشده‌ی ستون رو می‌گیریم، نه فقط input ورودی — چون\n // ستون‌هایی که width صریح ندارن (flex:1 1 0، فضای باقی‌مونده رو پر\n // می‌کنن) هیچ عرض عددیِ از‌پیش‌شناخته‌شده‌ای ندارن؛ تنها منبع درستِ\n // «عرض فعلی» برای شروع محاسبه‌ی درگ، خودِ DOM هست.\n const measured = this.elementRef.nativeElement.parentElement?.getBoundingClientRect().width;\n this.baseWidth = measured && measured > 0 ? measured : this.startWidth();\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n }\n\n @HostListener('pointermove', ['$event'])\n onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n this.resizing.emit(this.computeWidth(event.clientX));\n }\n\n @HostListener('pointerup', ['$event'])\n @HostListener('pointercancel', ['$event'])\n onPointerUp(event: PointerEvent): void {\n if (!this.dragging) return;\n this.dragging = false;\n this.resizeEnd.emit(this.computeWidth(event.clientX));\n }\n\n private computeWidth(clientX: number): number {\n const delta = clientX - this.startX;\n const signedDelta = this.direction() === 'rtl' ? -delta : delta;\n const raw = this.baseWidth + signedDelta;\n return Math.min(this.maxWidth(), Math.max(this.minWidth(), raw));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NGX_PAGINATION_CONFIG, NGX_PAGINATION_I18N } from '../../tokens/pagination-config.token';\nimport { PageEvent } from '../../types/page.types';\n\n@Component({\n selector: 'ngx-pagination',\n standalone: true,\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n imports: [FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxPagination {\n protected readonly config = inject(NGX_PAGINATION_CONFIG);\n protected readonly lables = inject(NGX_PAGINATION_I18N);\n\n readonly total = input.required<number>();\n\n readonly page = model(1);\n readonly pageSize = model(this.config.defaultPageSize);\n\n readonly pageSizeOptions = input(this.config.pageSizeOptions);\n readonly siblingCount = input(1);\n readonly boundaryCount = input(1);\n\n readonly paginate = output<PageEvent>();\n\n protected readonly totalPages = computed(() =>\n Math.max(1, Math.ceil(this.total() / this.pageSize())),\n );\n\n protected readonly firstItem = computed(() =>\n this.total() === 0 ? 0 : (this.page() - 1) * this.pageSize() + 1,\n );\n\n protected readonly lastItem = computed(() =>\n Math.min(this.firstItem() + this.pageSize() - 1, this.total()),\n );\n\n protected readonly pages = computed(() =>\n this.buildPages(this.page(), this.totalPages(), this.siblingCount(), this.boundaryCount()),\n );\n\n constructor() {\n // هر تغییری در page/pageSize را برای مصرف‌کننده امیت کن.\n effect(() => {\n this.paginate.emit({ page: this.page(), pageSize: this.pageSize() });\n });\n\n // اگر بعد از کوچک‌شدن total، صفحه‌ی جاری خارج از بازه افتاد، اصلاحش کن.\n effect(() => {\n const max = this.totalPages();\n if (this.page() > max) this.page.set(max);\n });\n }\n\n private buildPages(\n current: number,\n total: number,\n sibling = 1,\n boundary = 1,\n ): (number | string)[] {\n const range = (start: number, end: number) =>\n Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const totalNumbers = sibling * 2 + boundary * 2 + 3;\n if (total <= totalNumbers) return range(1, total);\n\n const leftSibling = Math.max(current - sibling, boundary + 2);\n const rightSibling = Math.min(current + sibling, total - boundary - 1);\n const showLeftDots = leftSibling > boundary + 2;\n const showRightDots = rightSibling < total - boundary - 1;\n\n const pages: (number | string)[] = [];\n pages.push(...range(1, boundary));\n if (showLeftDots) pages.push('...');\n else pages.push(...range(boundary + 1, leftSibling - 1));\n pages.push(...range(leftSibling, rightSibling));\n if (showRightDots) pages.push('...');\n else pages.push(...range(rightSibling + 1, total - boundary));\n pages.push(...range(total - boundary + 1, total));\n return pages;\n }\n\n protected next(): void {\n this.page.update((p) => Math.min(p + 1, this.totalPages()));\n }\n protected previous(): void {\n this.page.update((p) => Math.max(1, p - 1));\n }\n protected first(): void {\n this.page.set(1);\n }\n protected last(): void {\n this.page.set(this.totalPages());\n }\n protected goto(page: number): void {\n if (typeof page !== 'number' || Number.isNaN(page)) return;\n this.page.set(page);\n }\n protected onPageSizeChange(value: number): void {\n this.pageSize.set(Number(value));\n this.page.set(1);\n }\n}\n","<nav class=\"ngx-pagination\">\n <div class=\"ngx-pagination__summary\">\n {{ lables.showing }}\n <span class=\"fw-semibold\">{{ firstItem() }}</span>\n {{ lables.to }}\n <span class=\"fw-semibold\">{{ lastItem() }}</span>\n {{ lables.of }}\n <span class=\"fw-semibold\">{{ total() }}</span>\n {{ lables.results }}\n </div>\n\n <div class=\"ngx-pagination__controls\">\n <ul class=\"ngx-pagination__list\">\n <li [class.disabled]=\"page() === 1\" [title]=\"lables.first\">\n <a (click)=\"first()\" class=\"icon\">«</a>\n </li>\n <li [class.disabled]=\"page() === 1\" [title]=\"lables.previous\">\n <a (click)=\"previous()\" class=\"icon\">‹</a>\n </li>\n\n @for (item of pages(); track $index) {\n <li class=\"ngx-pagination__page-num\" [class.active]=\"item === page()\">\n @if (item !== page() && item !== '...') {\n <a (click)=\"goto(+item)\">{{ item }}</a>\n }\n @if (item === page() || item === '...') {\n <span>{{ item }}</span>\n }\n </li>\n }\n\n <li [class.disabled]=\"page() === totalPages()\" [title]=\"lables.next\">\n <a (click)=\"next()\" class=\"icon\">›</a>\n </li>\n <li [class.disabled]=\"page() === totalPages()\" [title]=\"lables.last\">\n <a (click)=\"last()\" class=\"icon\">»</a>\n </li>\n </ul>\n\n <div class=\"ngx-pagination__page-size\">\n <span>{{ lables.pageSize }}:</span>\n <select [ngModel]=\"pageSize()\" (ngModelChange)=\"onPageSizeChange($event)\">\n @for (opt of pageSizeOptions(); track opt) {\n <option [value]=\"opt\" [selected]=\"opt === pageSize()\">{{ opt }}</option>\n }\n </select>\n </div>\n </div>\n</nav>\n","import { Injectable } from '@angular/core';\nimport { ColumnFilterState, DynamicDataFilterOperator } from '../types/filter.type';\n\n@Injectable({ providedIn: 'root' })\nexport class ColumnFilterService {\n applyFilters<T>(data: readonly T[], filters: Record<string, ColumnFilterState>): T[] {\n const activeFilters = Object.values(filters).filter((f) => this.isFilterActive(f));\n if (activeFilters.length === 0) return [...data];\n\n return data.filter((item) =>\n activeFilters.every((filter) => this.evaluateFilter(item, filter)),\n );\n }\n\n isFilterActive(filter?: ColumnFilterState | null): boolean {\n if (!filter) return false;\n const { operator, value, valueTo, values } = filter;\n const noValueOps = [\n DynamicDataFilterOperator.IsNull,\n DynamicDataFilterOperator.IsNotNull,\n DynamicDataFilterOperator.IsEmpty,\n DynamicDataFilterOperator.IsNotEmpty,\n ];\n if (noValueOps.includes(operator)) return true;\n\n if (operator === DynamicDataFilterOperator.Between) {\n return (\n value !== undefined &&\n value !== null &&\n value !== '' &&\n valueTo !== undefined &&\n valueTo !== null &&\n valueTo !== ''\n );\n }\n\n if (operator === DynamicDataFilterOperator.In) {\n return Array.isArray(values) && values.length > 0;\n }\n\n return value !== undefined && value !== null && value !== '';\n }\n\n private evaluateFilter(item: any, filter: ColumnFilterState): boolean {\n const rawVal = item?.[filter.field];\n const op = filter.operator;\n const target = filter.value;\n const targetTo = filter.valueTo;\n const targets = filter.values;\n\n if (op === DynamicDataFilterOperator.IsNull) return rawVal === null || rawVal === undefined;\n if (op === DynamicDataFilterOperator.IsNotNull) return rawVal !== null && rawVal !== undefined;\n if (op === DynamicDataFilterOperator.IsEmpty)\n return rawVal === '' || rawVal === null || rawVal === undefined;\n if (op === DynamicDataFilterOperator.IsNotEmpty)\n return rawVal !== '' && rawVal !== null && rawVal !== undefined;\n\n if (rawVal === null || rawVal === undefined) return false;\n\n if (\n rawVal instanceof Date ||\n (typeof rawVal === 'string' && !isNaN(Date.parse(rawVal)) && isNaN(Number(rawVal)))\n ) {\n const itemTime = new Date(rawVal).getTime();\n const targetTime = target ? new Date(target as string).getTime() : NaN;\n const targetToTime = targetTo ? new Date(targetTo as string).getTime() : NaN;\n\n if (!isNaN(itemTime)) {\n switch (op) {\n case DynamicDataFilterOperator.Equal:\n return new Date(rawVal).toDateString() === new Date(target as string).toDateString();\n case DynamicDataFilterOperator.GreaterThan:\n return itemTime > targetTime;\n case DynamicDataFilterOperator.GreaterThanOrEqual:\n return itemTime >= targetTime;\n case DynamicDataFilterOperator.LessThan:\n return itemTime < targetTime;\n case DynamicDataFilterOperator.LessThanOrEqual:\n return itemTime <= targetTime;\n case DynamicDataFilterOperator.Between:\n return itemTime >= targetTime && itemTime <= targetToTime;\n }\n }\n }\n\n switch (op) {\n case DynamicDataFilterOperator.Equal:\n return String(rawVal).trim().toLowerCase() === String(target).trim().toLowerCase();\n case DynamicDataFilterOperator.NotEqual:\n return String(rawVal).trim().toLowerCase() !== String(target).trim().toLowerCase();\n case DynamicDataFilterOperator.Contains:\n return String(rawVal).toLowerCase().includes(String(target).toLowerCase());\n case DynamicDataFilterOperator.StartsWith:\n return String(rawVal).toLowerCase().startsWith(String(target).toLowerCase());\n case DynamicDataFilterOperator.EndsWith:\n return String(rawVal).toLowerCase().endsWith(String(target).toLowerCase());\n case DynamicDataFilterOperator.GreaterThan:\n return Number(rawVal) > Number(target);\n case DynamicDataFilterOperator.GreaterThanOrEqual:\n return Number(rawVal) >= Number(target);\n case DynamicDataFilterOperator.LessThan:\n return Number(rawVal) < Number(target);\n case DynamicDataFilterOperator.LessThanOrEqual:\n return Number(rawVal) <= Number(target);\n case DynamicDataFilterOperator.Between:\n return Number(rawVal) >= Number(target) && Number(rawVal) <= Number(targetTo);\n case DynamicDataFilterOperator.In:\n return Array.isArray(targets)\n ? targets.some((t) => String(t).toLowerCase() === String(rawVal).toLowerCase())\n : false;\n default:\n return true;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n computed,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n ColumnFilterConfig,\n ColumnFilterState,\n DynamicDataFilterOperator,\n EnumFilterOption,\n FilterDataType,\n} from '../../types/filter.type';\nimport { NGX_TABLE_I18N } from '../../tokens/table-config.token';\n\n@Component({\n selector: 'ngx-column-filter',\n standalone: true,\n imports: [CommonModule, FormsModule],\n templateUrl: './column-filter.html',\n styleUrl: './column-filter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxColumnFilter {\n protected readonly labels = inject(NGX_TABLE_I18N);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly tableEl = input.required<ElementRef<HTMLElement>>();\n readonly field = input.required<string>();\n readonly config = input<ColumnFilterConfig>();\n readonly currentFilter = input<ColumnFilterState | null>(null);\n readonly distinctValues = input<unknown[]>([]);\n\n readonly applyFilter = output<ColumnFilterState>();\n readonly clearFilter = output<string>();\n\n protected readonly isOpen = signal(false);\n protected readonly filterType = computed<FilterDataType>(() => this.config()?.type ?? 'text');\n\n protected readonly selectedOperator = signal<DynamicDataFilterOperator>(\n DynamicDataFilterOperator.Contains,\n );\n protected readonly filterValue = signal<any>('');\n protected readonly filterValueTo = signal<any>('');\n protected readonly selectedEnumValues = signal<Set<any>>(new Set());\n protected readonly enumSearchQuery = signal<string>('');\n\n protected readonly operators = computed(() => {\n const type = this.filterType();\n const l = this.labels;\n\n if (type === 'number') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opNotEqual, value: DynamicDataFilterOperator.NotEqual },\n { label: l.opGreaterThan, value: DynamicDataFilterOperator.GreaterThan },\n { label: l.opGreaterThanOrEqual, value: DynamicDataFilterOperator.GreaterThanOrEqual },\n { label: l.opLessThan, value: DynamicDataFilterOperator.LessThan },\n { label: l.opLessThanOrEqual, value: DynamicDataFilterOperator.LessThanOrEqual },\n { label: l.opBetween, value: DynamicDataFilterOperator.Between },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n if (type === 'date') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opGreaterThan, value: DynamicDataFilterOperator.GreaterThan },\n { label: l.opLessThan, value: DynamicDataFilterOperator.LessThan },\n { label: l.opBetween, value: DynamicDataFilterOperator.Between },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n if (type === 'boolean') {\n return [\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n }\n\n // Default: text\n return [\n { label: l.opContains, value: DynamicDataFilterOperator.Contains },\n { label: l.opStartsWith, value: DynamicDataFilterOperator.StartsWith },\n { label: l.opEndsWith, value: DynamicDataFilterOperator.EndsWith },\n { label: l.opEqual, value: DynamicDataFilterOperator.Equal },\n { label: l.opNotEqual, value: DynamicDataFilterOperator.NotEqual },\n { label: l.opIsEmpty, value: DynamicDataFilterOperator.IsEmpty },\n { label: l.opIsNotEmpty, value: DynamicDataFilterOperator.IsNotEmpty },\n { label: l.opIsNull, value: DynamicDataFilterOperator.IsNull },\n { label: l.opIsNotNull, value: DynamicDataFilterOperator.IsNotNull },\n ];\n });\n\n protected readonly enumOptions = computed<EnumFilterOption[]>(() => {\n const cfg = this.config();\n if (cfg?.options && cfg.options.length > 0) return cfg.options;\n\n const values = this.distinctValues();\n return values\n .filter((v) => v !== null && v !== undefined && v !== '')\n .map((v) => ({ label: String(v), value: v }));\n });\n\n protected readonly filteredEnumOptions = computed(() => {\n const q = this.enumSearchQuery().trim().toLowerCase();\n const opts = this.enumOptions();\n if (!q) return opts;\n return opts.filter((o) => o.label.toLowerCase().includes(q));\n });\n\n protected readonly isNoValueOperator = computed(() => {\n const op = this.selectedOperator();\n return [\n DynamicDataFilterOperator.IsNull,\n DynamicDataFilterOperator.IsNotNull,\n DynamicDataFilterOperator.IsEmpty,\n DynamicDataFilterOperator.IsNotEmpty,\n ].includes(op);\n });\n\n protected toggleDropdown(event: MouseEvent): void {\n event.stopPropagation();\n const nextState = !this.isOpen();\n if (nextState) {\n this.syncStateFromInput();\n this.isOpen.set(true);\n this.updatePosition();\n } else {\n this.isOpen.set(false);\n }\n }\n\n updatePosition(): void {\n if (!this.isOpen()) return;\n\n setTimeout(() => {\n const popover: HTMLDivElement | null =\n this.elementRef.nativeElement.querySelector('.filter-popover');\n if (!popover) return;\n\n // پیدا کردن کانتینر اسکرول جدول\n const containerEl =\n this.tableEl()?.nativeElement ??\n this.elementRef.nativeElement.closest('.ngx-table-scroll') ??\n this.elementRef.nativeElement.closest('.ngx-table-wrapper');\n\n if (!containerEl) {\n popover.style.visibility = 'visible';\n return;\n }\n\n // ۱. ریست کردن ترنسفورم قبلی تا موقعیت واقعی بدون تغییر سنجیده شود\n popover.style.transform = 'none';\n\n const rect = popover.getBoundingClientRect();\n const container = containerEl.getBoundingClientRect();\n const margin = 6; // فاصله ایمن از لبه جدول\n\n let x = 0;\n const threshold = 10;\n // اگر از لبه سمت راست کانتینر بیرون زده باشد (حالت ستون‌های آخر):\n if (rect.right > container.right - margin) {\n // شیفت به سمت چپ (مقدار منفی)\n x = container.right - margin - rect.right - threshold;\n }\n // اگر از لبه سمت چپ بیرون زده باشد:\n else if (rect.left < container.left + margin) {\n // شیفت به سمت راست (مقدار مثبت)\n x = container.left + margin - rect.left + threshold;\n }\n\n // اطمینان از اینکه شیفت به چپ، باعث خروج از سمت چپ کانتینر نشود\n if (rect.left + x < container.left + margin) {\n x = container.left + margin - rect.left;\n }\n\n // ۲. اعمال جابجایی\n if (x !== 0) {\n popover.style.transform = `translateX(${Math.round(x)}px)`;\n } else {\n popover.style.transform = 'none';\n }\n\n // ۳. نمایش پاپ‌آپ پس از تنظیم موقعیت بدون پرش تصویر (Flicker)\n popover.style.visibility = 'visible';\n }, 0);\n }\n\n private syncStateFromInput(): void {\n const cur = this.currentFilter();\n const type = this.filterType();\n\n if (cur) {\n this.selectedOperator.set(cur.operator);\n if (type === 'enum' && Array.isArray(cur.values)) {\n this.selectedEnumValues.set(new Set(cur.values));\n } else {\n this.filterValue.set(cur.value ?? '');\n this.filterValueTo.set(cur.valueTo ?? '');\n }\n } else {\n const defaultOp =\n this.config()?.defaultOperator ??\n (type === 'number' || type === 'date' || type === 'boolean'\n ? DynamicDataFilterOperator.Equal\n : DynamicDataFilterOperator.Contains);\n this.selectedOperator.set(defaultOp);\n this.filterValue.set('');\n this.filterValueTo.set('');\n if (type === 'enum') {\n this.selectedEnumValues.set(new Set(this.enumOptions().map((o) => o.value)));\n }\n }\n }\n\n protected onApply(): void {\n const type = this.filterType();\n let value = this.filterValue();\n let values = [];\n let operator = this.selectedOperator();\n\n if (type === 'enum') {\n operator = DynamicDataFilterOperator.In;\n values = Array.from(this.selectedEnumValues());\n }\n\n this.applyFilter.emit({\n field: this.field(),\n operator,\n value,\n valueTo:\n this.selectedOperator() === DynamicDataFilterOperator.Between\n ? this.filterValueTo()\n : undefined,\n values,\n });\n this.isOpen.set(false);\n }\n\n protected onClear(): void {\n this.filterValue.set('');\n this.filterValueTo.set('');\n this.selectedEnumValues.set(new Set());\n this.clearFilter.emit(this.field());\n this.isOpen.set(false);\n }\n\n protected toggleEnumSelection(val: any): void {\n const current = new Set(this.selectedEnumValues());\n if (current.has(val)) current.delete(val);\n else current.add(val);\n this.selectedEnumValues.set(current);\n }\n\n protected toggleSelectAll(checked: boolean): void {\n if (checked) {\n this.selectedEnumValues.set(new Set(this.enumOptions().map((o) => o.value)));\n } else {\n this.selectedEnumValues.set(new Set());\n }\n }\n\n @HostListener('document:click', ['$event'])\n protected onDocumentClick(event: MouseEvent): void {\n if (this.isOpen() && !this.elementRef.nativeElement.contains(event.target as HTMLElement)) {\n this.isOpen.set(false);\n }\n }\n\n @HostListener('document:keydown.escape')\n protected onEscape(): void {\n if (this.isOpen()) this.isOpen.set(false);\n }\n}\n","<div class=\"ngx-col-filter\" (click)=\"$event.stopPropagation()\">\n <button\n type=\"button\"\n class=\"filter-trigger\"\n [class.active]=\"!!currentFilter()\"\n [title]=\"labels.filter\"\n (click)=\"toggleDropdown($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\" class=\"funnel-icon\">\n <path\n fill=\"currentColor\"\n d=\"M3.9 54.9C10.5 36.5 28 24 47.6 24H464.4c19.6 0 37.1 12.5 43.7 30.9c6.6 18.4 0 38.8-16.1 49.9L320 223.5V432c0 13.5-8.4 25.5-21.1 30.2s-27 1.1-35.8-9.1l-64-75.1c-4.7-5.5-7.1-12.6-7.1-19.8V223.5L4.1 104.8C-1.9 93.7-2.6 73.3 3.9 54.9z\" />\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"filter-popover\" role=\"dialog\">\n @if (filterType() !== 'enum') {\n <div class=\"filter-section\">\n <label class=\"filter-label\">{{ labels.filter }}:</label>\n <select\n class=\"filter-select\"\n [ngModel]=\"selectedOperator()\"\n (ngModelChange)=\"selectedOperator.set($event)\">\n @for (op of operators(); track op.value) {\n <option [ngValue]=\"op.value\">{{ op.label }}</option>\n }\n </select>\n </div>\n\n @if (!isNoValueOperator()) {\n <div class=\"filter-section\">\n @if (filterType() === 'number') {\n <input\n type=\"number\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n @if (selectedOperator() === 9) {\n <input\n type=\"number\"\n class=\"filter-input mt-1\"\n [placeholder]=\"labels.to\"\n [ngModel]=\"filterValueTo()\"\n (ngModelChange)=\"filterValueTo.set($event)\" />\n }\n } @else if (filterType() === 'date') {\n <input\n type=\"date\"\n class=\"filter-input\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n @if (selectedOperator() === 9) {\n <input\n type=\"date\"\n class=\"filter-input mt-1\"\n [ngModel]=\"filterValueTo()\"\n (ngModelChange)=\"filterValueTo.set($event)\" />\n }\n } @else if (filterType() === 'boolean') {\n <select\n class=\"filter-select\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\">\n <option [ngValue]=\"true\">{{ labels.trueText }}</option>\n <option [ngValue]=\"false\">{{ labels.falseText }}</option>\n </select>\n } @else {\n <input\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"filterValue()\"\n (ngModelChange)=\"filterValue.set($event)\" />\n }\n </div>\n }\n } @else {\n <!-- Excel-like Set Filter (Enum) -->\n <div class=\"filter-section\">\n <input\n type=\"text\"\n class=\"filter-input\"\n [placeholder]=\"labels.search\"\n [ngModel]=\"enumSearchQuery()\"\n (ngModelChange)=\"enumSearchQuery.set($event)\" />\n </div>\n <div class=\"filter-set-list\">\n <label class=\"filter-set-item font-bold\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedEnumValues().size === enumOptions().length\"\n (change)=\"toggleSelectAll($any($event.target).checked)\" />\n <span>({{ labels.selectAll }})</span>\n </label>\n @for (opt of filteredEnumOptions(); track opt.value) {\n <label class=\"filter-set-item\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedEnumValues().has(opt.value)\"\n (change)=\"toggleEnumSelection(opt.value)\" />\n <span>{{ opt.label }}</span>\n </label>\n }\n </div>\n }\n\n <div class=\"filter-actions\">\n <button type=\"button\" class=\"btn-clear\" (click)=\"onClear()\">\n {{ labels.clearFilter }}\n </button>\n <button type=\"button\" class=\"btn-apply\" (click)=\"onApply()\">\n {{ labels.applyFilter }}\n </button>\n </div>\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n output,\n QueryList,\n signal,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TableCell } from '../../directives/table-cell.directive';\nimport { ColumnResize } from '../../directives/column-resize.directive';\nimport { NGX_TABLE_CONFIG, NGX_TABLE_I18N } from '../../tokens/table-config.token';\nimport { NGX_PAGINATION_CONFIG } from '../../tokens/pagination-config.token';\nimport { PageEvent, LazyLoadEvent } from '../../types/page.types';\nimport { SortDirection, SortMeta } from '../../types/sort.types';\nimport {\n CellRendererComponent,\n CellTemplateContext,\n TableField,\n} from '../../types/table-field.types';\nimport { NgxPagination } from '../pagination/pagination';\nimport { DirectionService } from 'ngx-kit/core';\nimport type { ColumnFilterState } from '../../types/filter.type';\nimport { ColumnFilterService } from '../../services/column-filter.service';\nimport { NgxColumnFilter } from '../column-filter/column-filter';\n\n@Component({\n selector: 'ngx-table',\n standalone: true,\n templateUrl: './table.html',\n styleUrl: './table.scss',\n imports: [CommonModule, NgxPagination, ColumnResize, NgxColumnFilter],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngx-table-host',\n '[style.--ngx-table-scroll-height]': 'height()',\n },\n})\nexport class NgxTable<T extends object> implements OnInit, AfterContentInit {\n protected readonly config = inject(NGX_TABLE_CONFIG);\n protected readonly labels = inject(NGX_TABLE_I18N);\n protected readonly paginationConfig = inject(NGX_PAGINATION_CONFIG);\n protected readonly columnFilterService = inject(ColumnFilterService);\n\n // ---------------------------------------------------------------- inputs\n readonly fields = input.required<TableField<T, any>[]>();\n readonly data = input.required<readonly T[]>();\n readonly totalRecords = input.required<number>();\n readonly showRecordNumber = input(this.config.showRecordNumber);\n readonly operations = input<TemplateRef<{ $implicit: T }>>();\n readonly operationWidth = input(80);\n readonly numWidth = input(80);\n readonly pageSize = input(this.paginationConfig.defaultPageSize);\n readonly page = input(1);\n readonly pageChange = output<number>();\n readonly loading = input(false);\n readonly multiSort = input<boolean | undefined>(undefined);\n readonly lazy = input(this.config.lazy);\n readonly resizable = input(this.config.resizable);\n readonly height = input<string>('75dvh');\n readonly trackBy = input<(index: number, row: T) => unknown>((index) => index);\n\n // --------------------------------------------------------------- outputs\n readonly lazyLoad = output<LazyLoadEvent<T>>();\n readonly sortChange = output<SortMeta<T>[]>();\n readonly columnResize = output<{ field: string; width: number }>();\n readonly filterChange = output<ColumnFilterState[]>();\n\n // ------------------------------------------------------------ int. state\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected readonly pageIndex = signal(1);\n protected readonly pageSizeS = signal(this.paginationConfig.defaultPageSize);\n protected readonly sorts = signal<SortMeta<T>[]>([]);\n protected readonly widths = signal<Record<string, number>>({});\n protected readonly activeFilters = signal<Record<string, ColumnFilterState>>({});\n private readonly manuallyResized = new Set<string>();\n private readonly rendererInputsCache = new Map<\n TableField<T, any>,\n WeakMap<T, Record<string, unknown>>\n >();\n\n @ContentChildren(TableCell) private cellTemplates!: QueryList<TableCell<T>>;\n private templateMap = new Map<string, TemplateRef<CellTemplateContext<T>>>();\n\n protected readonly resolvedMultiSort = computed(() => this.multiSort() ?? this.config.multiSort);\n private readonly directionService = inject(DirectionService);\n private readonly destroyRef = inject(DestroyRef);\n protected readonly resolvedDirection = computed(() => this.directionService.direction());\n\n constructor() {\n effect(() => {\n this.pageSizeS.set(this.pageSize());\n this.pageIndex.set(this.page());\n });\n\n effect(() => {\n const cols = this.fields();\n const current = this.widths();\n let changed = false;\n const next = { ...current };\n for (const f of cols) {\n if (this.manuallyResized.has(f.column)) continue;\n if (f.column in next) continue;\n if (typeof f.width === 'number') {\n next[f.column] = f.width;\n changed = true;\n }\n }\n if (changed) this.widths.set(next);\n });\n }\n\n ngOnInit(): void {}\n\n ngAfterContentInit(): void {\n this.syncTemplateMap();\n this.cellTemplates.changes\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.syncTemplateMap());\n }\n\n private syncTemplateMap(): void {\n this.templateMap.clear();\n this.cellTemplates.forEach((cell) => {\n this.templateMap.set(cell.column(), cell.templateRef);\n });\n }\n\n // ------------------------------------------------------------- داده‌ها (فیلتر ➔ سورت ➔ صفحه‌بندی)\n protected readonly filteredData = computed<readonly T[]>(() => {\n const raw = this.data();\n if (this.lazy()) return raw;\n return this.columnFilterService.applyFilters(raw, this.activeFilters());\n });\n\n protected readonly sortedData = computed<readonly T[]>(() => {\n const source = this.filteredData();\n if (this.lazy()) return source;\n const sorts = this.sorts();\n if (sorts.length === 0) return source;\n const copy = [...source];\n copy.sort((a, b) => {\n for (const s of sorts) {\n const cmp = this.compare(a[s.field], b[s.field]);\n if (cmp !== 0) return s.direction === 'asc' ? cmp : -cmp;\n }\n return 0;\n });\n return copy;\n });\n\n protected readonly totalCount = computed(() =>\n this.lazy() ? this.totalRecords() : this.filteredData().length,\n );\n\n protected readonly pagedData = computed<readonly T[]>(() => {\n if (this.lazy()) return this.sortedData();\n const start = (this.pageIndex() - 1) * this.pageSizeS();\n return this.sortedData().slice(start, start + this.pageSizeS());\n });\n\n private compare(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === 'number' && typeof b === 'number') return a - b;\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1;\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\n return String(a).localeCompare(String(b));\n }\n\n protected recordNumber(rowIndex: number): number {\n return (this.pageIndex() - 1) * this.pageSizeS() + rowIndex + 1;\n }\n\n // -------------------------------------------------------------- سورت\n protected sortDirectionFor(column: string): SortDirection | null {\n return this.sorts().find((s) => s.field === column)?.direction ?? null;\n }\n\n protected onHeaderClick(field: TableField<T, any>, event: MouseEvent): void {\n if (field.sortable === false) return;\n const column = field.column;\n const current = this.sorts();\n const existingIndex = current.findIndex((s) => s.field === column);\n const isMultiGesture =\n this.resolvedMultiSort() && (event.shiftKey || event.ctrlKey || event.metaKey);\n\n let next: SortMeta<T>[];\n if (isMultiGesture) {\n next = [...current];\n if (existingIndex === -1) {\n next.push({ field: column, direction: 'asc' });\n } else if (next[existingIndex].direction === 'asc') {\n next[existingIndex] = { field: column, direction: 'desc' };\n } else {\n next.splice(existingIndex, 1);\n }\n } else if (existingIndex === -1 || current.length > 1) {\n next = [{ field: column, direction: 'asc' }];\n } else if (current[0].direction === 'asc') {\n next = [{ field: column, direction: 'desc' }];\n } else {\n next = [];\n }\n\n this.sorts.set(next);\n this.pageIndex.set(1);\n this.pageChange.emit(this.pageIndex());\n this.sortChange.emit(next);\n this.emitLazyIfNeeded();\n }\n\n // ------------------------------------------------------------ فیلتر\n protected isFilterable(field: TableField<T, any>): boolean {\n return field.filterable === true || !!field.filterConfig?.enabled;\n }\n\n protected getFilterState(column: string): ColumnFilterState | null {\n const f = this.activeFilters()[column];\n return this.columnFilterService.isFilterActive(f) ? f : null;\n }\n\n protected getDistinctValues(column: string): unknown[] {\n const raw = this.data();\n if (!raw || raw.length === 0) return [];\n return Array.from(new Set(raw.map((r: any) => r[column])));\n }\n\n protected onFilterApply(state: ColumnFilterState): void {\n this.activeFilters.update((prev) => ({ ...prev, [state.field]: state }));\n this.pageIndex.set(1);\n this.pageChange.emit(1);\n\n const activeList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.filterChange.emit(activeList);\n this.emitLazyIfNeeded();\n }\n\n protected onFilterClear(field: string): void {\n this.activeFilters.update((prev) => {\n const copy = { ...prev };\n delete copy[field];\n return copy;\n });\n this.pageIndex.set(1);\n this.pageChange.emit(1);\n\n const activeList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.filterChange.emit(activeList);\n this.emitLazyIfNeeded();\n }\n\n // ------------------------------------------------------------ صفحه‌بندی\n protected onPaginate(event: PageEvent): void {\n this.pageIndex.set(event.page);\n this.pageSizeS.set(event.pageSize);\n this.pageChange.emit(this.pageIndex());\n this.emitLazyIfNeeded();\n }\n\n private emitLazyIfNeeded(): void {\n if (!this.lazy()) return;\n const pageIndex = this.pageIndex();\n const pageSize = this.pageSizeS();\n const activeFilterList = Object.values(this.activeFilters()).filter((f) =>\n this.columnFilterService.isFilterActive(f),\n );\n this.lazyLoad.emit({\n pageIndex,\n pageSize,\n first: (pageIndex - 1) * pageSize,\n sorts: this.sorts(),\n sorting: this.sorts()\n ?.map((s) => `${s.field} ${s.direction}`)\n .join(','),\n filters: activeFilterList,\n });\n }\n\n // -------------------------------------------------------------- ریسایز\n protected columnWidth(column: string): number {\n return this.widths()[column] ?? this.config.column.defaultWidth;\n }\n\n protected columnFlex(field: TableField<T, any>): string {\n const resized = this.widths()[field.column];\n if (resized != null) return `0 0 ${resized}px`;\n if (typeof field.width === 'string') return `0 0 ${field.width}`;\n return '1 1 0';\n }\n\n protected columnMin(field: TableField<T, any>): number {\n return field.minWidth ?? this.config.column.minWidth;\n }\n\n protected columnMax(field: TableField<T, any>): number {\n return field.maxWidth ?? this.config.column.maxWidth;\n }\n\n protected isResizable(field: TableField<T, any>): boolean {\n return (field.resizable ?? this.resizable()) !== false;\n }\n\n protected onColumnResizing(column: string, width: number): void {\n this.widths.update((w) => ({ ...w, [column]: width }));\n }\n\n protected onColumnResizeEnd(column: string, width: number): void {\n this.manuallyResized.add(column);\n this.widths.update((w) => ({ ...w, [column]: width }));\n this.columnResize.emit({ field: column, width });\n }\n\n // --------------------------------------------------------------- سلول‌ها\n protected getTemplate(column: string): TemplateRef<CellTemplateContext<T>> | null {\n const fromDirective = this.templateMap.get(column);\n if (fromDirective) return fromDirective;\n const fromFieldConfig = this.fields().find((f) => f.column === column)?.cellTemplate;\n return fromFieldConfig ?? null;\n }\n\n protected getRenderer(field: TableField<T, any>): Type<CellRendererComponent> | null {\n if (!field.renderer) return null;\n return this.config.renderers[field.renderer as string] ?? null;\n }\n\n protected getCellValue(row: T, field: TableField<T, any>): unknown {\n return row[field.column];\n }\n\n protected formatCellValue(row: T, field: TableField<T, any>): string {\n const value = this.getCellValue(row, field);\n if (typeof field.formatter === 'function') {\n return this.stringify(field.formatter(value, row, field));\n }\n if (typeof field.formatter === 'string') {\n const formatter = this.config.formatters[field.formatter];\n if (formatter) return this.stringify(formatter(value, row, field));\n }\n return this.stringify(value);\n }\n\n private stringify(value: unknown): string {\n return value == null ? '' : String(value);\n }\n\n protected getRendererInputs(row: T, field: TableField<T, any>): Record<string, unknown> {\n let fieldCache = this.rendererInputsCache.get(field);\n if (!fieldCache) {\n fieldCache = new WeakMap();\n this.rendererInputsCache.set(field, fieldCache);\n }\n let inputs = fieldCache.get(row);\n if (!inputs) {\n inputs = {\n value: this.getCellValue(row, field),\n row,\n field,\n ...(field.renderer ? field.rendererInputs : undefined),\n };\n fieldCache.set(row, inputs);\n }\n return inputs;\n }\n}\n","<div class=\"ngx-table-wrapper\" [class.ngx-table--loading]=\"loading()\">\n <div class=\"ngx-table-scroll\">\n <div\n class=\"ngx-table\"\n [class.ngx-table--striped]=\"config.stripedRows\"\n [class.ngx-table--hover]=\"config.hoverable\"\n role=\"table\">\n <div class=\"thead-mrs\" [class.thead-mrs--sticky]=\"config.stickyHeader\" role=\"rowgroup\">\n <div class=\"tr-mrs\" role=\"row\">\n @if (operations()) {\n <div\n class=\"th-mrs operations\"\n role=\"columnheader\"\n [style.flex]=\"'0 0 ' + operationWidth() + 'px'\">\n {{ labels.operation }}\n </div>\n }\n @if (showRecordNumber()) {\n <div\n class=\"th-mrs operations\"\n role=\"columnheader\"\n [style.flex]=\"'0 0 ' + numWidth() + 'px'\">\n #\n </div>\n }\n\n @for (f of fields(); track f.column) {\n <div\n class=\"th-mrs\"\n role=\"columnheader\"\n [class.th-mrs--sortable]=\"f.sortable !== false\"\n [style.flex]=\"columnFlex(f)\"\n [attr.aria-sort]=\"\n sortDirectionFor(f.column) === 'asc'\n ? 'ascending'\n : sortDirectionFor(f.column) === 'desc'\n ? 'descending'\n : null\n \"\n (click)=\"onHeaderClick(f, $event)\">\n <span class=\"th-mrs__title\">{{ f.title }}</span>\n\n @if (f.sortable !== false) {\n <span class=\"sort-icon\" [class.active]=\"sortDirectionFor(f.column) !== null\">\n @if (sortDirectionFor(f.column) === 'asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M182.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8H96V448c0 17.7 14.3 32 32 32s32-14.3 32-32V224h64c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z\" />\n </svg>\n } @else if (sortDirectionFor(f.column) === 'desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M137.4 470.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H224V64c0-17.7-14.3-32-32-32s-32 14.3-32 32V288H96c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z\" />\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\">\n <path\n fill=\"currentColor\"\n d=\"M137.4 41.4c12.5-12.5 32.8-12.5 45.3 0l96 96c9.2 9.2 11.9 22.9 6.9 34.9s-16.6 19.8-29.6 19.8H224v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V192H96c-12.9 0-24.6-7.8-29.6-19.8s-2.3-25.7 6.9-34.9l96-96zM32 400c0-17.7 14.3-32 32-32H256c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32z\"\n opacity=\".35\" />\n </svg>\n }\n </span>\n }\n\n @if (isFilterable(f)) {\n <ngx-column-filter\n [tableEl]=\"elementRef\"\n [field]=\"f.column\"\n [config]=\"f.filterConfig\"\n [currentFilter]=\"getFilterState(f.column)\"\n [distinctValues]=\"getDistinctValues(f.column)\"\n (applyFilter)=\"onFilterApply($event)\"\n (clearFilter)=\"onFilterClear($event)\"></ngx-column-filter>\n }\n\n @if (isResizable(f)) {\n <span\n ngxColumnResize\n [ngxColumnResizeWidth]=\"columnWidth(f.column)\"\n [ngxColumnResizeMin]=\"columnMin(f)\"\n [ngxColumnResizeMax]=\"columnMax(f)\"\n [ngxColumnResizeDir]=\"resolvedDirection()\"\n (resizing)=\"onColumnResizing(f.column, $event)\"\n (resizeEnd)=\"onColumnResizeEnd(f.column, $event)\"\n (click)=\"$event.stopPropagation()\"></span>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"tbody-mrs\" role=\"rowgroup\">\n @if (!loading() && pagedData().length === 0) {\n <div class=\"no-data\">{{ labels.noData }}</div>\n }\n\n @for (row of pagedData(); track trackBy()($index, row); let rowIndex = $index) {\n <div class=\"tr-mrs\" role=\"row\">\n @if (operations()) {\n <div\n class=\"td-mrs operations\"\n role=\"cell\"\n [style.flex]=\"'0 0 ' + operationWidth() + 'px'\">\n <div class=\"cel\">\n <span class=\"cell-title\">{{ labels.operation }}:</span>\n <ng-container\n [ngTemplateOutlet]=\"operations()!\"\n [ngTemplateOutletContext]=\"{ $implicit: row }\"></ng-container>\n </div>\n </div>\n }\n\n @if (showRecordNumber()) {\n <div class=\"td-mrs operations\" role=\"cell\" [style.flex]=\"'0 0 ' + numWidth() + 'px'\">\n <div class=\"cel\">{{ recordNumber(rowIndex) }}</div>\n </div>\n }\n\n @for (f of fields(); track f.column) {\n @let template = getTemplate(f.column);\n @let renderer = getRenderer(f);\n\n <div class=\"td-mrs\" role=\"cell\" [style.flex]=\"columnFlex(f)\">\n <div class=\"cel\" [class.wrap]=\"f.wrap\">\n <span class=\"cell-title\">{{ f.title }}</span>\n\n @if (template) {\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n $implicit: row,\n row: row,\n value: getCellValue(row, f),\n rowIndex: rowIndex,\n field: f,\n }\"></ng-container>\n } @else if (renderer) {\n <ng-container\n *ngComponentOutlet=\"\n renderer;\n inputs: getRendererInputs(row, f)\n \"></ng-container>\n } @else {\n {{ formatCellValue(row, f) }}\n }\n\n @if (f.prefix) {\n <span>{{ f.prefix }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n @if (loading()) {\n <div class=\"loading-container\">\n <div class=\"loading\">{{ labels.loading }}</div>\n </div>\n }\n </div>\n</div>\n\n<ngx-pagination\n [page]=\"pageIndex()\"\n [pageSize]=\"pageSizeS()\"\n [total]=\"totalCount()\"\n (paginate)=\"onPaginate($event)\"></ngx-pagination>\n","// types\nexport * from './types/sort.types';\nexport * from './types/page.types';\nexport * from './types/pagination.types';\nexport * from './types/table-field.types';\nexport * from './types/table-options.types';\nexport * from './types/filter.type';\n\n// tokens\nexport * from './tokens/table-config.token';\nexport * from './tokens/pagination-config.token';\n\n// providers\nexport * from './providers/provide-table';\nexport * from './providers/provide-pagination';\n\n// directives\nexport * from './directives/table-cell.directive';\nexport * from './directives/column-resize.directive';\n\n// components\nexport * from './components/table/table';\nexport * from './components/pagination/pagination';\nexport * from './components/column-filter/column-filter';\n\n// services\nexport * from './services/column-filter.service';\n\n// localizations\nexport * from './localization/pagination.localization';\nexport * from './localization/table.localization';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;AAiBA;;;;AAIG;AACG,SAAU,eAAe,CAA6B,QAAW,EAAA;AACrE,IAAA,OAAO,QAAQ;AACjB;AAwFA;;;;;;;;;;;;;AAaG;AACG,SAAU,YAAY,CAC1B,UAAa,EACb,MAA0B,EAAA;AAE1B,IAAA,OAAO,MAAM;AACf;;ICnIY;AAAZ,CAAA,UAAY,yBAAyB,EAAA;AACnC,IAAA,yBAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AACd,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe;AACf,IAAA,yBAAA,CAAA,yBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAsB;AACtB,IAAA,yBAAA,CAAA,yBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB;AACnB,IAAA,yBAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,yBAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,GAAA,EAAA,CAAA,GAAA,IAAO;AACP,IAAA,yBAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAW;AACX,IAAA,yBAAA,CAAA,yBAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAc;AACd,IAAA,yBAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAY;AACZ,IAAA,yBAAA,CAAA,yBAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAe;AACjB,CAAC,EAhBW,yBAAyB,KAAzB,yBAAyB,GAAA,EAAA,CAAA,CAAA;;ACG9B,MAAM,6BAA6B,GAAyB;AACjE,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;CAC1C;AACM,MAAM,wBAAwB,GAAyB;AAC5D,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE;AAE1D,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,IAAI,EAAE,KAAK;CACZ;;MCnBY,iBAAiB,CAAA;IAC5B,MAAM,GAAG,8BAA8B;IACvC,OAAO,GAAG,YAAY;IACtB,SAAS,GAAG,WAAW;;IAGvB,MAAM,GAAG,QAAQ;IACjB,WAAW,GAAG,OAAO;IACrB,WAAW,GAAG,OAAO;IACrB,MAAM,GAAG,WAAW;IACpB,SAAS,GAAG,YAAY;IACxB,IAAI,GAAG,MAAM;IACb,EAAE,GAAG,IAAI;IACT,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAG,IAAI;;IAGhB,OAAO,GAAG,QAAQ;IAClB,UAAU,GAAG,gBAAgB;IAC7B,UAAU,GAAG,UAAU;IACvB,YAAY,GAAG,aAAa;IAC5B,UAAU,GAAG,WAAW;IACxB,aAAa,GAAG,cAAc;IAC9B,oBAAoB,GAAG,uBAAuB;IAC9C,UAAU,GAAG,WAAW;IACxB,iBAAiB,GAAG,oBAAoB;IACxC,SAAS,GAAG,SAAS;IACrB,QAAQ,GAAG,SAAS;IACpB,WAAW,GAAG,aAAa;IAC3B,SAAS,GAAG,UAAU;IACtB,YAAY,GAAG,cAAc;AAC9B;;MC1BY,gBAAgB,GAAG,IAAI,cAAc,CAAuB,kBAAkB,EAAE;AAC3F,IAAA,OAAO,EAAE,MAAM,wBAAwB;AACxC,CAAA;MAEY,cAAc,GAAG,IAAI,cAAc,CAAoB,gBAAgB,EAAE;AACpF,IAAA,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE;AACvC,CAAA;;MCXY,sBAAsB,CAAA;IACjC,KAAK,GAAG,OAAO;IACf,IAAI,GAAG,MAAM;IACb,IAAI,GAAG,MAAM;IACb,QAAQ,GAAG,UAAU;IACrB,OAAO,GAAG,SAAS;IACnB,EAAE,GAAG,IAAI;IACT,EAAE,GAAG,IAAI;IACT,OAAO,GAAG,SAAS;IACnB,QAAQ,GAAG,WAAW;AACvB;;MCLY,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB,EACvB;AACE,IAAA,OAAO,EAAE,MAAM,6BAA6B;AAC7C,CAAA;MAGU,mBAAmB,GAAG,IAAI,cAAc,CACnD,qBAAqB,EACrB;AACE,IAAA,OAAO,EAAE,MAAM,IAAI,sBAAsB,EAAE;AAC5C,CAAA;;ACXH,SAAS,gBAAgB,CACvB,IAA0B,EAC1B,QAA0B,EAAA;AAE1B,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;IAC1B,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,GAAG,QAAQ;QACX,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;QAC9C,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE;QACvD,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE;KAC3D;AACH;AAEA;;;;;;;;;AASG;AACG,SAAU,YAAY,CAAC,OAAyB,EAAA;AACpD,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,CAAC,wBAAwB,EAAE,OAAO,CAAC,EAAE;AAC7F,KAAA,CAAC;AACJ;;AC5BA,SAAS,qBAAqB,CAC5B,IAA0B,EAC1B,QAAwC,EAAA;AAExC,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;IAC1B,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,GAAG,QAAQ;KACZ;AACH;AAEM,SAAU,iBAAiB,CAAC,OAAuC,EAAA;AACvE,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,qBAAqB,CAAC,6BAA6B,EAAE,OAAO,CAAC;AACxE,SAAA;AACF,KAAA,CAAC;AACJ;;ACpBA;;;;;;;;;;;;;;;;;;;AAmBG;MAKU,SAAS,CAAA;IACX,MAAM,GAAG,KAAK,CAAC,QAAQ,6EAAW,KAAK,EAAE,cAAc,EAAA,CAAG;AAC1D,IAAA,WAAW,GAAG,MAAM,EAAC,WAAmC,EAAC;uGAFvD,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2BAA2B;AACrC,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACxBD;;;;;;;;AAQG;MAUU,YAAY,CAAA;IACd,UAAU,GAAG,KAAK,CAAC,QAAQ,iFAAW,KAAK,EAAE,sBAAsB,EAAA,CAAG;IACtE,QAAQ,GAAG,KAAK,CAAS,EAAE,gFAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAC7D,QAAQ,GAAG,KAAK,CAAS,IAAI,gFAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAC/D,SAAS,GAAG,KAAK,CAAgB,KAAK,iFAAI,KAAK,EAAE,oBAAoB,EAAA,CAAG;IAExE,QAAQ,GAAG,MAAM,EAAU;IAC3B,SAAS,GAAG,MAAM,EAAU;AAEpB,IAAA,UAAU,GAAG,MAAM,EAAC,UAAuB,EAAC;IAErD,QAAQ,GAAG,KAAK;IAChB,MAAM,GAAG,CAAC;IACV,SAAS,GAAG,CAAC;AAGrB,IAAA,aAAa,CAAC,KAAmB,EAAA;QAC/B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;;;;;AAK3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,EAAE,qBAAqB,EAAE,CAAC,KAAK;AAC3F,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE;QACvE,KAAK,CAAC,MAAsB,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IAClE;AAGA,IAAA,aAAa,CAAC,KAAmB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD;AAIA,IAAA,WAAW,CAAC,KAAmB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD;AAEQ,IAAA,YAAY,CAAC,OAAe,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM;AACnC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK;AAC/D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IAClE;uGAjDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,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,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBATxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,0BAA0B;AACjC,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,kBAAkB,EAAE,UAAU;AAC/B,qBAAA;AACF,iBAAA;;sBAgBE,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;sBAetC,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;sBAMtC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBACpC,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;;;MCnC9B,aAAa,CAAA;AACL,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE9C,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;IAEhC,IAAI,GAAG,KAAK,CAAC,CAAC;6EAAC;AACf,IAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;iFAAC;AAE7C,IAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;wFAAC;IACpD,YAAY,GAAG,KAAK,CAAC,CAAC;qFAAC;IACvB,aAAa,GAAG,KAAK,CAAC,CAAC;sFAAC;IAExB,QAAQ,GAAG,MAAM,EAAa;IAEpB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;mFACvD;AAEkB,IAAA,SAAS,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;kFACjE;IAEkB,QAAQ,GAAG,QAAQ,CAAC,MACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;iFAC/D;AAEkB,IAAA,KAAK,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;8EAC3F;AAED,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;AACtE,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,CAAC,CAAC;IACJ;IAEQ,UAAU,CAChB,OAAe,EACf,KAAa,EACb,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,CAAC,EAAA;AAEZ,QAAA,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,KACvC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;QAE9D,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,CAAC;QACnD,IAAI,KAAK,IAAI,YAAY;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;AAEjD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC;AAC7D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;AACtE,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC;QAC/C,MAAM,aAAa,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC;QAEzD,MAAM,KAAK,GAAwB,EAAE;QACrC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjC,QAAA,IAAI,YAAY;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;AAC9B,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC/C,QAAA,IAAI,aAAa;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC7D,QAAA,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACjD,QAAA,OAAO,KAAK;IACd;IAEU,IAAI,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7D;IACU,QAAQ,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C;IACU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClB;IACU,IAAI,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAClC;AACU,IAAA,IAAI,CAAC,IAAY,EAAA;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE;AACpD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrB;AACU,IAAA,gBAAgB,CAAC,KAAa,EAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClB;uGA3FW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,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,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,OAAA,EAAA,EAAA,IAAA,EAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB1B,wwDAiDA,EAAA,MAAA,EAAA,CAAA,oyCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9BY,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGV,aAAa,EAAA,UAAA,EAAA,CAAA;kBARzB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EAGP,CAAC,WAAW,CAAC,EAAA,eAAA,EACL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wwDAAA,EAAA,MAAA,EAAA,CAAA,oyCAAA,CAAA,EAAA;;;MEhBpC,mBAAmB,CAAA;IAC9B,YAAY,CAAI,IAAkB,EAAE,OAA0C,EAAA;QAC5E,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,GAAG,IAAI,CAAC;AAEhD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KACtB,aAAa,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CACnE;IACH;AAEA,IAAA,cAAc,CAAC,MAAiC,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK;QACzB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;AACnD,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,yBAAyB,CAAC,MAAM;AAChC,YAAA,yBAAyB,CAAC,SAAS;AACnC,YAAA,yBAAyB,CAAC,OAAO;AACjC,YAAA,yBAAyB,CAAC,UAAU;SACrC;AACD,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI;AAE9C,QAAA,IAAI,QAAQ,KAAK,yBAAyB,CAAC,OAAO,EAAE;YAClD,QACE,KAAK,KAAK,SAAS;AACnB,gBAAA,KAAK,KAAK,IAAI;AACd,gBAAA,KAAK,KAAK,EAAE;AACZ,gBAAA,OAAO,KAAK,SAAS;AACrB,gBAAA,OAAO,KAAK,IAAI;gBAChB,OAAO,KAAK,EAAE;QAElB;AAEA,QAAA,IAAI,QAAQ,KAAK,yBAAyB,CAAC,EAAE,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QACnD;QAEA,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;IAC9D;IAEQ,cAAc,CAAC,IAAS,EAAE,MAAyB,EAAA;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AACnC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ;AAC1B,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK;AAC3B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO;AAC/B,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM;AAE7B,QAAA,IAAI,EAAE,KAAK,yBAAyB,CAAC,MAAM;AAAE,YAAA,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AAC3F,QAAA,IAAI,EAAE,KAAK,yBAAyB,CAAC,SAAS;AAAE,YAAA,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AAC9F,QAAA,IAAI,EAAE,KAAK,yBAAyB,CAAC,OAAO;YAC1C,OAAO,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AACjE,QAAA,IAAI,EAAE,KAAK,yBAAyB,CAAC,UAAU;YAC7C,OAAO,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AAEjE,QAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK;QAEzD,IACE,MAAM,YAAY,IAAI;aACrB,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EACnF;YACA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;AAC3C,YAAA,MAAM,UAAU,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,MAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG;AACtE,YAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAkB,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG;AAE5E,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACpB,QAAQ,EAAE;oBACR,KAAK,yBAAyB,CAAC,KAAK;AAClC,wBAAA,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,MAAgB,CAAC,CAAC,YAAY,EAAE;oBACtF,KAAK,yBAAyB,CAAC,WAAW;wBACxC,OAAO,QAAQ,GAAG,UAAU;oBAC9B,KAAK,yBAAyB,CAAC,kBAAkB;wBAC/C,OAAO,QAAQ,IAAI,UAAU;oBAC/B,KAAK,yBAAyB,CAAC,QAAQ;wBACrC,OAAO,QAAQ,GAAG,UAAU;oBAC9B,KAAK,yBAAyB,CAAC,eAAe;wBAC5C,OAAO,QAAQ,IAAI,UAAU;oBAC/B,KAAK,yBAAyB,CAAC,OAAO;AACpC,wBAAA,OAAO,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,YAAY;;YAE/D;QACF;QAEA,QAAQ,EAAE;YACR,KAAK,yBAAyB,CAAC,KAAK;gBAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACpF,KAAK,yBAAyB,CAAC,QAAQ;gBACrC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACpF,KAAK,yBAAyB,CAAC,QAAQ;AACrC,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5E,KAAK,yBAAyB,CAAC,UAAU;AACvC,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9E,KAAK,yBAAyB,CAAC,QAAQ;AACrC,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5E,KAAK,yBAAyB,CAAC,WAAW;gBACxC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACxC,KAAK,yBAAyB,CAAC,kBAAkB;gBAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;YACzC,KAAK,yBAAyB,CAAC,QAAQ;gBACrC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACxC,KAAK,yBAAyB,CAAC,eAAe;gBAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;YACzC,KAAK,yBAAyB,CAAC,OAAO;AACpC,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;YAC/E,KAAK,yBAAyB,CAAC,EAAE;AAC/B,gBAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO;sBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;sBAC5E,KAAK;AACX,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;uGA7GW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC2BrB,eAAe,CAAA;AACP,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AACjC,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;IAChE,OAAO,GAAG,KAAK,CAAC,QAAQ;gFAA2B;IACnD,KAAK,GAAG,KAAK,CAAC,QAAQ;8EAAU;AAChC,IAAA,MAAM,GAAG,KAAK;0FAAsB;IACpC,aAAa,GAAG,KAAK,CAA2B,IAAI;sFAAC;IACrD,cAAc,GAAG,KAAK,CAAY,EAAE;uFAAC;IAErC,WAAW,GAAG,MAAM,EAAqB;IACzC,WAAW,GAAG,MAAM,EAAU;IAEpB,MAAM,GAAG,MAAM,CAAC,KAAK;+EAAC;AACtB,IAAA,UAAU,GAAG,QAAQ,CAAiB,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,IAAI,MAAM;mFAAC;AAE1E,IAAA,gBAAgB,GAAG,MAAM,CAC1C,yBAAyB,CAAC,QAAQ;yFACnC;IACkB,WAAW,GAAG,MAAM,CAAM,EAAE;oFAAC;IAC7B,aAAa,GAAG,MAAM,CAAM,EAAE;sFAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAW,IAAI,GAAG,EAAE;2FAAC;IAChD,eAAe,GAAG,MAAM,CAAS,EAAE;wFAAC;AAEpC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;AAErB,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,OAAO;gBACL,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,yBAAyB,CAAC,KAAK,EAAE;gBAC5D,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;gBAClE,EAAE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,yBAAyB,CAAC,WAAW,EAAE;gBACxE,EAAE,KAAK,EAAE,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,yBAAyB,CAAC,kBAAkB,EAAE;gBACtF,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;gBAClE,EAAE,KAAK,EAAE,CAAC,CAAC,iBAAiB,EAAE,KAAK,EAAE,yBAAyB,CAAC,eAAe,EAAE;gBAChF,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,CAAC,OAAO,EAAE;gBAChE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,CAAC,MAAM,EAAE;gBAC9D,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,yBAAyB,CAAC,SAAS,EAAE;aACrE;QACH;AAEA,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,OAAO;gBACL,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,yBAAyB,CAAC,KAAK,EAAE;gBAC5D,EAAE,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,yBAAyB,CAAC,WAAW,EAAE;gBACxE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;gBAClE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,CAAC,OAAO,EAAE;gBAChE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,CAAC,MAAM,EAAE;gBAC9D,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,yBAAyB,CAAC,SAAS,EAAE;aACrE;QACH;AAEA,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO;gBACL,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,yBAAyB,CAAC,KAAK,EAAE;gBAC5D,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,CAAC,MAAM,EAAE;gBAC9D,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,yBAAyB,CAAC,SAAS,EAAE;aACrE;QACH;;QAGA,OAAO;YACL,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;YAClE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,yBAAyB,CAAC,UAAU,EAAE;YACtE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;YAClE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,yBAAyB,CAAC,KAAK,EAAE;YAC5D,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,yBAAyB,CAAC,QAAQ,EAAE;YAClE,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,yBAAyB,CAAC,OAAO,EAAE;YAChE,EAAE,KAAK,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,yBAAyB,CAAC,UAAU,EAAE;YACtE,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,CAAC,MAAM,EAAE;YAC9D,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,yBAAyB,CAAC,SAAS,EAAE;SACrE;IACH,CAAC;kFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAqB,MAAK;AACjE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;QACzB,IAAI,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,OAAO;AAE9D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;AACpC,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;aACvD,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;oFAAC;AAEiB,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AACrD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACrD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;4FAAC;AAEiB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAClC,OAAO;AACL,YAAA,yBAAyB,CAAC,MAAM;AAChC,YAAA,yBAAyB,CAAC,SAAS;AACnC,YAAA,yBAAyB,CAAC,OAAO;AACjC,YAAA,yBAAyB,CAAC,UAAU;AACrC,SAAA,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChB,CAAC;0FAAC;AAEQ,IAAA,cAAc,CAAC,KAAiB,EAAA;QACxC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE;QAChC,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,cAAc,EAAE;QACvB;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;QAEpB,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,OAAO,GACX,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;AAChE,YAAA,IAAI,CAAC,OAAO;gBAAE;;AAGd,YAAA,MAAM,WAAW,GACf,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa;gBAC7B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBAC1D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,oBAAoB,CAAC;YAE7D,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;gBACpC;YACF;;AAGA,YAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;AAEhC,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,WAAW,CAAC,qBAAqB,EAAE;AACrD,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC;YAEjB,IAAI,CAAC,GAAG,CAAC;YACT,MAAM,SAAS,GAAG,EAAE;;YAEpB,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,GAAG,MAAM,EAAE;;AAEzC,gBAAA,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS;YACvD;;iBAEK,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,MAAM,EAAE;;AAE5C,gBAAA,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS;YACrD;;AAGA,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,MAAM,EAAE;gBAC3C,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI;YACzC;;AAGA,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAC5D;iBAAO;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;YAClC;;AAGA,YAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;QACtC,CAAC,EAAE,CAAC,CAAC;IACP;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;QAE9B,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvC,YAAA,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClD;iBAAO;gBACL,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAC3C;QACF;aAAO;AACL,YAAA,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe;iBAC7B,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK;sBAC9C,yBAAyB,CAAC;AAC5B,sBAAE,yBAAyB,CAAC,QAAQ,CAAC;AACzC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;gBACnB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E;QACF;IACF;IAEU,OAAO,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;QAC9B,IAAI,MAAM,GAAG,EAAE;AACf,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEtC,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,QAAQ,GAAG,yBAAyB,CAAC,EAAE;YACvC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChD;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;YACnB,QAAQ;YACR,KAAK;YACL,OAAO,EACL,IAAI,CAAC,gBAAgB,EAAE,KAAK,yBAAyB,CAAC;AACpD,kBAAE,IAAI,CAAC,aAAa;AACpB,kBAAE,SAAS;YACf,MAAM;AACP,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;AAEU,IAAA,mBAAmB,CAAC,GAAQ,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAClD,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;IACtC;AAEU,IAAA,eAAe,CAAC,OAAgB,EAAA;QACxC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9E;aAAO;YACL,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;QACxC;IACF;AAGU,IAAA,eAAe,CAAC,KAAiB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAqB,CAAC,EAAE;AACzF,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;IAGU,QAAQ,GAAA;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IAC3C;uGA7PW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,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,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9B5B,wkJAsHA,EAAA,MAAA,EAAA,CAAA,otEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7FY,YAAY,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,wSAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,0JAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKxB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wkJAAA,EAAA,MAAA,EAAA,CAAA,otEAAA,CAAA,EAAA;;sBAqP9C,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;sBAOzC,YAAY;uBAAC,yBAAyB;;;MEvO5B,QAAQ,CAAA;AACA,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjC,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAChD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;;IAG3D,MAAM,GAAG,KAAK,CAAC,QAAQ;+EAAwB;IAC/C,IAAI,GAAG,KAAK,CAAC,QAAQ;6EAAgB;IACrC,YAAY,GAAG,KAAK,CAAC,QAAQ;qFAAU;AACvC,IAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB;yFAAC;AACtD,IAAA,UAAU,GAAG,KAAK;8FAAiC;IACnD,cAAc,GAAG,KAAK,CAAC,EAAE;uFAAC;IAC1B,QAAQ,GAAG,KAAK,CAAC,EAAE;iFAAC;AACpB,IAAA,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe;iFAAC;IACvD,IAAI,GAAG,KAAK,CAAC,CAAC;6EAAC;IACf,UAAU,GAAG,MAAM,EAAU;IAC7B,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;IACtB,SAAS,GAAG,KAAK,CAAsB,SAAS;kFAAC;AACjD,IAAA,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;6EAAC;AAC9B,IAAA,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;kFAAC;IACxC,MAAM,GAAG,KAAK,CAAS,OAAO;+EAAC;IAC/B,OAAO,GAAG,KAAK,CAAqC,CAAC,KAAK,KAAK,KAAK;gFAAC;;IAGrE,QAAQ,GAAG,MAAM,EAAoB;IACrC,UAAU,GAAG,MAAM,EAAiB;IACpC,YAAY,GAAG,MAAM,EAAoC;IACzD,YAAY,GAAG,MAAM,EAAuB;;AAG5C,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;IAE9C,SAAS,GAAG,MAAM,CAAC,CAAC;kFAAC;AACrB,IAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe;kFAAC;IACzD,KAAK,GAAG,MAAM,CAAgB,EAAE;8EAAC;IACjC,MAAM,GAAG,MAAM,CAAyB,EAAE;+EAAC;IAC3C,aAAa,GAAG,MAAM,CAAoC,EAAE;sFAAC;AAC/D,IAAA,eAAe,GAAG,IAAI,GAAG,EAAU;AACnC,IAAA,mBAAmB,GAAG,IAAI,GAAG,EAG3C;AAEiC,IAAA,aAAa;AACzC,IAAA,WAAW,GAAG,IAAI,GAAG,EAA+C;AAEzD,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;0FAAC;AAC/E,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;0FAAC;AAExF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;YAC7B,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE;AAC3B,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBAAE;AACxC,gBAAA,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI;oBAAE;AACtB,gBAAA,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAC/B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;oBACxB,OAAO,GAAG,IAAI;gBAChB;YACF;AACA,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,KAAU;IAElB,kBAAkB,GAAA;QAChB,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;aACxC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC5C;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;QACxB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC;AACvD,QAAA,CAAC,CAAC;IACJ;;AAGmB,IAAA,YAAY,GAAG,QAAQ,CAAe,MAAK;AAC5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;QACvB,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,GAAG;AAC3B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;IACzE,CAAC;qFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAe,MAAK;AAC1D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;QAClC,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,MAAM;AAC9B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,MAAM;AACrC,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,YAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,GAAG,KAAK,CAAC;AAAE,oBAAA,OAAO,CAAC,CAAC,SAAS,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG;YAC1D;AACA,YAAA,OAAO,CAAC;AACV,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb,CAAC;mFAAC;IAEiB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;mFAC/D;AAEkB,IAAA,SAAS,GAAG,QAAQ,CAAe,MAAK;QACzD,IAAI,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvD,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjE,CAAC;kFAAC;IAEM,OAAO,CAAC,CAAU,EAAE,CAAU,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC;QACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC;QAChE,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI;YAAE,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;AAC5E,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3C;AAEU,IAAA,YAAY,CAAC,QAAgB,EAAA;AACrC,QAAA,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,GAAG,CAAC;IACjE;;AAGU,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACvC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,IAAI;IACxE;IAEU,aAAa,CAAC,KAAyB,EAAE,KAAiB,EAAA;AAClE,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;YAAE;AAC9B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;QAClE,MAAM,cAAc,GAClB,IAAI,CAAC,iBAAiB,EAAE,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC;AAEhF,QAAA,IAAI,IAAmB;QACvB,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC;AACnB,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAChD;iBAAO,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE;AAClD,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;YAC5D;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YAC/B;QACF;aAAO,IAAI,aAAa,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C;aAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,EAAE;AACzC,YAAA,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QAC/C;aAAO;YACL,IAAI,GAAG,EAAE;QACX;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE;IACzB;;AAGU,IAAA,YAAY,CAAC,KAAyB,EAAA;AAC9C,QAAA,OAAO,KAAK,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO;IACnE;AAEU,IAAA,cAAc,CAAC,MAAc,EAAA;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAC9D;AAEU,IAAA,iBAAiB,CAAC,MAAc,EAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D;AAEU,IAAA,aAAa,CAAC,KAAwB,EAAA;QAC9C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAC9D,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC3C;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEU,IAAA,aAAa,CAAC,KAAa,EAAA;QACnC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;AACjC,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC;AAClB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvB,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAC9D,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC3C;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,gBAAgB,EAAE;IACzB;;AAGU,IAAA,UAAU,CAAC,KAAgB,EAAA;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE;AAClB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KACpE,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC3C;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,SAAS;YACT,QAAQ;AACR,YAAA,KAAK,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,QAAQ;AACjC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,KAAK;AACjB,kBAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,SAAS,EAAE;iBACvC,IAAI,CAAC,GAAG,CAAC;AACZ,YAAA,OAAO,EAAE,gBAAgB;AAC1B,SAAA,CAAC;IACJ;;AAGU,IAAA,WAAW,CAAC,MAAc,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY;IACjE;AAEU,IAAA,UAAU,CAAC,KAAyB,EAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,CAAA,IAAA,EAAO,OAAO,CAAA,EAAA,CAAI;AAC9C,QAAA,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAA,IAAA,EAAO,KAAK,CAAC,KAAK,EAAE;AAChE,QAAA,OAAO,OAAO;IAChB;AAEU,IAAA,SAAS,CAAC,KAAyB,EAAA;QAC3C,OAAO,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;IACtD;AAEU,IAAA,SAAS,CAAC,KAAyB,EAAA;QAC3C,OAAO,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;IACtD;AAEU,IAAA,WAAW,CAAC,KAAyB,EAAA;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK;IACxD;IAEU,gBAAgB,CAAC,MAAc,EAAE,KAAa,EAAA;QACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;IACxD;IAEU,iBAAiB,CAAC,MAAc,EAAE,KAAa,EAAA;AACvD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClD;;AAGU,IAAA,WAAW,CAAC,MAAc,EAAA;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;AAClD,QAAA,IAAI,aAAa;AAAE,YAAA,OAAO,aAAa;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,YAAY;QACpF,OAAO,eAAe,IAAI,IAAI;IAChC;AAEU,IAAA,WAAW,CAAC,KAAyB,EAAA;QAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI;AAChC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,QAAkB,CAAC,IAAI,IAAI;IAChE;IAEU,YAAY,CAAC,GAAM,EAAE,KAAyB,EAAA;AACtD,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1B;IAEU,eAAe,CAAC,GAAM,EAAE,KAAyB,EAAA;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;AAC3C,QAAA,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3D;AACA,QAAA,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACzD,YAAA,IAAI,SAAS;AAAE,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACpE;AACA,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC9B;AAEQ,IAAA,SAAS,CAAC,KAAc,EAAA;AAC9B,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3C;IAEU,iBAAiB,CAAC,GAAM,EAAE,KAAyB,EAAA;QAC3D,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,UAAU,GAAG,IAAI,OAAO,EAAE;YAC1B,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;QACjD;QACA,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG;gBACP,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC;gBACpC,GAAG;gBACH,KAAK;AACL,gBAAA,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC;aACvD;AACD,YAAA,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;QAC7B;AACA,QAAA,OAAO,MAAM;IACf;uGA3UW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,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,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iCAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EA4CF,SAAS,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7F5B,opOA6KA,EAAA,MAAA,EAAA,CAAA,gsHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnIY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,iBAAA,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,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAOzD,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAZpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EAGP,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,EAAA,eAAA,EACpD,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,gBAAgB;AACvB,wBAAA,mCAAmC,EAAE,UAAU;AAChD,qBAAA,EAAA,QAAA,EAAA,opOAAA,EAAA,MAAA,EAAA,CAAA,gsHAAA,CAAA,EAAA;;sBA8CA,eAAe;uBAAC,SAAS;;;AE7F5B;;ACAA;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-kit",
3
- "version": "8.4.0",
3
+ "version": "8.4.1",
4
4
  "description": "Angular input components",
5
5
  "author": "Mohammadreza Samani <mr.samani1368@gmail.com>",
6
6
  "license": "MIT",
@@ -41,8 +41,9 @@ interface ColumnFilterConfig<T = unknown> {
41
41
  interface ColumnFilterState {
42
42
  field: string;
43
43
  operator: DynamicDataFilterOperator;
44
- value: unknown;
45
- valueTo?: unknown;
44
+ value: any;
45
+ valueTo?: any;
46
+ values?: any[];
46
47
  }
47
48
 
48
49
  interface PageEvent {