UNPKG

@junte/ui

Version:

Quality Angular UI components kit

186 lines 17.4 kB
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==