@bimeister/pupakit.forms
Version:
PupaKit Forms
83 lines • 16.7 kB
JavaScript
import '@angular/cdk/overlay';
import { Directive } from '@angular/core';
import { distinctUntilSerializedChanged, filterFalsy, isEmpty, isNil } from '@bimeister/utilities';
import { BehaviorSubject, combineLatest } from 'rxjs';
import { map, switchMap, take } from 'rxjs/operators';
import '../../interfaces/select-state-service-declaration.interface';
import '../../types/select-size.type';
import * as i0 from "@angular/core";
const BUTTON_WIDTH_PX = 24;
export class SelectTriggerBase {
constructor(selectStateService) {
this.selectStateService = selectStateService;
this.isExpanded$ = this.selectStateService.isExpanded$;
this.isDisabled$ = this.selectStateService.isDisabled$;
this.isTouched$ = this.selectStateService.isTouched$;
this.isPatched$ = this.selectStateService.isPatched$;
this.isValid$ = this.selectStateService.isValid$;
this.isFilled$ = this.selectStateService.isFilled$;
this.withReset$ = this.selectStateService.withReset$;
this.inline$ = this.selectStateService.inline$;
this.size$ = this.selectStateService.size$;
this.placeholder$ = this.selectStateService.placeholder$;
this.isInvalid$ = combineLatest([
this.isDisabled$,
this.isPatched$,
this.isValid$,
this.isTouched$,
]).pipe(distinctUntilSerializedChanged(), map(([isDisabled, isPatched, isValid, isTouched]) => (isTouched || isPatched) && !isValid && !isDisabled));
this.triggerValueIsVisible$ = combineLatest([this.isFilled$, this.placeholder$]).pipe(map(([isFilled, placeholder]) => isFilled || isNil(placeholder)));
this.isVisibleReset$ = combineLatest([
this.withReset$,
this.isFilled$,
this.isDisabled$,
]).pipe(map(([withReset, isFilled, isDisabled]) => withReset && isFilled && !isDisabled));
this.invalidTooltipHideOnHover$ = this.selectStateService.invalidTooltipHideOnHover$;
this.invalidTooltipDisabled$ = this.selectStateService.invalidTooltipDisabled$;
this.invalidTooltip$ = this.selectStateService.invalidTooltip$;
this.invalidTooltipContentTemplate$ = this.selectStateService.invalidTooltipContentTemplate$;
this.isInvalidTooltipDisabled$ = combineLatest([
this.invalidTooltip$,
this.invalidTooltipContentTemplate$,
this.invalidTooltipDisabled$,
]).pipe(map(([invalidTooltip, invalidTooltipContentTemplate, invalidTooltipDisabled]) => (isEmpty(invalidTooltip) && isNil(invalidTooltipContentTemplate) ? true : invalidTooltipDisabled)));
this.rightPaddingPx$ = combineLatest([this.isInvalid$, this.isVisibleReset$]).pipe(map((states) => states.reduce((width, state) => (state ? width + BUTTON_WIDTH_PX : width), 0)));
this.isContentInit$ = new BehaviorSubject(false);
}
ngOnInit() {
this.defineDropdownTrigger();
}
ngAfterViewInit() {
this.isContentInit$.next(true);
}
processTriggerTouch() {
this.selectStateService.setIsTriggerTouchedState(true);
}
processButtonClick() {
this.isDisabled$.pipe(take(1), filterFalsy()).subscribe(() => this.selectStateService.toggleExpansion());
}
processEventPropagation(event) {
event.stopPropagation();
}
toggleDropdown(event) {
event.stopPropagation();
this.isDisabled$.pipe(take(1), filterFalsy()).subscribe(() => this.selectStateService.toggleExpansion());
}
reset() {
this.selectStateService.reset();
}
processButtonInputClick() {
this.isDisabled$
.pipe(take(1), filterFalsy(), switchMap(() => this.isExpanded$), take(1), filterFalsy())
.subscribe(() => this.selectStateService.open());
}
defineDropdownTrigger() {
this.selectStateService.defineDropdownTrigger(this.overlayOrigin, this.button.nativeElement);
}
}
SelectTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectTriggerBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive });
SelectTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: SelectTriggerBase, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectTriggerBase, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: undefined }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXRyaWdnZXItYmFzZS5hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kZWNsYXJhdGlvbnMvY2xhc3Nlcy9hYnN0cmFjdC9zZWxlY3QtdHJpZ2dlci1iYXNlLmFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQWlDLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBaUIsU0FBUyxFQUFtQyxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUE4Qyw2REFBNkQsQ0FBQztBQUM1RyxPQUEyQiw4QkFBOEIsQ0FBQzs7QUFFMUQsTUFBTSxlQUFlLEdBQVcsRUFBRSxDQUFDO0FBR25DLE1BQU0sT0FBZ0IsaUJBQWlCO0lBc0VyQyxZQUErQixrQkFBb0Q7UUFBcEQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQztRQWxFbkUsZ0JBQVcsR0FBNkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQztRQUM1RSxnQkFBVyxHQUF3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDO1FBRXZFLGVBQVUsR0FBd0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztRQUNyRSxlQUFVLEdBQXdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7UUFDckUsYUFBUSxHQUF3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBQ2pFLGNBQVMsR0FBd0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQztRQUNu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a0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0YsQ0FBQzs7K0dBbkhtQixpQkFBaUI7bUdBQWpCLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUR0QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbFNlcmlhbGl6ZWRDaGFuZ2VkLCBmaWx0ZXJGYWxzeSwgaXNFbXB0eSwgaXNOaWwsIE51bGxhYmxlIH0gZnJvbSAnQGJpbWVpc3Rlci91dGlsaXRpZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNlbGVjdFN0YXRlU2VydmljZURlY2xhcmF0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZWxlY3Qtc3RhdGUtc2VydmljZS1kZWNsYXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0U2l6ZSB9IGZyb20gJy4uLy4uL3R5cGVzL3NlbGVjdC1zaXplLnR5cGUnO1xuXG5jb25zdCBCVVRUT05fV0lEVEhfUFg6IG51bWJlciA9IDI0O1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZWxlY3RUcmlnZ2VyQmFzZTxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBvdmVybGF5T3JpZ2luOiBDZGtPdmVybGF5T3JpZ2luO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgYnV0dG9uOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNFeHBhbmRlZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLmlzRXhwYW5kZWQkO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNEaXNhYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5pc0Rpc2FibGVkJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNUb3VjaGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLmlzVG91Y2hlZCQ7XG4gIHB1YmxpYyByZWFkb25seSBpc1BhdGNoZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuaXNQYXRjaGVkJDtcbiAgcHVibGljIHJlYWRvbmx5IGlzVmFsaWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuaXNWYWxpZCQ7XG4gIHB1YmxpYyByZWFkb25seSBpc0ZpbGxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5pc0ZpbGxlZCQ7XG4gIHB1YmxpYyByZWFkb25seSB3aXRoUmVzZXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2Uud2l0aFJlc2V0JDtcbiAgcHVibGljIHJlYWRvbmx5IGlubGluZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5pbmxpbmUkO1xuICBwdWJsaWMgcmVhZG9ubHkgc2l6ZSQ6IE9ic2VydmFibGU8U2VsZWN0U2l6ZT4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zaXplJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcGxhY2Vob2xkZXIkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5wbGFjZWhvbGRlciQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlzSW52YWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlzRGlzYWJsZWQkLFxuICAgIHRoaXMuaXNQYXRjaGVkJCxcbiAgICB0aGlzLmlzVmFsaWQkLFxuICAgIHRoaXMuaXNUb3VjaGVkJCxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsU2VyaWFsaXplZENoYW5nZWQoKSxcbiAgICBtYXAoXG4gICAgICAoW2lzRGlzYWJsZWQsIGlzUGF0Y2hlZCwgaXNWYWxpZCwgaXNUb3VjaGVkXTogW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dKSA9PlxuICAgICAgICAoaXNUb3VjaGVkIHx8IGlzUGF0Y2hlZCkgJiYgIWlzVmFsaWQgJiYgIWlzRGlzYWJsZWRcbiAgICApXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyaWdnZXJWYWx1ZUlzVmlzaWJsZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmlzRmlsbGVkJCwgdGhpcy5wbGFjZWhvbGRlciRdKS5waXBlKFxuICAgIG1hcCgoW2lzRmlsbGVkLCBwbGFjZWhvbGRlcl06IFtib29sZWFuLCBOdWxsYWJsZTxzdHJpbmc+XSkgPT4gaXNGaWxsZWQgfHwgaXNOaWwocGxhY2Vob2xkZXIpKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBpc1Zpc2libGVSZXNldCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLndpdGhSZXNldCQsXG4gICAgdGhpcy5pc0ZpbGxlZCQsXG4gICAgdGhpcy5pc0Rpc2FibGVkJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFt3aXRoUmVzZXQsIGlzRmlsbGVkLCBpc0Rpc2FibGVkXTogW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dKSA9PiB3aXRoUmVzZXQgJiYgaXNGaWxsZWQgJiYgIWlzRGlzYWJsZWQpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGludmFsaWRUb29sdGlwSGlkZU9uSG92ZXIkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuaW52YWxpZFRvb2x0aXBIaWRlT25Ib3ZlciQ7XG4gIHB1YmxpYyByZWFkb25seSBpbnZhbGlkVG9vbHRpcERpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLmludmFsaWRUb29sdGlwRGlzYWJsZWQkO1xuICBwdWJsaWMgcmVhZG9ubHkgaW52YWxpZFRvb2x0aXAkOiBPYnNlcnZhYmxlPE51bGxhYmxlPHN0cmluZz4+ID0gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuaW52YWxpZFRvb2x0aXAkO1xuICBwdWJsaWMgcmVhZG9ubHkgaW52YWxpZFRvb2x0aXBDb250ZW50VGVtcGxhdGUkOiBPYnNlcnZhYmxlPE51bGxhYmxlPFRlbXBsYXRlUmVmPHVua25vd24+Pj4gPVxuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLmludmFsaWRUb29sdGlwQ29udGVudFRlbXBsYXRlJDtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNJbnZhbGlkVG9vbHRpcERpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW52YWxpZFRvb2x0aXAkLFxuICAgIHRoaXMuaW52YWxpZFRvb2x0aXBDb250ZW50VGVtcGxhdGUkLFxuICAgIHRoaXMuaW52YWxpZFRvb2x0aXBEaXNhYmxlZCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKFxuICAgICAgKFtpbnZhbGlkVG9vbHRpcCwgaW52YWxpZFRvb2x0aXBDb250ZW50VGVtcGxhdGUsIGludmFsaWRUb29sdGlwRGlzYWJsZWRdOiBbXG4gICAgICAgIE51bGxhYmxlPHN0cmluZz4sXG4gICAgICAgIE51bGxhYmxlPFRlbXBsYXRlUmVmPHVua25vd24+PixcbiAgICAgICAgYm9vbGVhblxuICAgICAgXSkgPT4gKGlzRW1wdHkoaW52YWxpZFRvb2x0aXApICYmIGlzTmlsKGludmFsaWRUb29sdGlwQ29udGVudFRlbXBsYXRlKSA/IHRydWUgOiBpbnZhbGlkVG9vbHRpcERpc2FibGVkKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmlnaHRQYWRkaW5nUHgkOiBPYnNlcnZhYmxlPG51bWJlcj4gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmlzSW52YWxpZCQsIHRoaXMuaXNWaXNpYmxlUmVzZXQkXSkucGlwZShcbiAgICBtYXAoKHN0YXRlczogYm9vbGVhbltdKSA9PlxuICAgICAgc3RhdGVzLnJlZHVjZSgod2lkdGg6IG51bWJlciwgc3RhdGU6IGJvb2xlYW4pID0+IChzdGF0ZSA/IHdpZHRoICsgQlVUVE9OX1dJRFRIX1BYIDogd2lkdGgpLCAwKVxuICAgIClcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNDb250ZW50SW5pdCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RTdGF0ZVNlcnZpY2U6IFNlbGVjdFN0YXRlU2VydmljZURlY2xhcmF0aW9uPFQ+KSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlZmluZURyb3Bkb3duVHJpZ2dlcigpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29udGVudEluaXQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc1RyaWdnZXJUb3VjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5zZXRJc1RyaWdnZXJUb3VjaGVkU3RhdGUodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc0J1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEaXNhYmxlZCQucGlwZSh0YWtlKDEpLCBmaWx0ZXJGYWxzeSgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UudG9nZ2xlRXhwYW5zaW9uKCkpO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3NFdmVudFByb3BhZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEaXNhYmxlZCQucGlwZSh0YWtlKDEpLCBmaWx0ZXJGYWxzeSgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UudG9nZ2xlRXhwYW5zaW9uKCkpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0U3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc0J1dHRvbklucHV0Q2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIGZpbHRlckZhbHN5KCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmlzRXhwYW5kZWQkKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgZmlsdGVyRmFsc3koKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNlbGVjdFN0YXRlU2VydmljZS5vcGVuKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZpbmVEcm9wZG93blRyaWdnZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RTdGF0ZVNlcnZpY2UuZGVmaW5lRHJvcGRvd25UcmlnZ2VyKHRoaXMub3ZlcmxheU9yaWdpbiwgdGhpcy5idXR0b24ubmF0aXZlRWxlbWVudCk7XG4gIH1cbn1cbiJdfQ==