@ngneat/cmdk
Version:
<p align="center"> <img width="20%" height="20%" src="./src/assets/ngneat%20cdk.svg"> </p>
151 lines • 14 kB
JavaScript
import { __decorate } from "tslib";
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, Output, } from '@angular/core';
import { UntilDestroy } from '@ngneat/until-destroy';
import { CmdkService } from '../../cmdk.service';
import * as i0 from "@angular/core";
let cmdkItemId = 0;
export let ItemDirective = class ItemDirective {
constructor() {
this._disabled = false;
this.selected = new EventEmitter();
this.originalDisplay = '';
this.filtered = true;
this._active = false;
this._value = '';
this._cmdkService = inject(CmdkService);
this.itemId = `cmdk-item-${cmdkItemId++}`;
this._elementRef = inject((ElementRef));
}
set disabled(value) {
this._disabled = coerceBooleanProperty(value);
}
get disabled() {
return this._disabled;
}
getLabel() {
throw new Error('Method not implemented.');
}
setActiveStyles() {
this.active = true;
}
setInactiveStyles() {
this.active = false;
}
set value(value) {
if (value !== this.value) {
this._cmdkService.itemValueChanged(this.value, value);
this._value = value;
}
}
get value() {
return this._value
? this._value
: this._elementRef.nativeElement.textContent.trim().toLowerCase();
}
onClick() {
this.selected.emit();
}
onKeyUp(ev) {
if (ev?.key === 'Enter') {
this.selected.emit();
}
}
get hidden() {
return !this.filtered;
}
get display() {
return this.filtered ? this.originalDisplay : 'none';
}
get dataValue() {
return this.value;
}
get attrRole() {
return 'option';
}
get buttonType() {
return 'button';
}
get isSelected() {
return this._active;
}
get active() {
return this._active;
}
get itemDisabled() {
return this.disabled;
}
get itemFiltered() {
return this.filtered;
}
set active(value) {
this._active = value;
}
onMouseUp() {
this._cmdkService.itemClicked(this.value);
}
ngAfterContentInit() {
this.originalDisplay = window.getComputedStyle(this._elementRef.nativeElement).display;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ItemDirective, isStandalone: true, selector: "[cmdkItem]", inputs: { disabled: "disabled", filtered: "filtered", value: "value" }, outputs: { selected: "selected" }, host: { listeners: { "click": "onClick()", "keydown": "onKeyUp(event)", "mouseup": "onMouseUp()" }, properties: { "attr.cmdk-hidden": "this.hidden", "style.display": "this.display", "attr.data-value": "this.dataValue", "attr.role": "this.attrRole", "type": "this.buttonType", "attr.aria-selected": "this.isSelected", "class.cmdk-item-active": "this.active", "class.cmdk-item-disabled": "this.itemDisabled", "class.cmdk-item-filtered": "this.itemFiltered" }, classAttribute: "cmdk-item" }, ngImport: i0 }); }
};
ItemDirective = __decorate([
UntilDestroy()
], ItemDirective);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ItemDirective, decorators: [{
type: Directive,
args: [{
selector: '[cmdkItem]',
// eslint-disable-next-line @angular-eslint/no-host-metadata-property
host: {
class: 'cmdk-item',
},
standalone: true,
}]
}], propDecorators: { disabled: [{
type: Input
}], selected: [{
type: Output
}], filtered: [{
type: Input
}], value: [{
type: Input
}], onClick: [{
type: HostListener,
args: ['click']
}], onKeyUp: [{
type: HostListener,
args: ['keydown', ['event']]
}], hidden: [{
type: HostBinding,
args: ['attr.cmdk-hidden']
}], display: [{
type: HostBinding,
args: ['style.display']
}], dataValue: [{
type: HostBinding,
args: ['attr.data-value']
}], attrRole: [{
type: HostBinding,
args: ['attr.role']
}], buttonType: [{
type: HostBinding,
args: ['type']
}], isSelected: [{
type: HostBinding,
args: ['attr.aria-selected']
}], active: [{
type: HostBinding,
args: ['class.cmdk-item-active']
}], itemDisabled: [{
type: HostBinding,
args: ['class.cmdk-item-disabled']
}], itemFiltered: [{
type: HostBinding,
args: ['class.cmdk-item-filtered']
}], onMouseUp: [{
type: HostListener,
args: ['mouseup']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ25lYXQvY21kay9zcmMvbGliL2RpcmVjdGl2ZXMvaXRlbS9pdGVtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHakQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBV1osV0FBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTtJQUFuQjtRQUdHLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFRaEIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFVWixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQWNwQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVsQyxXQUFNLEdBQUcsYUFBYSxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQzlDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBNkIsQ0FBQSxDQUFDLENBQUM7S0F5RXJEO0lBOUdDLElBQ0ksUUFBUSxDQUFDLEtBQVU7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsSUFBSSxRQUFR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QUFRO3NCQUFqQixNQUFNO2dCQVdFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO2dCQW1CTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFNckIsT0FBTztzQkFETixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQztnQkFROUIsTUFBTTtzQkFEVCxXQUFXO3VCQUFDLGtCQUFrQjtnQkFNM0IsT0FBTztzQkFEVixXQUFXO3VCQUFDLGVBQWU7Z0JBTXhCLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTTFCLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyxXQUFXO2dCQU1wQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsTUFBTTtnQkFNZixVQUFVO3NCQURiLFdBQVc7dUJBQUMsb0JBQW9CO2dCQU03QixNQUFNO3NCQURULFdBQVc7dUJBQUMsd0JBQXdCO2dCQU1qQyxZQUFZO3NCQURmLFdBQVc7dUJBQUMsMEJBQTBCO2dCQU1uQyxZQUFZO3NCQURmLFdBQVc7dUJBQUMsMEJBQTBCO2dCQVV2QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpc3RLZXlNYW5hZ2VyT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENtZGtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY21kay5zZXJ2aWNlJztcbmltcG9ydCB7IENtZGtJdGVtUHJvcHMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmxldCBjbWRrSXRlbUlkID0gMDtcblxuQFVudGlsRGVzdHJveSgpXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tjbWRrSXRlbV0nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taG9zdC1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdjbWRrLWl0ZW0nLFxuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSXRlbURpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIENtZGtJdGVtUHJvcHMsIExpc3RLZXlNYW5hZ2VyT3B0aW9uLCBBZnRlckNvbnRlbnRJbml0XG57XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgQE91dHB1dCgpIHNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvcmlnaW5hbERpc3BsYXkgPSAnJztcbiAgZ2V0TGFiZWw/KCk6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG4gIHNldEFjdGl2ZVN0eWxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIH1cbiAgc2V0SW5hY3RpdmVTdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuICBASW5wdXQoKSBmaWx0ZXJlZCA9IHRydWU7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIF92YWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jbWRrU2VydmljZS5pdGVtVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVcbiAgICAgID8gdGhpcy5fdmFsdWVcbiAgICAgIDogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY21ka1NlcnZpY2UgPSBpbmplY3QoQ21ka1NlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IGl0ZW1JZCA9IGBjbWRrLWl0ZW0tJHtjbWRrSXRlbUlkKyt9YDtcbiAgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD4pO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgb25DbGljaygpIHtcbiAgICB0aGlzLnNlbGVjdGVkLmVtaXQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJ2V2ZW50J10pXG4gIG9uS2V5VXAoZXY6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXY/LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmNtZGstaGlkZGVuJylcbiAgZ2V0IGhpZGRlbigpIHtcbiAgICByZXR1cm4gIXRoaXMuZmlsdGVyZWQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICBnZXQgZGlzcGxheSgpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZCA/IHRoaXMub3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdmFsdWUnKVxuICBnZXQgZGF0YVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBnZXQgYXR0clJvbGUoKSB7XG4gICAgcmV0dXJuICdvcHRpb24nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCd0eXBlJylcbiAgZ2V0IGJ1dHRvblR5cGUoKSB7XG4gICAgcmV0dXJuICdidXR0b24nO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICBnZXQgaXNTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jbWRrLWl0ZW0tYWN0aXZlJylcbiAgZ2V0IGFjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jbWRrLWl0ZW0tZGlzYWJsZWQnKVxuICBnZXQgaXRlbURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jbWRrLWl0ZW0tZmlsdGVyZWQnKVxuICBnZXQgaXRlbUZpbHRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkO1xuICB9XG5cbiAgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FjdGl2ZSA9IHZhbHVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG9uTW91c2VVcCgpIHtcbiAgICB0aGlzLl9jbWRrU2VydmljZS5pdGVtQ2xpY2tlZCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9yaWdpbmFsRGlzcGxheSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgKS5kaXNwbGF5O1xuICB9XG59XG4iXX0=