2020-07-30 13:03:17 +03:00
|
|
|
// tslint:disable: variable-name
|
|
|
|
// #docregion
|
2020-07-30 13:03:21 +03:00
|
|
|
import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
|
2018-02-27 13:33:41 -08:00
|
|
|
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'my-popup',
|
2018-07-14 21:24:36 +03:00
|
|
|
template: `
|
|
|
|
<span>Popup: {{message}}</span>
|
|
|
|
<button (click)="closed.next()">✖</button>
|
|
|
|
`,
|
2018-02-27 13:33:41 -08:00
|
|
|
animations: [
|
|
|
|
trigger('state', [
|
|
|
|
state('opened', style({transform: 'translateY(0%)'})),
|
|
|
|
state('void, closed', style({transform: 'translateY(100%)', opacity: 0})),
|
|
|
|
transition('* => *', animate('100ms ease-in')),
|
|
|
|
])
|
|
|
|
],
|
|
|
|
styles: [`
|
|
|
|
:host {
|
|
|
|
position: absolute;
|
|
|
|
bottom: 0;
|
|
|
|
left: 0;
|
|
|
|
right: 0;
|
|
|
|
background: #009cff;
|
|
|
|
height: 48px;
|
|
|
|
padding: 16px;
|
|
|
|
display: flex;
|
2018-07-14 21:24:36 +03:00
|
|
|
justify-content: space-between;
|
2018-02-27 13:33:41 -08:00
|
|
|
align-items: center;
|
|
|
|
border-top: 1px solid black;
|
|
|
|
font-size: 24px;
|
|
|
|
}
|
2018-07-14 21:24:36 +03:00
|
|
|
|
|
|
|
button {
|
|
|
|
border-radius: 50%;
|
|
|
|
}
|
2018-02-27 13:33:41 -08:00
|
|
|
`]
|
|
|
|
})
|
|
|
|
export class PopupComponent {
|
2020-07-30 13:03:21 +03:00
|
|
|
@HostBinding('@state')
|
2020-03-17 22:28:48 +02:00
|
|
|
state: 'opened' | 'closed' = 'closed';
|
2018-02-27 13:33:41 -08:00
|
|
|
|
|
|
|
@Input()
|
2020-07-30 13:03:17 +03:00
|
|
|
get message(): string { return this._message; }
|
2018-02-27 13:33:41 -08:00
|
|
|
set message(message: string) {
|
|
|
|
this._message = message;
|
|
|
|
this.state = 'opened';
|
|
|
|
}
|
2021-05-08 16:02:03 +02:00
|
|
|
private _message = '';
|
2018-02-27 13:33:41 -08:00
|
|
|
|
|
|
|
@Output()
|
2021-06-29 18:59:35 +03:00
|
|
|
closed = new EventEmitter<void>();
|
2018-02-27 13:33:41 -08:00
|
|
|
}
|