@junte/ui
Version:
Quality Angular UI components kit
204 lines • 18.8 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';
var BlockComponent = /** @class */ (function () {
function BlockComponent(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 = [];
}
Object.defineProperty(BlockComponent.prototype, "hasHelp", {
get: function () {
return !!this.blockHelpTemplate;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BlockComponent.prototype, "hasHeader", {
get: function () {
return !!this.blockHeaderTemplate || !!this.title;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BlockComponent.prototype, "padding", {
set: function (padding) {
this._padding = padding || Gutter.normal;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BlockComponent.prototype, "spacing", {
get: function () {
return this._spacing;
},
set: function (spacing) {
this._spacing = spacing || Gutter.normal;
},
enumerable: true,
configurable: true
});
BlockComponent.prototype.success = function () {
var _this = this;
this._state.success = true;
setTimeout(function () { return _this._state.success = false; }, 2100);
};
BlockComponent.ctorParameters = function () { return [
{ 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);
return BlockComponent;
}());
export { BlockComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2xheW91dC9ibG9jay9ibG9jay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQTZCL0M7SUF3SEUsd0JBQW1CLFVBQTZCO1FBQTdCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBdEhoRCxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBRVIsV0FBTSxHQUFHLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBQyxDQUFDO1FBRVMsU0FBSSxHQUFHLGdCQUFnQixDQUFDO1FBYTNELGFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRXpCLGFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBb0R6QixVQUFLLEdBQVUsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQWtCN0Is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Q0FDSDtvQkFDRCxVQUFVLENBQ1IsWUFBWSxFQUNaO3dCQUNFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztxQkFDM0IsQ0FDRjtpQkFDRixDQUNGO2FBQ0Y7U0FDRixDQUFDO3lDQXlIK0IsaUJBQWlCO09BeEhyQyxjQUFjLENBMEgxQjtJQUFELHFCQUFDO0NBQUEsQUExSEQsSUEwSEM7U0ExSFksY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFrcG9pbnRTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzcG9uc2l2ZS9icmVha3BvaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudEFwaSwgTWV0aG9kQXBpLCBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvZmVhdHVyZSc7XG5pbXBvcnQgeyBHdXR0ZXIgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL2d1dHRlcic7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvc3RhdGUnO1xuaW1wb3J0IHsgVUkgfSBmcm9tICcuLi8uLi9jb3JlL2VudW1zL3VpJztcbmltcG9ydCB7IFdpZHRoIH0gZnJvbSAnLi4vLi4vY29yZS9lbnVtcy93aWR0aCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1ibG9jaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ibG9jay5lbmNhcHN1bGF0ZWQuaHRtbCcsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzdWNjZXNzJywgW1xuICAgICAgICBzdGF0ZShcbiAgICAgICAgICAndm9pZCcsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHN0YXRlKFxuICAgICAgICAgICcqJyxcbiAgICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgICAgdHJhbnNpdGlvbihcbiAgICAgICAgICAndm9pZCA8PT4gKicsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4tb3V0JylcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICBdXG4gICAgKSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBCbG9ja0NvbXBvbmVudCB7XG5cbiAgdWkgPSBVSTtcblxuICBfc3RhdGUgPSB7c3VjY2VzczogZmFsc2V9O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtYmxvY2staG9zdCc7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWhlbHAnKVxuICBnZXQgaGFzSGVscCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmJsb2NrSGVscFRlbXBsYXRlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWhlYWRlcicpXG4gIGdldCBoYXNIZWFkZXIoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ibG9ja0hlYWRlclRlbXBsYXRlIHx8ICEhdGhpcy50aXRsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXBhZGRpbmcnKVxuICBfcGFkZGluZyA9IEd1dHRlci5ub3JtYWw7XG5cbiAgX3NwYWNpbmcgPSBHdXR0ZXIubm9ybWFsO1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdUaXRsZSBvZiBibG9jaycsXG4gICAgdHlwZTogJ3N0cmluZydcbiAgfSlcbiAgQElucHV0KClcbiAgdGl0bGU6IHN0cmluZztcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnUGFkZGluZyBmb3IgYmxvY2snLFxuICAgIHBhdGg6ICd1aS5ndXR0ZXInLFxuICAgIG9wdGlvbnM6IFtHdXR0ZXIudGlueSxcbiAgICAgIEd1dHRlci5zbWFsbCxcbiAgICAgIEd1dHRlci5ub3JtYWwsXG4gICAgICBHdXR0ZXIubGFyZ2UsXG4gICAgICBHdXR0ZXIuYmlnLFxuICAgICAgR3V0dGVyLmh1Z2VdLFxuICAgIGRlZmF1bHQ6IEd1dHRlci5ub3JtYWxcbiAgfSlcbiAgQElucHV0KCkgc2V0IHBhZGRpbmcocGFkZGluZzogR3V0dGVyKSB7XG4gICAgdGhpcy5fcGFkZGluZyA9IHBhZGRpbmcgfHwgR3V0dGVyLm5vcm1hbDtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTcGFjaW5nIGJldHdlZW4gaGVhZGVyLCBib2R5IGFuZCBmb290ZXInLFxuICAgIHBhdGg6ICd1aS5ndXR0ZXInLFxuICAgIG9wdGlvbnM6IFtHdXR0ZXIudGlueSxcbiAgICAgIEd1dHRlci5zbWFsbCxcbiAgICAgIEd1dHRlci5ub3JtYWwsXG4gICAgICBHdXR0ZXIubGFyZ2UsXG4gICAgICBHdXR0ZXIuYmlnLFxuICAgICAgR3V0dGVyLmh1Z2VdLFxuICAgIGRlZmF1bHQ6IEd1dHRlci5ub3JtYWxcbiAgfSlcbiAgQElucHV0KCkgc2V0IHNwYWNpbmcoc3BhY2luZzogR3V0dGVyKSB7XG4gICAgdGhpcy5fc3BhY2luZyA9IHNwYWNpbmcgfHwgR3V0dGVyLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzcGFjaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zcGFjaW5nO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrIHdpZHRoJyxcbiAgICBwYXRoOiAndWkud2lkdGgnLFxuICAgIGRlZmF1bHQ6IFdpZHRoLmRlZmF1bHQsXG4gICAgb3B0aW9uczogW1dpZHRoLmRlZmF1bHQsXG4gICAgICBXaWR0aC5mbHVpZF1cbiAgfSlcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtd2lkdGgnKVxuICBASW5wdXQoKVxuICB3aWR0aDogV2lkdGggPSBXaWR0aC5kZWZhdWx0O1xuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdTdGF0ZSBvZiBibG9jaycsXG4gICAgcGF0aDogJ3VpLnN0YXRlJyxcbiAgICBvcHRpb25zOiBbU3RhdGUuZXJyb3IsXG4gICAgICBTdGF0ZS5sb2FkaW5nXVxuICB9KVxuICBASW5wdXQoKVxuICBzdGF0ZTogU3RhdGU7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkYXB0ZWQgYmxvY2sgb24gbW9iaWxlIHZpZXcnLFxuICAgIHBhdGg6ICd1aS5mZWF0dXJlJyxcbiAgICBvcHRpb25zOiBbRmVhdHVyZS5hZGFwdGVkXVxuICB9KVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1mZWF0dXJlcycpXG4gIEBJbnB1dCgpXG4gIGZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjYmxvY2tIZWxwVGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnQmxvY2sgaGVscCB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnYmxvY2tIZWxwVGVtcGxhdGUnKVxuICBibG9ja0hlbHBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudEFwaSh7XG4gICAgc2VsZWN0b3I6ICcjYmxvY2tIZWFkZXJUZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdCbG9jayBoZWFkZXIgdGVtcGxhdGUnXG4gIH0pXG4gIEBDb250ZW50Q2hpbGQoJ2Jsb2NrSGVhZGVyVGVtcGxhdGUnKVxuICBibG9ja0hlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50QXBpKHtcbiAgICBzZWxlY3RvcjogJyNibG9ja0Zvb3RlclRlbXBsYXRlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Jsb2NrIGZvb3RlciB0ZW1wbGF0ZSdcbiAgfSlcbiAgQENvbnRlbnRDaGlsZCgnYmxvY2tGb290ZXJUZW1wbGF0ZScpXG4gIGJsb2NrRm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE1ldGhvZEFwaSh7ZGVzY3JpcHRpb246ICdTaG93IHN1Y2Nlc3MgYW5pbWF0aW9uJ30pXG4gIHN1Y2Nlc3MoKSB7XG4gICAgdGhpcy5fc3RhdGUuc3VjY2VzcyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zdGF0ZS5zdWNjZXNzID0gZmFsc2UsIDIxMDApO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGJyZWFrcG9pbnQ6IEJyZWFrcG9pbnRTZXJ2aWNlKSB7XG4gIH1cbn1cbiJdfQ==