@leanix/components 0.4.262 → 0.4.263
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/esm2022/index.mjs +5 -3
- package/esm2022/lib/core-ui/components/tokenizer/token/token.component.mjs +20 -0
- package/esm2022/lib/core-ui/components/tokenizer/tokenizer.component.mjs +107 -0
- package/esm2022/lib/core-ui/services/resize-observer.service.mjs +18 -2
- package/esm2022/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.mjs +28 -0
- package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +54 -10
- package/fesm2022/leanix-components.mjs +205 -11
- package/fesm2022/leanix-components.mjs.map +1 -1
- package/index.d.ts +4 -2
- package/lib/core-ui/components/tokenizer/token/token.component.d.ts +10 -0
- package/lib/core-ui/components/tokenizer/tokenizer.component.d.ts +36 -0
- package/lib/core-ui/services/resize-observer.service.d.ts +4 -6
- package/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.d.ts +11 -0
- package/lib/forms-ui/components/multi-select/multi-select.component.d.ts +10 -2
- package/package.json +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { InjectionToken, Component, Input, signal, ChangeDetectionStrategy, HostBinding, EventEmitter, Output, HostListener, Directive, Injectable, ElementRef, Inject, ViewChild, input, ContentChildren, Pipe, Optional, NgModule, ContentChild, ViewChildren, forwardRef, TemplateRef, booleanAttribute, SecurityContext, Self, Host } from '@angular/core';
|
2
|
+
import { InjectionToken, Component, Input, signal, ChangeDetectionStrategy, HostBinding, EventEmitter, Output, HostListener, Directive, Injectable, ElementRef, Inject, ViewChild, input, ContentChildren, Pipe, Optional, NgModule, computed, effect, ContentChild, ViewChildren, forwardRef, TemplateRef, booleanAttribute, SecurityContext, Self, Host } from '@angular/core';
|
3
3
|
import * as i1$2 from '@ngx-translate/core';
|
4
4
|
import { TranslateModule, TranslatePipe } from '@ngx-translate/core';
|
5
5
|
import * as i1 from '@angular/common';
|
@@ -11,7 +11,7 @@ import { CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule } from '@angular/c
|
|
11
11
|
import { __decorate } from 'tslib';
|
12
12
|
import { escape, trimEnd, sortBy, get, toLower, isEqual as isEqual$1, some, toString, padCharsStart, toNumber, isNaN as isNaN$1, includes, last, findIndex, filter as filter$1, isObject, find, uniqueId as uniqueId$1 } from 'lodash/fp';
|
13
13
|
import * as i5 from 'rxjs';
|
14
|
-
import { BehaviorSubject, timer, Subject, combineLatest, concat, merge, fromEvent, ReplaySubject,
|
14
|
+
import { BehaviorSubject, timer, Observable, Subject, combineLatest, concat, merge, fromEvent, ReplaySubject, of, map as map$1, switchMap as switchMap$1 } from 'rxjs';
|
15
15
|
import { skipWhile, map, switchMap, startWith, pairwise, filter, withLatestFrom, take, debounceTime, skip, distinctUntilChanged, takeUntil, delay, tap, first } from 'rxjs/operators';
|
16
16
|
import Color from 'color';
|
17
17
|
import { format, distanceInWords, startOfDay } from 'date-fns';
|
@@ -22,6 +22,7 @@ import { CdkStepper, CdkStepperModule } from '@angular/cdk/stepper';
|
|
22
22
|
import * as i1$3 from '@angular/cdk/bidi';
|
23
23
|
import * as i1$a from '@angular/router';
|
24
24
|
import { RouterLink, RouterLinkActive, RouterModule } from '@angular/router';
|
25
|
+
import { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
25
26
|
import * as i1$5 from '@angular/cdk/clipboard';
|
26
27
|
import { ClipboardModule } from '@angular/cdk/clipboard';
|
27
28
|
import * as i1$6 from '@angular/forms';
|
@@ -610,6 +611,22 @@ class ResizeObserverService {
|
|
610
611
|
element.handleResize = callback;
|
611
612
|
this.resizeObserver.observe(element, options);
|
612
613
|
}
|
614
|
+
createResizeObservable(element, options) {
|
615
|
+
return new Observable((subscriber) => {
|
616
|
+
let animationFrame;
|
617
|
+
this.observe(element, (entry) => {
|
618
|
+
animationFrame = window.requestAnimationFrame(() => {
|
619
|
+
subscriber.next(entry);
|
620
|
+
});
|
621
|
+
}, options);
|
622
|
+
return () => {
|
623
|
+
if (animationFrame) {
|
624
|
+
window.cancelAnimationFrame(animationFrame);
|
625
|
+
}
|
626
|
+
this.unobserve(element);
|
627
|
+
};
|
628
|
+
});
|
629
|
+
}
|
613
630
|
unobserve(element) {
|
614
631
|
if (!this.resizeObserver) {
|
615
632
|
return;
|
@@ -2246,6 +2263,119 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
2246
2263
|
type: Input
|
2247
2264
|
}] } });
|
2248
2265
|
|
2266
|
+
class TokenComponent {
|
2267
|
+
constructor(elementRef) {
|
2268
|
+
this.elementRef = elementRef;
|
2269
|
+
}
|
2270
|
+
show() {
|
2271
|
+
this.elementRef.nativeElement.style.display = 'inline-block';
|
2272
|
+
}
|
2273
|
+
hide() {
|
2274
|
+
this.elementRef.nativeElement.style.display = 'none';
|
2275
|
+
}
|
2276
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TokenComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
2277
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", type: TokenComponent, isStandalone: true, selector: "lx-token", ngImport: i0, template: "<ng-content />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
2278
|
+
}
|
2279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TokenComponent, decorators: [{
|
2280
|
+
type: Component,
|
2281
|
+
args: [{ selector: 'lx-token', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content />\n" }]
|
2282
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
2283
|
+
|
2284
|
+
class TokenizerComponent {
|
2285
|
+
constructor(elementRef, destroyRef, changeDetectorRef, resizeObserverService) {
|
2286
|
+
this.elementRef = elementRef;
|
2287
|
+
this.destroyRef = destroyRef;
|
2288
|
+
this.changeDetectorRef = changeDetectorRef;
|
2289
|
+
this.resizeObserverService = resizeObserverService;
|
2290
|
+
this.NAME = 'TokenizerComponent';
|
2291
|
+
this.overflowItems = signal([]);
|
2292
|
+
this.overflowItemCount = computed(() => this.overflowItems().length);
|
2293
|
+
this.showCounter = computed(() => this.active() && this.overflowItemCount() > 0);
|
2294
|
+
this.active = input(true);
|
2295
|
+
this.active$ = toObservable(this.active);
|
2296
|
+
this.overflowStartIndex = signal(null);
|
2297
|
+
/**
|
2298
|
+
* Emitted when the counter button is clicked
|
2299
|
+
* @param startIndex The index of the first overflowing element
|
2300
|
+
* @param counterElement The counter button element
|
2301
|
+
*/
|
2302
|
+
this.overflowPlaceholderClick = new EventEmitter();
|
2303
|
+
effect(() => {
|
2304
|
+
// Whenever the tokenizer is disabled, ensure all tokens are shown
|
2305
|
+
if (!this.active()) {
|
2306
|
+
this.items.forEach((item) => item.show());
|
2307
|
+
}
|
2308
|
+
});
|
2309
|
+
}
|
2310
|
+
ngAfterContentInit() {
|
2311
|
+
const containerWidth = this.resizeObserverService.createResizeObservable(this.elementRef.nativeElement).pipe(map((entry) => entry.contentRect.width ?? 0), debounceTime(16), distinctUntilChanged());
|
2312
|
+
const itemsChanged$ = this.items.changes;
|
2313
|
+
combineLatest([
|
2314
|
+
this.active$,
|
2315
|
+
containerWidth.pipe(startWith(this.elementRef.nativeElement.getBoundingClientRect().width)),
|
2316
|
+
itemsChanged$.pipe(startWith(this.items))
|
2317
|
+
])
|
2318
|
+
.pipe(filter(([active]) => active), takeUntilDestroyed(this.destroyRef))
|
2319
|
+
.subscribe(([, containerWidth]) => {
|
2320
|
+
this.tokenize(containerWidth);
|
2321
|
+
});
|
2322
|
+
}
|
2323
|
+
onCounterClicked() {
|
2324
|
+
const startIndex = this.overflowStartIndex();
|
2325
|
+
if (typeof startIndex === 'number') {
|
2326
|
+
this.overflowPlaceholderClick.emit({ startIndex, counterElement: this.counter });
|
2327
|
+
}
|
2328
|
+
}
|
2329
|
+
tokenize(containerWidth) {
|
2330
|
+
if (!this.items) {
|
2331
|
+
return;
|
2332
|
+
}
|
2333
|
+
this.items.forEach((item) => item.hide());
|
2334
|
+
this.overflowItems.set([]);
|
2335
|
+
this.changeDetectorRef.detectChanges();
|
2336
|
+
let index = 0;
|
2337
|
+
for (const item of this.items) {
|
2338
|
+
item.show();
|
2339
|
+
const usedWidth = this.tokensContainer.nativeElement.getBoundingClientRect().width;
|
2340
|
+
if (usedWidth > containerWidth) {
|
2341
|
+
item.hide();
|
2342
|
+
this.updateOverflowCounter(index);
|
2343
|
+
const usedWidthIncludingCounter = this.tokensContainer.nativeElement.getBoundingClientRect().width;
|
2344
|
+
if (usedWidthIncludingCounter > containerWidth && index >= 1) {
|
2345
|
+
const previousItem = this.items.toArray()[index - 1];
|
2346
|
+
previousItem?.hide();
|
2347
|
+
this.updateOverflowCounter(index - 1);
|
2348
|
+
}
|
2349
|
+
break;
|
2350
|
+
}
|
2351
|
+
index++;
|
2352
|
+
}
|
2353
|
+
}
|
2354
|
+
updateOverflowCounter(index) {
|
2355
|
+
this.overflowStartIndex.set(index);
|
2356
|
+
const overflowingItems = this.items?.toArray().slice(index) ?? [];
|
2357
|
+
this.overflowItems.set(overflowingItems);
|
2358
|
+
this.changeDetectorRef.detectChanges();
|
2359
|
+
}
|
2360
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TokenizerComponent, deps: [{ token: i0.ElementRef }, { token: i0.DestroyRef }, { token: i0.ChangeDetectorRef }, { token: ResizeObserverService }], target: i0.ɵɵFactoryTarget.Component }); }
|
2361
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: TokenizerComponent, isStandalone: true, selector: "lx-tokenizer", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { overflowPlaceholderClick: "overflowPlaceholderClick" }, queries: [{ propertyName: "items", predicate: TokenComponent }], viewQueries: [{ propertyName: "counter", first: true, predicate: ["counter"], descendants: true, read: ElementRef }, { propertyName: "tokensContainer", first: true, predicate: ["tokensContainer"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div #tokensContainer class=\"tokensContainer\">\n <ng-content select=\"lx-token\" />\n @if (showCounter()) {\n <button\n lx-button\n class=\"counterButton\"\n mode=\"ghost\"\n (click)=\"onCounterClicked()\"\n [attr.aria-label]=\"\n NAME + (overflowItemCount() === 1 ? '.showMoreItem' : '.showMoreItems') | translate: { count: overflowItemCount() }\n \"\n >\n <lx-counter #counter aria-hidden=\"true\" [content]=\"'+' + overflowItemCount()\" color=\"gray\" />\n </button>\n }\n</div>\n", styles: [":host{display:flex;align-items:center;white-space:nowrap}:host .counterButton{padding:0;display:flex;align-items:center;margin-left:4px}.tokensContainer{display:flex;align-items:center}\n"], dependencies: [{ kind: "component", type: CounterComponent, selector: "lx-counter", inputs: ["content", "size", "color"] }, { kind: "component", type: ButtonComponent, selector: "button[lx-button]", inputs: ["size", "color", "mode", "pressed", "selected", "square", "circle", "disabled", "showSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
2362
|
+
}
|
2363
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TokenizerComponent, decorators: [{
|
2364
|
+
type: Component,
|
2365
|
+
args: [{ selector: 'lx-tokenizer', standalone: true, imports: [NgIf, CounterComponent, ButtonComponent, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #tokensContainer class=\"tokensContainer\">\n <ng-content select=\"lx-token\" />\n @if (showCounter()) {\n <button\n lx-button\n class=\"counterButton\"\n mode=\"ghost\"\n (click)=\"onCounterClicked()\"\n [attr.aria-label]=\"\n NAME + (overflowItemCount() === 1 ? '.showMoreItem' : '.showMoreItems') | translate: { count: overflowItemCount() }\n \"\n >\n <lx-counter #counter aria-hidden=\"true\" [content]=\"'+' + overflowItemCount()\" color=\"gray\" />\n </button>\n }\n</div>\n", styles: [":host{display:flex;align-items:center;white-space:nowrap}:host .counterButton{padding:0;display:flex;align-items:center;margin-left:4px}.tokensContainer{display:flex;align-items:center}\n"] }]
|
2366
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.DestroyRef }, { type: i0.ChangeDetectorRef }, { type: ResizeObserverService }], propDecorators: { overflowPlaceholderClick: [{
|
2367
|
+
type: Output
|
2368
|
+
}], items: [{
|
2369
|
+
type: ContentChildren,
|
2370
|
+
args: [TokenComponent]
|
2371
|
+
}], counter: [{
|
2372
|
+
type: ViewChild,
|
2373
|
+
args: ['counter', { read: ElementRef }]
|
2374
|
+
}], tokensContainer: [{
|
2375
|
+
type: ViewChild,
|
2376
|
+
args: ['tokensContainer', { read: ElementRef }]
|
2377
|
+
}] } });
|
2378
|
+
|
2249
2379
|
const defaultElement = 'span';
|
2250
2380
|
const defaultClassName = 'highlight';
|
2251
2381
|
/**
|
@@ -5799,6 +5929,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
5799
5929
|
args: ['inputWidth', { static: true }]
|
5800
5930
|
}] } });
|
5801
5931
|
|
5932
|
+
class MultiSelectSelectionComponent extends KeyboardSelectDirective {
|
5933
|
+
constructor() {
|
5934
|
+
super(...arguments);
|
5935
|
+
this.selection = input();
|
5936
|
+
this.tokenize = input(true);
|
5937
|
+
this.removeItem = new EventEmitter();
|
5938
|
+
this.selectionTemplate = null;
|
5939
|
+
}
|
5940
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: MultiSelectSelectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
5941
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: MultiSelectSelectionComponent, isStandalone: true, selector: "lx-multi-select-selection", inputs: { selection: { classPropertyName: "selection", publicName: "selection", isSignal: true, isRequired: false, transformFunction: null }, tokenize: { classPropertyName: "tokenize", publicName: "tokenize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removeItem: "removeItem" }, queries: [{ propertyName: "selectionTemplate", first: true, predicate: ["innerSelectionTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ul>\n <lx-tokenizer [active]=\"tokenize()\">\n @for (selectedItem of selection(); track $index) {\n <lx-token>\n <li\n lxSelectableItem\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n (select)=\"removeItem.emit(selectedItem)\"\n >\n <ng-container *ngTemplateOutlet=\"selectionTemplate; context: { $implicit: selectedItem }\" />\n </li>\n </lx-token>\n }\n </lx-tokenizer>\n</ul>\n", styles: [":host{display:block;overflow:hidden;overflow-x:auto;scrollbar-width:none}ul{display:block;margin:0!important;padding:0!important}li{display:inline}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { kind: "component", type: TokenizerComponent, selector: "lx-tokenizer", inputs: ["active"], outputs: ["overflowPlaceholderClick"] }, { kind: "component", type: TokenComponent, selector: "lx-token" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
5942
|
+
}
|
5943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: MultiSelectSelectionComponent, decorators: [{
|
5944
|
+
type: Component,
|
5945
|
+
args: [{ selector: 'lx-multi-select-selection', standalone: true, imports: [AsyncPipe, NgTemplateOutlet, SelectableItemDirective, TokenizerComponent, TokenComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul>\n <lx-tokenizer [active]=\"tokenize()\">\n @for (selectedItem of selection(); track $index) {\n <lx-token>\n <li\n lxSelectableItem\n #item\n [class.selected]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n (select)=\"removeItem.emit(selectedItem)\"\n >\n <ng-container *ngTemplateOutlet=\"selectionTemplate; context: { $implicit: selectedItem }\" />\n </li>\n </lx-token>\n }\n </lx-tokenizer>\n</ul>\n", styles: [":host{display:block;overflow:hidden;overflow-x:auto;scrollbar-width:none}ul{display:block;margin:0!important;padding:0!important}li{display:inline}\n"] }]
|
5946
|
+
}], propDecorators: { removeItem: [{
|
5947
|
+
type: Output
|
5948
|
+
}], selectionTemplate: [{
|
5949
|
+
type: ContentChild,
|
5950
|
+
args: ['innerSelectionTemplate', { read: TemplateRef, static: true }]
|
5951
|
+
}] } });
|
5952
|
+
|
5802
5953
|
class MultiSelectComponent extends BaseSelectDirective {
|
5803
5954
|
static isStillPossibleMoveToLeft(eventSet) {
|
5804
5955
|
return (!(eventSet.virtualCursorPosition === 0 &&
|
@@ -5842,6 +5993,9 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
5842
5993
|
get dropdownTmpl() {
|
5843
5994
|
return this.explicitDropdown || this.implicitDropdown;
|
5844
5995
|
}
|
5996
|
+
get tokenize() {
|
5997
|
+
return this.canTokenize && !this.isInputFocused && !this.dropdownOpen;
|
5998
|
+
}
|
5845
5999
|
constructor(cd) {
|
5846
6000
|
super();
|
5847
6001
|
this.cd = cd;
|
@@ -5853,6 +6007,7 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
5853
6007
|
this.blur = new EventEmitter();
|
5854
6008
|
this.destroyed$ = new Subject();
|
5855
6009
|
this.isInputFocusedViaTab = false;
|
6010
|
+
this.canTokenize = true;
|
5856
6011
|
}
|
5857
6012
|
get dropdownWidth() {
|
5858
6013
|
switch (this.dropdownWidthScale) {
|
@@ -5875,6 +6030,17 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
5875
6030
|
this.queryInput.focusInput();
|
5876
6031
|
this.open.next(true);
|
5877
6032
|
}
|
6033
|
+
onFocus() {
|
6034
|
+
this.isInputFocused = true;
|
6035
|
+
this.scrollToEndOfSelection();
|
6036
|
+
this.canTokenize = false;
|
6037
|
+
}
|
6038
|
+
onBlur() {
|
6039
|
+
this.isInputFocused = false;
|
6040
|
+
this.isInputFocusedViaTab = false;
|
6041
|
+
this.blur.emit();
|
6042
|
+
this.canTokenize = true;
|
6043
|
+
}
|
5878
6044
|
ngAfterViewInit() {
|
5879
6045
|
super.ngAfterViewInit();
|
5880
6046
|
this.open
|
@@ -5966,8 +6132,7 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
5966
6132
|
addItemToSelection(option, keepSearchQueryAndScrollPosition = false) {
|
5967
6133
|
if (option !== null) {
|
5968
6134
|
this.selection = [...(this.selection || [])].concat(option);
|
5969
|
-
this.
|
5970
|
-
this.propagateChange([...this.selection]);
|
6135
|
+
this.onSelectionChange();
|
5971
6136
|
}
|
5972
6137
|
const filteredOptionsInDropdownBeforeSelection = this.dropdownBase?._items.length ?? 0;
|
5973
6138
|
if (keepSearchQueryAndScrollPosition && filteredOptionsInDropdownBeforeSelection > 1) {
|
@@ -5984,8 +6149,7 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
5984
6149
|
this.selection = filter$1((option) => option !== optionToRemove.item, this.selection);
|
5985
6150
|
this.cd.markForCheck();
|
5986
6151
|
this.cd.detectChanges();
|
5987
|
-
this.
|
5988
|
-
this.propagateChange([...this.selection]);
|
6152
|
+
this.onSelectionChange();
|
5989
6153
|
if (prevOptionIndex === prevSelectionLenght - 1 || optionToRemove.isMouse) {
|
5990
6154
|
this.resetSelectState();
|
5991
6155
|
}
|
@@ -6007,14 +6171,29 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
6007
6171
|
focusedViaTab() {
|
6008
6172
|
this.isInputFocusedViaTab = true;
|
6009
6173
|
}
|
6174
|
+
onSelectionChange() {
|
6175
|
+
if (this.isInputFocused) {
|
6176
|
+
this.scrollToEndOfSelection();
|
6177
|
+
}
|
6178
|
+
const selection = this.selection || [];
|
6179
|
+
this.selectionChange.emit([...selection]);
|
6180
|
+
this.propagateChange([...selection]);
|
6181
|
+
}
|
6182
|
+
scrollToEndOfSelection() {
|
6183
|
+
setTimeout(() => {
|
6184
|
+
if (this.selectionElement) {
|
6185
|
+
this.selectionElement.nativeElement.scrollLeft = this.selectionElement.nativeElement.scrollWidth;
|
6186
|
+
}
|
6187
|
+
}, 0);
|
6188
|
+
}
|
6010
6189
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
6011
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
6190
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: MultiSelectComponent, isStandalone: true, selector: "lx-multi-select", inputs: { markInvalid: "markInvalid", selection: "selection", size: "size", dropdownWidthScale: "dropdownWidthScale", inputId: "inputId" }, outputs: { selectionChange: "selectionChange", blur: "blur" }, providers: [
|
6012
6191
|
{
|
6013
6192
|
provide: NG_VALUE_ACCESSOR,
|
6014
6193
|
useExisting: forwardRef(() => MultiSelectComponent),
|
6015
6194
|
multi: true
|
6016
6195
|
}
|
6017
|
-
], queries: [{ propertyName: "explicitDropdown", first: true, predicate: SelectDropdownDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "queryInput", first: true, predicate: ResponsiveInputComponent, descendants: true
|
6196
|
+
], queries: [{ propertyName: "explicitDropdown", first: true, predicate: SelectDropdownDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "selectionTemplate", first: true, predicate: ["selectionTemplate"], descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "queryInput", first: true, predicate: ResponsiveInputComponent, descendants: true }, { propertyName: "implicitDropdown", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "selectionElement", first: true, predicate: MultiSelectSelectionComponent, descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"dropdownOpen\" class=\"backdrop\" (click)=\"handleBackdropClick($event)\"></div>\n<div\n [lxMarkInvalid]=\"markInvalid\"\n class=\"selectContainer\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.focused]=\"isInputFocused\"\n [class.tokenized]=\"tokenize\"\n [class.focusedVisible]=\"isInputFocusedViaTab\"\n [class.hasSelection]=\"selection && selection.length > 0\"\n [class.smallSize]=\"size === 'small'\"\n [class.disabled]=\"disabled\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectedChoicesContainer\">\n <div *ngIf=\"(selection?.length === 0 || !selection) && !queryControl?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n @if (selectionTemplate) {\n <div class=\"selectionAndInput\">\n <lx-multi-select-selection\n [selection]=\"selection\"\n [tokenize]=\"tokenize\"\n [keyboardSelectAction]=\"selectionKeyboardSelectAction$\"\n (removeItem)=\"removeItem({ item: $event, isMouse: false })\"\n >\n <ng-template #innerSelectionTemplate let-option>\n <ng-container *ngTemplateOutlet=\"selectionTemplate; context: { $implicit: option }\" />\n </ng-template>\n </lx-multi-select-selection>\n <lx-responsive-input\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (focusViaTab)=\"focusedViaTab()\"\n [formControl]=\"queryControl\"\n [inputId]=\"inputId\"\n (keydown.enter)=\"$event.preventDefault()\"\n />\n </div>\n } @else {\n <div class=\"selection\">\n <ng-content select=\".pills\" />\n </div>\n <lx-responsive-input\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (focusViaTab)=\"focusedViaTab()\"\n [formControl]=\"queryControl\"\n [inputId]=\"inputId\"\n (keydown.enter)=\"$event.preventDefault()\"\n />\n }\n <i #toggle [hidden]=\"disabled\" class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"optionsContainer\" [style.width]=\"dropdownWidth\" #optionsContainer>\n <ng-container *ngIf=\"dropdownOpen\">\n <ng-container *ngTemplateOutlet=\"dropdownTmpl\" />\n </ng-container>\n </div>\n</div>\n\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\" />\n</ng-template>\n", styles: [".selectContainer{position:relative;height:auto;cursor:text;padding:0;box-sizing:border-box;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px;background:white}.selectContainer.smallSize .selectedChoicesContainer{min-height:22px}.selectContainer.smallSize .selectedChoicesContainer .placeholder{line-height:24px}.selectContainer.smallSize lx-responsive-input{height:22px}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed}.selectContainer.disabled lx-responsive-input{display:none}.selectContainer:not(.hasSelection){padding-left:12px}.selectContainer.open{z-index:1049;background:#fff;border:1px solid #e1e5eb}.selectContainer.open.bottom{box-shadow:0 6px 6px #21252933;border-bottom-color:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0}.selectContainer.open.bottom .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 6px 6px #21252933;top:100%;border-top:0;margin-top:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 -4px 6px #21252933;margin-bottom:0;border-bottom:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #99c6fa}.selectContainer:not(.open).focusedVisible{outline:1px auto Highlight;outline:1px auto -webkit-focus-ring-color}.selectContainer .selectedChoicesContainer{padding-right:25px;min-height:29px}.selectContainer .selectedChoicesContainer .placeholder{position:absolute;inset:0 25px 0 12px;line-height:29px;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis;padding-left:4px}.selectContainer .selectedChoicesContainer>.fa-angle-down{position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer}.selectContainer .selection{display:inline;cursor:default}.selectContainer .selectionAndInput{display:flex}.selectContainer.tokenized lx-multi-select-selection{flex-grow:1}.selectContainer .optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;background:white;z-index:1}lx-responsive-input{height:29px;padding-left:4px}.backdrop{z-index:1048;position:fixed;inset:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MarkInvalidDirective, selector: "[lxMarkInvalid]", inputs: ["lxMarkInvalid"] }, { kind: "component", type: MultiSelectSelectionComponent, selector: "lx-multi-select-selection", inputs: ["selection", "tokenize"], outputs: ["removeItem"] }, { kind: "component", type: ResponsiveInputComponent, selector: "lx-responsive-input", inputs: ["inputId"], outputs: ["focus", "focusViaTab", "blur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
|
6018
6197
|
}
|
6019
6198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: MultiSelectComponent, decorators: [{
|
6020
6199
|
type: Component,
|
@@ -6024,7 +6203,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
6024
6203
|
useExisting: forwardRef(() => MultiSelectComponent),
|
6025
6204
|
multi: true
|
6026
6205
|
}
|
6027
|
-
], standalone: true, imports: [
|
6206
|
+
], standalone: true, imports: [
|
6207
|
+
NgIf,
|
6208
|
+
MarkInvalidDirective,
|
6209
|
+
MultiSelectSelectionComponent,
|
6210
|
+
ResponsiveInputComponent,
|
6211
|
+
FormsModule,
|
6212
|
+
ReactiveFormsModule,
|
6213
|
+
NgTemplateOutlet,
|
6214
|
+
AsyncPipe
|
6215
|
+
], template: "<div *ngIf=\"dropdownOpen\" class=\"backdrop\" (click)=\"handleBackdropClick($event)\"></div>\n<div\n [lxMarkInvalid]=\"markInvalid\"\n class=\"selectContainer\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.focused]=\"isInputFocused\"\n [class.tokenized]=\"tokenize\"\n [class.focusedVisible]=\"isInputFocusedViaTab\"\n [class.hasSelection]=\"selection && selection.length > 0\"\n [class.smallSize]=\"size === 'small'\"\n [class.disabled]=\"disabled\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectedChoicesContainer\">\n <div *ngIf=\"(selection?.length === 0 || !selection) && !queryControl?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n @if (selectionTemplate) {\n <div class=\"selectionAndInput\">\n <lx-multi-select-selection\n [selection]=\"selection\"\n [tokenize]=\"tokenize\"\n [keyboardSelectAction]=\"selectionKeyboardSelectAction$\"\n (removeItem)=\"removeItem({ item: $event, isMouse: false })\"\n >\n <ng-template #innerSelectionTemplate let-option>\n <ng-container *ngTemplateOutlet=\"selectionTemplate; context: { $implicit: option }\" />\n </ng-template>\n </lx-multi-select-selection>\n <lx-responsive-input\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (focusViaTab)=\"focusedViaTab()\"\n [formControl]=\"queryControl\"\n [inputId]=\"inputId\"\n (keydown.enter)=\"$event.preventDefault()\"\n />\n </div>\n } @else {\n <div class=\"selection\">\n <ng-content select=\".pills\" />\n </div>\n <lx-responsive-input\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n (focusViaTab)=\"focusedViaTab()\"\n [formControl]=\"queryControl\"\n [inputId]=\"inputId\"\n (keydown.enter)=\"$event.preventDefault()\"\n />\n }\n <i #toggle [hidden]=\"disabled\" class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"optionsContainer\" [style.width]=\"dropdownWidth\" #optionsContainer>\n <ng-container *ngIf=\"dropdownOpen\">\n <ng-container *ngTemplateOutlet=\"dropdownTmpl\" />\n </ng-container>\n </div>\n</div>\n\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\" />\n</ng-template>\n", styles: [".selectContainer{position:relative;height:auto;cursor:text;padding:0;box-sizing:border-box;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px;background:white}.selectContainer.smallSize .selectedChoicesContainer{min-height:22px}.selectContainer.smallSize .selectedChoicesContainer .placeholder{line-height:24px}.selectContainer.smallSize lx-responsive-input{height:22px}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed}.selectContainer.disabled lx-responsive-input{display:none}.selectContainer:not(.hasSelection){padding-left:12px}.selectContainer.open{z-index:1049;background:#fff;border:1px solid #e1e5eb}.selectContainer.open.bottom{box-shadow:0 6px 6px #21252933;border-bottom-color:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0}.selectContainer.open.bottom .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 6px 6px #21252933;top:100%;border-top:0;margin-top:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 -4px 6px #21252933;margin-bottom:0;border-bottom:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #99c6fa}.selectContainer:not(.open).focusedVisible{outline:1px auto Highlight;outline:1px auto -webkit-focus-ring-color}.selectContainer .selectedChoicesContainer{padding-right:25px;min-height:29px}.selectContainer .selectedChoicesContainer .placeholder{position:absolute;inset:0 25px 0 12px;line-height:29px;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis;padding-left:4px}.selectContainer .selectedChoicesContainer>.fa-angle-down{position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer}.selectContainer .selection{display:inline;cursor:default}.selectContainer .selectionAndInput{display:flex}.selectContainer.tokenized lx-multi-select-selection{flex-grow:1}.selectContainer .optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;background:white;z-index:1}lx-responsive-input{height:29px;padding-left:4px}.backdrop{z-index:1048;position:fixed;inset:0}\n"] }]
|
6028
6216
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { markInvalid: [{
|
6029
6217
|
type: Input
|
6030
6218
|
}], selection: [{
|
@@ -6042,12 +6230,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
6042
6230
|
}], explicitDropdown: [{
|
6043
6231
|
type: ContentChild,
|
6044
6232
|
args: [SelectDropdownDirective, { read: TemplateRef, static: true }]
|
6233
|
+
}], selectionTemplate: [{
|
6234
|
+
type: ContentChild,
|
6235
|
+
args: ['selectionTemplate', { read: TemplateRef, static: true }]
|
6045
6236
|
}], queryInput: [{
|
6046
6237
|
type: ViewChild,
|
6047
|
-
args: [ResponsiveInputComponent, { static:
|
6238
|
+
args: [ResponsiveInputComponent, { static: false }]
|
6048
6239
|
}], implicitDropdown: [{
|
6049
6240
|
type: ViewChild,
|
6050
6241
|
args: ['dropdown', { static: true }]
|
6242
|
+
}], selectionElement: [{
|
6243
|
+
type: ViewChild,
|
6244
|
+
args: [MultiSelectSelectionComponent, { read: ElementRef }]
|
6051
6245
|
}] } });
|
6052
6246
|
|
6053
6247
|
/**
|
@@ -9270,5 +9464,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
9270
9464
|
* Generated bundle index. Do not edit.
|
9271
9465
|
*/
|
9272
9466
|
|
9273
|
-
export { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, AfterViewInitDirective, AutocloseDirective, AutocloseGroupService, AutofocusDirective, BACKSPACE, BadgeComponent, BannerComponent, BaseSelectDirective, BasicDropdownComponent, BasicDropdownItemComponent, BrPipe, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CURRENCY_SYMBOL_MAP, CardComponent, CdkOptionsDropdownComponent, CdkOptionsSubDropdownComponent, CollapsibleComponent, ColoredLabelComponent, ContenteditableDirective, ContrastColorPipe, CopyButtonComponent, CounterComponent, CurrencyInputComponent, CurrencySymbolComponent, CustomDatePipe, DATEPICKER_CONTROL_VALUE_ACCESSOR, DATE_FN_LOCALE, DATE_FORMATS, DateFormatter, DateInputComponent, DatePickerComponent, DatepickerUiModule, DragAndDropListComponent, DragAndDropListItemComponent, END, ENTER, ESCAPE, EllipsisComponent, EmptyStateComponent, ErrorMessageComponent, ExpandedDropdownComponent, FORM_CONTROL_ERROR_DISPLAY_STRATEGY, FORM_CONTROL_ERROR_NAMESPACE, FileDownloadButtonComponent, FilterSelectionPipe, FilterTermPipe, FormErrorComponent, FormErrorDirective, FormSubmitDirective, FormatNumberPipe, GLOBAL_TRANSLATION_OPTIONS, HOME, HighlightRangePipe, HighlightTermPipe, IconComponent, IconScaleComponent, InputComponent, IntegrationLinkCardComponent, IntegrationLinkCardGroupComponent, KeyboardActionSourceDirective, KeyboardSelectAction, KeyboardSelectDirective, LOCALE_FN, LX_ELLIPSIS_DEBOUNCE_ON_RESIZE, LxCoreUiModule, LxDragAndDropListModule, LxFormsModule, LxIsUuidPipe, LxLinkifyPipe, LxModalModule, LxPopoverUiModule, LxTabUiModule, LxTimeAgo, LxTranslatePipe, LxUnlinkifyPipe, MODAL_CLOSE, MarkInvalidDirective, MarkdownPipe, MaxLengthCounterDirective, ModalCloseClickLocation, ModalComponent, ModalContentDirective, ModalFooterComponent, ModalHeaderComponent, MultiSelectComponent, NbspPipe, OptionComponent, OptionGroupComponent, OptionGroupDropdownComponent, OptionsDropdownComponent, OptionsSubDropdownComponent, PickerComponent, PickerOptionComponent, PickerTriggerDirective, PillItemComponent, PillListComponent, PopoverClickDirective, PopoverComponent, PopoverContentDirective, PopoverHoverDirective, RELEVANCE_SORTING_KEY, ResizeObserverService, ResponsiveInputComponent, SPACE, SelectDropdownDirective, SelectListComponent, SelectableItemDirective, SelectedOptionDirective, SingleSelectComponent, SkeletonComponent, SliderToggleComponent, SortPipe, Sorting, SortingDropdownComponent, SortingDropdownTriggerComponent, SpinnerComponent, StepperComponent, TAB, TabComponent, TabGroupComponent, TableComponent, TableHeaderComponent, TinySpinnerComponent, TooltipComponent, TooltipDirective, TranslationAfterPipe, TranslationBeforePipe, TranslationBetweenPipe, UnescapeCurlyBracesPipe, ValidateDateInForeseeableFuture, ValidateStringNotInArray, ValidateStringNotInArrayAsync, getContrastColor, getTranslationParts, highlightText, isValidHexColor, isValidX, isValidY, provideFormControlErrorDisplayStrategy, provideFormControlErrorNamespace, shorthandHexHandle };
|
9467
|
+
export { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, AfterViewInitDirective, AutocloseDirective, AutocloseGroupService, AutofocusDirective, BACKSPACE, BadgeComponent, BannerComponent, BaseSelectDirective, BasicDropdownComponent, BasicDropdownItemComponent, BrPipe, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CURRENCY_SYMBOL_MAP, CardComponent, CdkOptionsDropdownComponent, CdkOptionsSubDropdownComponent, CollapsibleComponent, ColoredLabelComponent, ContenteditableDirective, ContrastColorPipe, CopyButtonComponent, CounterComponent, CurrencyInputComponent, CurrencySymbolComponent, CustomDatePipe, DATEPICKER_CONTROL_VALUE_ACCESSOR, DATE_FN_LOCALE, DATE_FORMATS, DateFormatter, DateInputComponent, DatePickerComponent, DatepickerUiModule, DragAndDropListComponent, DragAndDropListItemComponent, END, ENTER, ESCAPE, EllipsisComponent, EmptyStateComponent, ErrorMessageComponent, ExpandedDropdownComponent, FORM_CONTROL_ERROR_DISPLAY_STRATEGY, FORM_CONTROL_ERROR_NAMESPACE, FileDownloadButtonComponent, FilterSelectionPipe, FilterTermPipe, FormErrorComponent, FormErrorDirective, FormSubmitDirective, FormatNumberPipe, GLOBAL_TRANSLATION_OPTIONS, HOME, HighlightRangePipe, HighlightTermPipe, IconComponent, IconScaleComponent, InputComponent, IntegrationLinkCardComponent, IntegrationLinkCardGroupComponent, KeyboardActionSourceDirective, KeyboardSelectAction, KeyboardSelectDirective, LOCALE_FN, LX_ELLIPSIS_DEBOUNCE_ON_RESIZE, LxCoreUiModule, LxDragAndDropListModule, LxFormsModule, LxIsUuidPipe, LxLinkifyPipe, LxModalModule, LxPopoverUiModule, LxTabUiModule, LxTimeAgo, LxTranslatePipe, LxUnlinkifyPipe, MODAL_CLOSE, MarkInvalidDirective, MarkdownPipe, MaxLengthCounterDirective, ModalCloseClickLocation, ModalComponent, ModalContentDirective, ModalFooterComponent, ModalHeaderComponent, MultiSelectComponent, NbspPipe, OptionComponent, OptionGroupComponent, OptionGroupDropdownComponent, OptionsDropdownComponent, OptionsSubDropdownComponent, PickerComponent, PickerOptionComponent, PickerTriggerDirective, PillItemComponent, PillListComponent, PopoverClickDirective, PopoverComponent, PopoverContentDirective, PopoverHoverDirective, RELEVANCE_SORTING_KEY, ResizeObserverService, ResponsiveInputComponent, SPACE, SelectDropdownDirective, SelectListComponent, SelectableItemDirective, SelectedOptionDirective, SingleSelectComponent, SkeletonComponent, SliderToggleComponent, SortPipe, Sorting, SortingDropdownComponent, SortingDropdownTriggerComponent, SpinnerComponent, StepperComponent, TAB, TabComponent, TabGroupComponent, TableComponent, TableHeaderComponent, TinySpinnerComponent, TokenComponent, TokenizerComponent, TooltipComponent, TooltipDirective, TranslationAfterPipe, TranslationBeforePipe, TranslationBetweenPipe, UnescapeCurlyBracesPipe, ValidateDateInForeseeableFuture, ValidateStringNotInArray, ValidateStringNotInArrayAsync, getContrastColor, getTranslationParts, highlightText, isValidHexColor, isValidX, isValidY, provideFormControlErrorDisplayStrategy, provideFormControlErrorNamespace, shorthandHexHandle };
|
9274
9468
|
//# sourceMappingURL=leanix-components.mjs.map
|