@junte/ui
Version:
Quality Angular UI components kit
186 lines • 17.4 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, ContentChild, HostBinding, Input, TemplateRef } from '@angular/core';
import { BreakpointService } from '../responsive/breakpoint.service';
import { ContentApi, MethodApi, PropertyApi } from '../../core/decorators/api';
import { Feature } from '../../core/enums/feature';
import { Gutter } from '../../core/enums/gutter';
import { State } from '../../core/enums/state';
import { UI } from '../../core/enums/ui';
import { Width } from '../../core/enums/width';
let BlockComponent = class BlockComponent {
constructor(breakpoint) {
this.breakpoint = breakpoint;
this.ui = UI;
this._state = { success: false };
this.host = 'jnt-block-host';
this._padding = Gutter.normal;
this._spacing = Gutter.normal;
this.width = Width.default;
this.features = [];
}
get hasHelp() {
return !!this.blockHelpTemplate;
}
get hasHeader() {
return !!this.blockHeaderTemplate || !!this.title;
}
set padding(padding) {
this._padding = padding || Gutter.normal;
}
set spacing(spacing) {
this._spacing = spacing || Gutter.normal;
}
get spacing() {
return this._spacing;
}
success() {
this._state.success = true;
setTimeout(() => this._state.success = false, 2100);
}
};
BlockComponent.ctorParameters = () => [
{ type: BreakpointService }
];
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], BlockComponent.prototype, "host", void 0);
__decorate([
HostBinding('attr.data-has-help'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], BlockComponent.prototype, "hasHelp", null);
__decorate([
HostBinding('attr.data-has-header'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], BlockComponent.prototype, "hasHeader", null);
__decorate([
HostBinding('attr.data-padding'),
__metadata("design:type", Object)
], BlockComponent.prototype, "_padding", void 0);
__decorate([
PropertyApi({
description: 'Title of block',
type: 'string'
}),
Input(),
__metadata("design:type", String)
], BlockComponent.prototype, "title", void 0);
__decorate([
PropertyApi({
description: 'Padding for block',
path: 'ui.gutter',
options: [Gutter.tiny,
Gutter.small,
Gutter.normal,
Gutter.large,
Gutter.big,
Gutter.huge],
default: Gutter.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], BlockComponent.prototype, "padding", null);
__decorate([
PropertyApi({
description: 'Spacing between header, body and footer',
path: 'ui.gutter',
options: [Gutter.tiny,
Gutter.small,
Gutter.normal,
Gutter.large,
Gutter.big,
Gutter.huge],
default: Gutter.normal
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], BlockComponent.prototype, "spacing", null);
__decorate([
PropertyApi({
description: 'Block width',
path: 'ui.width',
default: Width.default,
options: [Width.default,
Width.fluid]
}),
HostBinding('attr.data-width'),
Input(),
__metadata("design:type", String)
], BlockComponent.prototype, "width", void 0);
__decorate([
PropertyApi({
description: 'State of block',
path: 'ui.state',
options: [State.error,
State.loading]
}),
Input(),
__metadata("design:type", String)
], BlockComponent.prototype, "state", void 0);
__decorate([
PropertyApi({
description: 'Adapted block on mobile view',
path: 'ui.feature',
options: [Feature.adapted]
}),
HostBinding('attr.data-features'),
Input(),
__metadata("design:type", Array)
], BlockComponent.prototype, "features", void 0);
__decorate([
ContentApi({
selector: '#blockHelpTemplate',
description: 'Block help template'
}),
ContentChild('blockHelpTemplate'),
__metadata("design:type", TemplateRef)
], BlockComponent.prototype, "blockHelpTemplate", void 0);
__decorate([
ContentApi({
selector: '#blockHeaderTemplate',
description: 'Block header template'
}),
ContentChild('blockHeaderTemplate'),
__metadata("design:type", TemplateRef)
], BlockComponent.prototype, "blockHeaderTemplate", void 0);
__decorate([
ContentApi({
selector: '#blockFooterTemplate',
description: 'Block footer template'
}),
ContentChild('blockFooterTemplate'),
__metadata("design:type", TemplateRef)
], BlockComponent.prototype, "blockFooterTemplate", void 0);
__decorate([
MethodApi({ description: 'Show success animation' }),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], BlockComponent.prototype, "success", null);
BlockComponent = __decorate([
Component({
selector: 'jnt-block',
template: "<div child-of=\"jnt-block-host\" *ngIf=\"state === ui.state.loading\" data-state>\n <jnt-spinner child-of=\"jnt-block-host\" [size]=\"ui.size.large\"></jnt-spinner>\n</div>\n<div child-of=\"jnt-block-host\" *ngIf=\"state === ui.state.error\" data-state>\n <jnt-icon child-of=\"jnt-block-host\" [icon]=\"ui.icons.sad\"></jnt-icon>\n</div>\n<div child-of=\"jnt-block-host\" *ngIf=\"_state.success\" [@success]=\"_state.success\" data-state>\n <jnt-icon child-of=\"jnt-block-host\" [icon]=\"ui.icons.animated.success\"></jnt-icon>\n</div>\n\n<div child-of=\"jnt-block-host\" data-help *ngIf=\"!!blockHelpTemplate\"\n [jntPopover]=\"{\n contentTemplate: blockHelpTemplate,\n trigger: ui.trigger.click,\n position: breakpoint.current !== ui.breakpoint.mobile ? ui.position.right : ui.position.bottom\n }\">\n <jnt-icon child-of=\"jnt-block-host\" [icon]=\"ui.icons.question\"></jnt-icon>\n</div>\n\n<jnt-stack child-of=\"jnt-block-host\" data-block [align]=\"ui.align.stretch\" [gutter]=\"spacing\">\n <div child-of=\"jnt-block-host\" *ngIf=\"!!title && !blockHeaderTemplate\" data-title>\n {{title}}\n </div>\n\n <ng-container *ngIf=\"!!blockHeaderTemplate\">\n <ng-container *ngTemplateOutlet=\"blockHeaderTemplate\"></ng-container>\n </ng-container>\n\n <div child-of=\"jnt-block-host\" data-body>\n <ng-content></ng-content>\n </div>\n\n <div child-of=\"jnt-block-host\" *ngIf=\"!!blockFooterTemplate\" data-footer>\n <ng-container *ngTemplateOutlet=\"blockFooterTemplate\"></ng-container>\n </div>\n</jnt-stack>",
animations: [
trigger('success', [
state('void', style({
opacity: 0
})),
state('*', style({
opacity: 1
})),
transition('void <=> *', [
animate('.3s ease-in-out')
]),
]),
]
}),
__metadata("design:paramtypes", [BreakpointService])
], BlockComponent);
export { BlockComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2xheW91dC9ibG9jay9ibG9jay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQTZCL0MsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBYztJQXdIekIsWUFBbUIsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUF0SGhELE9BQUUsR0FBRyxFQUFFLENBQUM7UUFFUixXQUFNLEdBQUcsRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFDLENBQUM7UUFFUyxTQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFhM0QsYUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFekIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFvRHpCLFVBQUssR0FBVSxL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QUFpQixDQUFDO2lCQUMzQixDQUNGO2FBQ0YsQ0FDRjtTQUNGO0tBQ0YsQ0FBQztxQ0F5SCtCLGlCQUFpQjtHQXhIckMsY0FBYyxDQTBIMUI7U0ExSFksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFrcG9pbnRTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzcG9uc2l2ZS9icmVha3BvaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudEFwaSwgTWV0aG9kQXBpLCBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvZmVhdHVyZSc7XG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2d1dHRlcic7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc3RhdGUnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFdpZHRoIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy93aWR0aCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1ibG9jaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ibG9jay5lbmNhcHN1bGF0ZWQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzdWNjZXNzJywgW1xuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAndm9pZCcsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHN0YXRlKFxuICAgICAgICAgICcqJyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAndm9pZCA8PT4gKicsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4tb3V0JylcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCbG9ja0NvbXBvbmVudCB7XG5cbiAgdWkgPSBVSTtcblxuICBfc3RhdGUgPSB7c3VjY2VzczogZmFsc2V9O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtYmxvY2staG9zdCc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWhlbHAnKVxuICBnZXQgaGFzSGVscCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmJsb2NrSGVscFRlbXBsYXRlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWhlYWRlcicpXG4gIGdldCBoYXNIZWFkZXIoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ibG9ja0hlYWRlclRlbXBsYXRlIHx8ICEhdGhpcy50aXRsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXBhZGRpbmcnKVxuICBfcGFkZGluZyA9IEd1dHRlci5ub3JtYWw7XG5cbiAgX3NwYWNpbmcgPSBHdXR0ZXIubm9ybWFsO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdUaXRsZSBvZiBibG9jaycsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUGFkZGluZyBmb3IgYmxvY2snLFxuICAgIHBhdGg6ICd1aS5ndXR0ZXInLFxuICAgIG9wdGlvbnM6IFtHdXR0ZXIudGlueSxcbiAgICAgIEd1dHRlci5zbWFsbCxcbiAgICAgIEd1dHRlci5ub3JtYWwsXG4gICAgICBHdXR0ZXIubGFyZ2UsXG4gICAgICBHdXR0ZXIuYmlnLFxuICAgICAgR3V0dGVyLmh1Z2VdLFxuICAgIGRlZmF1bHQ6IEd1dHRlci5ub3JtYWxcbiAgfSlcbiAgQElucHV0KCkgc2V0IHBhZGRpbmcocGFkZGluZzogR3V0dGVyKSB7XG4gICAgdGhpcy5fcGFkZGluZyA9IHBhZGRpbmcgfHwgR3V0dGVyLm5vcm1hbDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTcGFjaW5nIGJldHdlZW4gaGVhZGVyLCBib2R5IGFuZCBmb290ZXInLFxuICAgIHBhdGg6ICd1aS5ndXR0ZXInLFxuICAgIG9wdGlvbnM6IFtHdXR0ZXIudGlueSxcbiAgICAgIEd1dHRlci5zbWFsbCxcbiAgICAgIEd1dHRlci5ub3JtYWwsXG4gICAgICBHdXR0ZXIubGFyZ2UsXG4gICAgICBHdXR0ZXIuYmlnLFxuICAgICAgR3V0dGVyLmh1Z2VdLFxuICAgIGRlZmF1bHQ6IEd1dHRlci5ub3JtYWxcbiAgfSlcbiAgQElucHV0KCkgc2V0IHNwYWNpbmcoc3BhY2luZzogR3V0dGVyKSB7XG4gICAgdGhpcy5fc3BhY2luZyA9IHNwYWNpbmcgfHwgR3V0dGVyLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrIHdpZHRoJyxcbiAgICBwYXRoOiAndWkud2lkdGgnLFxuICAgIGRlZmF1bHQ6IFdpZHRoLmRlZmF1bHQsXG4gICAgb3B0aW9uczogW1dpZHRoLmRlZmF1bHQsXG4gICAgICBXaWR0aC5mbHVpZF1cbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2lkdGgnKVxuICBASW5wdXQoKVxuICB3aWR0aDogV2lkdGggPSBXaWR0aC5kZWZhdWx0O1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTdGF0ZSBvZiBibG9jaycsXG4gICAgcGF0aDogJ3VpLnN0YXRlJyxcbiAgICBvcHRpb25zOiBbU3RhdGUuZXJyb3IsXG4gICAgICBTdGF0ZS5sb2FkaW5nXVxuICB9KVxuICBASW5wdXQoKVxuICBzdGF0ZTogU3RhdGU7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkYXB0ZWQgYmxvY2sgb24gbW9iaWxlIHZpZXcnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5hZGFwdGVkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1mZWF0dXJlcycpXG4gIEBJbnB1dCgpXG4gIGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjYmxvY2tIZWxwVGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQmxvY2sgaGVscCB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnYmxvY2tIZWxwVGVtcGxhdGUnKVxuICBibG9ja0hlbHBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjYmxvY2tIZWFkZXJUZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdCbG9jayBoZWFkZXIgdGVtcGxhdGUnXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ2Jsb2NrSGVhZGVyVGVtcGxhdGUnKVxuICBibG9ja0hlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50QXBpKHtcbiAgICBzZWxlY3RvcjogJyNibG9ja0Zvb3RlclRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrIGZvb3RlciB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnYmxvY2tGb290ZXJUZW1wbGF0ZScpXG4gIGJsb2NrRm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdTaG93IHN1Y2Nlc3MgYW5pbWF0aW9uJ30pXG4gIHN1Y2Nlc3MoKSB7XG4gICAgdGhpcy5fc3RhdGUuc3VjY2VzcyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zdGF0ZS5zdWNjZXNzID0gZmFsc2UsIDIxMDApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlKSB7XG4gIH1cbn1cbiJdfQ==