Skip to content

Instantly share code, notes, and snippets.

View realtomaszkula's full-sized avatar

Tomasz Kula realtomaszkula

View GitHub Profile
import { Component } from '@angular/core';
type Label<T extends object> = { [key in keyof T]: string };
type PartialLabel<T extends object> = { [key in keyof Partial<T>]: string };
interface LoginForm {
username: string;
password: string;
}
import { Component } from '@angular/core';
type Label<T extends object> = { [key in keyof T]: string };
interface LoginForm {
username: string;
password: string;
}
@Component({
import { Component } from '@angular/core';
interface LoginForm {
username: string;
password: string;
}
@Component({
selector: 'app-form',
template: `
<app-progressive-image [width]="width" [height]="height" >
<img appProgressiveImage [src]="src" />
<div appProgressiveImagePlaceholder>Loading...</div>
<div appProgressiveImageFallback>Error!</div>
</app-progressive-image>
@Component({
selector: 'app-progressive-image',
template: `<ng-content></ng-content>`,
})
export class ProgressiveImageComponent {
@Input() height: number;
@Input() width: number;
}
@Directive({
selector: 'img[appProgressiveImage]',
})
export class ProgressiveImageDirective {
@Input() src: string;
width: number;
height: number;
}
@Directive({
@Directive({
selector: 'img[appProgressiveImage]',
})
export class ProgressiveImageDirective {
@HostBinding('attr.src')
@Input() src: string;
@HostBinding('style.width.px')
width: number;
@Component({
selector: 'app-progressive-image',
template: `<ng-content></ng-content>`,
})
export class ProgressiveImageComponent implements AfterContentChecked {
@ContentChild(ProgressiveImageDirective) image: ProgressiveImageDirective;
@ContentChild(ProgressiveImageFallbackDirective)
fallback: ProgressiveImageFallbackDirective;
@ContentChild(ProgressiveImagePlaceholderDirective)
placeholder: ProgressiveImagePlaceholderDirective;
@Component({
selector: 'app-progressive-image',
template: `<ng-content></ng-content>`
})
export class ProgressiveImageComponent implements AfterContentChecked {
@ContentChildren(Dimensions) dirs: QueryList<Dimensions>;
@HostBinding('style.height.px')
@Input()
height: number;
abstract class Dimensions {
width: number;
height: number;
}