@bootkit/ng0 0.0.0-alpha.20 → 0.0.0-alpha.21

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.
@@ -0,0 +1,78 @@
1
+ import * as i0 from '@angular/core';
2
+ import { QueryList, ElementRef } from '@angular/core';
3
+ import { Placement } from '@bootkit/ng0/common';
4
+ import { ScrollStrategy } from '@angular/cdk/overlay';
5
+
6
+ /**
7
+ * Defines the possible values for the dropdown auto-close behavior.
8
+ *
9
+ * 'default': The dropdown will close when clicking inside or outside the menu.
10
+ * 'inside': The dropdown will close only when clicking inside the menu.
11
+ * 'outside': The dropdown will close only when clicking outside the menu.
12
+ * 'manual': The dropdown will not close automatically; it must be closed programmatically.
13
+ */
14
+ type DropdownAutoCloseBehavior = 'default' | 'inside' | 'outside' | 'manual';
15
+ /**
16
+ *
17
+ */
18
+ type DropdownSize = 'default' | 'small' | 'large';
19
+
20
+ declare class DropdownItemComponent {
21
+ constructor();
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownItemComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownItemComponent, "ng0-dropdown-item", ["ng0DropdownItem"], {}, {}, never, ["*"], true, never>;
24
+ }
25
+
26
+ declare class DropdownComponent {
27
+ protected _items: QueryList<DropdownItemComponent>;
28
+ protected _scrollStrategy: ScrollStrategy;
29
+ protected _el: ElementRef<any>;
30
+ private _renderer;
31
+ private _overlay;
32
+ /**
33
+ * The placement of the dropdown menu in relation to the dropdown toggle.
34
+ */
35
+ placement: i0.InputSignal<Placement>;
36
+ /**
37
+ * Indicates whether the dropdown is open or closed.
38
+ */
39
+ readonly open: i0.ModelSignal<boolean>;
40
+ /**
41
+ *
42
+ */
43
+ readonly autoClose: i0.InputSignal<DropdownAutoCloseBehavior>;
44
+ constructor();
45
+ protected _onOverlayAttach(): void;
46
+ protected _onOverlayDetach(): void;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "ng0-dropdown", ["ng0Dropdown"], { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, ["_items"], ["*", "ng0-dropdown-menu"], true, never>;
49
+ }
50
+
51
+ declare class DropdownMenuComponent {
52
+ private _el;
53
+ private _renderer;
54
+ private _dropdown;
55
+ constructor();
56
+ private _onClick;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownMenuComponent, never>;
58
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownMenuComponent, "ng0-dropdown-menu", ["ng0Dropdownmenu"], {}, {}, never, ["*"], true, never>;
59
+ }
60
+
61
+ declare class DropdownHeaderComponent {
62
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownHeaderComponent, never>;
63
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownHeaderComponent, "ng0-dropdown-header", ["ng0DropdownItem"], {}, {}, never, ["*"], true, never>;
64
+ }
65
+
66
+ declare class DropdownDividerComponent {
67
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownDividerComponent, never>;
68
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownDividerComponent, "ng0-dropdown-divider", ["ng0DropdownDivider"], {}, {}, never, never, true, never>;
69
+ }
70
+
71
+ declare class DropdownModule {
72
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownModule, never>;
73
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DropdownModule, never, [typeof DropdownComponent, typeof DropdownMenuComponent, typeof DropdownItemComponent, typeof DropdownHeaderComponent, typeof DropdownDividerComponent], [typeof DropdownComponent, typeof DropdownMenuComponent, typeof DropdownItemComponent, typeof DropdownHeaderComponent, typeof DropdownDividerComponent]>;
74
+ static ɵinj: i0.ɵɵInjectorDeclaration<DropdownModule>;
75
+ }
76
+
77
+ export { DropdownComponent, DropdownDividerComponent, DropdownHeaderComponent, DropdownItemComponent, DropdownMenuComponent, DropdownModule };
78
+ export type { DropdownAutoCloseBehavior, DropdownSize };
@@ -59,7 +59,7 @@ declare class ListComponent implements OnInit, ControlValueAccessor {
59
59
  /**
60
60
  * Custom value extractor function to extract the value of any object while writing values.
61
61
  */
62
- readonly writeValueBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_data.ValueExtractor, _bootkit_ng0_data.ValueExtractorLike>;
62
+ readonly writeBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_data.ValueExtractor, _bootkit_ng0_data.ValueExtractorLike>;
63
63
  /**
64
64
  * A custom filter predicate function to filter items based on a search string.
65
65
  * Default checks if the item's string representation contains the filter string (case-insensitive).
@@ -112,7 +112,7 @@ declare class ListComponent implements OnInit, ControlValueAccessor {
112
112
  private _listenToDataSourceChanges;
113
113
  private _insertItems;
114
114
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListComponent, never>;
115
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListComponent, "ng0-list", ["ng0List"], { "source": { "alias": "source"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "showIndicator": { "alias": "showIndicator"; "required": false; "isSignal": true; }; "compareBy": { "alias": "compareBy"; "required": false; "isSignal": true; }; "formatBy": { "alias": "formatBy"; "required": false; "isSignal": true; }; "writeValueBy": { "alias": "writeValueBy"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "itemClass": { "alias": "itemClass"; "required": false; "isSignal": true; }; "focus": { "alias": "focus"; "required": false; "isSignal": true; }; "idGenerator": { "alias": "idGenerator"; "required": false; "isSignal": true; }; }, {}, ["_itemTemplate"], never, true, never>;
115
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListComponent, "ng0-list", ["ng0List"], { "source": { "alias": "source"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "showIndicator": { "alias": "showIndicator"; "required": false; "isSignal": true; }; "compareBy": { "alias": "compareBy"; "required": false; "isSignal": true; }; "formatBy": { "alias": "formatBy"; "required": false; "isSignal": true; }; "writeBy": { "alias": "writeBy"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "itemClass": { "alias": "itemClass"; "required": false; "isSignal": true; }; "focus": { "alias": "focus"; "required": false; "isSignal": true; }; "idGenerator": { "alias": "idGenerator"; "required": false; "isSignal": true; }; }, {}, ["_itemTemplate"], never, true, never>;
116
116
  }
117
117
 
118
118
  /**
@@ -1,28 +1,21 @@
1
+ import * as _bootkit_ng0_common from '@bootkit/ng0/common';
2
+ import { SelectOption } from '@bootkit/ng0/common';
1
3
  import * as _bootkit_ng0_localization from '@bootkit/ng0/localization';
2
4
  import * as _bootkit_ng0_data from '@bootkit/ng0/data';
3
5
  import { DataSource, DataSourceLike, FilterPredicate } from '@bootkit/ng0/data';
4
6
  import * as _angular_core from '@angular/core';
5
- import { OnInit, ElementRef, TemplateRef, Renderer2, DestroyRef } from '@angular/core';
7
+ import { OnInit, TemplateRef, ElementRef } from '@angular/core';
6
8
  import { ControlValueAccessor } from '@angular/forms';
7
9
  import { FlexibleConnectedPositionStrategy, ScrollStrategy } from '@angular/cdk/overlay';
8
- import { SelectOption } from '@bootkit/ng0/common';
9
10
 
10
11
  /**
11
12
  * Select component that allows users to choose an option from a dropdown list.
12
13
  */
13
14
  declare class SelectComponent implements OnInit, ControlValueAccessor {
14
- protected _el: ElementRef<HTMLDivElement>;
15
- private _renderer;
16
- private _destroyRef;
17
- private _viewportRuler;
18
- private _overlay;
19
- private _document;
20
- private _ls;
21
- private _changeDetector;
22
15
  private _resizeObserver?;
23
16
  private _resizeObserverInitialized;
24
17
  private _viewpoerRulerSubscription?;
25
- protected _value: _angular_core.WritableSignal<any>;
18
+ protected _cdkListboxValue: _angular_core.WritableSignal<any>;
26
19
  private _filterElementRef?;
27
20
  private _onChangeCallback;
28
21
  private _onTouchedCallback;
@@ -33,6 +26,14 @@ declare class SelectComponent implements OnInit, ControlValueAccessor {
33
26
  protected _optionTemplate?: TemplateRef<any>;
34
27
  protected _positionStrategy: FlexibleConnectedPositionStrategy;
35
28
  protected _scrollStrategy: ScrollStrategy;
29
+ private _overlay;
30
+ private _document;
31
+ private _ls;
32
+ private _destroyRef;
33
+ protected _el: ElementRef<any>;
34
+ private _renderer;
35
+ private _viewportRuler;
36
+ private _changeDetector;
36
37
  /**
37
38
  * The data source for the select component.
38
39
  * This can be an array of data, a function that returns an observable of data,
@@ -40,22 +41,26 @@ declare class SelectComponent implements OnInit, ControlValueAccessor {
40
41
  */
41
42
  readonly source: _angular_core.InputSignalWithTransform<DataSource<any>, DataSourceLike<any>>;
42
43
  /**
43
- * Indicates whether the dropdown is open or closed.
44
+ * Indicates whether multi selection is enabled or not.
44
45
  */
45
- readonly open: _angular_core.ModelSignal<boolean>;
46
+ readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
46
47
  /**
47
- * Custom compare function to determine equality between two items.
48
- * Default is a simple equality check.
48
+ * Indicates whether the dropdown is open or closed.
49
49
  */
50
+ readonly open: _angular_core.ModelSignal<boolean>;
50
51
  /**
51
- * Custom value extractor function to extract the value of any object.
52
- */
53
- readonly extractBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_data.ValueExtractor, _bootkit_ng0_data.ValueExtractorLike>;
52
+ * A custom comparer function or the name of a field for comparing two objects.
53
+ */
54
+ readonly compareBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_data.BooleanValueComparer, _bootkit_ng0_data.BooleanValueComparerLike>;
54
55
  /**
55
56
  * Custom format function to convert an item to a string for display.
56
57
  * Default converts the item to a string using its toString method.
57
58
  */
58
59
  readonly formatBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_localization.ValueFormatterFunction, _bootkit_ng0_localization.ValueFormatterLike>;
60
+ /**
61
+ * Custom value extractor function to extract the value of any object while writing values.
62
+ */
63
+ readonly writeBy: _angular_core.InputSignalWithTransform<_bootkit_ng0_data.ValueExtractor, _bootkit_ng0_data.ValueExtractorLike>;
59
64
  /**
60
65
  * Indicates whether the dropdown is filterable.
61
66
  */
@@ -69,27 +74,18 @@ declare class SelectComponent implements OnInit, ControlValueAccessor {
69
74
  * Default checks if the item contains the filter value (case-insensitive).
70
75
  */
71
76
  readonly filterBy: _angular_core.InputSignal<FilterPredicate>;
72
- constructor(_el: ElementRef<HTMLDivElement>, _renderer: Renderer2, _destroyRef: DestroyRef);
77
+ /**
78
+ * CSS class or classes to apply to the list container.
79
+ */
80
+ readonly itemClass: _angular_core.InputSignalWithTransform<_bootkit_ng0_common.CssClassGetter, _bootkit_ng0_common.CssClassLike>;
81
+ constructor();
73
82
  ngOnInit(): void;
83
+ private _loadItems;
74
84
  private _handleDataSourceChange;
75
85
  /**
76
86
  * Selects an option by index
77
87
  */
78
88
  protected _selectByIndex(index: number): void;
79
- isSelected(value: any): boolean;
80
- /**
81
- * Sets an option as active
82
- */
83
- active(index: number): void;
84
- /**
85
- * Scrolls the item at the specified index into view within the dropdown list.
86
- * @param index The index of the item to scroll into view.
87
- * @param position The vertical alignment of the item after scrolling.
88
- * Can be 'start', 'center', 'end', or 'nearest'.
89
- * Default is 'nearest'.
90
- * @param behavior The scrolling behavior.
91
- */
92
- scrollItemIntoView(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior): void;
93
89
  protected _insertOptions(index?: number, ...items: any[]): void;
94
90
  writeValue(obj: any): void;
95
91
  registerOnChange(fn: any): void;
@@ -105,7 +101,7 @@ declare class SelectComponent implements OnInit, ControlValueAccessor {
105
101
  private _unlistenFromResizeEvents;
106
102
  private _onHostClick;
107
103
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
108
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ng0-select", ["ng0Select"], { "source": { "alias": "source"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "extractBy": { "alias": "extractBy"; "required": false; "isSignal": true; }; "formatBy": { "alias": "formatBy"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, ["_optionTemplate"], never, true, never>;
104
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ng0-select", ["ng0Select"], { "source": { "alias": "source"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "compareBy": { "alias": "compareBy"; "required": false; "isSignal": true; }; "formatBy": { "alias": "formatBy"; "required": false; "isSignal": true; }; "writeBy": { "alias": "writeBy"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "itemClass": { "alias": "itemClass"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, ["_optionTemplate"], never, true, never>;
109
105
  }
110
106
 
111
107
  /**
@@ -0,0 +1,189 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, inject, ElementRef, Renderer2, input, model, ContentChildren, HostListener, NgModule } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import * as i1 from '@angular/cdk/overlay';
5
+ import { Overlay, OverlayModule } from '@angular/cdk/overlay';
6
+
7
+ // export type DropdownToggleTriggerMode = 'click' | 'hover' | 'focus';
8
+
9
+ class DropdownItemComponent {
10
+ // private _el = inject(ElementRef);
11
+ // private _renderer = inject(Renderer2);
12
+ constructor() {
13
+ // this._renderer.addClass(this._el.nativeElement, 'dropdown-item');
14
+ }
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: DropdownItemComponent, isStandalone: true, selector: "ng0-dropdown-item", exportAs: ["ng0DropdownItem"], ngImport: i0, template: `<button class="dropdown-item"><ng-content></ng-content></button>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownItemComponent, decorators: [{
19
+ type: Component,
20
+ args: [{
21
+ selector: 'ng0-dropdown-item',
22
+ exportAs: 'ng0DropdownItem',
23
+ standalone: true,
24
+ changeDetection: ChangeDetectionStrategy.OnPush,
25
+ imports: [
26
+ CommonModule,
27
+ ],
28
+ template: `<button class="dropdown-item"><ng-content></ng-content></button>`,
29
+ }]
30
+ }], ctorParameters: () => [] });
31
+
32
+ class DropdownComponent {
33
+ _items;
34
+ // @HostBinding('class.dropstart')
35
+ // private get _placementStart() { return this.placement() == 'start' };
36
+ // @HostBinding('class.dropend')
37
+ // private get _placementEnd() { return this.placement() == 'end' };
38
+ // @HostBinding('class.dropup')
39
+ // private get _placementTop() { return this.placement() == 'top' };
40
+ // @HostBinding('class.dropdown')
41
+ // private get _placementBottom() { return this.placement() == 'bottom' };
42
+ _scrollStrategy;
43
+ _el = inject(ElementRef);
44
+ _renderer = inject(Renderer2);
45
+ _overlay = inject(Overlay);
46
+ /**
47
+ * The placement of the dropdown menu in relation to the dropdown toggle.
48
+ */
49
+ placement = input('bottom', ...(ngDevMode ? [{ debugName: "placement" }] : []));
50
+ /**
51
+ * Indicates whether the dropdown is open or closed.
52
+ */
53
+ open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
54
+ /**
55
+ *
56
+ */
57
+ autoClose = input('default', ...(ngDevMode ? [{ debugName: "autoClose" }] : []));
58
+ constructor() {
59
+ this._renderer.addClass(this._el.nativeElement, 'dropdown');
60
+ this._scrollStrategy = this._overlay.scrollStrategies.block();
61
+ }
62
+ _onOverlayAttach() {
63
+ // this._activeOptionIndex.set(this._selectedOptionIndex())
64
+ // this._listenToResizeEvents();
65
+ // if (this.filterable()) {
66
+ // setTimeout(() => {
67
+ // this._filterElementRef?.nativeElement.focus();
68
+ // }, 0);
69
+ // }
70
+ // if (this._selectedOptionIndex() > -1) {
71
+ // // this.scrollItemIntoView(this._selectedOptionIndex(), 'start', 'instant');
72
+ // }
73
+ }
74
+ _onOverlayDetach() {
75
+ // this._unlistenFromResizeEvents();
76
+ // if (this.filterable()) {
77
+ // this._el?.nativeElement.focus();
78
+ // this._options().forEach(x => x.show = false);
79
+ // }
80
+ }
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.2.1", type: DropdownComponent, isStandalone: true, selector: "ng0-dropdown", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, autoClose: { classPropertyName: "autoClose", publicName: "autoClose", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, queries: [{ propertyName: "_items", predicate: DropdownItemComponent }], exportAs: ["ng0Dropdown"], ngImport: i0, template: "<button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" (click)=\"open.set(true)\">\r\n <ng-content></ng-content>\r\n</button>\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_el.nativeElement\"\r\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n (overlayOutsideClick)=\"open.set(false)\"\r\n (attach)=\"_onOverlayAttach()\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n <div class=\"dropdown-menu show\">\r\n\r\n </div>\r\n\r\n <ng-content select=\"ng0-dropdown-menu\"></ng-content>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ selector: 'ng0-dropdown', exportAs: 'ng0Dropdown', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
87
+ CommonModule,
88
+ OverlayModule,
89
+ ], template: "<button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" (click)=\"open.set(true)\">\r\n <ng-content></ng-content>\r\n</button>\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_el.nativeElement\"\r\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n (overlayOutsideClick)=\"open.set(false)\"\r\n (attach)=\"_onOverlayAttach()\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n <div class=\"dropdown-menu show\">\r\n\r\n </div>\r\n\r\n <ng-content select=\"ng0-dropdown-menu\"></ng-content>\r\n</ng-template>" }]
90
+ }], ctorParameters: () => [], propDecorators: { _items: [{
91
+ type: ContentChildren,
92
+ args: [DropdownItemComponent]
93
+ }] } });
94
+
95
+ class DropdownHeaderComponent {
96
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: DropdownHeaderComponent, isStandalone: true, selector: "ng0-dropdown-header", exportAs: ["ng0DropdownItem"], ngImport: i0, template: `<h6 class="dropdown-header"><ng-content></ng-content></h6>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
+ }
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownHeaderComponent, decorators: [{
100
+ type: Component,
101
+ args: [{
102
+ selector: 'ng0-dropdown-header',
103
+ exportAs: 'ng0DropdownItem',
104
+ standalone: true,
105
+ changeDetection: ChangeDetectionStrategy.OnPush,
106
+ imports: [
107
+ CommonModule,
108
+ ],
109
+ template: `<h6 class="dropdown-header"><ng-content></ng-content></h6>`,
110
+ }]
111
+ }] });
112
+
113
+ class DropdownDividerComponent {
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: DropdownDividerComponent, isStandalone: true, selector: "ng0-dropdown-divider", exportAs: ["ng0DropdownDivider"], ngImport: i0, template: `<hr class="dropdown-divider">`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownDividerComponent, decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: 'ng0-dropdown-divider',
121
+ exportAs: 'ng0DropdownDivider',
122
+ standalone: true,
123
+ changeDetection: ChangeDetectionStrategy.OnPush,
124
+ imports: [
125
+ CommonModule,
126
+ ],
127
+ template: `<hr class="dropdown-divider">`,
128
+ }]
129
+ }] });
130
+
131
+ class DropdownMenuComponent {
132
+ _el = inject(ElementRef);
133
+ _renderer = inject(Renderer2);
134
+ _dropdown = inject(DropdownComponent);
135
+ constructor() {
136
+ this._renderer.addClass(this._el.nativeElement, 'dropdown-menu');
137
+ }
138
+ _onClick() {
139
+ // if (this.autoClose() == 'default' || this.autoClose() == 'inside') {
140
+ // this._cdkOverlay.detachOverlay();
141
+ // }
142
+ }
143
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
144
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.1", type: DropdownMenuComponent, isStandalone: true, selector: "ng0-dropdown-menu", host: { listeners: { "click": "_onClick()" } }, exportAs: ["ng0Dropdownmenu"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownMenuComponent, decorators: [{
147
+ type: Component,
148
+ args: [{ selector: 'ng0-dropdown-menu', exportAs: 'ng0Dropdownmenu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
149
+ CommonModule,
150
+ ], template: `<ng-content></ng-content>`, styles: [":host{display:block}\n"] }]
151
+ }], ctorParameters: () => [], propDecorators: { _onClick: [{
152
+ type: HostListener,
153
+ args: ['click']
154
+ }] } });
155
+
156
+ const Items = [
157
+ DropdownComponent,
158
+ DropdownMenuComponent,
159
+ DropdownItemComponent,
160
+ DropdownHeaderComponent,
161
+ DropdownDividerComponent
162
+ ];
163
+ class DropdownModule {
164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
165
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.2.1", ngImport: i0, type: DropdownModule, imports: [DropdownComponent,
166
+ DropdownMenuComponent,
167
+ DropdownItemComponent,
168
+ DropdownHeaderComponent,
169
+ DropdownDividerComponent], exports: [DropdownComponent,
170
+ DropdownMenuComponent,
171
+ DropdownItemComponent,
172
+ DropdownHeaderComponent,
173
+ DropdownDividerComponent] });
174
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownModule, imports: [Items] });
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: DropdownModule, decorators: [{
177
+ type: NgModule,
178
+ args: [{
179
+ imports: Items,
180
+ exports: Items
181
+ }]
182
+ }] });
183
+
184
+ /**
185
+ * Generated bundle index. Do not edit.
186
+ */
187
+
188
+ export { DropdownComponent, DropdownDividerComponent, DropdownHeaderComponent, DropdownItemComponent, DropdownMenuComponent, DropdownModule };
189
+ //# sourceMappingURL=bootkit-ng0-components-dropdown.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootkit-ng0-components-dropdown.mjs","sources":["../../../projects/ng0/components/dropdown/types.ts","../../../projects/ng0/components/dropdown/dropdown-item.component.ts","../../../projects/ng0/components/dropdown/dropdown.component.ts","../../../projects/ng0/components/dropdown/dropdown.component.html","../../../projects/ng0/components/dropdown/dropdown-header.component.ts","../../../projects/ng0/components/dropdown/dropdown-divider.component.ts","../../../projects/ng0/components/dropdown/dropdown-menu.component.ts","../../../projects/ng0/components/dropdown/dropdown.module.ts","../../../projects/ng0/components/dropdown/bootkit-ng0-components-dropdown.ts"],"sourcesContent":["\r\n/**\r\n * Defines the possible values for the dropdown auto-close behavior.\r\n * \r\n * 'default': The dropdown will close when clicking inside or outside the menu.\r\n * 'inside': The dropdown will close only when clicking inside the menu.\r\n * 'outside': The dropdown will close only when clicking outside the menu.\r\n * 'manual': The dropdown will not close automatically; it must be closed programmatically.\r\n */\r\nexport type DropdownAutoCloseBehavior = 'default' | 'inside' | 'outside' | 'manual';\r\n\r\n/**\r\n * \r\n */\r\nexport type DropdownSize = 'default' | 'small' | 'large';\r\n\r\n\r\n// export type DropdownToggleTriggerMode = 'click' | 'hover' | 'focus';\r\n","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, inject, input, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng0-dropdown-item',\r\n exportAs: 'ng0DropdownItem',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ],\r\n template: `<button class=\"dropdown-item\"><ng-content></ng-content></button>`,\r\n})\r\nexport class DropdownItemComponent {\r\n // private _el = inject(ElementRef);\r\n // private _renderer = inject(Renderer2);\r\n\r\n constructor() {\r\n // this._renderer.addClass(this._el.nativeElement, 'dropdown-item');\r\n }\r\n\r\n\r\n}\r\n","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, HostBinding, ContentChild, effect, AfterViewInit, inject, input, ContentChildren, QueryList, model } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Placement } from '@bootkit/ng0/common';\r\nimport { DropdownItemComponent } from './dropdown-item.component';\r\nimport { Overlay, OverlayModule, ScrollStrategy } from '@angular/cdk/overlay';\r\nimport { DropdownAutoCloseBehavior } from './types';\r\n\r\n@Component({\r\n selector: 'ng0-dropdown',\r\n exportAs: 'ng0Dropdown',\r\n templateUrl: './dropdown.component.html',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n ]\r\n})\r\nexport class DropdownComponent {\r\n @ContentChildren(DropdownItemComponent) protected _items!: QueryList<DropdownItemComponent>;\r\n\r\n\r\n // @HostBinding('class.dropstart')\r\n // private get _placementStart() { return this.placement() == 'start' };\r\n\r\n // @HostBinding('class.dropend')\r\n // private get _placementEnd() { return this.placement() == 'end' };\r\n\r\n // @HostBinding('class.dropup')\r\n // private get _placementTop() { return this.placement() == 'top' };\r\n\r\n // @HostBinding('class.dropdown')\r\n // private get _placementBottom() { return this.placement() == 'bottom' };\r\n protected _scrollStrategy!: ScrollStrategy;\r\n\r\n protected _el = inject(ElementRef);\r\n private _renderer = inject(Renderer2);\r\n private _overlay = inject(Overlay);\r\n\r\n /**\r\n * The placement of the dropdown menu in relation to the dropdown toggle.\r\n */\r\n public placement = input<Placement>('bottom');\r\n\r\n /** \r\n * Indicates whether the dropdown is open or closed.\r\n */\r\n public readonly open = model(false);\r\n\r\n /**\r\n * \r\n */\r\n public readonly autoClose = input<DropdownAutoCloseBehavior>('default');\r\n\r\n constructor() {\r\n this._renderer.addClass(this._el.nativeElement, 'dropdown');\r\n this._scrollStrategy = this._overlay.scrollStrategies.block();\r\n\r\n }\r\n\r\n\r\n protected _onOverlayAttach() {\r\n // this._activeOptionIndex.set(this._selectedOptionIndex())\r\n\r\n // this._listenToResizeEvents();\r\n\r\n // if (this.filterable()) {\r\n // setTimeout(() => {\r\n // this._filterElementRef?.nativeElement.focus();\r\n // }, 0);\r\n // }\r\n\r\n // if (this._selectedOptionIndex() > -1) {\r\n // // this.scrollItemIntoView(this._selectedOptionIndex(), 'start', 'instant');\r\n // }\r\n }\r\n\r\n protected _onOverlayDetach() {\r\n // this._unlistenFromResizeEvents();\r\n // if (this.filterable()) {\r\n // this._el?.nativeElement.focus();\r\n // this._options().forEach(x => x.show = false);\r\n // }\r\n }\r\n\r\n}\r\n","<button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" (click)=\"open.set(true)\">\r\n <ng-content></ng-content>\r\n</button>\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_el.nativeElement\"\r\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n (overlayOutsideClick)=\"open.set(false)\"\r\n (attach)=\"_onOverlayAttach()\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n <div class=\"dropdown-menu show\">\r\n\r\n </div>\r\n\r\n <ng-content select=\"ng0-dropdown-menu\"></ng-content>\r\n</ng-template>","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, inject, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng0-dropdown-header',\r\n exportAs: 'ng0DropdownItem',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ],\r\n template: `<h6 class=\"dropdown-header\"><ng-content></ng-content></h6>`,\r\n})\r\nexport class DropdownHeaderComponent {\r\n}\r\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'ng0-dropdown-divider',\r\n exportAs: 'ng0DropdownDivider',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ],\r\n template: `<hr class=\"dropdown-divider\">`,\r\n})\r\nexport class DropdownDividerComponent {\r\n}\r\n","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, inject, input, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DropdownComponent } from './dropdown.component';\r\n\r\n@Component({\r\n selector: 'ng0-dropdown-menu',\r\n exportAs: 'ng0Dropdownmenu',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n ],\r\n template: `<ng-content></ng-content>`,\r\n styles: `:host { display: block; }`,\r\n})\r\nexport class DropdownMenuComponent {\r\n private _el = inject(ElementRef);\r\n private _renderer = inject(Renderer2);\r\n private _dropdown = inject(DropdownComponent);\r\n\r\n constructor() {\r\n this._renderer.addClass(this._el.nativeElement, 'dropdown-menu');\r\n }\r\n\r\n @HostListener('click')\r\n private _onClick() {\r\n // if (this.autoClose() == 'default' || this.autoClose() == 'inside') {\r\n // this._cdkOverlay.detachOverlay();\r\n // }\r\n }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { DropdownItemComponent } from './dropdown-item.component';\r\nimport { DropdownComponent } from './dropdown.component';\r\nimport { DropdownHeaderComponent } from './dropdown-header.component';\r\nimport { DropdownDividerComponent } from './dropdown-divider.component';\r\nimport { DropdownMenuComponent } from './dropdown-menu.component';\r\n\r\n\r\nconst Items = [\r\n DropdownComponent,\r\n DropdownMenuComponent,\r\n DropdownItemComponent,\r\n DropdownHeaderComponent,\r\n DropdownDividerComponent\r\n]\r\n\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class DropdownModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -63,7 +63,7 @@ class ListComponent {
63
63
  /**
64
64
  * Custom value extractor function to extract the value of any object while writing values.
65
65
  */
66
- writeValueBy = input(defaultValueExtractor, ...(ngDevMode ? [{ debugName: "writeValueBy", transform: ValueExtractorAttribute }] : [{
66
+ writeBy = input(defaultValueExtractor, ...(ngDevMode ? [{ debugName: "writeBy", transform: ValueExtractorAttribute }] : [{
67
67
  transform: ValueExtractorAttribute
68
68
  }]));
69
69
  /**
@@ -141,7 +141,7 @@ class ListComponent {
141
141
  throw new Error('Index out of range');
142
142
  }
143
143
  let item = this._items()[index];
144
- let writeValueBy = this.writeValueBy();
144
+ let writeValueBy = this.writeBy();
145
145
  if (this.multiple()) {
146
146
  item.selected = !item.selected;
147
147
  let selectedValues = this._items().filter(x => x.selected).map(x => (x.value));
@@ -274,7 +274,7 @@ class ListComponent {
274
274
  this._changeDetector.markForCheck();
275
275
  }
276
276
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: ListComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
277
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ListComponent, isStandalone: true, selector: "ng0-list", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showIndicator: { classPropertyName: "showIndicator", publicName: "showIndicator", isSignal: true, isRequired: false, transformFunction: null }, compareBy: { classPropertyName: "compareBy", publicName: "compareBy", isSignal: true, isRequired: false, transformFunction: null }, formatBy: { classPropertyName: "formatBy", publicName: "formatBy", isSignal: true, isRequired: false, transformFunction: null }, writeValueBy: { classPropertyName: "writeValueBy", publicName: "writeValueBy", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, itemClass: { classPropertyName: "itemClass", publicName: "itemClass", isSignal: true, isRequired: false, transformFunction: null }, focus: { classPropertyName: "focus", publicName: "focus", isSignal: true, isRequired: false, transformFunction: null }, idGenerator: { classPropertyName: "idGenerator", publicName: "idGenerator", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "_onKeydown($event)" }, properties: { "class.ng0-list-loading": "source().isLoading()", "attr.aria-activedescendant": "_activeOptionIndex() > -1 ? (_items()[_activeOptionIndex()].id) : undefined", "attr.disabled": "_isDisabled()", "attr.tabindex": "_isDisabled() || focus() === \"none\" ? \"-1\" : \"0\"", "attr.aria-disabled": "_isDisabled()" } }, providers: [{
277
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: ListComponent, isStandalone: true, selector: "ng0-list", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, showIndicator: { classPropertyName: "showIndicator", publicName: "showIndicator", isSignal: true, isRequired: false, transformFunction: null }, compareBy: { classPropertyName: "compareBy", publicName: "compareBy", isSignal: true, isRequired: false, transformFunction: null }, formatBy: { classPropertyName: "formatBy", publicName: "formatBy", isSignal: true, isRequired: false, transformFunction: null }, writeBy: { classPropertyName: "writeBy", publicName: "writeBy", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, itemClass: { classPropertyName: "itemClass", publicName: "itemClass", isSignal: true, isRequired: false, transformFunction: null }, focus: { classPropertyName: "focus", publicName: "focus", isSignal: true, isRequired: false, transformFunction: null }, idGenerator: { classPropertyName: "idGenerator", publicName: "idGenerator", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "_onKeydown($event)" }, properties: { "class.ng0-list-loading": "source().isLoading()", "attr.aria-activedescendant": "_activeOptionIndex() > -1 ? (_items()[_activeOptionIndex()].id) : undefined", "attr.disabled": "_isDisabled()", "attr.tabindex": "_isDisabled() || focus() === \"none\" ? \"-1\" : \"0\"", "attr.aria-disabled": "_isDisabled()" } }, providers: [{
278
278
  provide: NG_VALUE_ACCESSOR,
279
279
  useExisting: forwardRef(() => ListComponent),
280
280
  multi: true
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, input, OnInit, DestroyRef, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, DOCUMENT, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike, ValueExtractorAttribute, defaultValueExtractor, stringFilter, FilterPredicate, FilterPredicateAttribute, BooleanValueComparerAttribute } from '@bootkit/ng0/data';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { _IdGenerator, CssClassLike, CssClassAttribute, IdGenerator, sequentialIdGenerator, } from '@bootkit/ng0/common';\r\nimport { ValueFormatterAttribute, defaultValueFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from './types';\r\nimport { } from '@bootkit/ng0/data';\r\nimport { defaultBooleanValueComparer } from '@bootkit/ng0/data';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\r\n */\r\n@Component({\r\n selector: 'ng0-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_activeOptionIndex() > -1 ? (_items()[_activeOptionIndex()].id) : undefined',\r\n '[attr.disabled]': '_isDisabled()',\r\n '[attr.tabindex]': '_isDisabled() || focus() === \"none\" ? \"-1\" : \"0\"',\r\n '[attr.aria-disabled]': '_isDisabled()'\r\n }\r\n})\r\nexport class ListComponent implements OnInit, ControlValueAccessor {\r\n private _document = inject(DOCUMENT);\r\n private _ls = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n protected _value = signal<any>(undefined);\r\n private _onChangeCallback!: (value: any) => void;\r\n private _onTouchedCallback!: (value: any) => void;\r\n\r\n protected readonly _items = signal<ListItem[]>([]);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected readonly _activeOptionIndex = signal<number>(-1);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A custom comparer function or the name of a field for comparing two objects.\r\n */\r\n public readonly compareBy = input(defaultBooleanValueComparer, {\r\n transform: BooleanValueComparerAttribute\r\n });\r\n\r\n /**\r\n * Custom format function to convert an item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultValueFormatter, {\r\n transform: ValueFormatterAttribute(this._ls.get())\r\n });\r\n\r\n /**\r\n * Custom value extractor function to extract the value of any object while writing values.\r\n */\r\n public readonly writeValueBy = input(defaultValueExtractor, {\r\n transform: ValueExtractorAttribute\r\n });\r\n\r\n /**\r\n * A custom filter predicate function to filter items based on a search string.\r\n * Default checks if the item's string representation contains the filter string (case-insensitive).\r\n * The filter predicate can be a function or a string representing the property name to filter.\r\n */\r\n public readonly filterBy = input(stringFilter, {\r\n transform: FilterPredicateAttribute\r\n });\r\n\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input((item) => undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n public readonly focus = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n public readonly idGenerator = input<IdGenerator | undefined>(sequentialIdGenerator('ng0-list-item-'));\r\n\r\n constructor(protected _el: ElementRef<HTMLDivElement>, private _renderer: Renderer2, private _destroyRef: DestroyRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this._loadItems();\r\n this._listenToDataSourceChanges();\r\n }\r\n\r\n /**\r\n * Sets an option as active\r\n */\r\n public active(index: number): void {\r\n if (index < 0) {\r\n throw Error();\r\n }\r\n\r\n this._activeOptionIndex.set(index);\r\n // this.scrollItemIntoView(this._activeOptionIndex(), 'nearest');\r\n }\r\n\r\n /**\r\n * Filters the list items based on the provided criteria.\r\n * @param params The filter parameters to apply.\r\n * @returns void\r\n */\r\n public filter(...params: any[]): void {\r\n let filterBy = this.filterBy();\r\n this._items().forEach(x => x.filtered = !filterBy(x.value, ...params));\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Clears any applied filters and shows all items in the list.\r\n * @returns void\r\n */\r\n public clearFilter(): void {\r\n this._items().forEach(x => x.filtered = false);\r\n }\r\n\r\n /**\r\n * Scrolls the item at the specified index into view within the dropdown list.\r\n * @param index The index of the item to scroll into view.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollItemIntoView(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n let item = this._items()[index];\r\n let elm = this._document.getElementById(item.id) as HTMLUListElement;\r\n elm!.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Toggles the selection of an option by index\r\n */\r\n public toggleSelection(index: number) {\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0 || index < 0 || index > optionsCount - 1) {\r\n throw new Error('Index out of range');\r\n }\r\n\r\n let item = this._items()[index];\r\n let writeValueBy = this.writeValueBy();\r\n\r\n if (this.multiple()) {\r\n item.selected = !item.selected;\r\n let selectedValues = this._items().filter(x => x.selected).map(x => (x.value));\r\n this._value.set(selectedValues);\r\n } else {\r\n if (item.selected) {\r\n return;\r\n }\r\n let itemValue = writeValueBy(item.value);\r\n this._items().forEach(x => x.selected = false);\r\n item.selected = true;\r\n this._value.set(itemValue);\r\n }\r\n\r\n this._onChangeCallback(this._value());\r\n }\r\n\r\n writeValue(v: any): void {\r\n let value;\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(v)) {\r\n value = v;\r\n } else if (v === null || v === undefined) {\r\n value = [];\r\n } else {\r\n throw Error('Provide an array or null as the value ng0-list component');\r\n }\r\n } else {\r\n value = v;\r\n }\r\n\r\n this._value.set(value);\r\n\r\n // Update selection state of items\r\n let compareBy = this.compareBy();\r\n if (this.multiple()) {\r\n this._items().forEach(x => x.selected = (value as any[]).some(y => compareBy(x.value, y)));\r\n } else {\r\n this._items().forEach(x => x.selected = compareBy(x.value, value));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n protected _onKeydown(e: KeyboardEvent, firedByFilter: boolean = false) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0) {\r\n return;\r\n }\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (this._activeOptionIndex() < optionsCount - 1) {\r\n this.active(this._activeOptionIndex() + 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (this._activeOptionIndex() > 0) {\r\n this.active(this._activeOptionIndex()! - 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Enter':\r\n this.toggleSelection(this._activeOptionIndex());\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n this.active(0);\r\n e.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n this.active(optionsCount - 1);\r\n e.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n private _loadItems() {\r\n var r = new DataRequest();\r\n this.source().load(r).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(res => {\r\n this._insertItems(0, ...res.data);\r\n });\r\n }\r\n\r\n private _listenToDataSourceChanges() {\r\n this.source().change.subscribe(e => {\r\n let options = this._items();\r\n e.changes.forEach(change => {\r\n switch (change.type) {\r\n case 'insert':\r\n this._insertItems(change.index!, ...change.items);\r\n break;\r\n case 'replace':\r\n options[change.index].value = change.value;\r\n break;\r\n case 'remove':\r\n options.splice(change.index, change.count);\r\n }\r\n });\r\n\r\n // this._changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n private _insertItems(index?: number, ...items: any[]) {\r\n // let filter = this.filterBy()()\r\n let idGenerator = this.idGenerator()\r\n let compareBy = this.compareBy();\r\n let value = this._value();\r\n let isItemSelected = this.multiple() && Array.isArray(value) ?\r\n (item: any) => (value as any[]).some(x => compareBy(x.value, item)) :\r\n (item: any) => compareBy(value, item);\r\n\r\n var options = items.map(x => ({\r\n id: idGenerator ? idGenerator(x) : undefined,\r\n value: x,\r\n selected: isItemSelected(x),\r\n filtered: false,\r\n }) as ListItem)\r\n\r\n if (Number.isInteger(index)) {\r\n this._items().splice(index!, 0, ...options);\r\n } else {\r\n this._items().push(...options);\r\n }\r\n\r\n this._changeDetector.markForCheck();\r\n }\r\n}\r\n","@for (i of _items(); track $index) {\r\n@if(!i.filtered) {\r\n<div class=\"ng0-list-item\"\r\n [ngClass]=\"itemClass()(i)\"\r\n [attr.id]=\"i.id\"\r\n [class.ng0-list-item-active]=\"$index == _activeOptionIndex()\"\r\n [class.ng0-list-item-selected]=\"i.selected\"\r\n (click)=\"toggleSelection($index);\">\r\n\r\n @if(_itemTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_itemTemplate; context: { $implicit: i}\" />\r\n } @else {\r\n\r\n @if(showIndicator()) {\r\n <input class=\"form-check-input ng0-list-item-indicator\"\r\n [checked]=\"i.selected\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\"\r\n [attr.name]=\"i.id\"\r\n [attr.id]=\"i.id\">\r\n }\r\n\r\n {{formatBy()(i.value)}}\r\n\r\n }\r\n</div>\r\n}\r\n}","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootkit-ng0-components-list.mjs","sources":["../../../projects/ng0/components/list/list.component.ts","../../../projects/ng0/components/list/list.component.html","../../../projects/ng0/components/list/list.module.ts","../../../projects/ng0/components/list/public-api.ts","../../../projects/ng0/components/list/bootkit-ng0-components-list.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, input, OnInit, DestroyRef, signal, HostListener, inject, forwardRef, TemplateRef, ContentChild, DOCUMENT, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataRequest, DataSource, DataSourceLike, ValueExtractorAttribute, defaultValueExtractor, stringFilter, FilterPredicate, FilterPredicateAttribute, BooleanValueComparerAttribute } from '@bootkit/ng0/data';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { _IdGenerator, CssClassLike, CssClassAttribute, IdGenerator, sequentialIdGenerator, } from '@bootkit/ng0/common';\r\nimport { ValueFormatterAttribute, defaultValueFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListItem } from './types';\r\nimport { } from '@bootkit/ng0/data';\r\nimport { defaultBooleanValueComparer } from '@bootkit/ng0/data';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\r\n */\r\n@Component({\r\n selector: 'ng0-list',\r\n exportAs: 'ng0List',\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n OverlayModule,\r\n ],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ListComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-list-loading]': 'source().isLoading()',\r\n '[attr.aria-activedescendant]': '_activeOptionIndex() > -1 ? (_items()[_activeOptionIndex()].id) : undefined',\r\n '[attr.disabled]': '_isDisabled()',\r\n '[attr.tabindex]': '_isDisabled() || focus() === \"none\" ? \"-1\" : \"0\"',\r\n '[attr.aria-disabled]': '_isDisabled()'\r\n }\r\n})\r\nexport class ListComponent implements OnInit, ControlValueAccessor {\r\n private _document = inject(DOCUMENT);\r\n private _ls = inject(LocalizationService);\r\n private _changeDetector = inject(ChangeDetectorRef);\r\n protected _value = signal<any>(undefined);\r\n private _onChangeCallback!: (value: any) => void;\r\n private _onTouchedCallback!: (value: any) => void;\r\n\r\n protected readonly _items = signal<ListItem[]>([]);\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected readonly _activeOptionIndex = signal<number>(-1);\r\n @ContentChild(TemplateRef) protected _itemTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * A custom comparer function or the name of a field for comparing two objects.\r\n */\r\n public readonly compareBy = input(defaultBooleanValueComparer, {\r\n transform: BooleanValueComparerAttribute\r\n });\r\n\r\n /**\r\n * Custom format function to convert an item to a string for display.\r\n * Default converts the item to a string using its toString method.\r\n */\r\n public readonly formatBy = input(defaultValueFormatter, {\r\n transform: ValueFormatterAttribute(this._ls.get())\r\n });\r\n\r\n /**\r\n * Custom value extractor function to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueExtractor, {\r\n transform: ValueExtractorAttribute\r\n });\r\n\r\n /**\r\n * A custom filter predicate function to filter items based on a search string.\r\n * Default checks if the item's string representation contains the filter string (case-insensitive).\r\n * The filter predicate can be a function or a string representing the property name to filter.\r\n */\r\n public readonly filterBy = input(stringFilter, {\r\n transform: FilterPredicateAttribute\r\n });\r\n\r\n\r\n /**\r\n * CSS class or classes to apply to the list container.\r\n * Default is undefined.\r\n */\r\n public readonly itemClass = input((item) => undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n public readonly focus = input<'none' | 'roving' | 'activeDescendant'>('activeDescendant');\r\n\r\n public readonly idGenerator = input<IdGenerator | undefined>(sequentialIdGenerator('ng0-list-item-'));\r\n\r\n constructor(protected _el: ElementRef<HTMLDivElement>, private _renderer: Renderer2, private _destroyRef: DestroyRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this._loadItems();\r\n this._listenToDataSourceChanges();\r\n }\r\n\r\n /**\r\n * Sets an option as active\r\n */\r\n public active(index: number): void {\r\n if (index < 0) {\r\n throw Error();\r\n }\r\n\r\n this._activeOptionIndex.set(index);\r\n // this.scrollItemIntoView(this._activeOptionIndex(), 'nearest');\r\n }\r\n\r\n /**\r\n * Filters the list items based on the provided criteria.\r\n * @param params The filter parameters to apply.\r\n * @returns void\r\n */\r\n public filter(...params: any[]): void {\r\n let filterBy = this.filterBy();\r\n this._items().forEach(x => x.filtered = !filterBy(x.value, ...params));\r\n this._changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Clears any applied filters and shows all items in the list.\r\n * @returns void\r\n */\r\n public clearFilter(): void {\r\n this._items().forEach(x => x.filtered = false);\r\n }\r\n\r\n /**\r\n * Scrolls the item at the specified index into view within the dropdown list.\r\n * @param index The index of the item to scroll into view.\r\n * @param position The vertical alignment of the item after scrolling.\r\n * Can be 'start', 'center', 'end', or 'nearest'.\r\n * Default is 'nearest'.\r\n * @param behavior The scrolling behavior.\r\n */\r\n public scrollItemIntoView(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {\r\n let item = this._items()[index];\r\n let elm = this._document.getElementById(item.id) as HTMLUListElement;\r\n elm!.scrollIntoView({ block: position, behavior: behavior });\r\n }\r\n\r\n /**\r\n * Toggles the selection of an option by index\r\n */\r\n public toggleSelection(index: number) {\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0 || index < 0 || index > optionsCount - 1) {\r\n throw new Error('Index out of range');\r\n }\r\n\r\n let item = this._items()[index];\r\n let writeValueBy = this.writeBy();\r\n\r\n if (this.multiple()) {\r\n item.selected = !item.selected;\r\n let selectedValues = this._items().filter(x => x.selected).map(x => (x.value));\r\n this._value.set(selectedValues);\r\n } else {\r\n if (item.selected) {\r\n return;\r\n }\r\n let itemValue = writeValueBy(item.value);\r\n this._items().forEach(x => x.selected = false);\r\n item.selected = true;\r\n this._value.set(itemValue);\r\n }\r\n\r\n this._onChangeCallback(this._value());\r\n }\r\n\r\n writeValue(v: any): void {\r\n let value;\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(v)) {\r\n value = v;\r\n } else if (v === null || v === undefined) {\r\n value = [];\r\n } else {\r\n throw Error('Provide an array or null as the value ng0-list component');\r\n }\r\n } else {\r\n value = v;\r\n }\r\n\r\n this._value.set(value);\r\n\r\n // Update selection state of items\r\n let compareBy = this.compareBy();\r\n if (this.multiple()) {\r\n this._items().forEach(x => x.selected = (value as any[]).some(y => compareBy(x.value, y)));\r\n } else {\r\n this._items().forEach(x => x.selected = compareBy(x.value, value));\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._onChangeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._onTouchedCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n protected _onKeydown(e: KeyboardEvent, firedByFilter: boolean = false) {\r\n if (this._isDisabled())\r\n return;\r\n\r\n let optionsCount = this._items().length;\r\n if (optionsCount == 0) {\r\n return;\r\n }\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (this._activeOptionIndex() < optionsCount - 1) {\r\n this.active(this._activeOptionIndex() + 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (this._activeOptionIndex() > 0) {\r\n this.active(this._activeOptionIndex()! - 1);\r\n }\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Enter':\r\n this.toggleSelection(this._activeOptionIndex());\r\n e.preventDefault();\r\n break;\r\n\r\n case 'Home':\r\n this.active(0);\r\n e.preventDefault();\r\n break;\r\n\r\n case 'End':\r\n this.active(optionsCount - 1);\r\n e.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n private _loadItems() {\r\n var r = new DataRequest();\r\n this.source().load(r).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(res => {\r\n this._insertItems(0, ...res.data);\r\n });\r\n }\r\n\r\n private _listenToDataSourceChanges() {\r\n this.source().change.subscribe(e => {\r\n let options = this._items();\r\n e.changes.forEach(change => {\r\n switch (change.type) {\r\n case 'insert':\r\n this._insertItems(change.index!, ...change.items);\r\n break;\r\n case 'replace':\r\n options[change.index].value = change.value;\r\n break;\r\n case 'remove':\r\n options.splice(change.index, change.count);\r\n }\r\n });\r\n\r\n // this._changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n private _insertItems(index?: number, ...items: any[]) {\r\n // let filter = this.filterBy()()\r\n let idGenerator = this.idGenerator()\r\n let compareBy = this.compareBy();\r\n let value = this._value();\r\n let isItemSelected = this.multiple() && Array.isArray(value) ?\r\n (item: any) => (value as any[]).some(x => compareBy(x.value, item)) :\r\n (item: any) => compareBy(value, item);\r\n\r\n var options = items.map(x => ({\r\n id: idGenerator ? idGenerator(x) : undefined,\r\n value: x,\r\n selected: isItemSelected(x),\r\n filtered: false,\r\n }) as ListItem)\r\n\r\n if (Number.isInteger(index)) {\r\n this._items().splice(index!, 0, ...options);\r\n } else {\r\n this._items().push(...options);\r\n }\r\n\r\n this._changeDetector.markForCheck();\r\n }\r\n}\r\n","@for (i of _items(); track $index) {\r\n@if(!i.filtered) {\r\n<div class=\"ng0-list-item\"\r\n [ngClass]=\"itemClass()(i)\"\r\n [attr.id]=\"i.id\"\r\n [class.ng0-list-item-active]=\"$index == _activeOptionIndex()\"\r\n [class.ng0-list-item-selected]=\"i.selected\"\r\n (click)=\"toggleSelection($index);\">\r\n\r\n @if(_itemTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_itemTemplate; context: { $implicit: i}\" />\r\n } @else {\r\n\r\n @if(showIndicator()) {\r\n <input class=\"form-check-input ng0-list-item-indicator\"\r\n [checked]=\"i.selected\"\r\n [attr.type]=\"multiple() ? 'checkbox' : 'radio'\"\r\n [attr.name]=\"i.id\"\r\n [attr.id]=\"i.id\">\r\n }\r\n\r\n {{formatBy()(i.value)}}\r\n\r\n }\r\n</div>\r\n}\r\n}","import { NgModule } from '@angular/core';\r\nimport { ListComponent } from './list.component';\r\n\r\nconst Items = [ListComponent]\r\n\r\n/**\r\n * List module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class ListModule { }\r\n","// export * from './types';\r\nexport * from './list.component';\r\nexport * from './list.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}