@bootkit/ng0 0.0.0-alpha.20 → 0.0.0-alpha.22
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/components/dropdown/index.d.ts +140 -0
- package/components/list/index.d.ts +2 -2
- package/components/select/index.d.ts +30 -34
- package/fesm2022/bootkit-ng0-components-dropdown.mjs +302 -0
- package/fesm2022/bootkit-ng0-components-dropdown.mjs.map +1 -0
- package/fesm2022/bootkit-ng0-components-list.mjs +3 -3
- package/fesm2022/bootkit-ng0-components-list.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-select.mjs +103 -70
- package/fesm2022/bootkit-ng0-components-select.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-form.mjs +3 -1
- package/fesm2022/bootkit-ng0-form.mjs.map +1 -1
- package/form/index.d.ts +1 -0
- package/package.json +25 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-dropdown.mjs","sources":["../../../projects/ng0/components/dropdown/dropdown-divider.component.ts","../../../projects/ng0/components/dropdown/dropdown-item.component.ts","../../../projects/ng0/components/dropdown/dropdown-item.component.html","../../../projects/ng0/components/dropdown/dropdown-menu.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-link.component.ts","../../../projects/ng0/components/dropdown/dropdown-link.component.html","../../../projects/ng0/components/dropdown/dropdown.module.ts","../../../projects/ng0/components/dropdown/types.ts","../../../projects/ng0/components/dropdown/bootkit-ng0-components-dropdown.ts"],"sourcesContent":["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, ChangeDetectionStrategy, input, booleanAttribute, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CssClass } from '@bootkit/ng0/common';\r\n\r\n/**\r\n * An item within a dropdown menu.\r\n */\r\n@Component({\r\n selector: 'ng0-dropdown-item',\r\n exportAs: 'ng0DropdownItem',\r\n standalone: true,\r\n templateUrl: './dropdown-item.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n RouterModule\r\n ],\r\n})\r\nexport class DropdownItemComponent {\r\n /**\r\n * The CSS classes to apply to the dropdown item.\r\n * */\r\n public readonly cssClass = input<CssClass>();\r\n\r\n /**\r\n * Whether the dropdown item is disabled.\r\n */\r\n public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n @HostListener('click', ['$event'])\r\n private _onClick(e: MouseEvent) {\r\n if (this.disabled()) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n","<button class=\"dropdown-item\" [ngClass]=\"cssClass()\" [class.disabled]=\"disabled()\" [attr.aria-disabled]=\"disabled()\">\r\n <ng-content></ng-content>\r\n</button>","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\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; position: relative; }`,\r\n})\r\nexport class DropdownMenuComponent {\r\n private _renderer = inject(Renderer2);\r\n private _dropdown = inject(DropdownComponent);\r\n\r\n public elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n this._renderer.addClass(this.elementRef.nativeElement, 'dropdown-menu');\r\n }\r\n\r\n // @HostListener('click')\r\n // private _onClick() {\r\n // if (this._dropdown.autoClose() == 'default' || this._dropdown.autoClose() == 'inside') {\r\n // this._dropdown.open.set(false);\r\n // }\r\n // }\r\n}\r\n","import { Component, ElementRef, Renderer2, ChangeDetectionStrategy, inject, input, model, HostListener, ContentChild, booleanAttribute, ViewChild, computed } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CssClass, Placement } from '@bootkit/ng0/common';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { DropdownAutoCloseBehavior, DropdownSize } from './types';\r\nimport { DropdownMenuComponent } from './dropdown-menu.component';\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 host: {\r\n '[class]': '_directionCssClass()',\r\n }\r\n})\r\nexport class DropdownComponent {\r\n // @ContentChildren(DropdownItemComponent) private _items!: QueryList<DropdownItemComponent>;\r\n @ContentChild(DropdownMenuComponent) private _dropdownMenu!: DropdownMenuComponent;\r\n @ViewChild('mainButton') private _mainButton!: ElementRef<HTMLButtonElement>;\r\n @ViewChild('splitButton') private _splitButton?: ElementRef<HTMLButtonElement>;\r\n // protected _scrollStrategy!: ScrollStrategy;\r\n protected _el = inject(ElementRef);\r\n private _renderer = inject(Renderer2);\r\n\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 * The CSS classes to apply to the dropdown toggle button.\r\n * @default 'btn btn-primary'\r\n */\r\n public cssClass = input<CssClass>('btn btn-primary');\r\n\r\n /**\r\n * The CSS classes to apply to the dropdown split button.\r\n * @default 'btn btn-primary'\r\n */\r\n public splitCssClass = input<CssClass>('btn btn-primary');\r\n\r\n /** \r\n * Indicates whether the dropdown is open or closed.\r\n * @default false\r\n */\r\n public readonly open = model(false);\r\n\r\n /**\r\n * Indicates whether the dropdown is a split button. \r\n * A split button dropdown has a separate toggle button.\r\n * @default false\r\n */\r\n public readonly split = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Indicates whether the dropdown has an automatic close behavior.\r\n * @default 'default'\r\n */\r\n public readonly autoClose = input<DropdownAutoCloseBehavior>('default');\r\n\r\n /**\r\n * Dropdown size\r\n * @default 'default'\r\n */\r\n public readonly size = input<DropdownSize>('default');\r\n\r\n protected _directionCssClass = computed(() => {\r\n switch (this.placement()) {\r\n case 'top':\r\n return 'dropup';\r\n case 'start':\r\n return 'dropstart';\r\n case 'end':\r\n return 'dropend';\r\n case 'bottom':\r\n default:\r\n return undefined;\r\n }\r\n })\r\n\r\n constructor() {\r\n this._renderer.addClass(this._el.nativeElement, 'btn-group');\r\n // this._scrollStrategy = this._overlay.scrollStrategies.block();\r\n }\r\n\r\n /**\r\n * Toggle the dropdown open or closed.\r\n */\r\n public toggle() {\r\n this.open.set(!this.open());\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n private _onDocumentClick(e: MouseEvent) {\r\n const splitButtonClicked = e.target === this._splitButton?.nativeElement;\r\n const mainButtonClicked = e.target === this._mainButton?.nativeElement;\r\n const toggleClicked = this.split() ? splitButtonClicked : mainButtonClicked;\r\n const dropdownClicked = splitButtonClicked || mainButtonClicked;\r\n const menuClicked = this._dropdownMenu.elementRef.nativeElement.contains(e.target);\r\n const outsideClicked = !dropdownClicked && !menuClicked;\r\n\r\n if (this.open()) {\r\n if (toggleClicked) {\r\n this.open.set(false);\r\n return;\r\n }\r\n\r\n switch (this.autoClose()) {\r\n case 'default':\r\n this.open.set(false);\r\n break;\r\n case 'outside':\r\n if (outsideClicked || mainButtonClicked) {\r\n this.open.set(false);\r\n }\r\n break;\r\n case 'inside':\r\n if (menuClicked) {\r\n this.open.set(false);\r\n }\r\n break;\r\n case 'manual':\r\n break;\r\n }\r\n } else {\r\n if (toggleClicked) {\r\n this.open.set(true);\r\n }\r\n }\r\n }\r\n}\r\n","<button #mainButton\r\n [class]=\"cssClass()\"\r\n [class.dropdown-toggle]=\"!split()\"\r\n [class.btn-sm]=\"size() == 'small'\"\r\n [class.btn-lg]=\"size() == 'large'\"\r\n type=\"button\">\r\n <ng-content></ng-content>\r\n</button>\r\n\r\n@if(split()) {\r\n<button #splitButton\r\n type=\"button\"\r\n [class]=\"splitCssClass()\"\r\n [class.btn-sm]=\"size() == 'small'\"\r\n [class.btn-lg]=\"size() == 'large'\"\r\n class=\"dropdown-toggle dropdown-toggle-split\">\r\n <span class=\"visually-hidden\">Toggle Dropdown</span>\r\n</button>\r\n}\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_el.nativeElement\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\">\r\n <ng-content select=\"ng0-dropdown-menu\"></ng-content>\r\n</ng-template>\r\n\r\n<style>\r\n :host {\r\n display: inline-block;\r\n }\r\n</style>","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-header',\r\n exportAs: 'ng0DropdownItem',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\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, input, booleanAttribute, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n/**\r\n * A link item within a dropdown menu.\r\n * This component is used to create a navigable link inside a dropdown.\r\n */\r\n@Component({\r\n selector: 'ng0-dropdown-link',\r\n exportAs: 'ng0DropdownLink',\r\n standalone: true,\r\n templateUrl: './dropdown-link.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CommonModule,\r\n RouterModule\r\n ],\r\n})\r\nexport class DropdownLinkComponent {\r\n /**\r\n * The link or URL to navigate to when the dropdown item is clicked.\r\n */\r\n public readonly link = input.required<string | string[] | undefined>();\r\n\r\n /**\r\n * The router link active class to apply when the link is active.\r\n */\r\n public readonly active = input<string | string[]>('');\r\n\r\n /**\r\n * Specifies where to open the linked document.\r\n */\r\n public readonly target = input<'_self' | '_blank' | '_parent' | '_top' | undefined>(undefined);\r\n\r\n /**\r\n * Whether the dropdown link is disabled.\r\n */\r\n public readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n\r\n @HostListener('click', ['$event'])\r\n private _onClick(e: MouseEvent) {\r\n if (this.disabled()) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n}\r\n","<a class=\"dropdown-item\" [routerLink]=\"link()\" [target]=\"target()\" [routerLinkActive]=\"active()\" [class.disabled]=\"disabled()\" [attr.aria-disabled]=\"disabled()\">\r\n <ng-content></ng-content>\r\n</a>","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\nimport { DropdownLinkComponent } from './dropdown-link.component';\r\n\r\n\r\nconst Items = [\r\n DropdownComponent,\r\n DropdownMenuComponent,\r\n DropdownItemComponent,\r\n DropdownLinkComponent,\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","\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"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
|
-
|
|
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.
|
|
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 },
|
|
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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"}
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, DOCUMENT,
|
|
2
|
+
import { signal, inject, DOCUMENT, DestroyRef, ElementRef, Renderer2, ChangeDetectorRef, input, booleanAttribute, model, TemplateRef, forwardRef, HostListener, ContentChild, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
-
import { dataSourceAttribute, defaultValueExtractor, ValueExtractorAttribute, stringFilter, DataRequest } from '@bootkit/ng0/data';
|
|
5
|
+
import { dataSourceAttribute, defaultBooleanValueComparer, BooleanValueComparerAttribute, defaultValueExtractor, ValueExtractorAttribute, stringFilter, DataRequest } from '@bootkit/ng0/data';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
8
8
|
import * as i2 from '@angular/cdk/overlay';
|
|
9
|
-
import {
|
|
10
|
-
import { _IdGenerator } from '@bootkit/ng0/common';
|
|
9
|
+
import { Overlay, ViewportRuler, OverlayModule } from '@angular/cdk/overlay';
|
|
10
|
+
import { CssClassAttribute, _IdGenerator } from '@bootkit/ng0/common';
|
|
11
11
|
import { LocalizationService, defaultValueFormatter, ValueFormatterAttribute } from '@bootkit/ng0/localization';
|
|
12
|
+
import * as i3 from '@angular/cdk/listbox';
|
|
13
|
+
import { CdkListboxModule } from '@angular/cdk/listbox';
|
|
12
14
|
|
|
13
15
|
/**
|
|
14
16
|
* Select component that allows users to choose an option from a dropdown list.
|
|
15
17
|
*/
|
|
16
18
|
class SelectComponent {
|
|
17
|
-
_el;
|
|
18
|
-
_renderer;
|
|
19
|
-
_destroyRef;
|
|
20
|
-
_viewportRuler = inject(ViewportRuler);
|
|
21
|
-
_overlay = inject(Overlay);
|
|
22
|
-
_document = inject(DOCUMENT);
|
|
23
|
-
_ls = inject(LocalizationService);
|
|
24
|
-
_changeDetector = inject(ChangeDetectorRef);
|
|
25
19
|
_resizeObserver;
|
|
26
20
|
_resizeObserverInitialized = false;
|
|
27
21
|
_viewpoerRulerSubscription;
|
|
28
|
-
|
|
22
|
+
_cdkListboxValue = signal(undefined, ...(ngDevMode ? [{ debugName: "_cdkListboxValue" }] : []));
|
|
29
23
|
_filterElementRef;
|
|
30
24
|
_onChangeCallback;
|
|
31
25
|
_onTouchedCallback;
|
|
@@ -36,6 +30,14 @@ class SelectComponent {
|
|
|
36
30
|
_optionTemplate;
|
|
37
31
|
_positionStrategy;
|
|
38
32
|
_scrollStrategy;
|
|
33
|
+
_overlay = inject(Overlay);
|
|
34
|
+
_document = inject(DOCUMENT);
|
|
35
|
+
_ls = inject(LocalizationService);
|
|
36
|
+
_destroyRef = inject(DestroyRef);
|
|
37
|
+
_el = inject((ElementRef));
|
|
38
|
+
_renderer = inject(Renderer2);
|
|
39
|
+
_viewportRuler = inject(ViewportRuler);
|
|
40
|
+
_changeDetector = inject(ChangeDetectorRef);
|
|
39
41
|
/**
|
|
40
42
|
* The data source for the select component.
|
|
41
43
|
* This can be an array of data, a function that returns an observable of data,
|
|
@@ -45,19 +47,20 @@ class SelectComponent {
|
|
|
45
47
|
transform: v => dataSourceAttribute(v)
|
|
46
48
|
}]));
|
|
47
49
|
/**
|
|
48
|
-
* Indicates whether
|
|
50
|
+
* Indicates whether multi selection is enabled or not.
|
|
49
51
|
*/
|
|
50
|
-
|
|
52
|
+
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple", transform: booleanAttribute }] : [{
|
|
53
|
+
transform: booleanAttribute
|
|
54
|
+
}]));
|
|
51
55
|
/**
|
|
52
|
-
*
|
|
53
|
-
* Default is a simple equality check.
|
|
56
|
+
* Indicates whether the dropdown is open or closed.
|
|
54
57
|
*/
|
|
55
|
-
|
|
58
|
+
open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : []));
|
|
56
59
|
/**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
transform:
|
|
60
|
+
* A custom comparer function or the name of a field for comparing two objects.
|
|
61
|
+
*/
|
|
62
|
+
compareBy = input(defaultBooleanValueComparer, ...(ngDevMode ? [{ debugName: "compareBy", transform: BooleanValueComparerAttribute }] : [{
|
|
63
|
+
transform: BooleanValueComparerAttribute
|
|
61
64
|
}]));
|
|
62
65
|
/**
|
|
63
66
|
* Custom format function to convert an item to a string for display.
|
|
@@ -66,6 +69,12 @@ class SelectComponent {
|
|
|
66
69
|
formatBy = input(defaultValueFormatter, ...(ngDevMode ? [{ debugName: "formatBy", transform: ValueFormatterAttribute(this._ls.get()) }] : [{
|
|
67
70
|
transform: ValueFormatterAttribute(this._ls.get())
|
|
68
71
|
}]));
|
|
72
|
+
/**
|
|
73
|
+
* Custom value extractor function to extract the value of any object while writing values.
|
|
74
|
+
*/
|
|
75
|
+
writeBy = input(defaultValueExtractor, ...(ngDevMode ? [{ debugName: "writeBy", transform: ValueExtractorAttribute }] : [{
|
|
76
|
+
transform: ValueExtractorAttribute
|
|
77
|
+
}]));
|
|
69
78
|
/**
|
|
70
79
|
* Indicates whether the dropdown is filterable.
|
|
71
80
|
*/
|
|
@@ -79,20 +88,26 @@ class SelectComponent {
|
|
|
79
88
|
* Default checks if the item contains the filter value (case-insensitive).
|
|
80
89
|
*/
|
|
81
90
|
filterBy = input(stringFilter, ...(ngDevMode ? [{ debugName: "filterBy" }] : []));
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
/**
|
|
92
|
+
* CSS class or classes to apply to the list container.
|
|
93
|
+
*/
|
|
94
|
+
itemClass = input((item) => undefined, ...(ngDevMode ? [{ debugName: "itemClass", transform: CssClassAttribute }] : [{
|
|
95
|
+
transform: CssClassAttribute
|
|
96
|
+
}]));
|
|
97
|
+
constructor() {
|
|
86
98
|
this._renderer.addClass(this._el.nativeElement, 'form-select');
|
|
87
99
|
this._renderer.setAttribute(this._el.nativeElement, 'tabindex', '0');
|
|
88
100
|
this._scrollStrategy = this._overlay.scrollStrategies.block();
|
|
89
101
|
}
|
|
90
102
|
ngOnInit() {
|
|
103
|
+
this._loadItems();
|
|
104
|
+
this._handleDataSourceChange();
|
|
105
|
+
}
|
|
106
|
+
_loadItems() {
|
|
91
107
|
var r = new DataRequest();
|
|
92
108
|
this.source().load(r).pipe(takeUntilDestroyed(this._destroyRef)).subscribe(res => {
|
|
93
109
|
this._insertOptions(0, ...res.data);
|
|
94
110
|
});
|
|
95
|
-
this._handleDataSourceChange();
|
|
96
111
|
}
|
|
97
112
|
_handleDataSourceChange() {
|
|
98
113
|
let options = this._options();
|
|
@@ -123,38 +138,34 @@ class SelectComponent {
|
|
|
123
138
|
return;
|
|
124
139
|
}
|
|
125
140
|
let option = this._options()[index];
|
|
126
|
-
this.
|
|
127
|
-
this._onChangeCallback(this.
|
|
128
|
-
}
|
|
129
|
-
isSelected(value) {
|
|
130
|
-
let v = this.extractBy()(value);
|
|
131
|
-
return v === this._value();
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Sets an option as active
|
|
135
|
-
*/
|
|
136
|
-
active(index) {
|
|
137
|
-
if (index < 0) {
|
|
138
|
-
throw Error();
|
|
139
|
-
}
|
|
140
|
-
this._activeOptionIndex.set(index);
|
|
141
|
-
if (this.open()) {
|
|
142
|
-
this.scrollItemIntoView(this._activeOptionIndex(), 'nearest');
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Scrolls the item at the specified index into view within the dropdown list.
|
|
147
|
-
* @param index The index of the item to scroll into view.
|
|
148
|
-
* @param position The vertical alignment of the item after scrolling.
|
|
149
|
-
* Can be 'start', 'center', 'end', or 'nearest'.
|
|
150
|
-
* Default is 'nearest'.
|
|
151
|
-
* @param behavior The scrolling behavior.
|
|
152
|
-
*/
|
|
153
|
-
scrollItemIntoView(index, position, behavior) {
|
|
154
|
-
let item = this._options()[index];
|
|
155
|
-
let elm = this._document.getElementById(item.id);
|
|
156
|
-
elm.scrollIntoView({ block: position, behavior: behavior });
|
|
141
|
+
this._cdkListboxValue.set(this.writeBy()(option.value));
|
|
142
|
+
this._onChangeCallback(this._cdkListboxValue());
|
|
157
143
|
}
|
|
144
|
+
// /**
|
|
145
|
+
// * Sets an option as active
|
|
146
|
+
// */
|
|
147
|
+
// public active(index: number) {
|
|
148
|
+
// if (index < 0) {
|
|
149
|
+
// throw Error();
|
|
150
|
+
// }
|
|
151
|
+
// this._activeOptionIndex.set(index);
|
|
152
|
+
// if (this.open()) {
|
|
153
|
+
// this.scrollItemIntoView(this._activeOptionIndex(), 'nearest');
|
|
154
|
+
// }
|
|
155
|
+
// }
|
|
156
|
+
// /**
|
|
157
|
+
// * Scrolls the item at the specified index into view within the dropdown list.
|
|
158
|
+
// * @param index The index of the item to scroll into view.
|
|
159
|
+
// * @param position The vertical alignment of the item after scrolling.
|
|
160
|
+
// * Can be 'start', 'center', 'end', or 'nearest'.
|
|
161
|
+
// * Default is 'nearest'.
|
|
162
|
+
// * @param behavior The scrolling behavior.
|
|
163
|
+
// */
|
|
164
|
+
// public scrollItemIntoView(index: number, position?: ScrollLogicalPosition, behavior?: ScrollBehavior) {
|
|
165
|
+
// let item = this._options()[index];
|
|
166
|
+
// let elm = this._document.getElementById(item.id) as HTMLUListElement;
|
|
167
|
+
// elm!.scrollIntoView({ block: position, behavior: behavior });
|
|
168
|
+
// }
|
|
158
169
|
_insertOptions(index, ...items) {
|
|
159
170
|
// let filter = this.filterBy()()
|
|
160
171
|
var options = items.map(x => ({
|
|
@@ -171,8 +182,29 @@ class SelectComponent {
|
|
|
171
182
|
this._changeDetector.markForCheck();
|
|
172
183
|
}
|
|
173
184
|
writeValue(obj) {
|
|
174
|
-
let value
|
|
175
|
-
this.
|
|
185
|
+
let value;
|
|
186
|
+
if (this.multiple()) {
|
|
187
|
+
if (Array.isArray(obj)) {
|
|
188
|
+
value = obj;
|
|
189
|
+
}
|
|
190
|
+
else if (obj === null || obj === undefined) {
|
|
191
|
+
value = [];
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
throw Error('Provide an array or null as the value of ng0-select component.');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
value = [obj];
|
|
199
|
+
}
|
|
200
|
+
this._cdkListboxValue.set(value);
|
|
201
|
+
// Update selection state of items
|
|
202
|
+
// let compareBy = this.compareBy();
|
|
203
|
+
// if (this.multiple()) {
|
|
204
|
+
// this._items().forEach(x => x.selected = (value as any[]).some(y => compareBy(x.value, y)));
|
|
205
|
+
// } else {
|
|
206
|
+
// this._items().forEach(x => x.selected = compareBy(x.value, value));
|
|
207
|
+
// }
|
|
176
208
|
}
|
|
177
209
|
registerOnChange(fn) {
|
|
178
210
|
this._onChangeCallback = fn;
|
|
@@ -195,7 +227,7 @@ class SelectComponent {
|
|
|
195
227
|
case 'ArrowDown':
|
|
196
228
|
if (open) {
|
|
197
229
|
if (this._activeOptionIndex() < optionsCount - 1) {
|
|
198
|
-
this.active(this._activeOptionIndex() + 1);
|
|
230
|
+
// this.active(this._activeOptionIndex() + 1);
|
|
199
231
|
}
|
|
200
232
|
}
|
|
201
233
|
else {
|
|
@@ -208,7 +240,7 @@ class SelectComponent {
|
|
|
208
240
|
case 'ArrowUp':
|
|
209
241
|
if (open) {
|
|
210
242
|
if (this._activeOptionIndex() > 0) {
|
|
211
|
-
this.active(this._activeOptionIndex() - 1);
|
|
243
|
+
// this.active(this._activeOptionIndex()! - 1);
|
|
212
244
|
}
|
|
213
245
|
}
|
|
214
246
|
else {
|
|
@@ -245,7 +277,7 @@ class SelectComponent {
|
|
|
245
277
|
break;
|
|
246
278
|
case 'Home':
|
|
247
279
|
if (open) {
|
|
248
|
-
this.active(0);
|
|
280
|
+
// this.active(0);
|
|
249
281
|
}
|
|
250
282
|
else {
|
|
251
283
|
this._selectByIndex(0);
|
|
@@ -254,7 +286,7 @@ class SelectComponent {
|
|
|
254
286
|
break;
|
|
255
287
|
case 'End':
|
|
256
288
|
if (open) {
|
|
257
|
-
this.active(optionsCount - 1);
|
|
289
|
+
// this.active(optionsCount - 1);
|
|
258
290
|
}
|
|
259
291
|
else {
|
|
260
292
|
this._selectByIndex(optionsCount - 1);
|
|
@@ -284,7 +316,7 @@ class SelectComponent {
|
|
|
284
316
|
}, 0);
|
|
285
317
|
}
|
|
286
318
|
if (this._selectedOptionIndex() > -1) {
|
|
287
|
-
this.scrollItemIntoView(this._selectedOptionIndex(), 'start', 'instant');
|
|
319
|
+
// this.scrollItemIntoView(this._selectedOptionIndex(), 'start', 'instant');
|
|
288
320
|
}
|
|
289
321
|
}
|
|
290
322
|
_onOverlayDetach() {
|
|
@@ -330,18 +362,19 @@ class SelectComponent {
|
|
|
330
362
|
this.open.update(x => !x);
|
|
331
363
|
// this._onTouchedCallback?.(this._selectedValue());
|
|
332
364
|
}
|
|
333
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SelectComponent, deps: [
|
|
334
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: SelectComponent, isStandalone: true, selector: "ng0-select", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null },
|
|
365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
366
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: SelectComponent, isStandalone: true, selector: "ng0-select", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", 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 }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, filterPlaceholder: { classPropertyName: "filterPlaceholder", publicName: "filterPlaceholder", 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 } }, outputs: { open: "openChange" }, host: { listeners: { "keydown": "_onKeydown($event)", "click": "_onHostClick($event)" }, properties: { "class.ng0-select-open": "open()", "class.ng0-select-loading": "source().isLoading()", "attr.aria-activedescendant": "_activeOptionIndex() > -1 ? (_options()[_activeOptionIndex()].id) : undefined", "attr.disabled": "_isDisabled()", "attr.aria-disabled": "_isDisabled()" } }, providers: [{
|
|
335
367
|
provide: NG_VALUE_ACCESSOR,
|
|
336
368
|
useExisting: forwardRef(() => SelectComponent),
|
|
337
369
|
multi: true
|
|
338
|
-
}], queries: [{ propertyName: "_optionTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "_filterElementRef", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["ng0Select"], ngImport: i0, template: "@let formattedValue = formatBy()(
|
|
370
|
+
}], queries: [{ propertyName: "_optionTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "_filterElementRef", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["ng0Select"], ngImport: i0, template: "@let formattedValue = formatBy()(_cdkListboxValue());\r\n\r\n@if(formattedValue == null || formattedValue == '') {\r\n \r\n}@else {\r\n{{formattedValue}}\r\n}\r\n\r\n@if(source().isLoading()) {\r\n<div class=\"spinner-border text-success spinner-border-sm ng0-select-spinner\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n</div>\r\n}\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 [cdkConnectedOverlayPanelClass]=\"['ng0-select-dropdown-container', 'shadow']\"\r\n [cdkConnectedOverlayWidth]=\"_el.nativeElement.clientWidth\"\r\n (overlayOutsideClick)=\"open.set(false)\"\r\n (attach)=\"_onOverlayAttach()\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n @if(filterable()) {\r\n <div class=\"ng0-select-filter-container border-bottom\">\r\n <input #filterInput\r\n type=\"text\"\r\n class=\"ng0-select-filter-input form-control form-control-sm\"\r\n [attr.placeholder]=\"filterPlaceholder()\"\r\n (keydown)=\"_onKeydown($event, true)\"\r\n (blur)=\"_onFilterBlur()\"\r\n (input)=\"_filterItems($event.target.value)\">\r\n </div>\r\n }\r\n\r\n <ul class=\"ng0-select-dropdown\"\r\n cdkListbox\r\n [cdkListboxValue]=\"_cdkListboxValue()\"\r\n [attr.tabindex]=\"_isDisabled() ? undefined : -1\"\r\n [class.is-open]=\"open()\">\r\n\r\n @for (option of _options(); track $index) {\r\n <li [cdkOption]=\"option.value\"\r\n #cdkOption=\"cdkOption\"\r\n [attr.id]=\"option.id\"\r\n class=\"ng0-select-option\"\r\n [class.ng0-select-option-active]=\"cdkOption.isActive()\"\r\n [class.ng0-select-option-selected]=\"cdkOption.isSelected()\"\r\n [class.ng0-select-option-filtered]=\"!option.show\"\r\n (click)=\"cdkOption.select(); open.set(false)\"\r\n (keyup.enter)=\"open.set(false)\">\r\n @if(_optionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_optionTemplate; context: { $implicit: option}\" />\r\n } @else {\r\n @let v = formatBy()(option.value);\r\n @if(v) {\r\n {{v}}\r\n }@else {\r\n \r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>", styles: ["ng0-select{user-select:none;-webkit-user-select:none;-moz-user-select:none;display:flex!important;align-items:center}ng0-select.disabled{background-color:var(--bs-secondary-bg)}.ng0-select-dropdown-container{display:flex;flex-direction:column;background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);padding:.5rem var(--bs-dropdown-padding-x);--ng0-select-item-padding-x: 1rem;--ng0-select-item-padding-y: .25rem}.ng0-select-dropdown-container ul.ng0-select-dropdown{list-style:none;border-start-start-radius:0;border-start-end-radius:0;padding:0!important;margin:0;flex-grow:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.4) transparent}.ng0-select-dropdown-container ul.ng0-select-dropdown.is-open{border-top:none}.ng0-select-dropdown-container ul.ng0-select-dropdown li{overflow:hidden;cursor:pointer;padding:var(--ng0-select-item-padding-y) var(--ng0-select-item-padding-x)}.ng0-select-dropdown-container ul.ng0-select-dropdown li:hover{background-color:var(--bs-tertiary-bg)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-selected{background-color:var(--bs-primary);color:var(--bs-light)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-active:not(.ng0-select-option-selected){background-color:var(--bs-gray-300);color:var(--bs-body)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-filtered{display:none!important}.ng0-select-dropdown-container .ng0-select-filter-container{padding:1rem var(--ng0-select-item-padding-x);background-color:inherit}.ng0-select-dropdown-container .ng0-select-filter-container .ng0-select-filter-input{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.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"] }, { kind: "ngmodule", type: CdkListboxModule }, { kind: "directive", type: i3.CdkListbox, selector: "[cdkListbox]", inputs: ["id", "tabindex", "cdkListboxValue", "cdkListboxMultiple", "cdkListboxDisabled", "cdkListboxUseActiveDescendant", "cdkListboxOrientation", "cdkListboxCompareWith", "cdkListboxNavigationWrapDisabled", "cdkListboxNavigatesDisabledOptions"], outputs: ["cdkListboxValueChange"], exportAs: ["cdkListbox"] }, { kind: "directive", type: i3.CdkOption, selector: "[cdkOption]", inputs: ["id", "cdkOption", "cdkOptionTypeaheadLabel", "cdkOptionDisabled", "tabindex"], exportAs: ["cdkOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
339
371
|
}
|
|
340
372
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: SelectComponent, decorators: [{
|
|
341
373
|
type: Component,
|
|
342
374
|
args: [{ selector: 'ng0-select', exportAs: 'ng0Select', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
343
375
|
CommonModule,
|
|
344
376
|
OverlayModule,
|
|
377
|
+
CdkListboxModule
|
|
345
378
|
], providers: [{
|
|
346
379
|
provide: NG_VALUE_ACCESSOR,
|
|
347
380
|
useExisting: forwardRef(() => SelectComponent),
|
|
@@ -352,8 +385,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImpor
|
|
|
352
385
|
'[attr.aria-activedescendant]': '_activeOptionIndex() > -1 ? (_options()[_activeOptionIndex()].id) : undefined',
|
|
353
386
|
'[attr.disabled]': '_isDisabled()',
|
|
354
387
|
'[attr.aria-disabled]': '_isDisabled()'
|
|
355
|
-
}, template: "@let formattedValue = formatBy()(
|
|
356
|
-
}], ctorParameters: () => [
|
|
388
|
+
}, template: "@let formattedValue = formatBy()(_cdkListboxValue());\r\n\r\n@if(formattedValue == null || formattedValue == '') {\r\n \r\n}@else {\r\n{{formattedValue}}\r\n}\r\n\r\n@if(source().isLoading()) {\r\n<div class=\"spinner-border text-success spinner-border-sm ng0-select-spinner\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n</div>\r\n}\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 [cdkConnectedOverlayPanelClass]=\"['ng0-select-dropdown-container', 'shadow']\"\r\n [cdkConnectedOverlayWidth]=\"_el.nativeElement.clientWidth\"\r\n (overlayOutsideClick)=\"open.set(false)\"\r\n (attach)=\"_onOverlayAttach()\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n @if(filterable()) {\r\n <div class=\"ng0-select-filter-container border-bottom\">\r\n <input #filterInput\r\n type=\"text\"\r\n class=\"ng0-select-filter-input form-control form-control-sm\"\r\n [attr.placeholder]=\"filterPlaceholder()\"\r\n (keydown)=\"_onKeydown($event, true)\"\r\n (blur)=\"_onFilterBlur()\"\r\n (input)=\"_filterItems($event.target.value)\">\r\n </div>\r\n }\r\n\r\n <ul class=\"ng0-select-dropdown\"\r\n cdkListbox\r\n [cdkListboxValue]=\"_cdkListboxValue()\"\r\n [attr.tabindex]=\"_isDisabled() ? undefined : -1\"\r\n [class.is-open]=\"open()\">\r\n\r\n @for (option of _options(); track $index) {\r\n <li [cdkOption]=\"option.value\"\r\n #cdkOption=\"cdkOption\"\r\n [attr.id]=\"option.id\"\r\n class=\"ng0-select-option\"\r\n [class.ng0-select-option-active]=\"cdkOption.isActive()\"\r\n [class.ng0-select-option-selected]=\"cdkOption.isSelected()\"\r\n [class.ng0-select-option-filtered]=\"!option.show\"\r\n (click)=\"cdkOption.select(); open.set(false)\"\r\n (keyup.enter)=\"open.set(false)\">\r\n @if(_optionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"_optionTemplate; context: { $implicit: option}\" />\r\n } @else {\r\n @let v = formatBy()(option.value);\r\n @if(v) {\r\n {{v}}\r\n }@else {\r\n \r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>", styles: ["ng0-select{user-select:none;-webkit-user-select:none;-moz-user-select:none;display:flex!important;align-items:center}ng0-select.disabled{background-color:var(--bs-secondary-bg)}.ng0-select-dropdown-container{display:flex;flex-direction:column;background-color:var(--bs-body-bg);border-radius:var(--bs-border-radius);padding:.5rem var(--bs-dropdown-padding-x);--ng0-select-item-padding-x: 1rem;--ng0-select-item-padding-y: .25rem}.ng0-select-dropdown-container ul.ng0-select-dropdown{list-style:none;border-start-start-radius:0;border-start-end-radius:0;padding:0!important;margin:0;flex-grow:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.4) transparent}.ng0-select-dropdown-container ul.ng0-select-dropdown.is-open{border-top:none}.ng0-select-dropdown-container ul.ng0-select-dropdown li{overflow:hidden;cursor:pointer;padding:var(--ng0-select-item-padding-y) var(--ng0-select-item-padding-x)}.ng0-select-dropdown-container ul.ng0-select-dropdown li:hover{background-color:var(--bs-tertiary-bg)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-selected{background-color:var(--bs-primary);color:var(--bs-light)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-active:not(.ng0-select-option-selected){background-color:var(--bs-gray-300);color:var(--bs-body)}.ng0-select-dropdown-container ul.ng0-select-dropdown li.ng0-select-option-filtered{display:none!important}.ng0-select-dropdown-container .ng0-select-filter-container{padding:1rem var(--ng0-select-item-padding-x);background-color:inherit}.ng0-select-dropdown-container .ng0-select-filter-container .ng0-select-filter-input{width:100%}\n"] }]
|
|
389
|
+
}], ctorParameters: () => [], propDecorators: { _filterElementRef: [{
|
|
357
390
|
type: ViewChild,
|
|
358
391
|
args: ['filterInput']
|
|
359
392
|
}], _optionTemplate: [{
|