mis-crystal-design-system 18.1.4-test-5 → 18.1.4-test-6
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.
- package/async-search-dropdown/async-dropdown.component.d.ts +40 -1
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +104 -20
- package/esm2022/slider/slider.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +103 -19
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/package.json +13 -13
|
@@ -5,7 +5,7 @@ import { UntypedFormControl, ReactiveFormsModule, FormsModule } from '@angular/f
|
|
|
5
5
|
import * as i1 from '@angular/cdk/overlay';
|
|
6
6
|
import { ConnectionPositionPair, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
7
7
|
import { TemplatePortal } from '@angular/cdk/portal';
|
|
8
|
-
import { tap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
8
|
+
import { tap, debounceTime, distinctUntilChanged, filter } from 'rxjs/operators';
|
|
9
9
|
import { Subject, merge } from 'rxjs';
|
|
10
10
|
import * as i2 from '@angular/common';
|
|
11
11
|
import { CommonModule } from '@angular/common';
|
|
@@ -230,7 +230,20 @@ class AsyncDropdownComponent {
|
|
|
230
230
|
this.error = signal(false);
|
|
231
231
|
this.openPopUpOnTab = signal(false);
|
|
232
232
|
this.data = signal([]);
|
|
233
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Tracks the last selected value to prevent dropdown from reopening when:
|
|
235
|
+
* - Input regains focus after selection (showing selected value)
|
|
236
|
+
* - Parent component re-renders and triggers change detection
|
|
237
|
+
* - User hasn't actually typed a new search query
|
|
238
|
+
*
|
|
239
|
+
* This is necessary because the input serves dual purposes:
|
|
240
|
+
* 1. Search input (user types, triggers API calls)
|
|
241
|
+
* 2. Display selected value (shows what was selected)
|
|
242
|
+
*
|
|
243
|
+
* Without this, setting the input value after selection would trigger
|
|
244
|
+
* the search subscription, causing unwanted API calls and dropdown reopening.
|
|
245
|
+
*/
|
|
246
|
+
this.lastSelectedValue = signal(null);
|
|
234
247
|
this.handleControlChanges = (values) => {
|
|
235
248
|
values.forEach((el) => this.selectData(el, true));
|
|
236
249
|
};
|
|
@@ -243,19 +256,53 @@ class AsyncDropdownComponent {
|
|
|
243
256
|
if (this.disabled()) {
|
|
244
257
|
this.searchInput.disable();
|
|
245
258
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
259
|
+
/**
|
|
260
|
+
* Search observable pipeline with RxJS operators to filter at the source.
|
|
261
|
+
* This declarative approach prevents unwanted searches by filtering:
|
|
262
|
+
* 1. Empty queries or queries below minInputLength
|
|
263
|
+
* 2. Queries that match the last selected value (prevents reopening after selection)
|
|
264
|
+
*
|
|
265
|
+
* Filtering at the source is preferred over checking flags in subscribe()
|
|
266
|
+
* because it's more declarative, testable, and follows RxJS best practices.
|
|
267
|
+
*/
|
|
268
|
+
const searchObservable = this.searchInput.valueChanges.pipe(tap((val) => this.searchQueryChange.emit(val)), debounceTime(this.debounceTime()), distinctUntilChanged(),
|
|
269
|
+
// Filter: Only process non-empty queries that meet minInputLength requirement
|
|
270
|
+
filter((query) => {
|
|
254
271
|
const q = query?.trim() ?? '';
|
|
255
272
|
if (!q || q.length < this.minInputLength()) {
|
|
273
|
+
// Close dropdown if query is too short
|
|
256
274
|
this.closeDropdown();
|
|
257
|
-
return;
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}),
|
|
279
|
+
// Filter: Ignore queries that match the last selected value
|
|
280
|
+
// This prevents dropdown from reopening when input shows selected value
|
|
281
|
+
filter((query) => {
|
|
282
|
+
const q = query?.trim() ?? '';
|
|
283
|
+
const lastSelected = this.lastSelectedValue();
|
|
284
|
+
// Allow search if no previous selection OR query is different from selected value
|
|
285
|
+
return !lastSelected || q !== lastSelected;
|
|
286
|
+
}));
|
|
287
|
+
/**
|
|
288
|
+
* Subscribe to search queries and trigger HTTP stream.
|
|
289
|
+
* All filtering is done in the pipe chain above, so this callback
|
|
290
|
+
* only handles the actual search execution.
|
|
291
|
+
*/
|
|
292
|
+
this.searchSubscription = merge(searchObservable, this.httpStreamTrigger)
|
|
293
|
+
.pipe(
|
|
294
|
+
// Additional filter for httpStreamTrigger (manual refresh)
|
|
295
|
+
filter((query) => {
|
|
296
|
+
const q = query?.trim() ?? '';
|
|
297
|
+
// For manual triggers, still respect minInputLength and lastSelectedValue
|
|
298
|
+
if (!q || q.length < this.minInputLength()) {
|
|
299
|
+
return false;
|
|
258
300
|
}
|
|
301
|
+
const lastSelected = this.lastSelectedValue();
|
|
302
|
+
return !lastSelected || q !== lastSelected;
|
|
303
|
+
}))
|
|
304
|
+
.subscribe((query) => {
|
|
305
|
+
const q = query?.trim() ?? '';
|
|
259
306
|
this.loading.set(true);
|
|
260
307
|
this.error.set(false);
|
|
261
308
|
// Open overlay if not yet open
|
|
@@ -356,14 +403,29 @@ class AsyncDropdownComponent {
|
|
|
356
403
|
this.closeDropdown();
|
|
357
404
|
}
|
|
358
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Handles item selection from dropdown.
|
|
408
|
+
*
|
|
409
|
+
* For single-select mode:
|
|
410
|
+
* - Sets input value to display selected item (standard UX pattern)
|
|
411
|
+
* - Stores selected value to prevent reopening dropdown on focus/change detection
|
|
412
|
+
* - Blurs input to prevent immediate focus-triggered searches
|
|
413
|
+
*
|
|
414
|
+
* For multi-select mode:
|
|
415
|
+
* - Clears input for next selection
|
|
416
|
+
* - Maintains focus for continuous selection
|
|
417
|
+
*/
|
|
359
418
|
selectData(item, effectedFromOutside = true) {
|
|
360
419
|
if (item.disabled)
|
|
361
420
|
return;
|
|
362
|
-
// Set flag to prevent effect from reopening dropdown
|
|
363
|
-
this.isSelecting.set(true);
|
|
364
421
|
this.itemSelected.emit(item);
|
|
365
422
|
if (!this.multi()) {
|
|
366
|
-
|
|
423
|
+
const selectedValue = item[this.displayKey()];
|
|
424
|
+
// Set input value to show selected item (standard UX - like Angular Material, etc.)
|
|
425
|
+
// Use emitEvent: false to prevent triggering valueChanges subscription
|
|
426
|
+
this.searchInput.patchValue(selectedValue, { emitEvent: false });
|
|
427
|
+
// Store selected value - RxJS filter will prevent reopening with same value
|
|
428
|
+
this.lastSelectedValue.set(selectedValue);
|
|
367
429
|
this.setControlValue(item);
|
|
368
430
|
}
|
|
369
431
|
else {
|
|
@@ -381,11 +443,11 @@ class AsyncDropdownComponent {
|
|
|
381
443
|
this.data.set([]);
|
|
382
444
|
}
|
|
383
445
|
this.closeDropdown();
|
|
384
|
-
//
|
|
385
|
-
//
|
|
386
|
-
|
|
387
|
-
this.
|
|
388
|
-
}
|
|
446
|
+
// Blur input to prevent focus events from immediately triggering search
|
|
447
|
+
// The lastSelectedValue filter will also prevent reopening if focus occurs
|
|
448
|
+
if (this.inputRef?.nativeElement) {
|
|
449
|
+
this.inputRef.nativeElement.blur();
|
|
450
|
+
}
|
|
389
451
|
}
|
|
390
452
|
removeItem(item) {
|
|
391
453
|
this.itemRemoved.emit(item);
|
|
@@ -400,12 +462,34 @@ class AsyncDropdownComponent {
|
|
|
400
462
|
get selectedItems() {
|
|
401
463
|
return Array.from(this.selections().values());
|
|
402
464
|
}
|
|
465
|
+
/**
|
|
466
|
+
* Clears the input and resets selection state.
|
|
467
|
+
* Clearing lastSelectedValue allows new searches to proceed normally.
|
|
468
|
+
*/
|
|
403
469
|
removeInputValue() {
|
|
404
470
|
this.searchInput.reset();
|
|
405
471
|
this.data.set([]);
|
|
472
|
+
this.lastSelectedValue.set(null);
|
|
406
473
|
this.clear.emit(true);
|
|
407
474
|
}
|
|
475
|
+
/**
|
|
476
|
+
* Called when input receives focus.
|
|
477
|
+
* Only opens dropdown if:
|
|
478
|
+
* 1. minInputLength allows it (-1 or 0 means open on focus)
|
|
479
|
+
* 2. Input value doesn't match last selected value (prevents reopening after selection)
|
|
480
|
+
*
|
|
481
|
+
* This handles the case where input regains focus after selection.
|
|
482
|
+
* The RxJS filter in searchObservable handles valueChanges, but focus events
|
|
483
|
+
* need separate handling since they bypass valueChanges.
|
|
484
|
+
*/
|
|
408
485
|
defaultCall() {
|
|
486
|
+
const currentValue = this.searchInput.value?.trim() || '';
|
|
487
|
+
const lastSelected = this.lastSelectedValue();
|
|
488
|
+
// Don't open if value matches last selected (user hasn't typed new query)
|
|
489
|
+
if (lastSelected && currentValue === lastSelected) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
// Only open on focus if minInputLength allows it
|
|
409
493
|
if (this.minInputLength() === -1 || this.minInputLength() === 0) {
|
|
410
494
|
this.loading.set(true);
|
|
411
495
|
this.httpStream()(this.searchInput.value || '').subscribe({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mis-crystal-design-system-async-search-dropdown.mjs","sources":["../../../projects/mis-components/async-search-dropdown/async-dropdown.component.html","../../../projects/mis-components/async-search-dropdown/async-dropdown.component.ts","../../../projects/mis-components/async-search-dropdown/async-dropdown.module.ts","../../../projects/mis-components/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.ts"],"sourcesContent":["<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened(), disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data().length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab()\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading()\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading() && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error()\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading() && !error() && data().length > 0\">\n <ng-container *ngFor=\"let item of data()\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab() ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading() && !error() && data().length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Injector,\n NgZone,\n OnInit,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { signal, input, output } from '@angular/core';\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { merge, Subject, Subscription } from 'rxjs';\n\ntype IListData = any;\n\n@Component({\n selector: 'mis-async-search-dropdown',\n templateUrl: './async-dropdown.component.html',\n styleUrls: ['./async-dropdown.component.scss'],\n})\nexport class AsyncDropdownComponent implements OnInit, OnDestroy {\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private injector: Injector\n ) {}\n\n // === Inputs ===\n height = input<string>();\n width = input<string>();\n size = input<'md' | 'sm'>('md');\n httpStream = input.required<(searchKey: string) => any>();\n displayKey = input<any>();\n secondaryDisplayKey = input<string>('');\n placeholder = input('Select');\n debounceTime = input(400);\n minInputLength = input(2);\n multi = input(false);\n uniqueKey = input<string>();\n control = input<AbstractControl | null>(null);\n disabled = input(false);\n readonly = input(false);\n disableCopyPaste = input(false);\n dropdownListWidth = input<string>();\n dropdownListPosition = input<'Left' | 'Right'>('Left');\n customPlaceholderIcon = input<string>('');\n selections = input<Map<string, any>>(new Map());\n searchValue = input<any>();\n\n // === Outputs ===\n onSelect = output<IListData | IListData[]>();\n searchQueryChange = output<string>();\n clear = output<boolean>();\n itemSelected = output<IListData>();\n itemRemoved = output<IListData>();\n\n // === Template Refs ===\n @ViewChild('ddBtn', { static: false }) origin!: ElementRef;\n @ViewChild('input', { static: false }) inputRef!: ElementRef;\n @ViewChild('dd', { static: false }) dd!: TemplateRef<Element>;\n @ContentChild('misCustomItem', { static: false }) customItem!: TemplateRef<Element>;\n @ContentChild('asyncCustomLoader', { static: false }) customLoader!: TemplateRef<Element>;\n\n // === Internal state ===\n searchInput: UntypedFormControl = new UntypedFormControl();\n private httpStreamTrigger = new Subject<string>();\n private overlayRef?: OverlayRef;\n private searchSubscription?: Subscription;\n private controlSubscription?: Subscription;\n\n // === Signals ===\n opened = signal(false);\n loading = signal(false);\n error = signal(false);\n openPopUpOnTab = signal(false);\n data = signal<IListData[]>([]);\n private isSelecting = signal(false); // Flag to prevent reopening after selection\n\n // === Lifecycle ===\n ngOnInit() {\n if (this.multi() && !this.uniqueKey()) {\n throw new Error('[uniqueKey] required in multi mode.');\n }\n\n if (this.disabled()) {\n this.searchInput.disable();\n }\n\n // Set up search subscription in ngOnInit (proper lifecycle, not in effect)\n const searchObservable = this.searchInput.valueChanges.pipe(\n tap((val) => this.searchQueryChange.emit(val)),\n debounceTime(this.debounceTime()),\n distinctUntilChanged()\n );\n\n this.searchSubscription = merge(searchObservable, this.httpStreamTrigger)\n .subscribe((query: string) => {\n // Don't process if we're in the middle of selecting\n if (this.isSelecting()) {\n return;\n }\n\n const q = query?.trim() ?? '';\n if (!q || q.length < this.minInputLength()) {\n this.closeDropdown();\n return;\n }\n\n this.loading.set(true);\n this.error.set(false);\n\n // Open overlay if not yet open\n if (!this.overlayRef?.hasAttached()) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n\n // Call HTTP stream\n this.httpStream()(q).subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n });\n\n if (this.control()?.value) {\n this.handleControlChanges(this.control()!.value);\n }\n\n this.controlSubscription = this.control()?.valueChanges.subscribe(\n this.handleControlChanges\n );\n\n // Handle searchValue input changes\n if (this.searchValue()) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n }\n\n ngOnChanges() {\n // Handle searchValue changes\n if (this.searchValue() !== undefined) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n\n // Handle disabled changes\n if (this.disabled()) {\n this.searchInput.disable();\n } else {\n this.searchInput.enable();\n }\n }\n\n ngOnDestroy() {\n this.searchSubscription?.unsubscribe();\n this.controlSubscription?.unsubscribe();\n this.httpStreamTrigger.complete();\n this.overlayRef?.dispose();\n }\n\n // === Methods ===\n refreshHttpStream(query: string) {\n this.httpStreamTrigger.next(query);\n }\n\n private handleControlChanges = (values: IListData[]) => {\n values.forEach((el) => this.selectData(el, true));\n };\n\n private openDropdown(template: TemplateRef<Element>, origin: HTMLElement) {\n const positionsBottom = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0,\n 4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0,\n 4\n ),\n ];\n const positionsTop = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0,\n -4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0,\n -4\n ),\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n ...(this.dropdownListPosition() === 'Right' ? positionsBottom.reverse() : positionsBottom),\n ...(this.dropdownListPosition() === 'Right' ? positionsTop.reverse() : positionsTop),\n ])\n .withPush(true);\n\n const configs = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy,\n width: origin.clientWidth,\n });\n\n this.overlayRef = this.overlay.create(configs);\n if (this.dropdownListWidth()) {\n this.overlayRef.updateSize({ width: this.dropdownListWidth() });\n }\n\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\n this.opened.set(true);\n }\n\n closeDropdown() {\n this.opened.set(false);\n this.openPopUpOnTab.set(false);\n this.overlayRef?.detach();\n this.data.set([]);\n }\n\n enablePopUpOnTab() {\n this.openPopUpOnTab.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.searchInput.reset();\n this.closeDropdown();\n }\n }\n\n selectData(item: IListData, effectedFromOutside = true) {\n if (item.disabled) return;\n\n // Set flag to prevent effect from reopening dropdown\n this.isSelecting.set(true);\n\n this.itemSelected.emit(item);\n\n if (!this.multi()) {\n this.searchInput.patchValue(item[this.displayKey()], { emitEvent: false });\n this.setControlValue(item);\n } else {\n if (!this.selections().has(item[this.uniqueKey()!])) {\n this.selections().set(item[this.uniqueKey()!], item);\n }\n this.setControlValue(this.selectedItems);\n if (!effectedFromOutside) {\n setTimeout(() => {\n this.inputRef.nativeElement.focus();\n this.inputRef.nativeElement.scrollIntoView();\n }, 10);\n }\n this.searchInput.patchValue('');\n this.data.set([]);\n }\n\n this.closeDropdown();\n\n // Reset flag after a microtask to allow closeDropdown to complete\n // but before any potential subscription runs\n queueMicrotask(() => {\n this.isSelecting.set(false);\n });\n }\n\n removeItem(item: IListData) {\n this.itemRemoved.emit(item);\n this.selections().delete(item[this.uniqueKey()!]);\n this.setControlValue(this.selectedItems);\n this.inputRef.nativeElement.focus();\n }\n\n private setControlValue(value: IListData | IListData[]) {\n this.onSelect.emit(value);\n this.control()?.patchValue(value, { emitEvent: false });\n }\n\n get selectedItems() {\n return Array.from(this.selections().values());\n }\n\n removeInputValue() {\n this.searchInput.reset();\n this.data.set([]);\n this.clear.emit(true);\n }\n\n defaultCall() {\n if (this.minInputLength() === -1 || this.minInputLength() === 0) {\n this.loading.set(true);\n this.httpStream()(this.searchInput.value || '').subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n }\n }\n}","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { LoaderModule } from \"mis-crystal-design-system/loader\";\nimport { AsyncDropdownComponent } from \"./async-dropdown.component\";\nimport { A11yModule } from \"@angular/cdk/a11y\";\n\n@NgModule({\n declarations: [AsyncDropdownComponent],\n imports: [CommonModule, OverlayModule, ReactiveFormsModule, FormsModule, LoaderModule, A11yModule],\n exports: [AsyncDropdownComponent]\n})\nexport class AsyncDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mis-crystal-design-system-async-search-dropdown.mjs","sources":["../../../projects/mis-components/async-search-dropdown/async-dropdown.component.html","../../../projects/mis-components/async-search-dropdown/async-dropdown.component.ts","../../../projects/mis-components/async-search-dropdown/async-dropdown.module.ts","../../../projects/mis-components/async-search-dropdown/mis-crystal-design-system-async-search-dropdown.ts"],"sourcesContent":["<div class=\"dd-wrapper\"\n [ngClass]=\"{ opened: opened(), disabled: disabled(), readonly: readonly() }\"\n [style.width]=\"width()\"\n #ddBtn>\n \n <!-- Selected chips for multi-select -->\n <div class=\"selected-list\" *ngIf=\"multi() && selectedItems.length > 0\">\n <div class=\"chip\"\n [ngClass]=\"{ 'chip-md': size() === 'md', 'chip-sm': size() === 'sm' }\"\n *ngFor=\"let item of selectedItems\">\n <span [ngClass]=\"{ 'h6': size() === 'md', 'h8-b': size() === 'sm' }\"\n style=\"margin-right: 4px;\">\n {{ item[displayKey()] }}\n </span>\n <span class=\"icon-ic-navigation-cancel-24\"\n [ngStyle]=\"{ cursor: 'pointer', 'font-size': size() === 'sm' ? '12px' : '14px' }\"\n tabindex=\"0\"\n (click)=\"removeItem(item)\"\n (keyup.enter)=\"removeItem(item)\">\n </span>\n </div>\n </div>\n\n <!-- Search input -->\n <div class=\"search-input\">\n <!-- Placeholder icon -->\n <div *ngIf=\"customPlaceholderIcon(); else defaultSearchIcon\" class=\"custom-icon\">\n <img [src]=\"customPlaceholderIcon()\" alt=\"customIcon\" />\n </div>\n <ng-template #defaultSearchIcon>\n <span class=\"icon-ic-action-search-24\"></span>\n </ng-template>\n\n <!-- Input field -->\n <input [ngClass]=\"{ 'ip-md': size() === 'md', 'ip-sm': size() === 'sm' }\"\n [placeholder]=\"placeholder()\"\n [formControl]=\"searchInput\"\n [attr.tabindex]=\"0\"\n type=\"text\"\n class=\"black-text h6\"\n #input\n (focus)=\"defaultCall()\"\n (keyup.enter)=\"enablePopUpOnTab()\"\n (copy)=\"disableCopyPaste() ? false : true\"\n (paste)=\"disableCopyPaste() ? false : true\"\n (cut)=\"disableCopyPaste() ? false : true\"/>\n\n <!-- Clear input -->\n <div class=\"icon-ic-navigation-cancel-24 croos-icon\"\n *ngIf=\"searchInput.value?.length\"\n tabindex=\"0\"\n (click)=\"removeInputValue()\"\n (keyup.enter)=\"removeInputValue()\">\n </div>\n </div>\n</div>\n\n<!-- Dropdown template -->\n<ng-template #dd>\n <div class=\"dd-list\"\n [ngStyle]=\"{ 'max-height': height(), 'width': dropdownListWidth() }\"\n [ngClass]=\"{ 'dd-list-pd': data().length === 0 }\"\n tabindex=\"0\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"openPopUpOnTab()\">\n\n <!-- Loader -->\n <ng-container *ngIf=\"loading()\">\n <ng-container *ngIf=\"customLoader; else defaultLoader\" [ngTemplateOutlet]=\"customLoader\"></ng-container>\n <ng-template #defaultLoader>\n <div class=\"status-container\" *ngIf=\"loading() && !customLoader\">\n <mis-loader [mobileView]=\"true\"></mis-loader>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Error -->\n <ng-container *ngIf=\"error()\">\n <div class=\"status-container\">\n <p>Unknown error has occurred, <br/> Please try again later.</p>\n </div>\n </ng-container>\n\n <!-- Data list -->\n <div *ngIf=\"!loading() && !error() && data().length > 0\">\n <ng-container *ngFor=\"let item of data()\">\n <div (click)=\"selectData(item, false)\" (keyup.enter)=\"selectData(item, false)\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n\n <!-- Custom item -->\n <ng-container *ngIf=\"customItem; else standardItem\">\n <ng-container [ngTemplateOutlet]=\"customItem\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-container>\n\n <!-- Standard item -->\n <ng-template #standardItem>\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div class=\"item\"\n [tabindex]=\"openPopUpOnTab() ? 0 : -1\"\n (click)=\"selectData(item, false)\"\n (keyup.enter)=\"selectData(item, false)\">\n <div class=\"value\">\n <div class=\"primary\">{{ item[displayKey()] }}</div>\n <div class=\"secondary\">{{ item[secondaryDisplayKey()] }}</div>\n </div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </div>\n\n <!-- No data -->\n <div *ngIf=\"!loading() && !error() && data().length === 0 && searchInput.value\">\n <div class=\"data-not-found\">No Data Available</div>\n </div>\n </div>\n</ng-template>\n","import {\n Component,\n ContentChild,\n ElementRef,\n HostListener,\n Injector,\n NgZone,\n OnInit,\n OnDestroy,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { AbstractControl, UntypedFormControl } from '@angular/forms';\nimport {\n Overlay,\n OverlayConfig,\n OverlayRef,\n ConnectionPositionPair,\n} from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { signal, input, output } from '@angular/core';\nimport { debounceTime, distinctUntilChanged, tap, filter } from 'rxjs/operators';\nimport { merge, Subject, Subscription } from 'rxjs';\n\ntype IListData = any;\n\n@Component({\n selector: 'mis-async-search-dropdown',\n templateUrl: './async-dropdown.component.html',\n styleUrls: ['./async-dropdown.component.scss'],\n})\nexport class AsyncDropdownComponent implements OnInit, OnDestroy {\n constructor(\n private overlay: Overlay,\n private viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private injector: Injector\n ) {}\n\n // === Inputs ===\n height = input<string>();\n width = input<string>();\n size = input<'md' | 'sm'>('md');\n httpStream = input.required<(searchKey: string) => any>();\n displayKey = input<any>();\n secondaryDisplayKey = input<string>('');\n placeholder = input('Select');\n debounceTime = input(400);\n minInputLength = input(2);\n multi = input(false);\n uniqueKey = input<string>();\n control = input<AbstractControl | null>(null);\n disabled = input(false);\n readonly = input(false);\n disableCopyPaste = input(false);\n dropdownListWidth = input<string>();\n dropdownListPosition = input<'Left' | 'Right'>('Left');\n customPlaceholderIcon = input<string>('');\n selections = input<Map<string, any>>(new Map());\n searchValue = input<any>();\n\n // === Outputs ===\n onSelect = output<IListData | IListData[]>();\n searchQueryChange = output<string>();\n clear = output<boolean>();\n itemSelected = output<IListData>();\n itemRemoved = output<IListData>();\n\n // === Template Refs ===\n @ViewChild('ddBtn', { static: false }) origin!: ElementRef;\n @ViewChild('input', { static: false }) inputRef!: ElementRef;\n @ViewChild('dd', { static: false }) dd!: TemplateRef<Element>;\n @ContentChild('misCustomItem', { static: false }) customItem!: TemplateRef<Element>;\n @ContentChild('asyncCustomLoader', { static: false }) customLoader!: TemplateRef<Element>;\n\n // === Internal state ===\n searchInput: UntypedFormControl = new UntypedFormControl();\n private httpStreamTrigger = new Subject<string>();\n private overlayRef?: OverlayRef;\n private searchSubscription?: Subscription;\n private controlSubscription?: Subscription;\n\n // === Signals ===\n opened = signal(false);\n loading = signal(false);\n error = signal(false);\n openPopUpOnTab = signal(false);\n data = signal<IListData[]>([]);\n \n /**\n * Tracks the last selected value to prevent dropdown from reopening when:\n * - Input regains focus after selection (showing selected value)\n * - Parent component re-renders and triggers change detection\n * - User hasn't actually typed a new search query\n * \n * This is necessary because the input serves dual purposes:\n * 1. Search input (user types, triggers API calls)\n * 2. Display selected value (shows what was selected)\n * \n * Without this, setting the input value after selection would trigger\n * the search subscription, causing unwanted API calls and dropdown reopening.\n */\n private lastSelectedValue = signal<string | null>(null);\n\n // === Lifecycle ===\n ngOnInit() {\n if (this.multi() && !this.uniqueKey()) {\n throw new Error('[uniqueKey] required in multi mode.');\n }\n\n if (this.disabled()) {\n this.searchInput.disable();\n }\n\n /**\n * Search observable pipeline with RxJS operators to filter at the source.\n * This declarative approach prevents unwanted searches by filtering:\n * 1. Empty queries or queries below minInputLength\n * 2. Queries that match the last selected value (prevents reopening after selection)\n * \n * Filtering at the source is preferred over checking flags in subscribe()\n * because it's more declarative, testable, and follows RxJS best practices.\n */\n const searchObservable = this.searchInput.valueChanges.pipe(\n tap((val) => this.searchQueryChange.emit(val)),\n debounceTime(this.debounceTime()),\n distinctUntilChanged(),\n // Filter: Only process non-empty queries that meet minInputLength requirement\n filter((query: string) => {\n const q = query?.trim() ?? '';\n if (!q || q.length < this.minInputLength()) {\n // Close dropdown if query is too short\n this.closeDropdown();\n return false;\n }\n return true;\n }),\n // Filter: Ignore queries that match the last selected value\n // This prevents dropdown from reopening when input shows selected value\n filter((query: string) => {\n const q = query?.trim() ?? '';\n const lastSelected = this.lastSelectedValue();\n // Allow search if no previous selection OR query is different from selected value\n return !lastSelected || q !== lastSelected;\n })\n );\n\n /**\n * Subscribe to search queries and trigger HTTP stream.\n * All filtering is done in the pipe chain above, so this callback\n * only handles the actual search execution.\n */\n this.searchSubscription = merge(searchObservable, this.httpStreamTrigger)\n .pipe(\n // Additional filter for httpStreamTrigger (manual refresh)\n filter((query: string) => {\n const q = query?.trim() ?? '';\n // For manual triggers, still respect minInputLength and lastSelectedValue\n if (!q || q.length < this.minInputLength()) {\n return false;\n }\n const lastSelected = this.lastSelectedValue();\n return !lastSelected || q !== lastSelected;\n })\n )\n .subscribe((query: string) => {\n const q = query?.trim() ?? '';\n \n this.loading.set(true);\n this.error.set(false);\n\n // Open overlay if not yet open\n if (!this.overlayRef?.hasAttached()) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n\n // Call HTTP stream\n this.httpStream()(q).subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n });\n\n if (this.control()?.value) {\n this.handleControlChanges(this.control()!.value);\n }\n\n this.controlSubscription = this.control()?.valueChanges.subscribe(\n this.handleControlChanges\n );\n\n // Handle searchValue input changes\n if (this.searchValue()) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n }\n\n ngOnChanges() {\n // Handle searchValue changes\n if (this.searchValue() !== undefined) {\n this.searchInput.patchValue(this.searchValue(), { emitEvent: false });\n }\n\n // Handle disabled changes\n if (this.disabled()) {\n this.searchInput.disable();\n } else {\n this.searchInput.enable();\n }\n }\n\n ngOnDestroy() {\n this.searchSubscription?.unsubscribe();\n this.controlSubscription?.unsubscribe();\n this.httpStreamTrigger.complete();\n this.overlayRef?.dispose();\n }\n\n // === Methods ===\n refreshHttpStream(query: string) {\n this.httpStreamTrigger.next(query);\n }\n\n private handleControlChanges = (values: IListData[]) => {\n values.forEach((el) => this.selectData(el, true));\n };\n\n private openDropdown(template: TemplateRef<Element>, origin: HTMLElement) {\n const positionsBottom = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'bottom' },\n { overlayX: 'start', overlayY: 'top' },\n 0,\n 4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'bottom' },\n { overlayX: 'end', overlayY: 'top' },\n 0,\n 4\n ),\n ];\n const positionsTop = [\n new ConnectionPositionPair(\n { originX: 'start', originY: 'top' },\n { overlayX: 'start', overlayY: 'bottom' },\n 0,\n -4\n ),\n new ConnectionPositionPair(\n { originX: 'end', originY: 'top' },\n { overlayX: 'end', overlayY: 'bottom' },\n 0,\n -4\n ),\n ];\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(origin)\n .withPositions([\n ...(this.dropdownListPosition() === 'Right' ? positionsBottom.reverse() : positionsBottom),\n ...(this.dropdownListPosition() === 'Right' ? positionsTop.reverse() : positionsTop),\n ])\n .withPush(true);\n\n const configs = new OverlayConfig({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n positionStrategy,\n width: origin.clientWidth,\n });\n\n this.overlayRef = this.overlay.create(configs);\n if (this.dropdownListWidth()) {\n this.overlayRef.updateSize({ width: this.dropdownListWidth() });\n }\n\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\n this.overlayRef.backdropClick().subscribe(() => this.closeDropdown());\n this.opened.set(true);\n }\n\n closeDropdown() {\n this.opened.set(false);\n this.openPopUpOnTab.set(false);\n this.overlayRef?.detach();\n this.data.set([]);\n }\n\n enablePopUpOnTab() {\n this.openPopUpOnTab.set(true);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.searchInput.reset();\n this.closeDropdown();\n }\n }\n\n /**\n * Handles item selection from dropdown.\n * \n * For single-select mode:\n * - Sets input value to display selected item (standard UX pattern)\n * - Stores selected value to prevent reopening dropdown on focus/change detection\n * - Blurs input to prevent immediate focus-triggered searches\n * \n * For multi-select mode:\n * - Clears input for next selection\n * - Maintains focus for continuous selection\n */\n selectData(item: IListData, effectedFromOutside = true) {\n if (item.disabled) return;\n\n this.itemSelected.emit(item);\n\n if (!this.multi()) {\n const selectedValue = item[this.displayKey()];\n // Set input value to show selected item (standard UX - like Angular Material, etc.)\n // Use emitEvent: false to prevent triggering valueChanges subscription\n this.searchInput.patchValue(selectedValue, { emitEvent: false });\n \n // Store selected value - RxJS filter will prevent reopening with same value\n this.lastSelectedValue.set(selectedValue);\n this.setControlValue(item);\n } else {\n if (!this.selections().has(item[this.uniqueKey()!])) {\n this.selections().set(item[this.uniqueKey()!], item);\n }\n this.setControlValue(this.selectedItems);\n if (!effectedFromOutside) {\n setTimeout(() => {\n this.inputRef.nativeElement.focus();\n this.inputRef.nativeElement.scrollIntoView();\n }, 10);\n }\n this.searchInput.patchValue('');\n this.data.set([]);\n }\n\n this.closeDropdown();\n\n // Blur input to prevent focus events from immediately triggering search\n // The lastSelectedValue filter will also prevent reopening if focus occurs\n if (this.inputRef?.nativeElement) {\n this.inputRef.nativeElement.blur();\n }\n }\n\n removeItem(item: IListData) {\n this.itemRemoved.emit(item);\n this.selections().delete(item[this.uniqueKey()!]);\n this.setControlValue(this.selectedItems);\n this.inputRef.nativeElement.focus();\n }\n\n private setControlValue(value: IListData | IListData[]) {\n this.onSelect.emit(value);\n this.control()?.patchValue(value, { emitEvent: false });\n }\n\n get selectedItems() {\n return Array.from(this.selections().values());\n }\n\n /**\n * Clears the input and resets selection state.\n * Clearing lastSelectedValue allows new searches to proceed normally.\n */\n removeInputValue() {\n this.searchInput.reset();\n this.data.set([]);\n this.lastSelectedValue.set(null);\n this.clear.emit(true);\n }\n\n /**\n * Called when input receives focus.\n * Only opens dropdown if:\n * 1. minInputLength allows it (-1 or 0 means open on focus)\n * 2. Input value doesn't match last selected value (prevents reopening after selection)\n * \n * This handles the case where input regains focus after selection.\n * The RxJS filter in searchObservable handles valueChanges, but focus events\n * need separate handling since they bypass valueChanges.\n */\n defaultCall() {\n const currentValue = this.searchInput.value?.trim() || '';\n const lastSelected = this.lastSelectedValue();\n \n // Don't open if value matches last selected (user hasn't typed new query)\n if (lastSelected && currentValue === lastSelected) {\n return;\n }\n \n // Only open on focus if minInputLength allows it\n if (this.minInputLength() === -1 || this.minInputLength() === 0) {\n this.loading.set(true);\n this.httpStream()(this.searchInput.value || '').subscribe({\n next: (list: IListData[]) => {\n this.loading.set(false);\n this.data.set(list);\n if (!this.overlayRef?.hasAttached() && list.length > 0) {\n this.openDropdown(this.dd, this.origin.nativeElement);\n }\n },\n error: () => {\n this.loading.set(false);\n this.error.set(true);\n },\n });\n }\n }\n}","import { OverlayModule } from \"@angular/cdk/overlay\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { LoaderModule } from \"mis-crystal-design-system/loader\";\nimport { AsyncDropdownComponent } from \"./async-dropdown.component\";\nimport { A11yModule } from \"@angular/cdk/a11y\";\n\n@NgModule({\n declarations: [AsyncDropdownComponent],\n imports: [CommonModule, OverlayModule, ReactiveFormsModule, FormsModule, LoaderModule, A11yModule],\n exports: [AsyncDropdownComponent]\n})\nexport class AsyncDropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -26,11 +26,11 @@ class SliderComponent {
|
|
|
26
26
|
} if (rf & 2) {
|
|
27
27
|
i0.ɵɵadvance();
|
|
28
28
|
i0.ɵɵproperty("min", ctx.min())("max", ctx.max())("value", ctx.currentValue());
|
|
29
|
-
} }, styles: [".slider[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center
|
|
29
|
+
} }, styles: [".slider[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;input[type=range]{width:100%;-webkit-appearance:none;appearance:none;height:8px;background:var(--brand-primary-lightest, #CBDDFB);outline:none;border-radius:5px;&::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;background:var(--brand-primary, #0937B2);cursor:pointer;border-radius:50%}&::-moz-range-thumb{width:15px;height:15px;background:var(--brand-primary, #0937B2);cursor:pointer;border-radius:50%}}span{margin-left:10px}}"] }); }
|
|
30
30
|
}
|
|
31
31
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderComponent, [{
|
|
32
32
|
type: Component,
|
|
33
|
-
args: [{ selector: 'mis-slider', template: "<div class=\"slider\">\n <input \n type=\"range\" \n [min]=\"min()\" \n [max]=\"max()\" \n [value]=\"currentValue()\"\n (input)=\"onInputChange($event.target.value)\" />\n</div>\n \n\n ", styles: [".slider{width:100%;display:flex;align-items:center
|
|
33
|
+
args: [{ selector: 'mis-slider', template: "<div class=\"slider\">\n <input \n type=\"range\" \n [min]=\"min()\" \n [max]=\"max()\" \n [value]=\"currentValue()\"\n (input)=\"onInputChange($event.target.value)\" />\n</div>\n \n\n ", styles: [".slider{width:100%;display:flex;align-items:center;input[type=range]{width:100%;-webkit-appearance:none;appearance:none;height:8px;background:var(--brand-primary-lightest, #CBDDFB);outline:none;border-radius:5px;&::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;background:var(--brand-primary, #0937B2);cursor:pointer;border-radius:50%}&::-moz-range-thumb{width:15px;height:15px;background:var(--brand-primary, #0937B2);cursor:pointer;border-radius:50%}}span{margin-left:10px}}\n"] }]
|
|
34
34
|
}], () => [], { valueChange: [{
|
|
35
35
|
type: Output
|
|
36
36
|
}] }); })();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mis-crystal-design-system-slider.mjs","sources":["../../../projects/mis-components/slider/slider.component.ts","../../../projects/mis-components/slider/slider.component.html","../../../projects/mis-components/slider/slider.module.ts","../../../projects/mis-components/slider/mis-crystal-design-system-slider.ts"],"sourcesContent":["import { Component, EventEmitter, input, Output, ChangeDetectionStrategy, signal, WritableSignal } from '@angular/core';\n\n@Component({\n selector: 'mis-slider',\n templateUrl: './slider.component.html',\n styleUrls: ['./slider.component.css'],\n})\nexport class SliderComponent {\n min = input<number>(0);\n max = input<number>(100);\n value = input<number>(0);\n @Output() valueChange = new EventEmitter<number>();\n\n // Internal signal for the current value\n currentValue: WritableSignal<number> = signal(0);\n\n constructor() {\n // Initialize the current value with the input value\n this.currentValue.set(this.value());\n }\n\n onInputChange(value: number) {\n const numValue = Number(value);\n this.currentValue.set(numValue);\n this.valueChange.emit(numValue);\n }\n}\n","<div class=\"slider\">\n <input \n type=\"range\" \n [min]=\"min()\" \n [max]=\"max()\" \n [value]=\"currentValue()\"\n (input)=\"onInputChange($event.target.value)\" />\n</div>\n \n\n ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SliderComponent } from './slider.component';\n\n@NgModule({\n declarations: [\n SliderComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [SliderComponent]\n})\nexport class SliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAOa,eAAe,CAAA;AAS1B,IAAA,WAAA,GAAA;AARA,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAS,GAAG,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,CAAC,CAAC,CAAC;AACf,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU,CAAC;;AAGnD,QAAA,IAAA,CAAA,YAAY,GAA2B,MAAM,CAAC,CAAC,CAAC,CAAC;;QAI/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;KACrC;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACjC;gHAlBU,eAAe,GAAA,CAAA,EAAA,CAAA,EAAA;oEAAf,eAAe,EAAA,SAAA,EAAA,CAAA,CAAA,YAAA,CAAA,CAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,EAAA,GAAA,EAAA,CAAA,CAAA,EAAA,KAAA,CAAA,EAAA,KAAA,EAAA,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,EAAA,QAAA,CAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,CAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,CAAA,CAAA,EAAA,QAAA,EAAA,SAAA,wBAAA,CAAA,EAAA,EAAA,GAAA,EAAA,EAAA,IAAA,EAAA,GAAA,CAAA,EAAA;ACN1B,YADF,8BAAoB,CAM+B,CAAA,EAAA,OAAA,EAAA,CAAA,CAAA,CAAA;AAA/C,YAAA,EAAA,CAAA,UAAA,CAAA,OAAA,EAAA,SAAA,+CAAA,CAAA,MAAA,EAAA,EAAA,OAAS,sCAAkC,CAAC,EAAA,CAAA,CAAA;AAChD,YANE,iBAKiD,EAC7C,CAAA;;YAJF,EAAa,CAAA,SAAA,EAAA,CAAA;YAAb,EAAa,CAAA,UAAA,CAAA,KAAA,EAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CAAA,KAAA,EAAA,GAAA,CAAA,GAAA,EAAA,CACA,CACW,OAAA,EAAA,GAAA,CAAA,YAAA,EAAA,CAAA,CAAA;;;iFDEf,eAAe,EAAA,CAAA;cAL3B,SAAS;2BACE,YAAY,EAAA,QAAA,EAAA,6MAAA,EAAA,MAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"mis-crystal-design-system-slider.mjs","sources":["../../../projects/mis-components/slider/slider.component.ts","../../../projects/mis-components/slider/slider.component.html","../../../projects/mis-components/slider/slider.module.ts","../../../projects/mis-components/slider/mis-crystal-design-system-slider.ts"],"sourcesContent":["import { Component, EventEmitter, input, Output, ChangeDetectionStrategy, signal, WritableSignal } from '@angular/core';\n\n@Component({\n selector: 'mis-slider',\n templateUrl: './slider.component.html',\n styleUrls: ['./slider.component.css'],\n})\nexport class SliderComponent {\n min = input<number>(0);\n max = input<number>(100);\n value = input<number>(0);\n @Output() valueChange = new EventEmitter<number>();\n\n // Internal signal for the current value\n currentValue: WritableSignal<number> = signal(0);\n\n constructor() {\n // Initialize the current value with the input value\n this.currentValue.set(this.value());\n }\n\n onInputChange(value: number) {\n const numValue = Number(value);\n this.currentValue.set(numValue);\n this.valueChange.emit(numValue);\n }\n}\n","<div class=\"slider\">\n <input \n type=\"range\" \n [min]=\"min()\" \n [max]=\"max()\" \n [value]=\"currentValue()\"\n (input)=\"onInputChange($event.target.value)\" />\n</div>\n \n\n ","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SliderComponent } from './slider.component';\n\n@NgModule({\n declarations: [\n SliderComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [SliderComponent]\n})\nexport class SliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -822,11 +822,11 @@ class TableComponent {
|
|
|
822
822
|
i0.ɵɵproperty("ngForOf", ctx.tableData());
|
|
823
823
|
i0.ɵɵadvance(2);
|
|
824
824
|
i0.ɵɵconditional(ctx.shouldShowPagination() ? 9 : -1);
|
|
825
|
-
} }, styles: ["#main-container[_ngcontent-%COMP%]{font-family:Lato,sans-serif;position:relative}.no-scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:0}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container[_ngcontent-%COMP%]{height:inherit;overflow-y:auto}.scroll-horizontally[_ngcontent-%COMP%]{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container[_ngcontent-%COMP%]{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header[_ngcontent-%COMP%]{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text[_ngcontent-%COMP%]{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.filter-icon[_ngcontent-%COMP%]{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active[_ngcontent-%COMP%]{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row[_ngcontent-%COMP%]{height:auto;border-bottom:none}.loader[_ngcontent-%COMP%] .mat-progress-spinner circle, .mat-spinner[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--brand-primary, #0937B2)}.t-row[_ngcontent-%COMP%]{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row[_ngcontent-%COMP%]{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container[_ngcontent-%COMP%]{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover[_ngcontent-%COMP%]:hover{background-color:#0000}.t-col-container-hover[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover[_ngcontent-%COMP%]:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover[_ngcontent-%COMP%]{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col[_ngcontent-%COMP%]{display:flex;align-items:center;height:100%}.t-col-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container[_ngcontent-%COMP%], #pagination-content-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container[_ngcontent-%COMP%]{display:flex;margin-right:32px}.page[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled[_ngcontent-%COMP%]{border:1px solid var(--text-secondary, #6A737D)}.page-seperator[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot[_ngcontent-%COMP%]{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active[_ngcontent-%COMP%]{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:16px;height:16px;transition:opacity .2s ease}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]:hover{opacity:.8}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{opacity:.4;pointer-events:none}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){opacity:1;pointer-events:auto}.row[_ngcontent-%COMP%]{transition:background-color .2s}.row[_ngcontent-%COMP%]:hover:not(.disabled-row), .row.selected[_ngcontent-%COMP%]:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{pointer-events:none;opacity:.4}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions[_ngcontent-%COMP%]{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive[_ngcontent-%COMP%]{pointer-events:none;opacity:.5;cursor:default}.page-size-selector[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell[_ngcontent-%COMP%]{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block
|
|
825
|
+
} }, styles: ["#main-container[_ngcontent-%COMP%]{font-family:Lato,sans-serif;position:relative}.no-scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:0}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container[_ngcontent-%COMP%]{height:inherit;overflow-y:auto}.scroll-horizontally[_ngcontent-%COMP%]{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container[_ngcontent-%COMP%]{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header[_ngcontent-%COMP%]{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text[_ngcontent-%COMP%]{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.filter-icon[_ngcontent-%COMP%]{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active[_ngcontent-%COMP%]{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row[_ngcontent-%COMP%]{height:auto;border-bottom:none}.loader[_ngcontent-%COMP%] .mat-progress-spinner circle, .mat-spinner[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--brand-primary, #0937B2)}.t-row[_ngcontent-%COMP%]{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row[_ngcontent-%COMP%]{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container[_ngcontent-%COMP%]{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover[_ngcontent-%COMP%]:hover{background-color:#0000}.t-col-container-hover[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover[_ngcontent-%COMP%]:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover[_ngcontent-%COMP%]{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col[_ngcontent-%COMP%]{display:flex;align-items:center;height:100%}.t-col-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container[_ngcontent-%COMP%], #pagination-content-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text[_ngcontent-%COMP%]{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container[_ngcontent-%COMP%]{display:flex;margin-right:32px}.page[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled[_ngcontent-%COMP%]{border:1px solid var(--text-secondary, #6A737D)}.page-seperator[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot[_ngcontent-%COMP%]{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active[_ngcontent-%COMP%]{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon[_ngcontent-%COMP%]{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:16px;height:16px;transition:opacity .2s ease}.sort-icon[_ngcontent-%COMP%] img[_ngcontent-%COMP%]:hover{opacity:.8}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{opacity:.4;pointer-events:none}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){opacity:1;pointer-events:auto}.row[_ngcontent-%COMP%]{transition:background-color .2s}.row[_ngcontent-%COMP%]:hover:not(.disabled-row), .row.selected[_ngcontent-%COMP%]:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]{pointer-events:none;opacity:.4}.disabled-row[_ngcontent-%COMP%] .t-col-container[_ngcontent-%COMP%]:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions[_ngcontent-%COMP%]{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive[_ngcontent-%COMP%]{pointer-events:none;opacity:.5;cursor:default}.page-size-selector[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell[_ngcontent-%COMP%]{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block;@supports (-webkit-line-clamp: 2){display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}"] }); }
|
|
826
826
|
}
|
|
827
827
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
|
|
828
828
|
type: Component,
|
|
829
|
-
args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(shouldShowPagination()){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container,#pagination-content-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.page-size-selector{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block}@supports (-webkit-line-clamp: 2){.collapsed-cell{display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
|
|
829
|
+
args: [{ selector: "mis-table", template: "<div\n [ngStyle]=\"{\n height: getContainerHeight(),\n width: getContainerWidth(),\n 'overflow-x': tableConfig().canScrollHorizontally ? 'auto' : 'unset'\n }\"\n id=\"main-container\"\n>\n <mis-table-filter\n #filter\n (filtersApplied)=\"updateAppliedFilters($event)\"\n *ngIf=\"showFilter()\"\n [containerStyles]=\"filterContainerStyles()\"\n [filtersData]=\"filterData()\"\n ></mis-table-filter>\n <div\n #table\n id=\"table-container\"\n [ngClass]=\"{ 'no-scrollbar': expandedIndex() < 0, scrollbar: !(expandedIndex() < 0), 'scroll-horizontally': tableConfig().canScrollHorizontally }\"\n >\n <div\n [ngStyle]=\"getColHeadersRowStyles()\"\n id=\"col-headers-container\"\n >\n <div\n #colHeaderRef\n (click)=\"colHeader?.action ? colHeader?.action(colHeader) : null\"\n *ngFor=\"let colHeader of tableConfig()?.colHeaderConfig\"\n class=\"col-header\"\n [ngStyle]=\"{\n width: colHeader?.style?.width || '',\n cursor: colHeader.action ? 'pointer' : 'default',\n 'justify-content': colHeader?.style?.justifyContent\n ? colHeader?.style?.justifyContent\n : colHeader.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <p *ngIf=\"colHeader?.type !== 'custom' && colHeader?.type !== 'checkbox'\" class=\"col-header-text\">\n {{ colHeader?.data || \" \" }}\n </p>\n <span\n (click)=\"filterData.set(colHeader.filters); toggleFilter(colHeader.data); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type !== 'custom' && colHeader?.filters && colHeader?.filters?.length > 0\"\n class=\"filter-icon\"\n >\n <span *ngIf=\"appliedFilters()[colHeader.data]?.length > 0\" id=\"filter-active\"></span>\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 13 10\" width=\"13\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M4.97546 10H7.64213V8H4.97546V10ZM0.308472 0V2H12.3085V0H0.308472ZM2.30847 6H10.3085V4H2.30847V6Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <span\n (click)=\"toggleCheckbox(); $event.stopPropagation()\"\n *ngIf=\"colHeader?.type === 'checkbox'\"\n class=\"checkbox-icon\"\n >\n <mis-checkbox [checked]=\"selectAllCheckbox()\"></mis-checkbox>\n </span>\n <span *ngIf=\"colHeader?.isSortable && !colHeader?.filters\" appSortIcons\n [column]=\"colHeader\"\n [activeSort]=\"currentSort()\"\n [activeSorts]=\"multiColumnSort()\"\n [multiColumnSort]=\"tableConfig().multiColumnSort\"\n (sortChange)=\"onSortChange($event)\"\n class=\"sort-icon\">\n </span>\n <ng-template *ngIf=\"colHeader?.type === 'custom'\" customTableCell [customComponent]=\"colHeader?.componentRef\" [data]=\"colHeader.data\"></ng-template>\n </div>\n </div>\n \n <div id=\"data-container\">\n <div class=\"row-wrapper\" *ngFor=\"let row of tableData(); let i = index; let rowIndex = index\">\n <div\n class=\"t-row\"\n [ngClass]=\"{ 't-row-hover': tableConfig().cellHover, 'active-row': activeRowIndex().includes(i) }\"\n [ngStyle]=\"{ 'min-height': tableConfig()?.rowConfig?.height ? tableConfig().rowConfig.height : '44px' }\"\n (click)=\"selectRow(i)\"\n [class.disabled-row]=\"isRowDisabled(row)\"\n >\n <div\n (click)=\"tableConfig()?.colConfig[colIndex]?.action && tableConfig()?.colConfig[colIndex]?.actionType !== 'checkbox' ? tableConfig()?.colConfig[colIndex]?.action(col) : null\"\n *ngFor=\"let col of row; let colIndex = index\"\n [ngStyle]=\"{\n width: tableConfig()?.colConfig[colIndex]?.style?.width || tableConfig()?.colHeaderConfig[colIndex]?.style?.width || ''\n }\"\n class=\"t-col-container\"\n [ngClass]=\"{ 't-col-container-hover': tableConfig().cellHover }\"\n >\n <div\n class=\"t-col\"\n [style]=\"tableConfig().colConfig[colIndex]?.style\"\n [ngStyle]=\"{\n width: '100%',\n cursor: tableConfig().colConfig[colIndex]?.action ? 'pointer' : 'default',\n 'justify-content': tableConfig().colConfig[colIndex]?.style?.justifyContent\n ? tableConfig().colConfig[colIndex]?.style?.justifyContent\n : tableConfig().colConfig[colIndex]?.type === 'number'\n ? 'flex-end'\n : 'space-between'\n }\"\n >\n <div\n *ngIf=\"tableConfig().colConfig[colIndex]?.type !== 'custom' && tableConfig().colConfig[colIndex]?.type !== 'actions'\"\n [ngStyle]=\"{\n color: tableConfig()?.colConfig[colIndex]?.style?.color || '',\n '--collapsed-lines': previewLines() || 3\n }\"\n [ngClass]=\"{\n 'collapsed-cell': collapseColIndex() == colIndex && expandedMap()[rowIndex]\n }\"\n class=\"t-col-text\"\n >\n <!-- Render as HTML -->\n <ng-container *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'html'; else plainText\">\n <span [innerHTML]=\"col\"></span>\n </ng-container>\n \n <!-- Render as plain text -->\n <ng-template #plainText>\n <span>{{ col }}</span>\n </ng-template>\n </div>\n \n <ng-template\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'custom'\"\n [customComponent]=\"tableConfig().colConfig[colIndex].componentRef\"\n [data]=\"col\"\n customTableCell\n ></ng-template>\n <mis-actions-cell\n *ngIf=\"tableConfig().colConfig[colIndex]?.type === 'actions'\"\n [cellData]=\"col\"\n [config]=\"tableConfig().colConfig[colIndex]\"\n (actionClick)=\"onActionClick($event, rowIndex)\"\n [ngClass]=\"{\n 'disable-actions': (tableConfig().colConfig[colIndex]?.actionType === 'checkbox' || tableConfig().colConfig[colIndex]?.actionType === 'row-collapse') && isRowDisabled(row)\n }\"\n ></mis-actions-cell>\n\n </div>\n </div>\n </div>\n <div *ngIf=\"tableConfig()?.canExpand && expandedIndex() === i\" class=\"sub-row\">\n <ng-container *ngIf=\"subTableDataLoading()\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n Loading...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length === 0\">\n <div [ngStyle]=\"{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n padding: '16px'\n }\">\n No Data Available...\n </div>\n </ng-container>\n \n <ng-container *ngIf=\"!subTableDataLoading() && subTableData().length > 0\">\n <sub-table [config]=\"subTableconfig()\" [tableData]=\"subTableData()\"></sub-table>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <div id=\"pagination-content-container\">\n @if(shouldShowPagination()){\n <div \n id=\"pagination-container\"\n >\n <p id=\"pagination-text\">\n Showing\n {{ (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + 1 }}-{{\n (selectedPage() - 1) * tableConfig().paginationConfig.rowsPerPage + tableLength()\n }}\n of {{ tableConfig().paginationConfig.totalNoOfRows }} items\n </p>\n @if(showPageSizeDropdown()) {\n <div class=\"page-size-selector\">\n <mis-dropdown\n [data]=\"pageSizeOptions()\"\n [selectedItem]=\"selectedPageSizeOption()\"\n [width]=\"'90px'\"\n [height]=\"'32px'\"\n [searchEnabled]=\"false\"\n [dropdownListHeight]=\"'100px'\"\n (onChange)=\"onPageSizeChange($event)\"\n class=\"page-size-dropdown\"\n ></mis-dropdown>\n </div>\n }\n <div id=\"pages-container\">\n <span (click)=\"selectedPage() > 1 && updateSelectedPage(selectedPage() - 1)\" class=\"page\" [class.page-nav-inactive]=\"selectedPage() === 1\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M0.857405 5.56295C0.855794 5.56139 0.854188 5.55982 0.852588 5.55824C0.695955 5.40408 0.617641 5.20203 0.617647 4.99998C0.617641 4.79793 0.695955 4.59588 0.852588 4.44172C0.854188 4.44014 0.855794 4.43858 0.857404 4.43702L5.13066 0.231231C5.44392 -0.0770771 5.9518 -0.0770771 6.26506 0.231231C6.57831 0.53954 6.57831 1.03941 6.26506 1.34772L2.5542 4.99998L6.26506 8.65225C6.57831 8.96055 6.57831 9.46042 6.26506 9.76873C5.9518 10.077 5.44392 10.077 5.13066 9.76873L0.857405 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n <!-- Page numbers (only show if disablePageJumping is false) -->\n <ng-container *ngIf=\"!tableConfig().paginationConfig?.disablePageJumping\">\n <div *ngFor=\"let pageNumber of pages()\">\n <span\n (click)=\"updateSelectedPage(pageNumber)\"\n *ngIf=\"pageNumber != 0\"\n [ngClass]=\"{ 'page-active': pageNumber === selectedPage() }\"\n class=\"page page-jumping-enabled\"\n >{{ pageNumber }}</span>\n <span *ngIf=\"pageNumber == 0\" class=\"page-seperator\">\n <div [ngStyle]=\"{ display: 'flex' }\">\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\" [ngStyle]=\"{ 'margin-right': '4px' }\"></span>\n <span class=\"dot\"></span>\n </div> \n </span>\n </div>\n </ng-container>\n \n <span [class.page-nav-inactive]=\"selectedPage() === tableConfig().paginationConfig?.noOfPages\"\n (click)=\"selectedPage() < tableConfig().paginationConfig?.noOfPages && updateSelectedPage(selectedPage() + 1)\" class=\"page\">\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 7 10\" width=\"7\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n clip-rule=\"evenodd\"\n d=\"M6.1426 5.56295C6.14421 5.56139 6.14581 5.55982 6.14741 5.55824C6.30405 5.40408 6.38236 5.20203 6.38236 4.99998C6.38236 4.79793 6.30405 4.59588 6.14741 4.44172C6.14581 4.44014 6.14421 4.43858 6.1426 4.43702L1.86934 0.231231C1.55608 -0.0770771 1.0482 -0.0770771 0.734942 0.231231C0.421688 0.53954 0.421688 1.03941 0.734942 1.34772L4.4458 4.99998L0.734941 8.65225C0.421686 8.96055 0.421686 9.46042 0.734941 9.76873C1.0482 10.077 1.55608 10.077 1.86934 9.76873L6.1426 5.56295Z\"\n fill=\"#181F33\"\n fill-rule=\"evenodd\"\n />\n </svg>\n </span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: ["#main-container{font-family:Lato,sans-serif;position:relative}.no-scrollbar::-webkit-scrollbar{width:0}.scrollbar::-webkit-scrollbar{width:8px;height:8px;border-radius:15px}.scrollbar::-webkit-scrollbar-thumb{background:var(--text-tertiary, #929DAB);border-radius:15px}#table-container{height:inherit;overflow-y:auto}.scroll-horizontally{height:inherit;width:fit-content;overflow-y:unset!important;overflow-x:visible}#col-headers-container{display:flex;align-items:center;position:sticky;background-color:var(--bg-primary, #FFFFFF);width:100%;z-index:1;min-height:44px;border-bottom:1px solid var(--border-primary, #E0E0E0);top:0;left:0;right:0}.col-header{padding:0 16px;display:flex;align-items:center;height:100%}.col-header-text{font-style:normal;font-weight:700;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.sort-icon{display:flex;justify-content:center;align-items:center}.filter-icon{margin-left:8px;padding:0 8px;position:relative;cursor:pointer}#filter-active{height:8px;width:8px;background:var(--brand-accent, #10ADAE);border-radius:50%;position:absolute;top:4px;right:4px}.sub-row{height:auto;border-bottom:none}.loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:var(--brand-primary, #0937B2)}.t-row{display:flex;min-height:44px;background-color:var(--bg-primary, #FFFFFF);width:100%;border-bottom:1px solid var(--border-primary, #E0E0E0)}.t-row:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.active-row{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container{padding:0 16px;overflow-wrap:anywhere;min-width:0}.t-row-hover:hover{background-color:#0000}.t-col-container-hover:hover{background-color:var(--brand-primary-active, #DAE1F3)}.t-col-container-hover:first-child{border-left:1px solid var(--border-primary, #E0E0E0)}.t-col-container-hover{border-right:1px solid var(--border-primary, #E0E0E0)}.t-col{display:flex;align-items:center;height:100%}.t-col-text{font-style:normal;font-weight:400;font-size:14px;line-height:20px;display:flex;align-items:center;letter-spacing:.2px;margin:0}.text-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}#pagination-container,#pagination-content-container{display:flex;justify-content:flex-end;align-items:center;height:56px}#pagination-text{font-style:normal;font-weight:400;font-size:12px;line-height:18px;letter-spacing:.4px;color:var(--text-secondary, #6A737D);margin:0 16px 0 0}#pages-container{display:flex;margin-right:32px}.page{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:4px;width:32px;height:32px;font-size:14px;line-height:20px;letter-spacing:.2px;color:var(--text-secondary, #6A737D);margin-right:8px;cursor:pointer}.page.page-jumping-enabled{border:1px solid var(--text-secondary, #6A737D)}.page-seperator{display:flex;justify-content:center;align-items:center;width:32px;height:32px;margin-right:8px}.dot{height:3px;width:3px;border-radius:50%;background:var(--text-secondary, #6A737D)}.page-active{color:var(--brand-primary, #0937B2);border:1px solid var(--brand-primary, #0937B2)}.sort-icon{display:inline-flex;align-items:center;margin-left:4px;cursor:pointer}.sort-icon img{width:16px;height:16px;transition:opacity .2s ease}.sort-icon img:hover{opacity:.8}.disabled-row .t-col-container{opacity:.4;pointer-events:none}.disabled-row .t-col-container:has(mis-actions-cell){opacity:1;pointer-events:auto}.row{transition:background-color .2s}.row:hover:not(.disabled-row),.row.selected:not(.disabled-row){background-color:var(--brand-primary-active, #DAE1F3)}.disabled-row .t-col-container{pointer-events:none;opacity:.4}.disabled-row .t-col-container:has(mis-actions-cell){pointer-events:auto!important;opacity:1!important;color:inherit!important}mis-actions-cell.disable-actions{pointer-events:none;opacity:.4;filter:grayscale(.5)}.page-nav-inactive{pointer-events:none;opacity:.5;cursor:default}.page-size-selector{display:flex;align-items:center;gap:8px;margin-right:16px}.collapsed-cell{overflow:hidden!important;white-space:nowrap!important;text-overflow:ellipsis!important;display:block;@supports (-webkit-line-clamp: 2){display:-webkit-box!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:var(--collapsed-lines, 2);white-space:normal!important}}\n"] }]
|
|
830
830
|
}], () => [{ type: i0.Renderer2 }], { filter: [{
|
|
831
831
|
type: ViewChild,
|
|
832
832
|
args: ["filter"]
|