tudu-components 0.2.11 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/custom-modal/custom-modal.component.mjs +148 -0
- package/esm2020/lib/components/cutom-modal/cutom-modal.component.mjs +14 -0
- package/esm2020/lib/tudu-components.module.mjs +28 -7
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/tudu-components.mjs +251 -86
- package/fesm2015/tudu-components.mjs.map +1 -1
- package/fesm2020/tudu-components.mjs +251 -86
- package/fesm2020/tudu-components.mjs.map +1 -1
- package/lib/components/custom-modal/custom-modal.component.d.ts +40 -0
- package/lib/components/cutom-modal/cutom-modal.component.d.ts +8 -0
- package/lib/tudu-components.module.d.ts +3 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class CustomModalComponent {
|
|
5
|
+
constructor(location) {
|
|
6
|
+
this.location = location;
|
|
7
|
+
this.modalId = 'customModal';
|
|
8
|
+
this.title = 'Aviso';
|
|
9
|
+
this.message = '';
|
|
10
|
+
this.closeButtonText = 'Fechar';
|
|
11
|
+
this.actionButtonText = '';
|
|
12
|
+
this.paymentMethod = null;
|
|
13
|
+
this.errorDetails = null;
|
|
14
|
+
this.modalClosed = new EventEmitter();
|
|
15
|
+
this.modalAction = new EventEmitter();
|
|
16
|
+
this.showModal = false;
|
|
17
|
+
this.messageTitle = 'Pagamento Aprovado!';
|
|
18
|
+
this.showBtn = true;
|
|
19
|
+
this.priceNegotiated = 0;
|
|
20
|
+
this.messageBody = 'Seu pagamento foi processado com sucesso.';
|
|
21
|
+
// Configuração dinâmica
|
|
22
|
+
this.modalIcon = 'fa-check';
|
|
23
|
+
this.modalIconColor = 'text-green-600';
|
|
24
|
+
this.modalBgColor = 'bg-green-100';
|
|
25
|
+
this.isClosing = false;
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() { }
|
|
28
|
+
// Centraliza a abertura do modal com suporte ao botão voltar
|
|
29
|
+
openModal() {
|
|
30
|
+
this.showModal = true;
|
|
31
|
+
// Adiciona um estado no histórico para o botão voltar funcionar
|
|
32
|
+
this.location.go(this.location.path() + '#modalOpen');
|
|
33
|
+
}
|
|
34
|
+
// Atalho para abrir com tipos específicos
|
|
35
|
+
open(type, message = '', paymentMethod) {
|
|
36
|
+
this.configureModal(type, message);
|
|
37
|
+
if (paymentMethod) {
|
|
38
|
+
this.paymentMethod = paymentMethod;
|
|
39
|
+
}
|
|
40
|
+
this.openModal();
|
|
41
|
+
}
|
|
42
|
+
configureModal(type, message = '') {
|
|
43
|
+
switch (type) {
|
|
44
|
+
case 'success':
|
|
45
|
+
this.setSuccessStyles(message);
|
|
46
|
+
break;
|
|
47
|
+
case 'error':
|
|
48
|
+
this.setErrorStyles(message);
|
|
49
|
+
break;
|
|
50
|
+
case 'warning':
|
|
51
|
+
this.setWarningStyles(message);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
setSuccessStyles(message) {
|
|
56
|
+
this.modalIcon = 'fa-check-circle';
|
|
57
|
+
this.modalIconColor = 'modal-icon-success';
|
|
58
|
+
this.modalBgColor = 'modal-bg-success';
|
|
59
|
+
this.messageTitle = 'Sucesso!';
|
|
60
|
+
this.messageBody = message || 'Operação realizada com sucesso.';
|
|
61
|
+
}
|
|
62
|
+
setErrorStyles(message) {
|
|
63
|
+
this.modalIcon = 'fa-times-circle';
|
|
64
|
+
this.modalIconColor = 'modal-icon-error';
|
|
65
|
+
this.modalBgColor = 'modal-bg-error';
|
|
66
|
+
this.messageTitle = 'Ops! Algo deu errado';
|
|
67
|
+
this.messageBody = message || 'Não conseguimos processar sua solicitação.';
|
|
68
|
+
}
|
|
69
|
+
setWarningStyles(message) {
|
|
70
|
+
this.modalIcon = 'fa-exclamation-circle';
|
|
71
|
+
this.modalIconColor = 'modal-icon-warning';
|
|
72
|
+
this.modalBgColor = 'modal-bg-warning';
|
|
73
|
+
this.messageTitle = 'Atenção';
|
|
74
|
+
this.messageBody = message || 'Verifique os dados antes de continuar.';
|
|
75
|
+
}
|
|
76
|
+
actionModal() {
|
|
77
|
+
if (this.isLoadingBtn !== undefined) {
|
|
78
|
+
this.isLoadingBtn = true;
|
|
79
|
+
this.modalAction.emit();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.modalAction.emit();
|
|
83
|
+
this.isLoadingBtn = false;
|
|
84
|
+
this.closeModal(); // Usa o método de fechar para limpar o histórico
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
closeModal() {
|
|
88
|
+
this.isClosing = true; // Ativa a animação de descida
|
|
89
|
+
// Aguarda o tempo da animação (300ms) antes de remover do DOM
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
this.showModal = false;
|
|
92
|
+
this.isClosing = false; // Reseta para a próxima abertura
|
|
93
|
+
this.modalClosed.emit();
|
|
94
|
+
// Lógica do histórico que já fizemos
|
|
95
|
+
if (window.location.hash === '#modalOpen') {
|
|
96
|
+
const currentPath = this.location.path().split('#')[0];
|
|
97
|
+
this.location.replaceState(currentPath);
|
|
98
|
+
}
|
|
99
|
+
}, 300);
|
|
100
|
+
}
|
|
101
|
+
// Escuta o botão voltar do navegador ou celular
|
|
102
|
+
onPopState() {
|
|
103
|
+
if (this.showModal) {
|
|
104
|
+
this.showModal = false;
|
|
105
|
+
this.modalClosed.emit();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
CustomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
+
CustomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CustomModalComponent, selector: "lib-custom-modal", inputs: { modalId: "modalId", title: "title", message: "message", closeButtonText: "closeButtonText", actionButtonText: "actionButtonText", paymentMethod: "paymentMethod", errorDetails: "errorDetails", showModal: "showModal", messageTitle: "messageTitle", showBtn: "showBtn", priceNegotiated: "priceNegotiated", messageBody: "messageBody", isLoadingBtn: "isLoadingBtn" }, outputs: { modalClosed: "modalClosed", modalAction: "modalAction" }, host: { listeners: { "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"priceNegotiated <= 0 && actionButtonText === 'Negociar'\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] });
|
|
111
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomModalComponent, decorators: [{
|
|
112
|
+
type: Component,
|
|
113
|
+
args: [{ selector: 'lib-custom-modal', standalone: false, template: "<div\n *ngIf=\"showModal\"\n class=\"modal-overlay-fixed\"\n [ngClass]=\"{ 'overlay-hide': isClosing }\"\n (click)=\"closeModal()\"\n>\n <div\n class=\"bg-white w-full max-w-2xl rounded-t-[2.5rem] p-6 shadow-2xl border-t border-gray-100 flex flex-col\"\n [ngClass]=\"isClosing ? 'animate-slide-down' : 'animate-slide-up'\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"w-full py-4 -mt-2 cursor-pointer flex justify-center\"\n (click)=\"closeModal()\"\n >\n <div class=\"w-12 h-1.5 bg-gray-200 rounded-full\"></div>\n </div>\n\n <div class=\"flex flex-col items-center text-center\">\n <div class=\"relative mb-4\">\n <div\n [class]=\"modalBgColor\"\n class=\"w-20 h-20 rounded-full opacity-40\"\n ></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <i\n [class]=\"modalIcon + ' ' + modalIconColor\"\n class=\"fas text-3xl\"\n ></i>\n </div>\n </div>\n\n <h2 class=\"text-2xl font-bold text-gray-900 mb-2\">{{ messageTitle }}</h2>\n\n <div class=\"w-full modal-scroll-area px-2 custom-scrollbar\">\n <p *ngIf=\"messageBody\" class=\"text-gray-600 mb-4\">{{ messageBody }}</p>\n\n <div class=\"modal-dynamic-content text-left\">\n <ng-content select=\"[optional-content]\"></ng-content>\n </div>\n\n <div\n *ngIf=\"errorDetails\"\n class=\"mt-4 p-4 bg-red-50 rounded-2xl text-left border border-red-100\"\n >\n <p class=\"text-[10px] font-bold text-red-700 uppercase mb-1\">\n Log do sistema:\n </p>\n <pre class=\"text-[11px] text-red-600 font-mono whitespace-pre-wrap\">{{\n errorDetails | json\n }}</pre>\n </div>\n </div>\n\n <div class=\"mt-6 flex flex-col w-full gap-3 pb-4\">\n <button\n [disabled]=\"priceNegotiated <= 0 && actionButtonText === 'Negociar'\"\n *ngIf=\"actionButtonText\"\n (click)=\"actionModal()\"\n class=\"w-full py-4 text-white rounded-2xl font-bold active:scale-[0.98] transition-all flex items-center justify-center gap-3 shadow-lg btn-primary-custom\"\n [style.background-color]=\"'var(--primary)'\"\n >\n <span *ngIf=\"!isLoadingBtn\">{{ actionButtonText }}</span>\n <ng-container *ngIf=\"isLoadingBtn\">\n <span>Processando</span>\n <i class=\"fas fa-circle-notch fa-spin\"></i>\n </ng-container>\n </button>\n\n <button\n *ngIf=\"showBtn\"\n (click)=\"closeModal()\"\n class=\"w-full py-2 text-gray-500 font-semibold hover:text-gray-800 transition-colors\"\n >\n {{ closeButtonText }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: ["@keyframes slideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideDown{0%{transform:translateY(0)}to{transform:translateY(100%)}}.animate-slide-up{animation:slideUp .4s cubic-bezier(.25,1,.5,1) forwards}.animate-slide-down{animation:slideDown .4s cubic-bezier(.25,1,.5,1) forwards}.modal-overlay-fixed{position:fixed;inset:0;background-color:#0009!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;display:flex;align-items:flex-end;justify-content:center;z-index:9999;transition:opacity .3s ease;opacity:1}.overlay-hide{opacity:0;pointer-events:none}.modal-scroll-area{max-height:60vh;overflow-y:auto;overflow-x:hidden;transition:max-height .4s cubic-bezier(.25,1,.5,1)}.modal-scroll-area:has(.animate-fade-in),.modal-scroll-area:focus-within{max-height:85vh}.modal-dynamic-content{height:auto;overflow:visible!important;display:block}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background:#f1f1f1;border-radius:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.btn-primary-custom:hover:not(:disabled){filter:brightness(.9);transition:filter .2s ease}.btn-primary-custom:disabled{opacity:.6;cursor:not-allowed}.modal-bg-success{background-color:#d1fae5!important}.modal-icon-success{color:#10b981!important}.modal-bg-error{background-color:#fee2e2!important}.modal-icon-error{color:#ef4444!important}.modal-bg-warning{background-color:#fef3c7!important}.modal-icon-warning{color:#f59e0b!important}@media (min-width: 768px){.modal-overlay-fixed{align-items:center}.animate-slide-up,.animate-slide-down{border-radius:2.5rem;width:90%;margin-bottom:0}@keyframes slideUp{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slideDown{0%{transform:scale(1);opacity:1}to{transform:scale(.9);opacity:0}}}:host-context(body:has(.modal-overlay-fixed)){overflow:hidden}\n"] }]
|
|
114
|
+
}], ctorParameters: function () { return [{ type: i1.Location }]; }, propDecorators: { modalId: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], title: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], message: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], closeButtonText: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], actionButtonText: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], paymentMethod: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], errorDetails: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], modalClosed: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], modalAction: [{
|
|
131
|
+
type: Output
|
|
132
|
+
}], showModal: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], messageTitle: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], showBtn: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], priceNegotiated: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], messageBody: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], isLoadingBtn: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], onPopState: [{
|
|
145
|
+
type: HostListener,
|
|
146
|
+
args: ['window:popstate']
|
|
147
|
+
}] } });
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7OztBQVd2QixNQUFNLE9BQU8sb0JBQW9CO0lBeUIvQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBeEI3QixZQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLG9CQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0QixrQkFBYSxHQUE0QixJQUFJLENBQUM7UUFDOUMsaUJBQVksR0FBUSxJQUFJLENBQUM7UUFFeEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV4QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQVcscUJBQXFCLENBQUM7UUFDN0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsMkNBQTJDLENBQUM7UUFHM0Usd0JBQXdCO1FBQ3hCLGNBQVMsR0FBVyxVQUFVLENBQUM7UUFDL0Is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c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQW1HTixVQUFVO3NCQURULFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJzsgLy8gSW1wb3J0YcOnw6NvIGNvcnJldGFcblxudHlwZSBNb2RhbFR5cGUgPSAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY3VzdG9tLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tbW9kYWwuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1vZGFsSWQgPSAnY3VzdG9tTW9kYWwnO1xuICBASW5wdXQoKSB0aXRsZSA9ICdBdmlzbyc7XG4gIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcbiAgQElucHV0KCkgY2xvc2VCdXR0b25UZXh0ID0gJ0ZlY2hhcic7XG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvblRleHQgPSAnJztcbiAgQElucHV0KCkgcGF5bWVudE1ldGhvZDogJ3BpeCcgfCAnY3JlZGl0JyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBlcnJvckRldGFpbHM6IGFueSA9IG51bGw7XG5cbiAgQE91dHB1dCgpIG1vZGFsQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbW9kYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgc2hvd01vZGFsID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUaXRsZTogc3RyaW5nID0gJ1BhZ2FtZW50byBBcHJvdmFkbyEnO1xuICBASW5wdXQoKSBzaG93QnRuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJpY2VOZWdvdGlhdGVkID0gMDtcbiAgQElucHV0KCkgbWVzc2FnZUJvZHk6IHN0cmluZyA9ICdTZXUgcGFnYW1lbnRvIGZvaSBwcm9jZXNzYWRvIGNvbSBzdWNlc3NvLic7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ0J0bjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvLyBDb25maWd1cmHDp8OjbyBkaW7Dom1pY2FcbiAgbW9kYWxJY29uOiBzdHJpbmcgPSAnZmEtY2hlY2snO1xuICBtb2RhbEljb25Db2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNjAwJztcbiAgbW9kYWxCZ0NvbG9yOiBzdHJpbmcgPSAnYmctZ3JlZW4tMTAwJztcbiAgaXNDbG9zaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24pIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIC8vIENlbnRyYWxpemEgYSBhYmVydHVyYSBkbyBtb2RhbCBjb20gc3Vwb3J0ZSBhbyBib3TDo28gdm9sdGFyXG4gIG9wZW5Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNb2RhbCA9IHRydWU7XG4gICAgLy8gQWRpY2lvbmEgdW0gZXN0YWRvIG5vIGhpc3TDs3JpY28gcGFyYSBvIGJvdMOjbyB2b2x0YXIgZnVuY2lvbmFyXG4gICAgdGhpcy5sb2NhdGlvbi5nbyh0aGlzLmxvY2F0aW9uLnBhdGgoKSArICcjbW9kYWxPcGVuJyk7XG4gIH1cblxuICAvLyBBdGFsaG8gcGFyYSBhYnJpciBjb20gdGlwb3MgZXNwZWPDrWZpY29zXG4gIG9wZW4oXG4gICAgdHlwZTogTW9kYWxUeXBlLFxuICAgIG1lc3NhZ2U6IHN0cmluZyA9ICcnLFxuICAgIHBheW1lbnRNZXRob2Q/OiAncGl4JyB8ICdjcmVkaXQnXG4gICk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlTW9kYWwodHlwZSwgbWVzc2FnZSk7XG4gICAgaWYgKHBheW1lbnRNZXRob2QpIHtcbiAgICAgIHRoaXMucGF5bWVudE1ldGhvZCA9IHBheW1lbnRNZXRob2Q7XG4gICAgfVxuICAgIHRoaXMub3Blbk1vZGFsKCk7XG4gIH1cblxuICBjb25maWd1cmVNb2RhbCh0eXBlOiBNb2RhbFR5cGUsIG1lc3NhZ2U6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgdGhpcy5zZXRTdWNjZXNzU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgdGhpcy5zZXRFcnJvclN0eWxlcyhtZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgdGhpcy5zZXRXYXJuaW5nU3R5bGVzKG1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFN1Y2Nlc3NTdHlsZXMobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbEljb24gPSAnZmEtY2hlY2stY2lyY2xlJztcbiAgICB0aGlzLm1vZGFsSWNvbkNvbG9yID0gJ21vZGFsLWljb24tc3VjY2Vzcyc7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctc3VjY2Vzcyc7XG4gICAgdGhpcy5tZXNzYWdlVGl0bGUgPSAnU3VjZXNzbyEnO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdPcGVyYcOnw6NvIHJlYWxpemFkYSBjb20gc3VjZXNzby4nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFcnJvclN0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS10aW1lcy1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi1lcnJvcic7XG4gICAgdGhpcy5tb2RhbEJnQ29sb3IgPSAnbW9kYWwtYmctZXJyb3InO1xuICAgIHRoaXMubWVzc2FnZVRpdGxlID0gJ09wcyEgQWxnbyBkZXUgZXJyYWRvJztcbiAgICB0aGlzLm1lc3NhZ2VCb2R5ID0gbWVzc2FnZSB8fCAnTsOjbyBjb25zZWd1aW1vcyBwcm9jZXNzYXIgc3VhIHNvbGljaXRhw6fDo28uJztcbiAgfVxuXG4gIHByaXZhdGUgc2V0V2FybmluZ1N0eWxlcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsSWNvbiA9ICdmYS1leGNsYW1hdGlvbi1jaXJjbGUnO1xuICAgIHRoaXMubW9kYWxJY29uQ29sb3IgPSAnbW9kYWwtaWNvbi13YXJuaW5nJztcbiAgICB0aGlzLm1vZGFsQmdDb2xvciA9ICdtb2RhbC1iZy13YXJuaW5nJztcbiAgICB0aGlzLm1lc3NhZ2VUaXRsZSA9ICdBdGVuw6fDo28nO1xuICAgIHRoaXMubWVzc2FnZUJvZHkgPSBtZXNzYWdlIHx8ICdWZXJpZmlxdWUgb3MgZGFkb3MgYW50ZXMgZGUgY29udGludWFyLic7XG4gIH1cblxuICBhY3Rpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdCdG4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdCdG4gPSB0cnVlO1xuICAgICAgdGhpcy5tb2RhbEFjdGlvbi5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kYWxBY3Rpb24uZW1pdCgpO1xuICAgICAgdGhpcy5pc0xvYWRpbmdCdG4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xvc2VNb2RhbCgpOyAvLyBVc2EgbyBtw6l0b2RvIGRlIGZlY2hhciBwYXJhIGxpbXBhciBvIGhpc3TDs3JpY29cbiAgICB9XG4gIH1cblxuICBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDbG9zaW5nID0gdHJ1ZTsgLy8gQXRpdmEgYSBhbmltYcOnw6NvIGRlIGRlc2NpZGFcblxuICAgIC8vIEFndWFyZGEgbyB0ZW1wbyBkYSBhbmltYcOnw6NvICgzMDBtcykgYW50ZXMgZGUgcmVtb3ZlciBkbyBET01cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQ2xvc2luZyA9IGZhbHNlOyAvLyBSZXNldGEgcGFyYSBhIHByw7N4aW1hIGFiZXJ0dXJhXG4gICAgICB0aGlzLm1vZGFsQ2xvc2VkLmVtaXQoKTtcblxuICAgICAgLy8gTMOzZ2ljYSBkbyBoaXN0w7NyaWNvIHF1ZSBqw6EgZml6ZW1vc1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoID09PSAnI21vZGFsT3BlbicpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnIycpWzBdO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShjdXJyZW50UGF0aCk7XG4gICAgICB9XG4gICAgfSwgMzAwKTtcbiAgfVxuICAvLyBFc2N1dGEgbyBib3TDo28gdm9sdGFyIGRvIG5hdmVnYWRvciBvdSBjZWx1bGFyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpwb3BzdGF0ZScpXG4gIG9uUG9wU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd01vZGFsKSB7XG4gICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy5tb2RhbENsb3NlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwic2hvd01vZGFsXCJcbiAgY2xhc3M9XCJtb2RhbC1vdmVybGF5LWZpeGVkXCJcbiAgW25nQ2xhc3NdPVwieyAnb3ZlcmxheS1oaWRlJzogaXNDbG9zaW5nIH1cIlxuICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYmctd2hpdGUgdy1mdWxsIG1heC13LTJ4bCByb3VuZGVkLXQtWzIuNXJlbV0gcC02IHNoYWRvdy0yeGwgYm9yZGVyLXQgYm9yZGVyLWdyYXktMTAwIGZsZXggZmxleC1jb2xcIlxuICAgIFtuZ0NsYXNzXT1cImlzQ2xvc2luZyA/ICdhbmltYXRlLXNsaWRlLWRvd24nIDogJ2FuaW1hdGUtc2xpZGUtdXAnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTQgLW10LTIgY3Vyc29yLXBvaW50ZXIgZmxleCBqdXN0aWZ5LWNlbnRlclwiXG4gICAgICAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwidy0xMiBoLTEuNSBiZy1ncmF5LTIwMCByb3VuZGVkLWZ1bGxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIG1iLTRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtjbGFzc109XCJtb2RhbEJnQ29sb3JcIlxuICAgICAgICAgIGNsYXNzPVwidy0yMCBoLTIwIHJvdW5kZWQtZnVsbCBvcGFjaXR5LTQwXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBbY2xhc3NdPVwibW9kYWxJY29uICsgJyAnICsgbW9kYWxJY29uQ29sb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYXMgdGV4dC0zeGxcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxoMiBjbGFzcz1cInRleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWdyYXktOTAwIG1iLTJcIj57eyBtZXNzYWdlVGl0bGUgfX08L2gyPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1vZGFsLXNjcm9sbC1hcmVhIHB4LTIgY3VzdG9tLXNjcm9sbGJhclwiPlxuICAgICAgICA8cCAqbmdJZj1cIm1lc3NhZ2VCb2R5XCIgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIG1iLTRcIj57eyBtZXNzYWdlQm9keSB9fTwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZHluYW1pYy1jb250ZW50IHRleHQtbGVmdFwiPlxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvcHRpb25hbC1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICBjbGFzcz1cIm10LTQgcC00IGJnLXJlZC01MCByb3VuZGVkLTJ4bCB0ZXh0LWxlZnQgYm9yZGVyIGJvcmRlci1yZWQtMTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1bMTBweF0gZm9udC1ib2xkIHRleHQtcmVkLTcwMCB1cHBlcmNhc2UgbWItMVwiPlxuICAgICAgICAgICAgTG9nIGRvIHNpc3RlbWE6XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwcmUgY2xhc3M9XCJ0ZXh0LVsxMXB4XSB0ZXh0LXJlZC02MDAgZm9udC1tb25vIHdoaXRlc3BhY2UtcHJlLXdyYXBcIj57e1xuICAgICAgICAgICAgZXJyb3JEZXRhaWxzIHwganNvblxuICAgICAgICAgIH19PC9wcmU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtdC02IGZsZXggZmxleC1jb2wgdy1mdWxsIGdhcC0zIHBiLTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmljZU5lZ290aWF0ZWQgPD0gMCAmJiBhY3Rpb25CdXR0b25UZXh0ID09PSAnTmVnb2NpYXInXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGlvbkJ1dHRvblRleHRcIlxuICAgICAgICAgIChjbGljayk9XCJhY3Rpb25Nb2RhbCgpXCJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBweS00IHRleHQtd2hpdGUgcm91bmRlZC0yeGwgZm9udC1ib2xkIGFjdGl2ZTpzY2FsZS1bMC45OF0gdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgc2hhZG93LWxnIGJ0bi1wcmltYXJ5LWN1c3RvbVwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiJ3ZhcigtLXByaW1hcnkpJ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0xvYWRpbmdCdG5cIj57eyBhY3Rpb25CdXR0b25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRpbmdCdG5cIj5cbiAgICAgICAgICAgIDxzcGFuPlByb2Nlc3NhbmRvPC9zcGFuPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlLW5vdGNoIGZhLXNwaW5cIj48L2k+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dCdG5cIlxuICAgICAgICAgIChjbGljayk9XCJjbG9zZU1vZGFsKClcIlxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHB5LTIgdGV4dC1ncmF5LTUwMCBmb250LXNlbWlib2xkIGhvdmVyOnRleHQtZ3JheS04MDAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgY2xvc2VCdXR0b25UZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class CutomModalComponent {
|
|
4
|
+
constructor() { }
|
|
5
|
+
ngOnInit() {
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
CutomModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CutomModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
CutomModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CutomModalComponent, selector: "lib-cutom-modal", ngImport: i0, template: "<p>cutom-modal works!</p>\n", styles: [""] });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CutomModalComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{ selector: 'lib-cutom-modal', template: "<p>cutom-modal works!</p>\n" }]
|
|
13
|
+
}], ctorParameters: function () { return []; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3V0b20tbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVkdS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jdXRvbS1tb2RhbC9jdXRvbS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWR1LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2N1dG9tLW1vZGFsL2N1dG9tLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBT2xELE1BQU0sT0FBTyxtQkFBbUI7SUFFOUIsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7O2dIQUxVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHVEQ1BoQyw2QkFDQTsyRkRNYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWN1dG9tLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1dG9tLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3V0b20tbW9kYWwuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEN1dG9tTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxufVxuIiwiPHA+Y3V0b20tbW9kYWwgd29ya3MhPC9wPlxuIl19
|
|
@@ -1,21 +1,42 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { TuduComponentsComponent } from './tudu-components.component';
|
|
3
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
4
3
|
import { CardLayoutComponent } from '../lib/components/card-layout/card-layout.component';
|
|
5
|
-
import {
|
|
4
|
+
import { CustomModalComponent } from './components/custom-modal/custom-modal.component';
|
|
6
5
|
import { FallbackMessageComponent } from './components/fallback-message/fallback-message.component';
|
|
6
|
+
import { NavComponent } from './components/nav/nav.component';
|
|
7
|
+
import { TuduComponentsComponent } from './tudu-components.component';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export class TuduComponentsModule {
|
|
9
10
|
}
|
|
10
11
|
TuduComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
-
TuduComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, declarations: [TuduComponentsComponent,
|
|
12
|
+
TuduComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, declarations: [TuduComponentsComponent,
|
|
13
|
+
CardLayoutComponent,
|
|
14
|
+
NavComponent,
|
|
15
|
+
FallbackMessageComponent,
|
|
16
|
+
CustomModalComponent], imports: [CommonModule], exports: [TuduComponentsComponent,
|
|
17
|
+
CardLayoutComponent,
|
|
18
|
+
NavComponent,
|
|
19
|
+
FallbackMessageComponent,
|
|
20
|
+
CustomModalComponent] });
|
|
12
21
|
TuduComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, imports: [CommonModule] });
|
|
13
22
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TuduComponentsModule, decorators: [{
|
|
14
23
|
type: NgModule,
|
|
15
24
|
args: [{
|
|
16
|
-
declarations: [
|
|
25
|
+
declarations: [
|
|
26
|
+
TuduComponentsComponent,
|
|
27
|
+
CardLayoutComponent,
|
|
28
|
+
NavComponent,
|
|
29
|
+
FallbackMessageComponent,
|
|
30
|
+
CustomModalComponent,
|
|
31
|
+
],
|
|
17
32
|
imports: [CommonModule],
|
|
18
|
-
exports: [
|
|
33
|
+
exports: [
|
|
34
|
+
TuduComponentsComponent,
|
|
35
|
+
CardLayoutComponent,
|
|
36
|
+
NavComponent,
|
|
37
|
+
FallbackMessageComponent,
|
|
38
|
+
CustomModalComponent,
|
|
39
|
+
],
|
|
19
40
|
}]
|
|
20
41
|
}] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVkdS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvbGliL3R1ZHUtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQW1CdEUsTUFBTSxPQUFPLG9CQUFvQjs7aUhBQXBCLG9CQUFvQjtrSEFBcEIsb0JBQW9CLGlCQWY3Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsb0JBQW9CLGFBRVosWUFBWSxhQUVwQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLFlBQVk7UUFDWix3QkFBd0I7UUFDeEIsb0JBQW9CO2tIQUdYLG9CQUFvQixZQVRyQixZQUFZOzJGQVNYLG9CQUFvQjtrQkFqQmhDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3FCQUNyQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRTt3QkFDUCx1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhcmRMYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9saWIvY29tcG9uZW50cy9jYXJkLWxheW91dC9jYXJkLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3VzdG9tLW1vZGFsL2N1c3RvbS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmFsbGJhY2tNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2ZhbGxiYWNrLW1lc3NhZ2UvZmFsbGJhY2stbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50JztcbmltcG9ydCB7IFR1ZHVDb21wb25lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi90dWR1LWNvbXBvbmVudHMuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVHVkdUNvbXBvbmVudHNDb21wb25lbnQsXG4gICAgQ2FyZExheW91dENvbXBvbmVudCxcbiAgICBOYXZDb21wb25lbnQsXG4gICAgRmFsbGJhY2tNZXNzYWdlQ29tcG9uZW50LFxuICAgIEN1c3RvbU1vZGFsQ29tcG9uZW50LFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIFR1ZHVDb21wb25lbnRzQ29tcG9uZW50LFxuICAgIENhcmRMYXlvdXRDb21wb25lbnQsXG4gICAgTmF2Q29tcG9uZW50LFxuICAgIEZhbGxiYWNrTWVzc2FnZUNvbXBvbmVudCxcbiAgICBDdXN0b21Nb2RhbENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVkdUNvbXBvbmVudHNNb2R1bGUge31cbiJdfQ==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -6,6 +6,7 @@ export * from './lib/tudu-components.module'; // ← Se criou este módulo
|
|
|
6
6
|
export * from './lib/components/card-layout/card-layout.component';
|
|
7
7
|
export * from './lib/components/nav/nav.component';
|
|
8
8
|
export * from './lib/components/fallback-message/fallback-message.component';
|
|
9
|
+
export * from './lib/components/custom-modal/custom-modal.component';
|
|
9
10
|
export * from './lib/tudu-components.service';
|
|
10
11
|
// export * from './lib/card-layout.module'; // ← Ou se usou CardLayoutModule
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3R1ZHUtY29tcG9uZW50cy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQyxDQUFDLHlCQUF5QjtBQUV2RSxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyw4REFBOEQsQ0FBQztBQUM3RSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsNkVBQTZFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0dWR1LWNvbXBvbmVudHNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHVkdS1jb21wb25lbnRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90dWR1LWNvbXBvbmVudHMubW9kdWxlJzsgLy8g4oaQIFNlIGNyaW91IGVzdGUgbcOzZHVsb1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtbGF5b3V0L2NhcmQtbGF5b3V0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25hdi9uYXYuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmFsbGJhY2stbWVzc2FnZS9mYWxsYmFjay1tZXNzYWdlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N1c3RvbS1tb2RhbC9jdXN0b20tbW9kYWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R1ZHUtY29tcG9uZW50cy5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NhcmQtbGF5b3V0Lm1vZHVsZSc7IC8vIOKGkCBPdSBzZSB1c291IENhcmRMYXlvdXRNb2R1bGVcbiJdfQ==
|