@ascentgl/ads-ui 21.49.0 → 21.50.0

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.
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Input, Component, NgModule, input, output, computed, ChangeDetectionStrategy, EventEmitter, signal, effect, ViewChild, Output, ElementRef, HostListener, Directive, InjectionToken, inject, DestroyRef, Pipe, contentChild, TemplateRef, Inject, Optional, ChangeDetectorRef, Injectable, Renderer2, viewChild, ViewChildren } from '@angular/core';
3
3
  import * as i1 from '@ascentgl/ads-icons';
4
4
  import { AdsIconModule, AdsIconRegistry } from '@ascentgl/ads-icons';
5
- import { adsIconUserCircle, adsIconBell, adsIconChevronRight, adsIconCross, adsIconPlus, adsIconWarning, adsIconLock, adsIconPlusCircle, adsIconSearch, adsIconSortDescending, adsIconCheckCircleFilled, adsIconVisibilityEye, adsIconVisibilityEyeNone, adsIconStatusProcessing, adsIconInformation, adsIconChevronDown, adsIconLoading, adsIconDatepicker, adsIconTimepicker, adsIconCheck, adsIconDropdownArrow, adsIconChevronUp, adsIconFilter, adsIconArrowUpAndDown, adsIconMenuMoreInfo, adsIconHamburgerMenu, adsIconChevronLeft, adsIconStatusNew } from '@ascentgl/ads-icons/icons';
5
+ import { adsIconUserCircle, adsIconBell, adsIconChevronRight, adsIconCross, adsIconPlus, adsIconWarning, adsIconLock, adsIconPlusCircle, adsIconSearch, adsIconSortDescending, adsIconCheckCircleFilled, adsIconVisibilityEye, adsIconVisibilityEyeNone, adsIconStatusProcessing, adsIconInformation, adsIconChevronDown, adsIconLoading, adsIconDatepicker, adsIconTimepicker, adsIconCheck, adsIconDropdownArrow, adsIconChevronUp, adsIconSortDownToUp, adsIconSortUpToDown, adsIconMenuFilters, adsIconFilter, adsIconArrowUpAndDown, adsIconMenuMoreInfo, adsIconHamburgerMenu, adsIconChevronLeft, adsIconStatusNew } from '@ascentgl/ads-icons/icons';
6
6
  import * as i1$1 from '@angular/common';
7
7
  import { CommonModule, NgOptimizedImage, NgTemplateOutlet, NgClass, NgStyle, DOCUMENT } from '@angular/common';
8
8
  import * as i2 from '@angular/material/badge';
@@ -55,7 +55,7 @@ import * as i6$1 from '@angular/material/expansion';
55
55
  import { MatExpansionPanel, MatExpansionPanelTitle, MatExpansionPanelHeader, MatExpansionPanelDescription, MatAccordion } from '@angular/material/expansion';
56
56
  import { ModuleRegistry, AllCommunityModule, provideGlobalGridOptions, themeQuartz } from 'ag-grid-community';
57
57
  import * as i4$3 from '@angular/material/menu';
58
- import { MatMenuTrigger, MatMenuModule, MatMenu, MatMenuItem } from '@angular/material/menu';
58
+ import { MatMenuModule, MatMenuTrigger, MatMenu, MatMenuItem } from '@angular/material/menu';
59
59
  import * as i3$4 from 'ag-grid-angular';
60
60
  import { AgGridAngular } from 'ag-grid-angular';
61
61
  import * as i3$5 from 'angular-split';
@@ -7030,6 +7030,388 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
7030
7030
  }]
7031
7031
  }] });
7032
7032
 
7033
+ class AdsColumnSortFilterMenuComponent {
7034
+ /** @ignore */
7035
+ constructor(registry) {
7036
+ this.registry = registry;
7037
+ /** Current sort direction for this column */
7038
+ this.currentSortDirection = null;
7039
+ /** Currently selected filter values */
7040
+ this.selectedFilterValues = [];
7041
+ /** Emits when sort option is selected */
7042
+ this.sortChanged = new EventEmitter();
7043
+ /** Emits when filter options change */
7044
+ this.filterChanged = new EventEmitter();
7045
+ /** Emits when hide column is clicked */
7046
+ this.hideColumn = new EventEmitter();
7047
+ /** @ignore */
7048
+ this.searchControl = new FormControl('', { nonNullable: true });
7049
+ /** @ignore */
7050
+ this.selectAllControl = new FormControl(true, { nonNullable: true });
7051
+ /** @ignore */
7052
+ this.filterOptions = signal([], ...(ngDevMode ? [{ debugName: "filterOptions" }] : []));
7053
+ /** @ignore */
7054
+ this.filteredOptions = signal([], ...(ngDevMode ? [{ debugName: "filteredOptions" }] : []));
7055
+ /** @ignore */
7056
+ this.searchValue = signal('', ...(ngDevMode ? [{ debugName: "searchValue" }] : []));
7057
+ /** @ignore */
7058
+ this.noResultsFound = signal(false, ...(ngDevMode ? [{ debugName: "noResultsFound" }] : []));
7059
+ /** @ignore */
7060
+ this.destroy$ = new Subject();
7061
+ /** @ignore */
7062
+ this.optionSubscriptions = [];
7063
+ /** @ignore - Flag to prevent circular updates */
7064
+ this.isBatchUpdate = false;
7065
+ /** @ignore */
7066
+ this.initializedConfigField = null;
7067
+ /** @ignore - tracks if we're currently emitting a change to prevent sync loop */
7068
+ this.isEmittingChange = false;
7069
+ /** Maximum characters before text is considered truncated */
7070
+ this.MAX_LABEL_LENGTH = 25;
7071
+ this.registry.register([
7072
+ adsIconSortDownToUp,
7073
+ adsIconSortUpToDown,
7074
+ adsIconCheckCircleFilled,
7075
+ adsIconVisibilityEyeNone,
7076
+ ]);
7077
+ }
7078
+ /** @ignore */
7079
+ ngOnInit() {
7080
+ this.initializeFilterOptions();
7081
+ this.setupSearchSubscription();
7082
+ this.setupSelectAllSubscription();
7083
+ }
7084
+ /** @ignore */
7085
+ ngOnChanges(changes) {
7086
+ if (changes['config'] && !changes['config'].firstChange) {
7087
+ const newField = changes['config'].currentValue?.field;
7088
+ if (newField !== this.initializedConfigField) {
7089
+ this.initializeFilterOptions();
7090
+ }
7091
+ }
7092
+ if (changes['selectedFilterValues'] && !changes['selectedFilterValues'].firstChange) {
7093
+ if (!this.isEmittingChange) {
7094
+ this.syncFilterOptionsWithSelectedValues();
7095
+ }
7096
+ }
7097
+ }
7098
+ /** @ignore */
7099
+ ngOnDestroy() {
7100
+ this.destroy$.next();
7101
+ this.destroy$.complete();
7102
+ this.clearOptionSubscriptions();
7103
+ }
7104
+ /** @ignore */
7105
+ clearOptionSubscriptions() {
7106
+ this.optionSubscriptions.forEach(sub => sub.unsubscribe());
7107
+ this.optionSubscriptions = [];
7108
+ }
7109
+ /** @ignore */
7110
+ syncFilterOptionsWithSelectedValues() {
7111
+ const options = this.filterOptions();
7112
+ if (options.length === 0)
7113
+ return;
7114
+ this.isBatchUpdate = true;
7115
+ options.forEach((option) => {
7116
+ const shouldBeSelected = this.selectedFilterValues.includes(option.value);
7117
+ if (option.control.value !== shouldBeSelected) {
7118
+ option.control.setValue(shouldBeSelected, { emitEvent: false });
7119
+ }
7120
+ });
7121
+ // Trigger signal update to notify Angular of changes
7122
+ this.filterOptions.set([...options]);
7123
+ // Re-apply search filter to update filteredOptions
7124
+ this.filterOptionsBySearch(this.searchValue());
7125
+ this.isBatchUpdate = false;
7126
+ this.updateSelectAllState();
7127
+ }
7128
+ /** @ignore */
7129
+ initializeFilterOptions() {
7130
+ this.clearOptionSubscriptions();
7131
+ if (!this.config?.filterOptions) {
7132
+ this.filterOptions.set([]);
7133
+ this.filteredOptions.set([]);
7134
+ this.initializedConfigField = null;
7135
+ return;
7136
+ }
7137
+ this.initializedConfigField = this.config.field;
7138
+ const options = this.config.filterOptions.map((value) => {
7139
+ // If selectedFilterValues is empty, default to selected (initial state before parent sets values)
7140
+ // Otherwise, check if value is in selectedFilterValues
7141
+ const isSelected = this.selectedFilterValues.length === 0 || this.selectedFilterValues.includes(value);
7142
+ const control = new FormControl(isSelected, { nonNullable: true });
7143
+ // Subscribe to control value changes
7144
+ const subscription = control.valueChanges.subscribe(() => {
7145
+ if (!this.isBatchUpdate) {
7146
+ this.onOptionChanged();
7147
+ }
7148
+ });
7149
+ this.optionSubscriptions.push(subscription);
7150
+ return {
7151
+ value,
7152
+ label: value,
7153
+ control,
7154
+ };
7155
+ });
7156
+ this.filterOptions.set(options);
7157
+ this.filteredOptions.set([...options]);
7158
+ this.updateSelectAllState();
7159
+ }
7160
+ /** @ignore */
7161
+ setupSearchSubscription() {
7162
+ this.searchControl.valueChanges.pipe(takeUntil$1(this.destroy$)).subscribe((value) => {
7163
+ this.searchValue.set(value);
7164
+ this.filterOptionsBySearch(value);
7165
+ });
7166
+ }
7167
+ /** @ignore */
7168
+ setupSelectAllSubscription() {
7169
+ this.selectAllSubscription = this.selectAllControl.valueChanges
7170
+ .pipe(takeUntil$1(this.destroy$))
7171
+ .subscribe((isChecked) => {
7172
+ if (this.isBatchUpdate)
7173
+ return;
7174
+ this.isBatchUpdate = true;
7175
+ // Update all filter options (both filtered and main list share same objects)
7176
+ const allOptions = this.filterOptions();
7177
+ const filteredValues = new Set(this.filteredOptions().map(o => o.value));
7178
+ allOptions.forEach((option) => {
7179
+ // Only update options that are currently visible (filtered)
7180
+ if (filteredValues.has(option.value)) {
7181
+ option.control.setValue(isChecked, { emitEvent: false });
7182
+ }
7183
+ });
7184
+ // Trigger signal update to notify Angular of changes
7185
+ this.filterOptions.set([...allOptions]);
7186
+ this.filteredOptions.set(allOptions.filter(o => filteredValues.has(o.value)));
7187
+ this.isBatchUpdate = false;
7188
+ // Emit the filter change
7189
+ this.emitFilterChange();
7190
+ });
7191
+ }
7192
+ /** @ignore */
7193
+ filterOptionsBySearch(searchTerm) {
7194
+ const allOptions = this.filterOptions();
7195
+ if (!searchTerm) {
7196
+ this.filteredOptions.set([...allOptions]);
7197
+ this.noResultsFound.set(false);
7198
+ this.updateSelectAllState();
7199
+ return;
7200
+ }
7201
+ const lowerSearch = searchTerm.toLowerCase();
7202
+ const filtered = allOptions.filter((option) => option.label.toLowerCase().startsWith(lowerSearch));
7203
+ this.filteredOptions.set(filtered);
7204
+ this.noResultsFound.set(filtered.length === 0);
7205
+ this.updateSelectAllState();
7206
+ }
7207
+ /** @ignore */
7208
+ onOptionChanged() {
7209
+ this.updateSelectAllState();
7210
+ this.emitFilterChange();
7211
+ }
7212
+ /** @ignore */
7213
+ updateSelectAllState() {
7214
+ this.isBatchUpdate = true;
7215
+ // Check ALL options, not just filtered ones
7216
+ const allOptions = this.filterOptions();
7217
+ const allChecked = allOptions.length > 0 && allOptions.every((opt) => opt.control.value);
7218
+ this.selectAllControl.setValue(allChecked, { emitEvent: false });
7219
+ this.isBatchUpdate = false;
7220
+ }
7221
+ /** @ignore */
7222
+ emitFilterChange() {
7223
+ const selectedValues = this.filterOptions()
7224
+ .filter((opt) => opt.control.value)
7225
+ .map((opt) => opt.value);
7226
+ this.isEmittingChange = true;
7227
+ this.filterChanged.emit({
7228
+ field: this.config.field,
7229
+ values: selectedValues,
7230
+ });
7231
+ // Reset flag after a microtask
7232
+ Promise.resolve().then(() => {
7233
+ this.isEmittingChange = false;
7234
+ });
7235
+ }
7236
+ /** @ignore */
7237
+ onSortOptionClick(direction) {
7238
+ const newDirection = this.currentSortDirection === direction ? null : direction;
7239
+ this.sortChanged.emit({
7240
+ field: this.config.field,
7241
+ direction: newDirection,
7242
+ });
7243
+ }
7244
+ /** @ignore */
7245
+ onHideColumnClick() {
7246
+ this.hideColumn.emit(this.config.field);
7247
+ }
7248
+ /** @ignore */
7249
+ isSortActive(direction) {
7250
+ return this.currentSortDirection === direction;
7251
+ }
7252
+ /** @ignore */
7253
+ get hasFilterOptions() {
7254
+ return !!this.config?.filterOptions && this.config.filterOptions.length > 0;
7255
+ }
7256
+ /** @ignore */
7257
+ get hasSortOptions() {
7258
+ return !!this.config?.sortOptions && this.config.sortOptions.length > 0;
7259
+ }
7260
+ /** @ignore */
7261
+ get sortOptions() {
7262
+ return this.config?.sortOptions || [];
7263
+ }
7264
+ /** @ignore - Check if text would be truncated based on character length */
7265
+ isTextTruncated(text) {
7266
+ return text.length > this.MAX_LABEL_LENGTH;
7267
+ }
7268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuComponent, deps: [{ token: i1.AdsIconRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
7269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AdsColumnSortFilterMenuComponent, isStandalone: false, selector: "ads-column-sort-filter-menu", inputs: { config: "config", currentSortDirection: "currentSortDirection", selectedFilterValues: "selectedFilterValues" }, outputs: { sortChanged: "sortChanged", filterChanged: "filterChanged", hideColumn: "hideColumn" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"column-sort-filter-menu\"\n (click)=\"$event.stopPropagation()\"\n [class.full-height]=\"hasFilterOptions && hasSortOptions\"\n>\n <!-- Sort Options -->\n @if (hasSortOptions) {\n <div class=\"sort-section\">\n @for (sortOption of sortOptions; track sortOption.direction) {\n <div\n class=\"sort-option\"\n [class.active]=\"isSortActive(sortOption.direction)\"\n (click)=\"onSortOptionClick(sortOption.direction)\"\n >\n <ads-icon\n [name]=\"sortOption.direction === 'asc' ? 'sort_down_to_up' : 'sort_up_to_down'\"\n [theme]=\"isSortActive(sortOption.direction) ? 'secondary' : 'iconPrimary'\"\n size=\"xxs_16\"\n class=\"sort-icon\"\n />\n <span class=\"sort-label\">{{ sortOption.label }}</span>\n @if (isSortActive(sortOption.direction)) {\n <ads-icon\n name=\"check_circle_filled\"\n theme=\"secondary\"\n size=\"xxs_16\"\n />\n }\n </div>\n }\n </div>\n }\n\n @if (hasFilterOptions && hasSortOptions) {\n <ads-divider />\n }\n\n <!-- Filter Section -->\n @if (hasFilterOptions) {\n <div class=\"filter-section\">\n <ads-search-input\n [control]=\"searchControl\"\n placeholder=\"Filter Search\"\n [showFooter]=\"false\"\n />\n\n @if (noResultsFound()) {\n <p class=\"no-results\">\n Can't find \"{{ searchValue() }}.\" Try searching something else.\n </p>\n } @else {\n <div class=\"filter-options\">\n <!-- Select All - only show when not searching -->\n @if (!searchValue()) {\n <ads-checkbox\n [control]=\"selectAllControl\"\n label=\"Select All\"\n [showFooter]=\"false\"\n />\n }\n\n <!-- Filter Options List -->\n @for (option of filteredOptions(); track option.value) {\n <div class=\"filter-option-wrapper\" [matTooltip]=\"option.label\" [matTooltipDisabled]=\"!isTextTruncated(option.label)\">\n <ads-checkbox\n [control]=\"option.control\"\n [label]=\"option.label\"\n [showFooter]=\"false\"\n />\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Hide Column -->\n <div class=\"hide-column-section\" (click)=\"onHideColumnClick()\">\n <ads-icon name=\"visibility_eye_none\" theme=\"iconPrimary\" stroke=\"iconPrimary\" size=\"xxs_16\" />\n <span>Hide Column</span>\n </div>\n</div>\n\n", styles: [".column-sort-filter-menu{width:234px;max-height:358px;background-color:var(--color-white);display:flex;flex-direction:column}.column-sort-filter-menu.full-height{height:358px}.column-sort-filter-menu .sort-section{padding:0;flex-shrink:0}.column-sort-filter-menu .sort-section .sort-option{display:flex;align-items:center;gap:8px;padding:12px;cursor:pointer;transition:background-color .2s ease}.column-sort-filter-menu .sort-section .sort-option .sort-label{font-size:16px;line-height:21px;color:var(--color-dark)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active){background-color:var(--color-secondary-hover)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active) .sort-label{color:var(--color-white)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active) .sort-icon ::ng-deep svg{fill:var(--color-white)!important}.column-sort-filter-menu .sort-section .sort-option.active{background-color:var(--color-secondary-10)}.column-sort-filter-menu .filter-section{padding:0 12px;flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.column-sort-filter-menu .filter-section ads-search-input{display:block;padding:12px 0;flex-shrink:0}.column-sort-filter-menu .filter-section .no-results{color:var(--color-error);font-size:12px;line-height:16px;padding:12px 0;font-weight:600;margin:0}.column-sort-filter-menu .filter-section .filter-options{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0}.column-sort-filter-menu .filter-section .filter-options .filter-option-wrapper ads-checkbox{display:block}.column-sort-filter-menu .filter-section .filter-options .filter-option-wrapper ads-checkbox ::ng-deep .checkbox-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}.column-sort-filter-menu .hide-column-section{display:flex;align-items:center;gap:8px;padding:12px;cursor:pointer;transition:background-color .2s ease;flex-shrink:0;border-top:1px solid var(--color-light)}.column-sort-filter-menu .hide-column-section:hover{background-color:var(--color-secondary-hover)}.column-sort-filter-menu .hide-column-section:hover span{color:var(--color-white)}.column-sort-filter-menu .hide-column-section:hover ads-icon ::ng-deep svg{fill:var(--color-white)!important;stroke:var(--color-white)!important}.column-sort-filter-menu .hide-column-section:active{background-color:var(--color-secondary-pressed)}.column-sort-filter-menu .hide-column-section:active span{color:var(--color-white)}.column-sort-filter-menu .hide-column-section:active ads-icon ::ng-deep svg{fill:var(--color-white)!important;stroke:var(--color-white)!important}.column-sort-filter-menu .hide-column-section span{font-size:16px;line-height:21px;color:var(--color-dark)}\n"], dependencies: [{ kind: "component", type: i1.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "component", type: AdsSearchInputComponent, selector: "ads-search-input", inputs: ["searchCallback", "isIconClickable", "searchEmptyValue", "loading"] }, { kind: "component", type: AdsCheckboxComponent, selector: "ads-checkbox", inputs: ["indeterminate", "width", "tooltip", "tooltipHref", "size"] }, { kind: "component", type: DividerComponent, selector: "ads-divider", inputs: ["margin", "color"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
7270
+ }
7271
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuComponent, decorators: [{
7272
+ type: Component,
7273
+ args: [{ selector: 'ads-column-sort-filter-menu', standalone: false, template: "<div\n class=\"column-sort-filter-menu\"\n (click)=\"$event.stopPropagation()\"\n [class.full-height]=\"hasFilterOptions && hasSortOptions\"\n>\n <!-- Sort Options -->\n @if (hasSortOptions) {\n <div class=\"sort-section\">\n @for (sortOption of sortOptions; track sortOption.direction) {\n <div\n class=\"sort-option\"\n [class.active]=\"isSortActive(sortOption.direction)\"\n (click)=\"onSortOptionClick(sortOption.direction)\"\n >\n <ads-icon\n [name]=\"sortOption.direction === 'asc' ? 'sort_down_to_up' : 'sort_up_to_down'\"\n [theme]=\"isSortActive(sortOption.direction) ? 'secondary' : 'iconPrimary'\"\n size=\"xxs_16\"\n class=\"sort-icon\"\n />\n <span class=\"sort-label\">{{ sortOption.label }}</span>\n @if (isSortActive(sortOption.direction)) {\n <ads-icon\n name=\"check_circle_filled\"\n theme=\"secondary\"\n size=\"xxs_16\"\n />\n }\n </div>\n }\n </div>\n }\n\n @if (hasFilterOptions && hasSortOptions) {\n <ads-divider />\n }\n\n <!-- Filter Section -->\n @if (hasFilterOptions) {\n <div class=\"filter-section\">\n <ads-search-input\n [control]=\"searchControl\"\n placeholder=\"Filter Search\"\n [showFooter]=\"false\"\n />\n\n @if (noResultsFound()) {\n <p class=\"no-results\">\n Can't find \"{{ searchValue() }}.\" Try searching something else.\n </p>\n } @else {\n <div class=\"filter-options\">\n <!-- Select All - only show when not searching -->\n @if (!searchValue()) {\n <ads-checkbox\n [control]=\"selectAllControl\"\n label=\"Select All\"\n [showFooter]=\"false\"\n />\n }\n\n <!-- Filter Options List -->\n @for (option of filteredOptions(); track option.value) {\n <div class=\"filter-option-wrapper\" [matTooltip]=\"option.label\" [matTooltipDisabled]=\"!isTextTruncated(option.label)\">\n <ads-checkbox\n [control]=\"option.control\"\n [label]=\"option.label\"\n [showFooter]=\"false\"\n />\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Hide Column -->\n <div class=\"hide-column-section\" (click)=\"onHideColumnClick()\">\n <ads-icon name=\"visibility_eye_none\" theme=\"iconPrimary\" stroke=\"iconPrimary\" size=\"xxs_16\" />\n <span>Hide Column</span>\n </div>\n</div>\n\n", styles: [".column-sort-filter-menu{width:234px;max-height:358px;background-color:var(--color-white);display:flex;flex-direction:column}.column-sort-filter-menu.full-height{height:358px}.column-sort-filter-menu .sort-section{padding:0;flex-shrink:0}.column-sort-filter-menu .sort-section .sort-option{display:flex;align-items:center;gap:8px;padding:12px;cursor:pointer;transition:background-color .2s ease}.column-sort-filter-menu .sort-section .sort-option .sort-label{font-size:16px;line-height:21px;color:var(--color-dark)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active){background-color:var(--color-secondary-hover)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active) .sort-label{color:var(--color-white)}.column-sort-filter-menu .sort-section .sort-option:hover:not(.active) .sort-icon ::ng-deep svg{fill:var(--color-white)!important}.column-sort-filter-menu .sort-section .sort-option.active{background-color:var(--color-secondary-10)}.column-sort-filter-menu .filter-section{padding:0 12px;flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.column-sort-filter-menu .filter-section ads-search-input{display:block;padding:12px 0;flex-shrink:0}.column-sort-filter-menu .filter-section .no-results{color:var(--color-error);font-size:12px;line-height:16px;padding:12px 0;font-weight:600;margin:0}.column-sort-filter-menu .filter-section .filter-options{flex:1;overflow-y:auto;overflow-x:hidden;min-height:0}.column-sort-filter-menu .filter-section .filter-options .filter-option-wrapper ads-checkbox{display:block}.column-sort-filter-menu .filter-section .filter-options .filter-option-wrapper ads-checkbox ::ng-deep .checkbox-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}.column-sort-filter-menu .hide-column-section{display:flex;align-items:center;gap:8px;padding:12px;cursor:pointer;transition:background-color .2s ease;flex-shrink:0;border-top:1px solid var(--color-light)}.column-sort-filter-menu .hide-column-section:hover{background-color:var(--color-secondary-hover)}.column-sort-filter-menu .hide-column-section:hover span{color:var(--color-white)}.column-sort-filter-menu .hide-column-section:hover ads-icon ::ng-deep svg{fill:var(--color-white)!important;stroke:var(--color-white)!important}.column-sort-filter-menu .hide-column-section:active{background-color:var(--color-secondary-pressed)}.column-sort-filter-menu .hide-column-section:active span{color:var(--color-white)}.column-sort-filter-menu .hide-column-section:active ads-icon ::ng-deep svg{fill:var(--color-white)!important;stroke:var(--color-white)!important}.column-sort-filter-menu .hide-column-section span{font-size:16px;line-height:21px;color:var(--color-dark)}\n"] }]
7274
+ }], ctorParameters: () => [{ type: i1.AdsIconRegistry }], propDecorators: { config: [{
7275
+ type: Input
7276
+ }], currentSortDirection: [{
7277
+ type: Input
7278
+ }], selectedFilterValues: [{
7279
+ type: Input
7280
+ }], sortChanged: [{
7281
+ type: Output
7282
+ }], filterChanged: [{
7283
+ type: Output
7284
+ }], hideColumn: [{
7285
+ type: Output
7286
+ }] } });
7287
+
7288
+ class AdsCustomHeaderComponent {
7289
+ constructor(registry) {
7290
+ this.registry = registry;
7291
+ this.menuOpen = false;
7292
+ this.registry.register([adsIconMenuFilters]);
7293
+ }
7294
+ agInit(params) {
7295
+ this.params = params;
7296
+ }
7297
+ refresh(params) {
7298
+ this.params = params;
7299
+ return true;
7300
+ }
7301
+ get displayName() {
7302
+ return this.params.displayName || '';
7303
+ }
7304
+ get field() {
7305
+ return this.params.column.getColId();
7306
+ }
7307
+ get hasSortFilterConfig() {
7308
+ return !!this.params.sortFilterConfig;
7309
+ }
7310
+ get sortFilterConfig() {
7311
+ return this.params.sortFilterConfig;
7312
+ }
7313
+ get sortDirection() {
7314
+ return this.params.getSortDirection?.(this.field) ?? null;
7315
+ }
7316
+ get filterValues() {
7317
+ return this.params.getFilterValues?.(this.field) ?? [];
7318
+ }
7319
+ get isColumnSorted() {
7320
+ return this.params.isColumnSorted?.(this.field) ?? false;
7321
+ }
7322
+ get isColumnFiltered() {
7323
+ return this.params.isColumnFiltered?.(this.field) ?? false;
7324
+ }
7325
+ get isActive() {
7326
+ return this.isColumnSorted || this.isColumnFiltered;
7327
+ }
7328
+ get isLastColumn() {
7329
+ const allColumns = this.params.api.getAllDisplayedColumns();
7330
+ const lastColumn = allColumns[allColumns.length - 1];
7331
+ return this.params.column === lastColumn;
7332
+ }
7333
+ onSortChanged(event) {
7334
+ this.params.onSortChanged?.(event);
7335
+ }
7336
+ onFilterChanged(event) {
7337
+ this.params.onFilterChanged?.(event);
7338
+ }
7339
+ onHideColumn(field) {
7340
+ this.params.onHideColumn?.(field);
7341
+ this.menuOpen = false;
7342
+ }
7343
+ toggleMenu() {
7344
+ this.menuOpen = !this.menuOpen;
7345
+ }
7346
+ closeMenu() {
7347
+ this.menuOpen = false;
7348
+ }
7349
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderComponent, deps: [{ token: i1.AdsIconRegistry }], target: i0.ɵɵFactoryTarget.Component }); }
7350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AdsCustomHeaderComponent, isStandalone: false, selector: "ads-custom-header", ngImport: i0, template: "<div class=\"ads-custom-header\">\n <span\n class=\"menu-trigger-anchor\"\n [class.align-right]=\"isLastColumn\"\n #menuTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"sortFilterMenu\"\n (menuOpened)=\"menuOpen = true\"\n (menuClosed)=\"menuOpen = false\"\n ></span>\n\n <span class=\"header-text\">{{ displayName }}</span>\n\n @if (hasSortFilterConfig) {\n <button\n class=\"header-menu-button\"\n [class.active]=\"isActive\"\n (click)=\"menuTrigger.openMenu(); $event.stopPropagation()\"\n >\n <ads-icon name=\"menu_filters\" theme=\"iconPrimary\" stroke=\"iconPrimary\" size=\"auto\" />\n </button>\n }\n</div>\n\n<mat-menu #sortFilterMenu=\"matMenu\" class=\"column-sort-filter-panel\" [xPosition]=\"isLastColumn ? 'before' : 'after'\">\n @if (sortFilterConfig) {\n <ads-column-sort-filter-menu\n [config]=\"sortFilterConfig\"\n [currentSortDirection]=\"sortDirection\"\n [selectedFilterValues]=\"filterValues\"\n (sortChanged)=\"onSortChanged($event)\"\n (filterChanged)=\"onFilterChanged($event)\"\n (hideColumn)=\"onHideColumn($event)\"\n />\n }\n</mat-menu>\n\n", styles: [":host{display:block;width:100%;height:100%}.ads-custom-header{display:flex;align-items:center;justify-content:flex-start;width:100%;height:100%;position:relative}.ads-custom-header .menu-trigger-anchor{position:absolute;left:0;bottom:0;width:1px;height:1px;pointer-events:none}.ads-custom-header .menu-trigger-anchor.align-right{left:auto;right:0}.ads-custom-header .header-text{font-weight:600;font-size:16px;line-height:21px;color:var(--color-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ads-custom-header .header-menu-button{display:flex;align-items:center;justify-content:center;gap:2px;padding:4px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s ease;flex-shrink:0}::ng-deep .column-sort-filter-panel{margin-top:1px}::ng-deep .column-sort-filter-panel .mat-mdc-menu-content{padding:0}\n"], dependencies: [{ kind: "component", type: i1.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "component", type: i4$3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i4$3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: AdsColumnSortFilterMenuComponent, selector: "ads-column-sort-filter-menu", inputs: ["config", "currentSortDirection", "selectedFilterValues"], outputs: ["sortChanged", "filterChanged", "hideColumn"] }] }); }
7351
+ }
7352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderComponent, decorators: [{
7353
+ type: Component,
7354
+ args: [{ selector: 'ads-custom-header', standalone: false, template: "<div class=\"ads-custom-header\">\n <span\n class=\"menu-trigger-anchor\"\n [class.align-right]=\"isLastColumn\"\n #menuTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"sortFilterMenu\"\n (menuOpened)=\"menuOpen = true\"\n (menuClosed)=\"menuOpen = false\"\n ></span>\n\n <span class=\"header-text\">{{ displayName }}</span>\n\n @if (hasSortFilterConfig) {\n <button\n class=\"header-menu-button\"\n [class.active]=\"isActive\"\n (click)=\"menuTrigger.openMenu(); $event.stopPropagation()\"\n >\n <ads-icon name=\"menu_filters\" theme=\"iconPrimary\" stroke=\"iconPrimary\" size=\"auto\" />\n </button>\n }\n</div>\n\n<mat-menu #sortFilterMenu=\"matMenu\" class=\"column-sort-filter-panel\" [xPosition]=\"isLastColumn ? 'before' : 'after'\">\n @if (sortFilterConfig) {\n <ads-column-sort-filter-menu\n [config]=\"sortFilterConfig\"\n [currentSortDirection]=\"sortDirection\"\n [selectedFilterValues]=\"filterValues\"\n (sortChanged)=\"onSortChanged($event)\"\n (filterChanged)=\"onFilterChanged($event)\"\n (hideColumn)=\"onHideColumn($event)\"\n />\n }\n</mat-menu>\n\n", styles: [":host{display:block;width:100%;height:100%}.ads-custom-header{display:flex;align-items:center;justify-content:flex-start;width:100%;height:100%;position:relative}.ads-custom-header .menu-trigger-anchor{position:absolute;left:0;bottom:0;width:1px;height:1px;pointer-events:none}.ads-custom-header .menu-trigger-anchor.align-right{left:auto;right:0}.ads-custom-header .header-text{font-weight:600;font-size:16px;line-height:21px;color:var(--color-medium);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ads-custom-header .header-menu-button{display:flex;align-items:center;justify-content:center;gap:2px;padding:4px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s ease;flex-shrink:0}::ng-deep .column-sort-filter-panel{margin-top:1px}::ng-deep .column-sort-filter-panel .mat-mdc-menu-content{padding:0}\n"] }]
7355
+ }], ctorParameters: () => [{ type: i1.AdsIconRegistry }] });
7356
+
7357
+ class AdsColumnSortFilterMenuModule {
7358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7359
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuModule, declarations: [AdsColumnSortFilterMenuComponent], imports: [CommonModule,
7360
+ ReactiveFormsModule,
7361
+ AdsIconModule,
7362
+ AdsSearchInputModule,
7363
+ AdsCheckboxModule,
7364
+ AdsDividerModule,
7365
+ MatTooltip], exports: [AdsColumnSortFilterMenuComponent] }); }
7366
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuModule, imports: [CommonModule,
7367
+ ReactiveFormsModule,
7368
+ AdsIconModule,
7369
+ AdsSearchInputModule,
7370
+ AdsCheckboxModule,
7371
+ AdsDividerModule] }); }
7372
+ }
7373
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsColumnSortFilterMenuModule, decorators: [{
7374
+ type: NgModule,
7375
+ args: [{
7376
+ declarations: [AdsColumnSortFilterMenuComponent],
7377
+ imports: [
7378
+ CommonModule,
7379
+ ReactiveFormsModule,
7380
+ AdsIconModule,
7381
+ AdsSearchInputModule,
7382
+ AdsCheckboxModule,
7383
+ AdsDividerModule,
7384
+ MatTooltip,
7385
+ ],
7386
+ exports: [AdsColumnSortFilterMenuComponent],
7387
+ }]
7388
+ }] });
7389
+
7390
+ class AdsCustomHeaderModule {
7391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7392
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderModule, declarations: [AdsCustomHeaderComponent], imports: [CommonModule,
7393
+ AdsIconModule,
7394
+ MatMenuModule,
7395
+ AdsColumnSortFilterMenuModule], exports: [AdsCustomHeaderComponent] }); }
7396
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderModule, imports: [CommonModule,
7397
+ AdsIconModule,
7398
+ MatMenuModule,
7399
+ AdsColumnSortFilterMenuModule] }); }
7400
+ }
7401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsCustomHeaderModule, decorators: [{
7402
+ type: NgModule,
7403
+ args: [{
7404
+ declarations: [AdsCustomHeaderComponent],
7405
+ imports: [
7406
+ CommonModule,
7407
+ AdsIconModule,
7408
+ MatMenuModule,
7409
+ AdsColumnSortFilterMenuModule,
7410
+ ],
7411
+ exports: [AdsCustomHeaderComponent],
7412
+ }]
7413
+ }] });
7414
+
7033
7415
  class AdsTableButtonComponent {
7034
7416
  constructor() {
7035
7417
  /** The unique ID for the button */
@@ -7086,6 +7468,10 @@ class AdsTableComponent {
7086
7468
  };
7087
7469
  /** Show/hide the header with the column visibility button */
7088
7470
  this.showHeaderActions = false;
7471
+ /** Enable custom column sort/filter menu (optional, default false for backward compatibility) */
7472
+ this.enableCustomSortFilter = false;
7473
+ /** Configuration for custom sort/filter per column */
7474
+ this.columnSortFilterConfigs = [];
7089
7475
  /** Event emitted when all filters are cleared */
7090
7476
  this.filtersCleared = new EventEmitter();
7091
7477
  /** @ignore */
@@ -7103,11 +7489,59 @@ class AdsTableComponent {
7103
7489
  /** @ignore */
7104
7490
  this.sortedColumns = [];
7105
7491
  /** @ignore */
7492
+ this.activeColumnMenu = signal(null, ...(ngDevMode ? [{ debugName: "activeColumnMenu" }] : []));
7493
+ /** @ignore */
7494
+ this.columnSortStates = signal(new Map(), ...(ngDevMode ? [{ debugName: "columnSortStates" }] : []));
7495
+ /** @ignore */
7496
+ this.columnFilterStates = signal(new Map(), ...(ngDevMode ? [{ debugName: "columnFilterStates" }] : []));
7497
+ /** @ignore */
7498
+ this.frameworkComponents = {
7499
+ adsCustomHeader: AdsCustomHeaderComponent,
7500
+ };
7501
+ /** @ignore */
7106
7502
  this.filteredColumns = [];
7107
7503
  /** @ignore */
7108
7504
  this.columnVisibilityMenuOpen = false;
7505
+ /** @ignore */
7506
+ this.isExternalFilterPresent = () => {
7507
+ // Check if any custom column filter is active
7508
+ for (const [field, values] of this.columnFilterStates()) {
7509
+ const config = this.getColumnSortFilterConfig(field);
7510
+ if (config?.filterOptions) {
7511
+ // Filter is active if some but not all options are selected, OR if no options are selected
7512
+ if (values.length === 0 || (values.length > 0 && values.length < config.filterOptions.length)) {
7513
+ return true;
7514
+ }
7515
+ }
7516
+ }
7517
+ return false;
7518
+ };
7519
+ /** @ignore */
7520
+ this.doesExternalFilterPass = (node) => {
7521
+ if (!node.data)
7522
+ return true;
7523
+ for (const [field, selectedValues] of this.columnFilterStates()) {
7524
+ const config = this.getColumnSortFilterConfig(field);
7525
+ if (!config?.filterOptions)
7526
+ continue;
7527
+ // If no values are selected, hide all rows for this filter
7528
+ if (selectedValues.length === 0) {
7529
+ return false;
7530
+ }
7531
+ // If all values are selected, don't filter (show all)
7532
+ if (selectedValues.length === config.filterOptions.length) {
7533
+ continue;
7534
+ }
7535
+ const cellValue = node.data[field];
7536
+ const cellValueStr = cellValue != null ? String(cellValue) : '';
7537
+ if (!selectedValues.includes(cellValueStr)) {
7538
+ return false;
7539
+ }
7540
+ }
7541
+ return true;
7542
+ };
7109
7543
  this.themeQuartz = themeQuartz;
7110
- this.registry.register([adsIconFilter, adsIconVisibilityEyeNone, adsIconArrowUpAndDown, adsIconCross]);
7544
+ this.registry.register([adsIconFilter, adsIconVisibilityEyeNone, adsIconArrowUpAndDown, adsIconCross, adsIconCheckCircleFilled]);
7111
7545
  }
7112
7546
  /** @ignore */
7113
7547
  getBreakpoint(width) {
@@ -7132,6 +7566,69 @@ class AdsTableComponent {
7132
7566
  return this.cachedDefaultColDef;
7133
7567
  }
7134
7568
  /** @ignore */
7569
+ getProcessedColumnDefs() {
7570
+ const columns = this.tableColumnDefs();
7571
+ if (!this.enableCustomSortFilter) {
7572
+ return columns;
7573
+ }
7574
+ // Import the custom header component dynamically
7575
+ return columns.map(col => {
7576
+ const config = this.getColumnSortFilterConfig(col.field || '');
7577
+ if (config) {
7578
+ // Create comparator based on sortType
7579
+ const comparator = this.createComparator(config);
7580
+ return {
7581
+ ...col,
7582
+ headerComponent: 'adsCustomHeader',
7583
+ headerComponentParams: {
7584
+ sortFilterConfig: config,
7585
+ onSortChanged: this.onColumnSortChanged.bind(this),
7586
+ onFilterChanged: this.onColumnFilterChanged.bind(this),
7587
+ onHideColumn: this.onHideColumn.bind(this),
7588
+ getSortDirection: this.getColumnSortDirection.bind(this),
7589
+ getFilterValues: this.getColumnFilterValues.bind(this),
7590
+ isColumnSorted: this.isColumnSorted.bind(this),
7591
+ isColumnFiltered: this.isColumnFiltered.bind(this),
7592
+ },
7593
+ sortable: true, // Enable AG Grid sorting
7594
+ comparator: comparator,
7595
+ filter: false, // Disable default AG Grid filter - we handle filtering externally
7596
+ };
7597
+ }
7598
+ return col;
7599
+ });
7600
+ }
7601
+ /** @ignore */
7602
+ createComparator(config) {
7603
+ const sortType = config.sortType || 'string';
7604
+ if (sortType === 'custom' && config.sortComparator) {
7605
+ return (valueA, valueB, _nodeA, _nodeB, isDescending) => {
7606
+ return config.sortComparator(valueA, valueB, isDescending);
7607
+ };
7608
+ }
7609
+ switch (sortType) {
7610
+ case 'number':
7611
+ return (valueA, valueB) => {
7612
+ const numA = Number(valueA) || 0;
7613
+ const numB = Number(valueB) || 0;
7614
+ return numA - numB;
7615
+ };
7616
+ case 'date':
7617
+ return (valueA, valueB) => {
7618
+ const dateA = valueA ? new Date(valueA).getTime() : 0;
7619
+ const dateB = valueB ? new Date(valueB).getTime() : 0;
7620
+ return dateA - dateB;
7621
+ };
7622
+ case 'string':
7623
+ default:
7624
+ return (valueA, valueB) => {
7625
+ const strA = String(valueA || '').toLowerCase();
7626
+ const strB = String(valueB || '').toLowerCase();
7627
+ return strA.localeCompare(strB);
7628
+ };
7629
+ }
7630
+ }
7631
+ /** @ignore */
7135
7632
  ngAfterViewInit() {
7136
7633
  // Observe the table element for resize changes
7137
7634
  const tableElement = this.elementRef.nativeElement.querySelector('ag-grid-angular');
@@ -7338,10 +7835,27 @@ class AdsTableComponent {
7338
7835
  }
7339
7836
  /** @ignore */
7340
7837
  updateFilteringState() {
7838
+ const filteredColumnsList = [];
7839
+ // Check AG Grid's internal filter model
7341
7840
  if (this.gridApi) {
7342
7841
  const filterModel = this.gridApi.getFilterModel();
7343
- this.filteredColumns = Object.keys(filterModel);
7842
+ filteredColumnsList.push(...Object.keys(filterModel));
7843
+ }
7844
+ // Check custom column filter states
7845
+ for (const [field, values] of this.columnFilterStates()) {
7846
+ const config = this.getColumnSortFilterConfig(field);
7847
+ if (config?.filterOptions) {
7848
+ // Column is filtered if:
7849
+ // - No options are selected (empty array = all unchecked)
7850
+ // - Some but not all options are selected
7851
+ if (values.length === 0 || values.length < config.filterOptions.length) {
7852
+ if (!filteredColumnsList.includes(field)) {
7853
+ filteredColumnsList.push(field);
7854
+ }
7855
+ }
7856
+ }
7344
7857
  }
7858
+ this.filteredColumns = filteredColumnsList;
7345
7859
  }
7346
7860
  /** @ignore */
7347
7861
  onSortChanged() {
@@ -7364,7 +7878,20 @@ class AdsTableComponent {
7364
7878
  /** @ignore */
7365
7879
  clearAllFilters() {
7366
7880
  if (this.gridApi) {
7881
+ // Clear AG Grid's internal filter model
7367
7882
  this.gridApi.setFilterModel(null);
7883
+ // Clear custom column filter states (reset to all options selected)
7884
+ const newStates = new Map();
7885
+ for (const [field] of this.columnFilterStates()) {
7886
+ const config = this.getColumnSortFilterConfig(field);
7887
+ if (config?.filterOptions) {
7888
+ // Reset to all options selected
7889
+ newStates.set(field, [...config.filterOptions]);
7890
+ }
7891
+ }
7892
+ this.columnFilterStates.set(newStates);
7893
+ // Trigger external filter update
7894
+ this.gridApi.onFilterChanged();
7368
7895
  this.updateFilteringState();
7369
7896
  // Emit event to notify the header template that filters were cleared
7370
7897
  this.filtersCleared.emit();
@@ -7377,9 +7904,101 @@ class AdsTableComponent {
7377
7904
  defaultState: { sort: null },
7378
7905
  });
7379
7906
  this.updateSortingState();
7907
+ // Clear custom sort states
7908
+ this.columnSortStates.set(new Map());
7909
+ }
7910
+ }
7911
+ // ============ Custom Sort/Filter Menu Methods ============
7912
+ /** @ignore */
7913
+ getColumnSortFilterConfig(field) {
7914
+ return this.columnSortFilterConfigs.find(config => config.field === field);
7915
+ }
7916
+ /** @ignore */
7917
+ getColumnSortDirection(field) {
7918
+ return this.columnSortStates().get(field) ?? null;
7919
+ }
7920
+ /** @ignore */
7921
+ getColumnFilterValues(field) {
7922
+ const storedValues = this.columnFilterStates().get(field);
7923
+ if (storedValues !== undefined) {
7924
+ return storedValues;
7925
+ }
7926
+ // If no filter state exists for this field, return all options (initial state = all selected)
7927
+ const config = this.getColumnSortFilterConfig(field);
7928
+ return config?.filterOptions ?? [];
7929
+ }
7930
+ /** @ignore */
7931
+ isColumnSorted(field) {
7932
+ return this.columnSortStates().get(field) !== null && this.columnSortStates().get(field) !== undefined;
7933
+ }
7934
+ /** @ignore */
7935
+ isColumnFiltered(field) {
7936
+ const config = this.getColumnSortFilterConfig(field);
7937
+ if (!config?.filterOptions)
7938
+ return false;
7939
+ const selectedValues = this.columnFilterStates().get(field);
7940
+ // Column is filtered if:
7941
+ // - No options are selected (empty array = all unchecked)
7942
+ // - Some but not all options are selected
7943
+ if (selectedValues === undefined)
7944
+ return false;
7945
+ return selectedValues.length === 0 || selectedValues.length < config.filterOptions.length;
7946
+ }
7947
+ /** @ignore */
7948
+ onColumnSortChanged(event) {
7949
+ const newStates = new Map(this.columnSortStates());
7950
+ if (event.direction === null) {
7951
+ newStates.delete(event.field);
7952
+ }
7953
+ else {
7954
+ // Clear other sorts if not multi-sort (single column sort)
7955
+ newStates.clear();
7956
+ newStates.set(event.field, event.direction);
7957
+ }
7958
+ this.columnSortStates.set(newStates);
7959
+ // Apply sort to grid
7960
+ if (this.gridApi) {
7961
+ if (event.direction === null) {
7962
+ this.gridApi.applyColumnState({
7963
+ state: [{ colId: event.field, sort: null }],
7964
+ });
7965
+ }
7966
+ else {
7967
+ this.gridApi.applyColumnState({
7968
+ state: [{ colId: event.field, sort: event.direction }],
7969
+ defaultState: { sort: null },
7970
+ });
7971
+ }
7972
+ this.updateSortingState();
7380
7973
  }
7381
7974
  }
7382
7975
  /** @ignore */
7976
+ onColumnFilterChanged(event) {
7977
+ const newStates = new Map(this.columnFilterStates());
7978
+ newStates.set(event.field, event.values);
7979
+ this.columnFilterStates.set(newStates);
7980
+ // Apply external filter to grid immediately
7981
+ if (this.gridApi) {
7982
+ this.gridApi.onFilterChanged();
7983
+ this.updateFilteringState();
7984
+ }
7985
+ }
7986
+ /** @ignore */
7987
+ onHideColumn(field) {
7988
+ const visibilityItem = this.columnVisibilityList().find(item => item.field === field);
7989
+ if (visibilityItem) {
7990
+ visibilityItem.control.setValue(false);
7991
+ }
7992
+ }
7993
+ /** @ignore */
7994
+ openColumnSortFilterMenu(field) {
7995
+ this.activeColumnMenu.set(field);
7996
+ }
7997
+ /** @ignore */
7998
+ closeColumnSortFilterMenu() {
7999
+ this.activeColumnMenu.set(null);
8000
+ }
8001
+ /** @ignore */
7383
8002
  updateGridColumns() {
7384
8003
  if (!this.gridApi) {
7385
8004
  // If grid is not ready yet, update the column definitions directly
@@ -7584,11 +8203,11 @@ class AdsTableComponent {
7584
8203
  this.unsubscribeFromControls();
7585
8204
  }
7586
8205
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsTableComponent, deps: [{ token: i0.ElementRef }, { token: i1.AdsIconRegistry }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
7587
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AdsTableComponent, isStandalone: false, selector: "ads-table", inputs: { width: "width", height: "height", headerTemplate: "headerTemplate", gridOptions: "gridOptions", rowData: "rowData", columnDefs: "columnDefs", icons: "icons", defaultColDef: "defaultColDef", loading: "loading", columnDefsByBreakpoint: "columnDefsByBreakpoint", showHeaderActions: "showHeaderActions" }, outputs: { filtersCleared: "filtersCleared" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"ads-table-container\" [style.width]=\"width\" [class.with-header]=\"showHeaderActions\">\n @if (showHeaderActions) {\n <div class=\"table-header\">\n <div class=\"header-template\">\n @if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\" />\n }\n </div>\n\n <div class=\"header-actions\">\n <ads-table-button\n id=\"show-hide-columns-button\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n (menuOpened)=\"openColumnVisibilityMenu()\"\n (menuClosed)=\"onColumnVisibilityMenuClosed()\"\n >\n <ads-icon\n name=\"visibility_eye_none\"\n theme=\"secondary\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n {{ hideColumnButtonLabel }}\n </ads-table-button>\n\n <ads-table-button\n id=\"filter-button\"\n [disabled]=\"!isFilteredTable\"\n (click)=\"clearAllFilters()\"\n >\n <ads-icon\n name=\"filter\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ filterButtonLabel }}\n\n @if(isFilteredTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n <ads-table-button\n id=\"sort-button\"\n [disabled]=\"!isSortedTable\"\n (click)=\"clearAllSorting()\"\n >\n <ads-icon\n name=\"arrow_up_and_down\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ sortButtonLabel }}\n @if (isSortedTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n </div>\n </div>\n }\n\n <ag-grid-angular\n [ngStyle]=\"{ height: height }\"\n [icons]=\"getAgGridIcons()\"\n class=\"ag-theme-quartz\"\n [gridOptions]=\"gridOptions\"\n [rowData]=\"rowData\"\n [columnDefs]=\"tableColumnDefs()\"\n [defaultColDef]=\"getDefaultColDef()\"\n (gridReady)=\"gridReady($event)\"\n (firstDataRendered)=\"firstDataRendered($event)\"\n (sortChanged)=\"sortChanged($event)\"\n (filterChanged)=\"filterChanged($event)\"\n [theme]=\"themeQuartz\"\n [loading]=\"loading\"\n />\n</div>\n\n<!-- Column Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\" class=\"column-visibility-menu\" [class.has-header]=\"showHeaderActions\">\n <div class=\"menu-content\" (click)=\"$event.stopPropagation()\">\n <p class=\"dropdown-label\">Show/Hide Columns</p>\n <div class=\"dropdown-body\">\n @for (column of columnVisibilityList(); track $index) {\n <div class=\"column-row\">\n <span\n class=\"column-name\"\n [matTooltip]=\"column.headerName\"\n [matTooltipDisabled]=\"getTooltipDisabled(column.headerName)\"\n >\n {{ column.headerName }}\n </span>\n <div class=\"column-toggle\">\n <ads-slide-toggle\n [id]=\"'toggle-' + column.field\"\n [control]=\"column.control\"\n [showFooter]=\"false\"\n [customTitles]=\"['Show', 'Hide']\"\n />\n </div>\n </div>\n }\n </div>\n\n <ads-divider />\n\n <div class=\"dropdown-footer\">\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"hideAllColumns()\"\n [disabled]=\"allColumnsHidden\"\n variant=\"tertiary\"\n id='hide-all-button'\n size=\"xs\"\n >\n Hide All\n </ads-button>\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"showAllColumns()\"\n [disabled]=\"allColumnsVisible\"\n variant=\"tertiary\"\n id=\"show-all-button\"\n size=\"xs\"\n >\n Show All\n </ads-button>\n </div>\n </div>\n</mat-menu>\n", styles: [":host::ng-deep{--ag-wrapper-border-radius: 10px}:host::ng-deep ag-grid-angular{--ag-grid-size: 4px;--ag-border-radius: 5px;--ag-font-family: \"Roboto\";--ag-font-size: 16px;--ag-header-foreground-color: var(--color-medium);--ag-header-background-color: var(--color-light-30);--ag-background-color: var(--color-white);--ag-header-height: 45px;--ag-row-height: 45px;--ag-border-color: var(--color-light);--ag-foreground-color: var(--color-medium);--ag-spacing: 4px;--ag-inherited-accent-color: var(--color-secondary-hover)}:host::ng-deep ag-grid-angular .ag-header-cell-text{font-weight:600;line-height:21px}:host::ng-deep ag-grid-angular .ag-cell:focus,:host::ng-deep ag-grid-angular .ag-cell-focus{outline:none!important;border:none!important;box-shadow:none!important}:host::ng-deep ag-grid-angular .ag-row,:host::ng-deep ag-grid-angular .ag-header,:host::ng-deep ag-grid-angular .ag-advanced-filter-header{border-bottom:none}:host::ng-deep ag-grid-angular .ag-row-even{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-row-odd{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-sort-indicator-container{min-width:fit-content}:host::ng-deep ag-grid-angular .ag-sort-indicator-icon>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-header-cell-filter-button>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-theme-quartz{--ag-background-color: var(--color-light-30);--ag-foreground-color: var(--color-black);--ag-input-border-color: var(--color-light);--ag-input-focus-border-color: var(--color-medium);--ag-input-focus-box-shadow: none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input::placeholder{color:var(--color-medium);opacity:1}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper:before{background-image:none;content:none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input{padding-left:8px!important}:host::ng-deep .ads-table-container{display:flex;flex-direction:column;width:100%;height:100%}:host::ng-deep .ads-table-container.with-header::ng-deep ag-grid-angular .ag-root-wrapper{border-top:none;border-top-left-radius:0;border-top-right-radius:0}:host::ng-deep .ads-table-container .table-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background-color:var(--color-white);border:1px solid var(--color-light);border-top-left-radius:var(--ag-wrapper-border-radius);border-top-right-radius:var(--ag-wrapper-border-radius)}:host::ng-deep .ads-table-container .table-header .header-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}:host::ng-deep .ads-table-container .table-header .header-actions ads-table-button{display:flex}::ng-deep .column-visibility-menu{width:234px;max-width:498px;border-radius:5px;box-shadow:0 4px 12px #00000026;border:1px solid var(--color-light)}::ng-deep .column-visibility-menu .mat-mdc-menu-content{padding:0}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content{background-color:var(--color-white)}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-label{padding:12px 12px 0;color:var(--color-medium);font-size:12px;font-weight:600;line-height:16px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body{overflow-y:auto}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row{display:flex;justify-content:space-between;align-items:center;padding:0 12px;height:45px;gap:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-name{font-size:16px;font-weight:400;color:var(--color-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px;flex:1}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle{display:flex;justify-content:flex-end}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle ::ng-deep ads-slide-toggle .ads-toggle{height:45px!important}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer{display:flex;justify-content:space-between;gap:12px;padding:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer ::ng-deep ads-button{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i1.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "component", type: i3$4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: AdsSlideToggleComponent, selector: "ads-slide-toggle", inputs: ["enableYesOrNo", "customTitles", "control", "label", "id", "width"] }, { kind: "component", type: AdsButtonComponent, selector: "ads-button", inputs: ["id", "variant", "disabled", "size", "type", "fullWidth"] }, { kind: "component", type: AdsTableButtonComponent, selector: "ads-table-button", inputs: ["id", "disabled", "fullWidth", "matMenuTriggerFor"], outputs: ["menuOpened"] }, { kind: "component", type: DividerComponent, selector: "ads-divider", inputs: ["margin", "color"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4$3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i4$3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
8206
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AdsTableComponent, isStandalone: false, selector: "ads-table", inputs: { width: "width", height: "height", headerTemplate: "headerTemplate", gridOptions: "gridOptions", rowData: "rowData", columnDefs: "columnDefs", icons: "icons", defaultColDef: "defaultColDef", loading: "loading", columnDefsByBreakpoint: "columnDefsByBreakpoint", showHeaderActions: "showHeaderActions", enableCustomSortFilter: "enableCustomSortFilter", columnSortFilterConfigs: "columnSortFilterConfigs" }, outputs: { filtersCleared: "filtersCleared" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"ads-table-container\" [style.width]=\"width\" [class.with-header]=\"showHeaderActions\">\n @if (showHeaderActions) {\n <div class=\"table-header\">\n <div class=\"header-template\">\n @if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\" />\n }\n </div>\n\n <div class=\"header-actions\">\n <ads-table-button\n id=\"show-hide-columns-button\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n (menuOpened)=\"openColumnVisibilityMenu()\"\n (menuClosed)=\"onColumnVisibilityMenuClosed()\"\n >\n <ads-icon\n name=\"visibility_eye_none\"\n theme=\"secondary\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n {{ hideColumnButtonLabel }}\n </ads-table-button>\n\n <ads-table-button\n id=\"filter-button\"\n [disabled]=\"!isFilteredTable\"\n (click)=\"clearAllFilters()\"\n >\n <ads-icon\n name=\"filter\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ filterButtonLabel }}\n\n @if(isFilteredTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n <ads-table-button\n id=\"sort-button\"\n [disabled]=\"!isSortedTable\"\n (click)=\"clearAllSorting()\"\n >\n <ads-icon\n name=\"arrow_up_and_down\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ sortButtonLabel }}\n @if (isSortedTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n </div>\n </div>\n }\n\n <ag-grid-angular\n [ngStyle]=\"{ height: height }\"\n [icons]=\"getAgGridIcons()\"\n class=\"ag-theme-quartz\"\n [gridOptions]=\"gridOptions\"\n [rowData]=\"rowData\"\n [columnDefs]=\"getProcessedColumnDefs()\"\n [defaultColDef]=\"getDefaultColDef()\"\n [components]=\"frameworkComponents\"\n [isExternalFilterPresent]=\"isExternalFilterPresent\"\n [doesExternalFilterPass]=\"doesExternalFilterPass\"\n (gridReady)=\"gridReady($event)\"\n (firstDataRendered)=\"firstDataRendered($event)\"\n (sortChanged)=\"sortChanged($event)\"\n (filterChanged)=\"filterChanged($event)\"\n [theme]=\"themeQuartz\"\n [loading]=\"loading\"\n [enableCellTextSelection]=\"true\"\n [ensureDomOrder]=\"true\"\n />\n\n<!-- Column Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\" class=\"column-visibility-menu\" [class.has-header]=\"showHeaderActions\">\n <div class=\"menu-content\" (click)=\"$event.stopPropagation()\">\n <p class=\"dropdown-label\">Show/Hide Columns</p>\n <div class=\"dropdown-body\">\n @for (column of columnVisibilityList(); track $index) {\n <div class=\"column-row\">\n <span\n class=\"column-name\"\n [matTooltip]=\"column.headerName\"\n [matTooltipDisabled]=\"getTooltipDisabled(column.headerName)\"\n >\n {{ column.headerName }}\n </span>\n <div class=\"column-toggle\">\n <ads-slide-toggle\n [id]=\"'toggle-' + column.field\"\n [control]=\"column.control\"\n [showFooter]=\"false\"\n [customTitles]=\"['Show', 'Hide']\"\n />\n </div>\n </div>\n }\n </div>\n\n <ads-divider />\n\n <div class=\"dropdown-footer\">\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"hideAllColumns()\"\n [disabled]=\"allColumnsHidden\"\n variant=\"tertiary\"\n id='hide-all-button'\n size=\"xs\"\n >\n Hide All\n </ads-button>\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"showAllColumns()\"\n [disabled]=\"allColumnsVisible\"\n variant=\"tertiary\"\n id=\"show-all-button\"\n size=\"xs\"\n >\n Show All\n </ads-button>\n </div>\n </div>\n</mat-menu>\n", styles: [":host::ng-deep{--ag-wrapper-border-radius: 10px}:host::ng-deep ag-grid-angular{--ag-grid-size: 4px;--ag-border-radius: 5px;--ag-font-family: \"Roboto\";--ag-font-size: 16px;--ag-header-foreground-color: var(--color-medium);--ag-header-background-color: var(--color-light-30);--ag-background-color: var(--color-white);--ag-header-height: 45px;--ag-row-height: 45px;--ag-border-color: var(--color-light);--ag-foreground-color: var(--color-medium);--ag-spacing: 4px;--ag-inherited-accent-color: var(--color-secondary-hover)}:host::ng-deep ag-grid-angular .ag-header-cell-text{font-weight:600;line-height:21px}:host::ng-deep ag-grid-angular .ag-cell:focus,:host::ng-deep ag-grid-angular .ag-cell-focus{outline:none!important;border:none!important;box-shadow:none!important}:host::ng-deep ag-grid-angular .ag-row,:host::ng-deep ag-grid-angular .ag-header,:host::ng-deep ag-grid-angular .ag-advanced-filter-header{border-bottom:none}:host::ng-deep ag-grid-angular .ag-row-even{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-row-odd{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-sort-indicator-container{min-width:fit-content}:host::ng-deep ag-grid-angular .ag-sort-indicator-icon>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-header-cell-filter-button>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-theme-quartz{--ag-background-color: var(--color-light-30);--ag-foreground-color: var(--color-black);--ag-input-border-color: var(--color-light);--ag-input-focus-border-color: var(--color-medium);--ag-input-focus-box-shadow: none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input::placeholder{color:var(--color-medium);opacity:1}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper:before{background-image:none;content:none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input{padding-left:8px!important}:host::ng-deep .ads-table-container{display:flex;flex-direction:column;width:100%;height:100%}:host::ng-deep .ads-table-container.with-header::ng-deep ag-grid-angular .ag-root-wrapper{border-top:none;border-top-left-radius:0;border-top-right-radius:0}:host::ng-deep .ads-table-container .table-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background-color:var(--color-white);border:1px solid var(--color-light);border-top-left-radius:var(--ag-wrapper-border-radius);border-top-right-radius:var(--ag-wrapper-border-radius)}:host::ng-deep .ads-table-container .table-header .header-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}:host::ng-deep .ads-table-container .table-header .header-actions ads-table-button{display:flex}::ng-deep .column-visibility-menu{width:234px;max-width:498px;border-radius:5px;box-shadow:0 4px 12px #00000026;border:1px solid var(--color-light)}::ng-deep .column-visibility-menu .mat-mdc-menu-content{padding:0}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content{background-color:var(--color-white)}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-label{padding:12px 12px 0;color:var(--color-medium);font-size:12px;font-weight:600;line-height:16px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body{overflow-y:auto}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row{display:flex;justify-content:space-between;align-items:center;padding:0 12px;height:45px;gap:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-name{font-size:16px;font-weight:400;color:var(--color-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px;flex:1}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle{display:flex;justify-content:flex-end}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle ::ng-deep ads-slide-toggle .ads-toggle{height:45px!important}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer{display:flex;justify-content:space-between;gap:12px;padding:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer ::ng-deep ads-button{flex:1}\n"], dependencies: [{ kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i1.AdsIconComponent, selector: "ads-icon", inputs: ["size", "name", "color", "theme", "stroke"] }, { kind: "component", type: i3$4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: AdsSlideToggleComponent, selector: "ads-slide-toggle", inputs: ["enableYesOrNo", "customTitles", "control", "label", "id", "width"] }, { kind: "component", type: AdsButtonComponent, selector: "ads-button", inputs: ["id", "variant", "disabled", "size", "type", "fullWidth"] }, { kind: "component", type: AdsTableButtonComponent, selector: "ads-table-button", inputs: ["id", "disabled", "fullWidth", "matMenuTriggerFor"], outputs: ["menuOpened"] }, { kind: "component", type: DividerComponent, selector: "ads-divider", inputs: ["margin", "color"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i4$3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i4$3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }] }); }
7588
8207
  }
7589
8208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsTableComponent, decorators: [{
7590
8209
  type: Component,
7591
- args: [{ selector: 'ads-table', standalone: false, template: "<div class=\"ads-table-container\" [style.width]=\"width\" [class.with-header]=\"showHeaderActions\">\n @if (showHeaderActions) {\n <div class=\"table-header\">\n <div class=\"header-template\">\n @if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\" />\n }\n </div>\n\n <div class=\"header-actions\">\n <ads-table-button\n id=\"show-hide-columns-button\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n (menuOpened)=\"openColumnVisibilityMenu()\"\n (menuClosed)=\"onColumnVisibilityMenuClosed()\"\n >\n <ads-icon\n name=\"visibility_eye_none\"\n theme=\"secondary\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n {{ hideColumnButtonLabel }}\n </ads-table-button>\n\n <ads-table-button\n id=\"filter-button\"\n [disabled]=\"!isFilteredTable\"\n (click)=\"clearAllFilters()\"\n >\n <ads-icon\n name=\"filter\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ filterButtonLabel }}\n\n @if(isFilteredTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n <ads-table-button\n id=\"sort-button\"\n [disabled]=\"!isSortedTable\"\n (click)=\"clearAllSorting()\"\n >\n <ads-icon\n name=\"arrow_up_and_down\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ sortButtonLabel }}\n @if (isSortedTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n </div>\n </div>\n }\n\n <ag-grid-angular\n [ngStyle]=\"{ height: height }\"\n [icons]=\"getAgGridIcons()\"\n class=\"ag-theme-quartz\"\n [gridOptions]=\"gridOptions\"\n [rowData]=\"rowData\"\n [columnDefs]=\"tableColumnDefs()\"\n [defaultColDef]=\"getDefaultColDef()\"\n (gridReady)=\"gridReady($event)\"\n (firstDataRendered)=\"firstDataRendered($event)\"\n (sortChanged)=\"sortChanged($event)\"\n (filterChanged)=\"filterChanged($event)\"\n [theme]=\"themeQuartz\"\n [loading]=\"loading\"\n />\n</div>\n\n<!-- Column Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\" class=\"column-visibility-menu\" [class.has-header]=\"showHeaderActions\">\n <div class=\"menu-content\" (click)=\"$event.stopPropagation()\">\n <p class=\"dropdown-label\">Show/Hide Columns</p>\n <div class=\"dropdown-body\">\n @for (column of columnVisibilityList(); track $index) {\n <div class=\"column-row\">\n <span\n class=\"column-name\"\n [matTooltip]=\"column.headerName\"\n [matTooltipDisabled]=\"getTooltipDisabled(column.headerName)\"\n >\n {{ column.headerName }}\n </span>\n <div class=\"column-toggle\">\n <ads-slide-toggle\n [id]=\"'toggle-' + column.field\"\n [control]=\"column.control\"\n [showFooter]=\"false\"\n [customTitles]=\"['Show', 'Hide']\"\n />\n </div>\n </div>\n }\n </div>\n\n <ads-divider />\n\n <div class=\"dropdown-footer\">\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"hideAllColumns()\"\n [disabled]=\"allColumnsHidden\"\n variant=\"tertiary\"\n id='hide-all-button'\n size=\"xs\"\n >\n Hide All\n </ads-button>\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"showAllColumns()\"\n [disabled]=\"allColumnsVisible\"\n variant=\"tertiary\"\n id=\"show-all-button\"\n size=\"xs\"\n >\n Show All\n </ads-button>\n </div>\n </div>\n</mat-menu>\n", styles: [":host::ng-deep{--ag-wrapper-border-radius: 10px}:host::ng-deep ag-grid-angular{--ag-grid-size: 4px;--ag-border-radius: 5px;--ag-font-family: \"Roboto\";--ag-font-size: 16px;--ag-header-foreground-color: var(--color-medium);--ag-header-background-color: var(--color-light-30);--ag-background-color: var(--color-white);--ag-header-height: 45px;--ag-row-height: 45px;--ag-border-color: var(--color-light);--ag-foreground-color: var(--color-medium);--ag-spacing: 4px;--ag-inherited-accent-color: var(--color-secondary-hover)}:host::ng-deep ag-grid-angular .ag-header-cell-text{font-weight:600;line-height:21px}:host::ng-deep ag-grid-angular .ag-cell:focus,:host::ng-deep ag-grid-angular .ag-cell-focus{outline:none!important;border:none!important;box-shadow:none!important}:host::ng-deep ag-grid-angular .ag-row,:host::ng-deep ag-grid-angular .ag-header,:host::ng-deep ag-grid-angular .ag-advanced-filter-header{border-bottom:none}:host::ng-deep ag-grid-angular .ag-row-even{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-row-odd{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-sort-indicator-container{min-width:fit-content}:host::ng-deep ag-grid-angular .ag-sort-indicator-icon>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-header-cell-filter-button>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-theme-quartz{--ag-background-color: var(--color-light-30);--ag-foreground-color: var(--color-black);--ag-input-border-color: var(--color-light);--ag-input-focus-border-color: var(--color-medium);--ag-input-focus-box-shadow: none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input::placeholder{color:var(--color-medium);opacity:1}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper:before{background-image:none;content:none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input{padding-left:8px!important}:host::ng-deep .ads-table-container{display:flex;flex-direction:column;width:100%;height:100%}:host::ng-deep .ads-table-container.with-header::ng-deep ag-grid-angular .ag-root-wrapper{border-top:none;border-top-left-radius:0;border-top-right-radius:0}:host::ng-deep .ads-table-container .table-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background-color:var(--color-white);border:1px solid var(--color-light);border-top-left-radius:var(--ag-wrapper-border-radius);border-top-right-radius:var(--ag-wrapper-border-radius)}:host::ng-deep .ads-table-container .table-header .header-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}:host::ng-deep .ads-table-container .table-header .header-actions ads-table-button{display:flex}::ng-deep .column-visibility-menu{width:234px;max-width:498px;border-radius:5px;box-shadow:0 4px 12px #00000026;border:1px solid var(--color-light)}::ng-deep .column-visibility-menu .mat-mdc-menu-content{padding:0}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content{background-color:var(--color-white)}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-label{padding:12px 12px 0;color:var(--color-medium);font-size:12px;font-weight:600;line-height:16px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body{overflow-y:auto}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row{display:flex;justify-content:space-between;align-items:center;padding:0 12px;height:45px;gap:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-name{font-size:16px;font-weight:400;color:var(--color-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px;flex:1}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle{display:flex;justify-content:flex-end}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle ::ng-deep ads-slide-toggle .ads-toggle{height:45px!important}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer{display:flex;justify-content:space-between;gap:12px;padding:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer ::ng-deep ads-button{flex:1}\n"] }]
8210
+ args: [{ selector: 'ads-table', standalone: false, template: "<div class=\"ads-table-container\" [style.width]=\"width\" [class.with-header]=\"showHeaderActions\">\n @if (showHeaderActions) {\n <div class=\"table-header\">\n <div class=\"header-template\">\n @if (headerTemplate) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\" />\n }\n </div>\n\n <div class=\"header-actions\">\n <ads-table-button\n id=\"show-hide-columns-button\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n (menuOpened)=\"openColumnVisibilityMenu()\"\n (menuClosed)=\"onColumnVisibilityMenuClosed()\"\n >\n <ads-icon\n name=\"visibility_eye_none\"\n theme=\"secondary\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n {{ hideColumnButtonLabel }}\n </ads-table-button>\n\n <ads-table-button\n id=\"filter-button\"\n [disabled]=\"!isFilteredTable\"\n (click)=\"clearAllFilters()\"\n >\n <ads-icon\n name=\"filter\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ filterButtonLabel }}\n\n @if(isFilteredTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n <ads-table-button\n id=\"sort-button\"\n [disabled]=\"!isSortedTable\"\n (click)=\"clearAllSorting()\"\n >\n <ads-icon\n name=\"arrow_up_and_down\"\n theme=\"secondary\"\n size=\"xxxs\"\n />\n {{ sortButtonLabel }}\n @if (isSortedTable) {\n <ads-icon\n name=\"cross\"\n stroke=\"secondary\"\n size=\"xxxs\"\n />\n }\n </ads-table-button>\n </div>\n </div>\n }\n\n <ag-grid-angular\n [ngStyle]=\"{ height: height }\"\n [icons]=\"getAgGridIcons()\"\n class=\"ag-theme-quartz\"\n [gridOptions]=\"gridOptions\"\n [rowData]=\"rowData\"\n [columnDefs]=\"getProcessedColumnDefs()\"\n [defaultColDef]=\"getDefaultColDef()\"\n [components]=\"frameworkComponents\"\n [isExternalFilterPresent]=\"isExternalFilterPresent\"\n [doesExternalFilterPass]=\"doesExternalFilterPass\"\n (gridReady)=\"gridReady($event)\"\n (firstDataRendered)=\"firstDataRendered($event)\"\n (sortChanged)=\"sortChanged($event)\"\n (filterChanged)=\"filterChanged($event)\"\n [theme]=\"themeQuartz\"\n [loading]=\"loading\"\n [enableCellTextSelection]=\"true\"\n [ensureDomOrder]=\"true\"\n />\n\n<!-- Column Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\" class=\"column-visibility-menu\" [class.has-header]=\"showHeaderActions\">\n <div class=\"menu-content\" (click)=\"$event.stopPropagation()\">\n <p class=\"dropdown-label\">Show/Hide Columns</p>\n <div class=\"dropdown-body\">\n @for (column of columnVisibilityList(); track $index) {\n <div class=\"column-row\">\n <span\n class=\"column-name\"\n [matTooltip]=\"column.headerName\"\n [matTooltipDisabled]=\"getTooltipDisabled(column.headerName)\"\n >\n {{ column.headerName }}\n </span>\n <div class=\"column-toggle\">\n <ads-slide-toggle\n [id]=\"'toggle-' + column.field\"\n [control]=\"column.control\"\n [showFooter]=\"false\"\n [customTitles]=\"['Show', 'Hide']\"\n />\n </div>\n </div>\n }\n </div>\n\n <ads-divider />\n\n <div class=\"dropdown-footer\">\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"hideAllColumns()\"\n [disabled]=\"allColumnsHidden\"\n variant=\"tertiary\"\n id='hide-all-button'\n size=\"xs\"\n >\n Hide All\n </ads-button>\n <ads-button\n [fullWidth]=\"true\"\n (click)=\"showAllColumns()\"\n [disabled]=\"allColumnsVisible\"\n variant=\"tertiary\"\n id=\"show-all-button\"\n size=\"xs\"\n >\n Show All\n </ads-button>\n </div>\n </div>\n</mat-menu>\n", styles: [":host::ng-deep{--ag-wrapper-border-radius: 10px}:host::ng-deep ag-grid-angular{--ag-grid-size: 4px;--ag-border-radius: 5px;--ag-font-family: \"Roboto\";--ag-font-size: 16px;--ag-header-foreground-color: var(--color-medium);--ag-header-background-color: var(--color-light-30);--ag-background-color: var(--color-white);--ag-header-height: 45px;--ag-row-height: 45px;--ag-border-color: var(--color-light);--ag-foreground-color: var(--color-medium);--ag-spacing: 4px;--ag-inherited-accent-color: var(--color-secondary-hover)}:host::ng-deep ag-grid-angular .ag-header-cell-text{font-weight:600;line-height:21px}:host::ng-deep ag-grid-angular .ag-cell:focus,:host::ng-deep ag-grid-angular .ag-cell-focus{outline:none!important;border:none!important;box-shadow:none!important}:host::ng-deep ag-grid-angular .ag-row,:host::ng-deep ag-grid-angular .ag-header,:host::ng-deep ag-grid-angular .ag-advanced-filter-header{border-bottom:none}:host::ng-deep ag-grid-angular .ag-row-even{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-row-odd{background-color:var(--color-white)}:host::ng-deep ag-grid-angular .ag-sort-indicator-container{min-width:fit-content}:host::ng-deep ag-grid-angular .ag-sort-indicator-icon>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-header-cell-filter-button>svg{fill:var(--color-medium);stroke:var(--color-medium)}:host::ng-deep ag-grid-angular .ag-theme-quartz{--ag-background-color: var(--color-light-30);--ag-foreground-color: var(--color-black);--ag-input-border-color: var(--color-light);--ag-input-focus-border-color: var(--color-medium);--ag-input-focus-box-shadow: none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input::placeholder{color:var(--color-medium);opacity:1}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper:before{background-image:none;content:none}:host::ng-deep ag-grid-angular .ag-theme-quartz .ag-input-wrapper input{padding-left:8px!important}:host::ng-deep .ads-table-container{display:flex;flex-direction:column;width:100%;height:100%}:host::ng-deep .ads-table-container.with-header::ng-deep ag-grid-angular .ag-root-wrapper{border-top:none;border-top-left-radius:0;border-top-right-radius:0}:host::ng-deep .ads-table-container .table-header{display:flex;justify-content:space-between;align-items:center;padding:16px;background-color:var(--color-white);border:1px solid var(--color-light);border-top-left-radius:var(--ag-wrapper-border-radius);border-top-right-radius:var(--ag-wrapper-border-radius)}:host::ng-deep .ads-table-container .table-header .header-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}:host::ng-deep .ads-table-container .table-header .header-actions ads-table-button{display:flex}::ng-deep .column-visibility-menu{width:234px;max-width:498px;border-radius:5px;box-shadow:0 4px 12px #00000026;border:1px solid var(--color-light)}::ng-deep .column-visibility-menu .mat-mdc-menu-content{padding:0}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content{background-color:var(--color-white)}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-label{padding:12px 12px 0;color:var(--color-medium);font-size:12px;font-weight:600;line-height:16px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body{overflow-y:auto}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row{display:flex;justify-content:space-between;align-items:center;padding:0 12px;height:45px;gap:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-name{font-size:16px;font-weight:400;color:var(--color-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:150px;flex:1}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle{display:flex;justify-content:flex-end}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-body .column-row .column-toggle ::ng-deep ads-slide-toggle .ads-toggle{height:45px!important}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer{display:flex;justify-content:space-between;gap:12px;padding:12px}::ng-deep .column-visibility-menu .mat-mdc-menu-content .menu-content .dropdown-footer ::ng-deep ads-button{flex:1}\n"] }]
7592
8211
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.AdsIconRegistry }, { type: i0.ChangeDetectorRef }], propDecorators: { width: [{
7593
8212
  type: Input
7594
8213
  }], height: [{
@@ -7611,6 +8230,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
7611
8230
  type: Input
7612
8231
  }], showHeaderActions: [{
7613
8232
  type: Input
8233
+ }], enableCustomSortFilter: [{
8234
+ type: Input
8235
+ }], columnSortFilterConfigs: [{
8236
+ type: Input
7614
8237
  }], filtersCleared: [{
7615
8238
  type: Output
7616
8239
  }], menuTrigger: [{
@@ -7643,7 +8266,9 @@ class AdsTableModule {
7643
8266
  AdsTableButtonModule,
7644
8267
  AdsDividerModule,
7645
8268
  MatTooltip,
7646
- MatMenuModule], exports: [AdsTableComponent] }); }
8269
+ MatMenuModule,
8270
+ AdsColumnSortFilterMenuModule,
8271
+ AdsCustomHeaderModule], exports: [AdsTableComponent] }); }
7647
8272
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsTableModule, imports: [CommonModule,
7648
8273
  AdsIconModule,
7649
8274
  AgGridAngular,
@@ -7652,7 +8277,9 @@ class AdsTableModule {
7652
8277
  AdsButtonModule,
7653
8278
  AdsTableButtonModule,
7654
8279
  AdsDividerModule,
7655
- MatMenuModule] }); }
8280
+ MatMenuModule,
8281
+ AdsColumnSortFilterMenuModule,
8282
+ AdsCustomHeaderModule] }); }
7656
8283
  }
7657
8284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AdsTableModule, decorators: [{
7658
8285
  type: NgModule,
@@ -7669,6 +8296,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
7669
8296
  AdsDividerModule,
7670
8297
  MatTooltip,
7671
8298
  MatMenuModule,
8299
+ AdsColumnSortFilterMenuModule,
8300
+ AdsCustomHeaderModule,
7672
8301
  ],
7673
8302
  exports: [AdsTableComponent],
7674
8303
  }]
@@ -9739,5 +10368,5 @@ function provideAdsUi(config) {
9739
10368
  * Generated bundle index. Do not edit.
9740
10369
  */
9741
10370
 
9742
- export { AdsAscentLogoComponent, AdsAscentLogoModule, AdsAvatarComponent, AdsAvatarModule, AdsBreadcrumbComponent, AdsBreadcrumbModule, AdsBubbleComponent, AdsBubbleModule, AdsButtonComponent, AdsButtonContainerComponent, AdsButtonContainerModule, AdsButtonModule, AdsCardComponent, AdsCardModule, AdsCheckboxComponent, AdsCheckboxModule, AdsChipComponent, AdsChipModule, AdsCreateTagComponent, AdsCreateTagModule, AdsDatepickerComponent, AdsDatepickerModule, AdsDatetimepickerComponent, AdsDatetimepickerModule, AdsDividerModule, AdsDragAndDropListComponent, AdsDragAndDropListModule, AdsDropdownComponent, AdsDropdownModule, AdsErrorPageCodeComponent, AdsErrorPageCodeModule, AdsErrorPageComponent, AdsErrorPageModule, AdsExpansionPanelComponent, AdsExpansionPanelModule, AdsFooterComponent, AdsFooterContainerComponent, AdsFooterContainerModule, AdsFooterModule, AdsGenericLogoComponent, AdsGenericLogoModule, AdsHeaderComponent, AdsHeaderContainerComponent, AdsHeaderContainerModule, AdsHeaderModule, AdsHorizontalNavBarComponent, AdsHorizontalNavBarModule, AdsHorizontalStepperComponent, AdsHorizontalStepperModule, AdsIconButtonComponent, AdsIconButtonModule, AdsIconHoverComponent, AdsIconHoverModule, AdsInputComponent, AdsInputDropdownComponent, AdsInputDropdownModule, AdsInputModule, AdsInternationalPhoneFieldComponent, AdsInternationalPhoneFieldModule, AdsLinkButtonComponent, AdsLinkButtonModule, AdsMainMenuComponent, AdsMainMenuModule, AdsModalComponent, AdsModalModule, AdsMultiSelectDropdownComponent, AdsMultiSelectDropdownModule, AdsNavMenuComponent, AdsNavMenuModule, AdsNavigationCollapseHandleComponent, AdsNavigationCollapseHandleModule, AdsNavigationComponent, AdsNavigationHeaderComponent, AdsNavigationHeaderModule, AdsNavigationItemComponent, AdsNavigationItemModule, AdsNavigationItemsContainerComponent, AdsNavigationItemsContainerModule, AdsNavigationModule, AdsNumericBadgeComponent, AdsNumericBadgeModule, AdsNumericStepperComponent, AdsNumericStepperModule, AdsOrgDisplayTextComponent, AdsOrgDisplayTextModule, AdsPeakEssentialsLogoComponent, AdsPeakEssentialsLogoModule, AdsPeakMarketplaceLogoComponent, AdsPeakMarketplaceLogoModule, AdsPeakOrderManagementLogoComponent, AdsPeakOrderManagementLogoModule, AdsPhoneFieldComponent, AdsPhoneFieldModule, AdsPilotPayLogoComponent, AdsPilotPayLogoModule, AdsPrimaryLogoComponent, AdsPrimaryLogoModule, AdsProgressBarComponent, AdsProgressBarModule, AdsProgressIndicatorSpinnerComponent, AdsProgressIndicatorSpinnerModule, AdsProgressSpinnerComponent, AdsProgressSpinnerModule, AdsProgressStepperComponent, AdsProgressStepperModule, AdsRadioButtonComponent, AdsRadioButtonModule, AdsScmsLogoComponent, AdsScmsLogoModule, AdsScmsSideNavBarComponent, AdsScmsSideNavBarModule, AdsSearchDropdownComponent, AdsSearchDropdownModule, AdsSearchInputComponent, AdsSearchInputModule, AdsShellLayoutModule, AdsShipmentHorizontalStepperComponent, AdsShipmentHorizontalStepperModule, AdsSideNavBarComponent, AdsSideNavBarModule, AdsSideNavBarV2Component, AdsSideNavBarV2Module, AdsSlideToggle, AdsSlideToggleComponent, AdsSliderComponent, AdsSliderModule, AdsSnackbarComponent, AdsSnackbarModule, AdsSplashPageComponent, AdsSplashPageModule, AdsStepperComponent, AdsStepperModule, AdsTableComponent, AdsTableModule, AdsTabsComponent, AdsTabsModule, AdsTagComponent, AdsTagContainerComponent, AdsTagContainerModule, AdsTagModule, AdsTextareaComponent, AdsTextareaModule, AdsTimeFieldComponent, AdsTimeFieldModule, AdsTimepickerComponent, AdsTimepickerModule, AdsVerticalSideNavigationStepperComponent, AdsVerticalSideNavigationStepperModule, AdsWizardStepperComponent, AdsWizardStepperModule, AscentCardComponent, AscentCardModule, BadgeColor, Colors, CustomDatetimeAdapter, DividerComponent, ErrorPageDefault, HorizontalStepStatus, MainMenuService, ModalActionType, ModalPanelClass, PanelClass, ShellLayoutComponent, SpinnerSize, StepStatus, TableBreakpoint, ViewportService, WindowService, WizardStepStatus, provideAdsUi };
10371
+ export { AdsAscentLogoComponent, AdsAscentLogoModule, AdsAvatarComponent, AdsAvatarModule, AdsBreadcrumbComponent, AdsBreadcrumbModule, AdsBubbleComponent, AdsBubbleModule, AdsButtonComponent, AdsButtonContainerComponent, AdsButtonContainerModule, AdsButtonModule, AdsCardComponent, AdsCardModule, AdsCheckboxComponent, AdsCheckboxModule, AdsChipComponent, AdsChipModule, AdsColumnSortFilterMenuComponent, AdsColumnSortFilterMenuModule, AdsCreateTagComponent, AdsCreateTagModule, AdsCustomHeaderComponent, AdsCustomHeaderModule, AdsDatepickerComponent, AdsDatepickerModule, AdsDatetimepickerComponent, AdsDatetimepickerModule, AdsDividerModule, AdsDragAndDropListComponent, AdsDragAndDropListModule, AdsDropdownComponent, AdsDropdownModule, AdsErrorPageCodeComponent, AdsErrorPageCodeModule, AdsErrorPageComponent, AdsErrorPageModule, AdsExpansionPanelComponent, AdsExpansionPanelModule, AdsFooterComponent, AdsFooterContainerComponent, AdsFooterContainerModule, AdsFooterModule, AdsGenericLogoComponent, AdsGenericLogoModule, AdsHeaderComponent, AdsHeaderContainerComponent, AdsHeaderContainerModule, AdsHeaderModule, AdsHorizontalNavBarComponent, AdsHorizontalNavBarModule, AdsHorizontalStepperComponent, AdsHorizontalStepperModule, AdsIconButtonComponent, AdsIconButtonModule, AdsIconHoverComponent, AdsIconHoverModule, AdsInputComponent, AdsInputDropdownComponent, AdsInputDropdownModule, AdsInputModule, AdsInternationalPhoneFieldComponent, AdsInternationalPhoneFieldModule, AdsLinkButtonComponent, AdsLinkButtonModule, AdsMainMenuComponent, AdsMainMenuModule, AdsModalComponent, AdsModalModule, AdsMultiSelectDropdownComponent, AdsMultiSelectDropdownModule, AdsNavMenuComponent, AdsNavMenuModule, AdsNavigationCollapseHandleComponent, AdsNavigationCollapseHandleModule, AdsNavigationComponent, AdsNavigationHeaderComponent, AdsNavigationHeaderModule, AdsNavigationItemComponent, AdsNavigationItemModule, AdsNavigationItemsContainerComponent, AdsNavigationItemsContainerModule, AdsNavigationModule, AdsNumericBadgeComponent, AdsNumericBadgeModule, AdsNumericStepperComponent, AdsNumericStepperModule, AdsOrgDisplayTextComponent, AdsOrgDisplayTextModule, AdsPeakEssentialsLogoComponent, AdsPeakEssentialsLogoModule, AdsPeakMarketplaceLogoComponent, AdsPeakMarketplaceLogoModule, AdsPeakOrderManagementLogoComponent, AdsPeakOrderManagementLogoModule, AdsPhoneFieldComponent, AdsPhoneFieldModule, AdsPilotPayLogoComponent, AdsPilotPayLogoModule, AdsPrimaryLogoComponent, AdsPrimaryLogoModule, AdsProgressBarComponent, AdsProgressBarModule, AdsProgressIndicatorSpinnerComponent, AdsProgressIndicatorSpinnerModule, AdsProgressSpinnerComponent, AdsProgressSpinnerModule, AdsProgressStepperComponent, AdsProgressStepperModule, AdsRadioButtonComponent, AdsRadioButtonModule, AdsScmsLogoComponent, AdsScmsLogoModule, AdsScmsSideNavBarComponent, AdsScmsSideNavBarModule, AdsSearchDropdownComponent, AdsSearchDropdownModule, AdsSearchInputComponent, AdsSearchInputModule, AdsShellLayoutModule, AdsShipmentHorizontalStepperComponent, AdsShipmentHorizontalStepperModule, AdsSideNavBarComponent, AdsSideNavBarModule, AdsSideNavBarV2Component, AdsSideNavBarV2Module, AdsSlideToggle, AdsSlideToggleComponent, AdsSliderComponent, AdsSliderModule, AdsSnackbarComponent, AdsSnackbarModule, AdsSplashPageComponent, AdsSplashPageModule, AdsStepperComponent, AdsStepperModule, AdsTableComponent, AdsTableModule, AdsTabsComponent, AdsTabsModule, AdsTagComponent, AdsTagContainerComponent, AdsTagContainerModule, AdsTagModule, AdsTextareaComponent, AdsTextareaModule, AdsTimeFieldComponent, AdsTimeFieldModule, AdsTimepickerComponent, AdsTimepickerModule, AdsVerticalSideNavigationStepperComponent, AdsVerticalSideNavigationStepperModule, AdsWizardStepperComponent, AdsWizardStepperModule, AscentCardComponent, AscentCardModule, BadgeColor, Colors, CustomDatetimeAdapter, DividerComponent, ErrorPageDefault, HorizontalStepStatus, MainMenuService, ModalActionType, ModalPanelClass, PanelClass, ShellLayoutComponent, SpinnerSize, StepStatus, TableBreakpoint, ViewportService, WindowService, WizardStepStatus, provideAdsUi };
9743
10372
  //# sourceMappingURL=ascentgl-ads-ui.mjs.map