UNPKG

@fivethree/core

Version:
254 lines 17 kB
/** * @fileoverview added by tsickle * Generated from: lib/searchbar/searchbar.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, EventEmitter, Output, Renderer2 } from '@angular/core'; import { trigger, transition, style, animate, state } from '@angular/animations'; var FivSearchbar = /** @class */ (function () { function FivSearchbar(renderer) { this.renderer = renderer; this.searching = false; this.titleVisible = true; this.closeButtonVisible = false; this.smallWidth = 120; this.searchIcon = 'search'; this.closeIcon = 'close'; this._small = false; this.fivInputChange = new EventEmitter(); this.fivClose = new EventEmitter(); this.open = new EventEmitter(); this.state = 'normal'; } Object.defineProperty(FivSearchbar.prototype, "small", { get: /** * @return {?} */ function () { return this._small; }, set: /** * @param {?} s * @return {?} */ function (s) { if (s && !this._small) { this.shrink(); } else if (!s && this._small) { this.grow(); } this._small = s; }, enumerable: true, configurable: true }); /** * @return {?} */ FivSearchbar.prototype.ngOnInit = /** * @return {?} */ function () { this.state = this._small ? 'small' : 'normal'; }; /** * @return {?} */ FivSearchbar.prototype.shrink = /** * @return {?} */ function () { this.state = 'small'; }; /** * @return {?} */ FivSearchbar.prototype.grow = /** * @return {?} */ function () { this.state = 'normal'; }; /** * @return {?} */ FivSearchbar.prototype.openSearchbar = /** * @return {?} */ function () { if (this._small) { this.state = 'normal'; } this._open(); }; /** * @return {?} */ FivSearchbar.prototype.toggleSearchbar = /** * @return {?} */ function () { if (this.searching) { this.closeSearchbar(); } else { this.openSearchbar(); } }; /** * @param {?} event * @return {?} */ FivSearchbar.prototype.searchBarStateChange = /** * @param {?} event * @return {?} */ function (event) { if (event.fromState === 'normal' && event.toState === 'small') { } if (event.fromState === 'small' && event.toState === 'normal') { } }; /** * @private * @return {?} */ FivSearchbar.prototype._open = /** * @private * @return {?} */ function () { this.searching = true; this.titleVisible = false; this.open.emit(); }; /** * @return {?} */ FivSearchbar.prototype.closeSearchbar = /** * @return {?} */ function () { if (this.small) { this.state = 'small'; } this.searching = false; this.fivClose.emit(); }; /** * @param {?} event * @return {?} */ FivSearchbar.prototype.searchAnimDone = /** * @param {?} event * @return {?} */ function (event) { if (event.fromState !== 'void') { this.closeButtonVisible = true; } }; /** * @param {?} event * @return {?} */ FivSearchbar.prototype.closeAnimDone = /** * @param {?} event * @return {?} */ function (event) { if (event.fromState !== 'void') { this.searching = false; } }; /** * @param {?} event * @param {?} input * @return {?} */ FivSearchbar.prototype.seachbarAnimDone = /** * @param {?} event * @param {?} input * @return {?} */ function (event, input) { if (event.fromState !== 'void') { this.titleVisible = true; } else { input.setFocus(); } }; FivSearchbar.decorators = [ { type: Component, args: [{ selector: 'fiv-searchbar', template: "<ion-toolbar [@searchbarAnim]=\"{value:state, params: {width: smallWidth}}\"\n (@searchbarAnim.done)=\"searchBarStateChange($event)\" [ngClass]=\"{'small': state === 'small'}\">\n <ion-buttons slot=\"start\">\n <ng-content select=\"[start]\"></ng-content>\n\n </ion-buttons>\n <ion-title [@titleAnim] *ngIf=\"titleVisible && state !== 'small'\">{{title}}</ion-title>\n <ion-input (ionChange)=\"fivInputChange.emit($event)\" [placeholder]=\"!titleVisible ? placeholder : ''\" autofocus #input\n class=\"searchbarbar\" [@titleAnim] (@titleAnim.done)=\"seachbarAnimDone($event,input)\" *ngIf=\"searching\">\n </ion-input>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"toggleSearchbar()\">\n <fiv-icon slot=\"icon-only\" [name]=\"searching ? closeIcon : searchIcon\"></fiv-icon>\n </ion-button>\n <ng-content select=\"[end]\"></ng-content>\n </ion-buttons>\n</ion-toolbar>", animations: [ trigger('searchbarAnim', [ transition('small => normal', [animate('125ms ease-out')]), transition('normal => small', [animate('95ms ease-in')]), state('small', style({ width: '{{width}}px' }), { params: { width: 120 } }), state('normal', style({ width: '100%' })) ]), trigger('titleAnim', [ transition('void => *', [ style({ opacity: '0', transform: 'translateY(-20%)' }), animate('175ms ease-out', style({ opacity: '1', transform: 'translateY(0)' })) ]) ]) ], styles: [":host{position:relative;display:block;width:100%;--fiv-toolbar-background:var(--ion-color-light)}ion-toolbar{box-shadow:0 1px 4px rgba(0,0,0,.25);transition:border-bottom-right-radius 85ms;margin-top:env(safe-area-inset-top);--background:var(--fiv-toolbar-background)}ion-toolbar.small{border-bottom-right-radius:12px}.searchbarbar{float:right}"] }] } ]; /** @nocollapse */ FivSearchbar.ctorParameters = function () { return [ { type: Renderer2 } ]; }; FivSearchbar.propDecorators = { title: [{ type: Input }], placeholder: [{ type: Input }], smallWidth: [{ type: Input }], searchIcon: [{ type: Input }], closeIcon: [{ type: Input }], small: [{ type: Input }], fivInputChange: [{ type: Output }], fivClose: [{ type: Output }], open: [{ type: Output }] }; return FivSearchbar; }()); export { FivSearchbar }; if (false) { /** @type {?} */ FivSearchbar.prototype.searching; /** @type {?} */ FivSearchbar.prototype.titleVisible; /** @type {?} */ FivSearchbar.prototype.closeButtonVisible; /** @type {?} */ FivSearchbar.prototype.title; /** @type {?} */ FivSearchbar.prototype.placeholder; /** @type {?} */ FivSearchbar.prototype.smallWidth; /** @type {?} */ FivSearchbar.prototype.searchIcon; /** @type {?} */ FivSearchbar.prototype.closeIcon; /** @type {?} */ FivSearchbar.prototype._small; /** @type {?} */ FivSearchbar.prototype.fivInputChange; /** @type {?} */ FivSearchbar.prototype.fivClose; /** @type {?} */ FivSearchbar.prototype.open; /** @type {?} */ FivSearchbar.prototype.state; /** @type {?} */ FivSearchbar.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BmaXZldGhyZWUvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUNOLE1BQU0scUJBQXFCLENBQUM7QUFHN0I7SUFvREUsc0JBQW1CLFFBQW1CO1FBQW5CLGFBQVEsR0FBUixRQUFRLENBQVc7UUEzQnRDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBR2xCLGVBQVUsR0FBRyxHQUFHLENBQUM7UUFDakIsZUFBVSxHQUFHLFFBQVEsQ0FBQztRQUN0QixjQUFTLEdBQUcsT0FBTyxDQUFDO1FBRTdCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFZTCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxTQUFJLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdkQsVUFBSyxHQUF1QixRQUFRLENBQUM7SUFFSSxDQUFDO0lBakIxQyxzQkFBYSwrQkFBSzs7OztRQVFsQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDOzs7OztRQVZELFVBQW1CLENBQVU7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDZjtpQkFBTSxJQUFJLENBQUMsQ0FB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cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgdHJhbnNpdGlvbixcbiAgc3R5bGUsXG4gIGFuaW1hdGUsXG4gIHN0YXRlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgSW9uSW5wdXQgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zpdi1zZWFyY2hiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzZWFyY2hiYXJBbmltJywgW1xuICAgICAgdHJhbnNpdGlvbignc21hbGwgPT4gbm9ybWFsJywgW2FuaW1hdGUoJzEyNW1zIGVhc2Utb3V0JyldKSxcbiAgICAgIHRyYW5zaXRpb24oJ25vcm1hbCA9PiBzbWFsbCcsIFthbmltYXRlKCc5NW1zIGVhc2UtaW4nKV0pLFxuICAgICAgc3RhdGUoJ3NtYWxsJywgc3R5bGUoeyB3aWR0aDogJ3t7d2lkdGh9fXB4JyB9KSwge1xuICAgICAgICBwYXJhbXM6IHsgd2lkdGg6IDEyMCB9XG4gICAgICB9KSxcbiAgICAgIHN0YXRlKCdub3JtYWwnLCBzdHlsZSh7IHdpZHRoOiAnMTAwJScgfSkpXG4gICAgXSksXG4gICAgdHJpZ2dlcigndGl0bGVBbmltJywgW1xuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6ICcwJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE3NW1zIGVhc2Utb3V0JyxcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6ICcxJywgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSlcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdlNlYXJjaGJhciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHNlYXJjaGluZyA9IGZhbHNlO1xuICB0aXRsZVZpc2libGUgPSB0cnVlO1xuICBjbG9zZUJ1dHRvblZpc2libGUgPSBmYWxzZTtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgc21hbGxXaWR0aCA9IDEyMDtcbiAgQElucHV0KCkgc2VhcmNoSWNvbiA9ICdzZWFyY2gnO1xuICBASW5wdXQoKSBjbG9zZUljb24gPSAnY2xvc2UnO1xuXG4gIF9zbWFsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgc21hbGwoczogYm9vbGVhbikge1xuICAgIGlmIChzICYmICF0aGlzLl9zbWFsbCkge1xuICAgICAgdGhpcy5zaHJpbmsoKTtcbiAgICB9IGVsc2UgaWYgKCFzICYmIHRoaXMuX3NtYWxsKSB7XG4gICAgICB0aGlzLmdyb3coKTtcbiAgICB9XG4gICAgdGhpcy5fc21hbGwgPSBzO1xuICB9XG4gIGdldCBzbWFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc21hbGw7XG4gIH1cbiAgQE91dHB1dCgpIGZpdklucHV0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpdkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9wZW46IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHN0YXRlOiAnc21hbGwnIHwgJ25vcm1hbCcgPSAnbm9ybWFsJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0YXRlID0gdGhpcy5fc21hbGwgPyAnc21hbGwnIDogJ25vcm1hbCc7XG4gIH1cblxuICBzaHJpbmsoKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICdzbWFsbCc7XG4gIH1cbiAgZ3JvdygpIHtcbiAgICB0aGlzLnN0YXRlID0gJ25vcm1hbCc7XG4gIH1cblxuICBvcGVuU2VhcmNoYmFyKCkge1xuICAgIGlmICh0aGlzLl9zbWFsbCkge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdub3JtYWwnO1xuICAgIH1cbiAgICB0aGlzLl9vcGVuKCk7XG4gIH1cblxuICB0b2dnbGVTZWFyY2hiYXIoKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoaW5nKSB7XG4gICAgICB0aGlzLmNsb3NlU2VhcmNoYmFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlblNlYXJjaGJhcigpO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaEJhclN0YXRlQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ25vcm1hbCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ3NtYWxsJykge1xuICAgIH1cblxuICAgIGlmIChldmVudC5mcm9tU3RhdGUgPT09ICdzbWFsbCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ25vcm1hbCcpIHtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vcGVuKCkge1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRpdGxlVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3Blbi5lbWl0KCk7XG4gIH1cblxuICBjbG9zZVNlYXJjaGJhcigpIHtcbiAgICBpZiAodGhpcy5zbWFsbCkge1xuICAgICAgdGhpcy5zdGF0ZSA9ICdzbWFsbCc7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gIH1cblxuICBzZWFyY2hBbmltRG9uZShldmVudCkge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgIT09ICd2b2lkJykge1xuICAgICAgdGhpcy5jbG9zZUJ1dHRvblZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlQW5pbURvbmUoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQuZnJvbVN0YXRlICE9PSAndm9pZCcpIHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VhY2hiYXJBbmltRG9uZShldmVudCwgaW5wdXQ6IElvbklucHV0KSB7XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSAhPT0gJ3ZvaWQnKSB7XG4gICAgICB0aGlzLnRpdGxlVmlzaWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0LnNldEZvY3VzKCk7XG4gICAgfVxuICB9XG59XG4iXX0=