v-sistec-features 1.31.13 → 1.32.0
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/dist/DataAgenda/VDataAgenda.vue.d.ts +915 -0
- package/dist/DataAgenda/components/AgendaMatrix.vue.d.ts +64 -0
- package/dist/DataAgenda/components/AgendaMatrixBase.vue.d.ts +31 -0
- package/dist/DataAgenda/components/AgendaMatrixUnico.vue.d.ts +72 -0
- package/dist/DataAgenda/components/AgendaTabelaHorario.vue.d.ts +32 -0
- package/dist/DataAgenda/components/AgendaVueCal.vue.d.ts +94 -0
- package/dist/DataAgenda/components/BlocoArrastavel.vue.d.ts +37 -0
- package/dist/DataAgenda/components/HeaderCalendario.vue.d.ts +7 -0
- package/dist/DataAgenda/components/HeaderTabela.vue.d.ts +7 -0
- package/dist/DataAgenda/components/ModalDetalhesReserva.vue.d.ts +38 -0
- package/dist/DataAgenda/components/ModalReserva.vue.d.ts +157 -0
- package/dist/DataAgenda/composables/useAgenda.d.ts +24 -0
- package/dist/DataAgenda/composables/useCoresAgenda.d.ts +7 -0
- package/dist/DataAgenda/composables/useGradeCompartilhada.d.ts +23 -0
- package/dist/DataAgenda/composables/useSelecaoArrasto.d.ts +24 -0
- package/dist/DataAgenda/index.d.ts +2 -0
- package/dist/DataPageVue/components/VDataPage.vue.d.ts +50 -0
- package/dist/DataPageVue/index.d.ts +2 -0
- package/dist/DataPageVue/types/v-data-page.d.ts +53 -0
- package/dist/DatatableVue/components/SearchDatatable.vue.d.ts +28 -0
- package/dist/DatatableVue/components/VColumn.vue.d.ts +82 -0
- package/dist/DatatableVue/components/VColumnManager.vue.d.ts +21 -0
- package/dist/DatatableVue/components/VDataTable.vue.d.ts +57 -0
- package/dist/DatatableVue/components/VDataTableLoading.vue.d.ts +17 -0
- package/dist/DatatableVue/components/VOrderingIcon.vue.d.ts +10 -0
- package/dist/DatatableVue/components/VThDataTable.vue.d.ts +14 -0
- package/dist/DatatableVue/composables/useCheckBox.d.ts +11 -0
- package/dist/DatatableVue/composables/useDataTableConfig.d.ts +4 -0
- package/dist/DatatableVue/composables/useDataTableFetch.d.ts +17 -0
- package/dist/DatatableVue/composables/useExpandedItem.d.ts +6 -0
- package/dist/DatatableVue/composables/useImagePreview.d.ts +9 -0
- package/dist/DatatableVue/config/datatableConfig.d.ts +4 -0
- package/dist/DatatableVue/config/datatableDefaults.d.ts +7 -0
- package/dist/DatatableVue/index.d.ts +3 -0
- package/dist/DatatableVue/keys.d.ts +39 -0
- package/dist/DatatableVue/style/svgs.d.ts +20 -0
- package/dist/DatatableVue/types/v-data-table.d.ts +161 -0
- package/dist/Modals/components/BotaoFechar.vue.d.ts +36 -0
- package/dist/Modals/components/ModalAviso.vue.d.ts +184 -0
- package/dist/Modals/components/ModalBaseDefault.vue.d.ts +244 -0
- package/dist/Modals/components/ModalConfirmacao.vue.d.ts +184 -0
- package/dist/Modals/components/ModalConfirmacaoCheckbox.vue.d.ts +195 -0
- package/dist/Modals/components/ModalConfirmacaoInput.vue.d.ts +238 -0
- package/dist/Modals/components/ModalConfirmacaoSimples.vue.d.ts +187 -0
- package/dist/Modals/components/ModalInformacao.vue.d.ts +184 -0
- package/dist/Modals/components/ModalPerigo.vue.d.ts +175 -0
- package/dist/Modals/components/ModalSucesso.vue.d.ts +175 -0
- package/dist/Modals/components/interno/ModalDialogoInterno.vue.d.ts +205 -0
- package/dist/Modals/index.d.ts +12 -0
- package/dist/Modals.js +1361 -0
- package/dist/Pagination/Pagination.vue.d.ts +19 -0
- package/dist/Pagination/index.d.ts +2 -0
- package/dist/{Pagination-f4FVE5TX.js → Pagination-D96eBRod.js} +25 -25
- package/dist/Pagination.js +1 -1
- package/dist/{ar-Bg_10XBG.js → ar-CtSPmWrk.js} +0 -5
- package/dist/{bg-DyIRbFaU.js → bg-DwW4tkzm.js} +0 -5
- package/dist/{bn-DrKXkRvN.js → bn-Df__ccyH.js} +0 -5
- package/dist/{bs-BF8upphm.js → bs-j17x02qr.js} +0 -5
- package/dist/{ca-CGMnsdII.js → ca-B94lUx7c.js} +0 -5
- package/dist/core/index.d.ts +1 -0
- package/dist/core/plugin.d.ts +11 -0
- package/dist/core.js +1 -1
- package/dist/{cs-B-jeNB5o.js → cs-DeDzN7tG.js} +0 -5
- package/dist/{da-BoHemyXx.js → da-DMpC5y8O.js} +0 -5
- package/dist/datatableConfig-E5_08Ch4.js +4 -0
- package/dist/{de-DNAaiTrc.js → de-CCNUZSup.js} +0 -5
- package/dist/{el-Cpg3pI7i.js → el-C2kkX76k.js} +0 -5
- package/dist/{en-gb-KsKdvLmV.js → en-gb-sbYhvlrM.js} +0 -5
- package/dist/{es-COziTcsp.js → es-mNgFJGue.js} +0 -5
- package/dist/{et-BdTtu9t_.js → et-D0ro6m_Z.js} +0 -5
- package/dist/{fa-B1Ebp36t.js → fa-DYekHC6-.js} +0 -5
- package/dist/{fi-b4XodxNE.js → fi-CNexLCO_.js} +0 -5
- package/dist/{fr-BIx4sO6s.js → fr-CUXtdWLj.js} +0 -5
- package/dist/{he-rf_Y5d64.js → he-D4BblsAD.js} +0 -5
- package/dist/{hr-DOuJJGF3.js → hr-1MNJjxDo.js} +0 -5
- package/dist/{hu-DMc8kv_1.js → hu-BiG8mSvH.js} +0 -5
- package/dist/{id-DclBfDY0.js → id-CABEuSQB.js} +0 -5
- package/dist/iframeCommunicator/index.d.ts +2 -0
- package/dist/iframeCommunicator/useIframeCommunicator.d.ts +8 -0
- package/dist/iframeCommunicator/useThemeFromParent.d.ts +9 -0
- package/dist/index.d.ts +3 -140
- package/dist/index.js +1 -1
- package/dist/{is-hPcr999q.js → is-DBUkoxb1.js} +0 -5
- package/dist/{it-Dfz57Ogc.js → it-Am_Oo5d5.js} +0 -5
- package/dist/{ja-Da6Dbgu8.js → ja-C4aaunra.js} +0 -5
- package/dist/{ka-DK-BKZD4.js → ka-CkzS4fNj.js} +0 -5
- package/dist/{kaa-BVd8dKz3.js → kaa-GTw11GU-.js} +0 -5
- package/dist/{kk-eE3-SI4R.js → kk-BRFq2Ctd.js} +0 -5
- package/dist/{ko-CUMtwCHy.js → ko-BbgS6BMk.js} +0 -5
- package/dist/{ky-CCU0MYbD.js → ky-ClK6HL0m.js} +0 -5
- package/dist/{lt-CpbQmiiW.js → lt-BE0ahgri.js} +0 -5
- package/dist/{mn-YYwo93uK.js → mn-C-Ktk8ht.js} +0 -5
- package/dist/{nl-WqtgByJL.js → nl-BiG9OH1y.js} +0 -5
- package/dist/{no-BOG8-aOm.js → no-DVdX7xTS.js} +0 -5
- package/dist/{pl-BH4AyCMF.js → pl-y_N8wVAF.js} +0 -5
- package/dist/plugin-BZB7f-c3.js +3444 -0
- package/dist/{pt-br-siyrXjdv.js → pt-br-Cx8Akpcu.js} +0 -5
- package/dist/{pt-pt-siyrXjdv.js → pt-pt-Cx8Akpcu.js} +0 -5
- package/dist/{ro-C9fU41Qi.js → ro-FfAZHwo1.js} +0 -5
- package/dist/{ru-_d_rl3a5.js → ru-BCE9k5uo.js} +0 -5
- package/dist/{sk-ZT421l3d.js → sk-D-7bEf3b.js} +0 -5
- package/dist/{sl-Ct8Gi5v1.js → sl-DoVrM4Ht.js} +0 -5
- package/dist/{sq-Cw7PWK-V.js → sq-Du8jVeq7.js} +0 -5
- package/dist/{sr-DO-S1wn3.js → sr-DP3yke6-.js} +0 -5
- package/dist/{sv-NXMCPui2.js → sv-C2iGWFqL.js} +0 -5
- package/dist/toast/components/ToastComponent.vue.d.ts +6 -0
- package/dist/toast/index.d.ts +1 -0
- package/dist/toast/useToastStore.d.ts +11 -0
- package/dist/toast.js +2 -2
- package/dist/{tr-BpieMIth.js → tr-CvlANdCR.js} +0 -5
- package/dist/{uk-CqVU4EoZ.js → uk-CxFb8w2s.js} +0 -5
- package/dist/utils/svgFactory.d.ts +8 -0
- package/dist/{uz-CmcB22-w.js → uz-DmJPqTjK.js} +0 -5
- package/dist/{uz-cryl-C_GBVdXl.js → uz-cryl-Dt065WNc.js} +0 -5
- package/dist/v-sistec-features.css +1 -11
- package/dist/vDataAgenda.js +1877 -1885
- package/dist/vDataPage.js +31 -41
- package/dist/vDataTable.js +43 -43
- package/dist/{vi-C9wTd3fG.js → vi-B8R5Ozvj.js} +0 -5
- package/dist/{zh-cn-DY7nkJwf.js → zh-cn-DnUuIcqx.js} +0 -5
- package/dist/{zh-hk-KkazoDdS.js → zh-hk-mDkIkhi9.js} +0 -5
- package/package.json +5 -1
- package/src/DataAgenda/VDataAgenda.vue +233 -77
- package/src/DataAgenda/components/AgendaMatrix.vue +1 -0
- package/src/DataAgenda/components/AgendaMatrixBase.vue +357 -140
- package/src/DataAgenda/components/AgendaMatrixUnico.vue +1 -0
- package/src/DataAgenda/components/AgendaTabelaHorario.vue +489 -316
- package/src/DataAgenda/components/AgendaVueCal.vue +1 -0
- package/src/DataAgenda/index.ts +2 -1
- package/src/Modals/components/BotaoFechar.vue +74 -0
- package/src/Modals/components/ModalAviso.vue +129 -0
- package/src/Modals/components/ModalBaseDefault.vue +374 -0
- package/src/Modals/components/ModalConfirmacao.vue +129 -0
- package/src/Modals/components/ModalConfirmacaoCheckbox.vue +155 -0
- package/src/Modals/components/ModalConfirmacaoInput.vue +200 -0
- package/src/Modals/components/ModalConfirmacaoSimples.vue +306 -0
- package/src/Modals/components/ModalInformacao.vue +129 -0
- package/src/Modals/components/ModalPerigo.vue +123 -0
- package/src/Modals/components/ModalSucesso.vue +123 -0
- package/src/Modals/components/interno/ModalDialogoInterno.vue +365 -0
- package/src/Modals/index.ts +32 -0
- package/src/core/plugin.ts +34 -41
- package/src/types/global.d.ts +7 -1
- package/dist/Pagination.d.ts +0 -27
- package/dist/core.d.ts +0 -117
- package/dist/datatableConfig-BMFlKtgh.js +0 -4
- package/dist/iframeCommunicator.d.ts +0 -22
- package/dist/plugin-BwqrOSD_.js +0 -2097
- package/dist/toast.d.ts +0 -19
- package/dist/vDataAgenda.d.ts +0 -929
- package/dist/vDataPage.d.ts +0 -117
- package/dist/vDataTable.d.ts +0 -294
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
========
|
|
3
|
+
Componente de modal de confirmação simples e compacto.
|
|
4
|
+
Segue o layout minimalista alinhado à esquerda sem dependência do Bootstrap, utilizando
|
|
5
|
+
BotaoFechar, controle nativo de eventos e slots para botões extras.
|
|
6
|
+
========
|
|
7
|
+
-->
|
|
8
|
+
<template>
|
|
9
|
+
<Teleport to="body">
|
|
10
|
+
<div
|
|
11
|
+
v-if="exibirModal"
|
|
12
|
+
class="modal-overlay"
|
|
13
|
+
@mousedown.self="aoClicarFora"
|
|
14
|
+
>
|
|
15
|
+
<div
|
|
16
|
+
class="modal-card"
|
|
17
|
+
:class="`modal-tamanho-${tamanho}`"
|
|
18
|
+
role="dialog"
|
|
19
|
+
aria-modal="true"
|
|
20
|
+
>
|
|
21
|
+
<div
|
|
22
|
+
v-if="corBarraTopo"
|
|
23
|
+
class="modal-status-topo"
|
|
24
|
+
:class="classeStatusTopo"
|
|
25
|
+
:style="estiloStatusTopo"
|
|
26
|
+
></div>
|
|
27
|
+
|
|
28
|
+
<BotaoFechar
|
|
29
|
+
v-if="mostrarBotaoFechar"
|
|
30
|
+
flutuante
|
|
31
|
+
:desabilitado="carregando"
|
|
32
|
+
@click="cancelarAcao"
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
<div class="modal-body" :class="{ 'pe-5': mostrarBotaoFechar }">
|
|
36
|
+
<div class="modal-titulo-simples">
|
|
37
|
+
<slot name="titulo">{{ titulo }}</slot>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="modal-descricao-simples mt-1">
|
|
40
|
+
<slot>{{ descricao }}</slot>
|
|
41
|
+
</div>
|
|
42
|
+
<div v-if="slots.conteudo" class="mt-3">
|
|
43
|
+
<slot name="conteudo"></slot>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="modal-footer">
|
|
48
|
+
<slot name="footer" :cancelar="cancelarAcao" :confirmar="confirmarAcao">
|
|
49
|
+
<button
|
|
50
|
+
v-if="mostrarBotaoCancelar"
|
|
51
|
+
type="button"
|
|
52
|
+
class="btn btn-link link-secondary me-auto text-nowrap px-2"
|
|
53
|
+
:disabled="carregando"
|
|
54
|
+
@click="cancelarAcao"
|
|
55
|
+
>
|
|
56
|
+
{{ textoCancelar }}
|
|
57
|
+
</button>
|
|
58
|
+
|
|
59
|
+
<div class="d-flex gap-2 align-items-center flex-wrap ms-auto">
|
|
60
|
+
<slot name="botoes-extras" :cancelar="cancelarAcao" :confirmar="confirmarAcao"></slot>
|
|
61
|
+
|
|
62
|
+
<button
|
|
63
|
+
type="button"
|
|
64
|
+
class="btn text-nowrap"
|
|
65
|
+
:class="classeBotaoConfirmar"
|
|
66
|
+
:style="estiloBotaoConfirmar"
|
|
67
|
+
:disabled="desabilitarConfirmar || carregando"
|
|
68
|
+
@click="confirmarAcao"
|
|
69
|
+
>
|
|
70
|
+
<span
|
|
71
|
+
v-if="carregando"
|
|
72
|
+
class="spinner-border spinner-border-sm me-2"
|
|
73
|
+
role="status"
|
|
74
|
+
></span>
|
|
75
|
+
{{ textoConfirmar }}
|
|
76
|
+
</button>
|
|
77
|
+
</div>
|
|
78
|
+
</slot>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</Teleport>
|
|
83
|
+
</template>
|
|
84
|
+
|
|
85
|
+
<script setup lang="ts">
|
|
86
|
+
import { computed, useSlots, watch, onUnmounted, type Slots } from "vue";
|
|
87
|
+
import BotaoFechar from "./BotaoFechar.vue";
|
|
88
|
+
// Tipagem explícita dos slots do modal simples
|
|
89
|
+
defineSlots<{
|
|
90
|
+
default?: (props: {}) => any;
|
|
91
|
+
titulo?: (props: {}) => any;
|
|
92
|
+
conteudo?: (props: {}) => any;
|
|
93
|
+
"botoes-extras"?: (props: { cancelar: () => void; confirmar: () => void }) => any;
|
|
94
|
+
footer?: (props: { cancelar: () => void; confirmar: () => void }) => any;
|
|
95
|
+
}>();
|
|
96
|
+
|
|
97
|
+
// Instância de slots para checagem no template
|
|
98
|
+
const slots: Slots = useSlots();
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
// Propriedades de configuração do modal simples compacto
|
|
102
|
+
const props = defineProps({
|
|
103
|
+
modelValue: { type: Boolean, default: false },
|
|
104
|
+
tamanho: { type: String as () => "sm" | "md" | "lg", default: "sm" },
|
|
105
|
+
titulo: { type: String, default: "Você tem certeza?" },
|
|
106
|
+
descricao: { type: String, default: "Se você prosseguir, perderá todos os seus dados." },
|
|
107
|
+
textoCancelar: { type: String, default: "Cancelar" },
|
|
108
|
+
textoConfirmar: { type: String, default: "Sim, deletar" },
|
|
109
|
+
corBotaoConfirmar: {
|
|
110
|
+
type: String as () => "danger" | "primary" | "success" | "warning" | "brand",
|
|
111
|
+
default: "danger"
|
|
112
|
+
},
|
|
113
|
+
corBarraTopo: {
|
|
114
|
+
type: String as () => "brand" | "danger" | "success" | "warning" | "info" | "",
|
|
115
|
+
default: ""
|
|
116
|
+
},
|
|
117
|
+
mostrarBotaoCancelar: { type: Boolean, default: true },
|
|
118
|
+
mostrarBotaoFechar: { type: Boolean, default: false },
|
|
119
|
+
fecharAoClicarFora: { type: Boolean, default: true },
|
|
120
|
+
fecharComEsc: { type: Boolean, default: true },
|
|
121
|
+
fecharAoConfirmar: { type: Boolean, default: false },
|
|
122
|
+
desabilitarConfirmar: { type: Boolean, default: false },
|
|
123
|
+
carregando: { type: Boolean, default: false }
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Eventos emitidos pelo modal
|
|
127
|
+
const emit = defineEmits(["update:modelValue", "confirmar", "cancelar", "fechar"]);
|
|
128
|
+
|
|
129
|
+
// Sincroniza a visibilidade com o v-model
|
|
130
|
+
const exibirModal = computed({
|
|
131
|
+
get: () => props.modelValue,
|
|
132
|
+
set: (valor: boolean) => emit("update:modelValue", valor)
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Controle de bloqueio de clique fora
|
|
136
|
+
const bloquearCliqueFora = computed(() => !props.fecharAoClicarFora || props.carregando);
|
|
137
|
+
|
|
138
|
+
// Controle de bloqueio da tecla ESC
|
|
139
|
+
const bloquearEsc = computed(() => !props.fecharComEsc || props.carregando);
|
|
140
|
+
|
|
141
|
+
// Classe CSS da barra de topo opcional
|
|
142
|
+
const classeStatusTopo = computed(() => {
|
|
143
|
+
if (!props.corBarraTopo || props.corBarraTopo === "brand") return "";
|
|
144
|
+
return `bg-${props.corBarraTopo}`;
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Estilo inline para barra de topo com var(--color-brand)
|
|
148
|
+
const estiloStatusTopo = computed(() => {
|
|
149
|
+
if (props.corBarraTopo === "brand") {
|
|
150
|
+
return { backgroundColor: "var(--color-brand, var(--tblr-primary, #206bc4))" };
|
|
151
|
+
}
|
|
152
|
+
return {};
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Classe CSS do botão de confirmação
|
|
156
|
+
const classeBotaoConfirmar = computed(() => {
|
|
157
|
+
if (props.corBotaoConfirmar === "brand") return "btn-brand-custom text-white";
|
|
158
|
+
return `btn-${props.corBotaoConfirmar}`;
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// Estilo inline do botão de confirmação quando configurado como brand
|
|
162
|
+
const estiloBotaoConfirmar = computed(() => {
|
|
163
|
+
if (props.corBotaoConfirmar === "brand") {
|
|
164
|
+
return {
|
|
165
|
+
backgroundColor: "var(--color-brand, var(--tblr-primary, #206bc4))",
|
|
166
|
+
borderColor: "var(--color-brand, var(--tblr-primary, #206bc4))"
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {};
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Recebe o evento de teclado, não devolve valor e fecha o modal ao pressionar ESC
|
|
173
|
+
function aoPressionarTecla(evento: KeyboardEvent) {
|
|
174
|
+
if (evento.key === "Escape" && exibirModal.value && !bloquearEsc.value) {
|
|
175
|
+
cancelarAcao();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Registra e limpa o listener da tecla ESC conforme abertura do modal
|
|
180
|
+
watch(
|
|
181
|
+
exibirModal,
|
|
182
|
+
(aberto) => {
|
|
183
|
+
if (typeof window === "undefined") return;
|
|
184
|
+
if (aberto) {
|
|
185
|
+
window.addEventListener("keydown", aoPressionarTecla);
|
|
186
|
+
} else {
|
|
187
|
+
window.removeEventListener("keydown", aoPressionarTecla);
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{ immediate: true }
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
onUnmounted(() => {
|
|
194
|
+
if (typeof window !== "undefined") {
|
|
195
|
+
window.removeEventListener("keydown", aoPressionarTecla);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
// Não recebe parâmetros, não devolve valor e fecha o modal ao clicar no fundo escuro
|
|
200
|
+
function aoClicarFora() {
|
|
201
|
+
if (bloquearCliqueFora.value) return;
|
|
202
|
+
cancelarAcao();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Não recebe parâmetros, não devolve valor e fecha o modal emitindo os eventos de cancelamento
|
|
206
|
+
function cancelarAcao() {
|
|
207
|
+
if (props.carregando) return;
|
|
208
|
+
exibirModal.value = false;
|
|
209
|
+
emit("cancelar");
|
|
210
|
+
emit("fechar");
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Não recebe parâmetros, não devolve valor e emite o evento de confirmação para o componente pai
|
|
214
|
+
function confirmarAcao() {
|
|
215
|
+
if (props.desabilitarConfirmar || props.carregando) return;
|
|
216
|
+
emit("confirmar");
|
|
217
|
+
if (props.fecharAoConfirmar) {
|
|
218
|
+
exibirModal.value = false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
</script>
|
|
222
|
+
|
|
223
|
+
<style scoped>
|
|
224
|
+
.modal-overlay {
|
|
225
|
+
position: fixed;
|
|
226
|
+
top: 0;
|
|
227
|
+
left: 0;
|
|
228
|
+
width: 100vw;
|
|
229
|
+
height: 100vh;
|
|
230
|
+
padding: 16px;
|
|
231
|
+
box-sizing: border-box;
|
|
232
|
+
background: rgba(0, 0, 0, 0.4);
|
|
233
|
+
display: flex;
|
|
234
|
+
align-items: center;
|
|
235
|
+
justify-content: center;
|
|
236
|
+
z-index: 1050;
|
|
237
|
+
backdrop-filter: blur(2px);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.modal-card {
|
|
241
|
+
background: var(--bg-modal, var(--bg-primary, var(--tblr-bg-surface, #ffffff)));
|
|
242
|
+
color: var(--text-primary, var(--tblr-body-color, #1e293b));
|
|
243
|
+
width: 100%;
|
|
244
|
+
max-height: calc(100vh - 32px);
|
|
245
|
+
border-radius: 12px;
|
|
246
|
+
box-shadow: var(--shadow-float, 0 10px 25px rgba(0, 0, 0, 0.15));
|
|
247
|
+
border: 1px solid var(--border-light, var(--tblr-border-color, rgba(0, 0, 0, 0.08)));
|
|
248
|
+
display: flex;
|
|
249
|
+
flex-direction: column;
|
|
250
|
+
overflow: hidden;
|
|
251
|
+
position: relative;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.modal-tamanho-sm {
|
|
255
|
+
max-width: 400px;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.modal-tamanho-md {
|
|
259
|
+
max-width: 540px;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
.modal-tamanho-lg {
|
|
263
|
+
max-width: 720px;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.modal-status-topo {
|
|
267
|
+
height: 4px;
|
|
268
|
+
width: 100%;
|
|
269
|
+
flex-shrink: 0;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
.modal-body {
|
|
273
|
+
padding: 20px;
|
|
274
|
+
background: var(--bg-primary, var(--tblr-bg-surface, #ffffff));
|
|
275
|
+
flex: 1 1 auto;
|
|
276
|
+
min-height: 0;
|
|
277
|
+
overflow-y: auto;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.modal-titulo-simples {
|
|
281
|
+
font-size: 16px;
|
|
282
|
+
font-weight: 600;
|
|
283
|
+
color: var(--text-primary, var(--tblr-body-color, #1e293b));
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.modal-descricao-simples {
|
|
287
|
+
font-size: 14px;
|
|
288
|
+
color: var(--text-secondary, var(--tblr-secondary, #64748b));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.modal-footer {
|
|
292
|
+
display: flex;
|
|
293
|
+
justify-content: space-between;
|
|
294
|
+
align-items: center;
|
|
295
|
+
flex-wrap: wrap;
|
|
296
|
+
gap: 8px;
|
|
297
|
+
padding: 14px 20px;
|
|
298
|
+
border-top: 1px solid var(--border-light, var(--tblr-border-color, #e6e7e9));
|
|
299
|
+
background: var(--bg-secondary, var(--tblr-bg-surface-secondary, #f8fafc));
|
|
300
|
+
flex-shrink: 0;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.btn-brand-custom:hover:not(:disabled) {
|
|
304
|
+
filter: brightness(0.92);
|
|
305
|
+
}
|
|
306
|
+
</style>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
========
|
|
3
|
+
Modal especializado para comunicados, ajuda e informações gerais (Info).
|
|
4
|
+
Por padrão oculta o botão de cancelar e fecha automaticamente ao clicar em Entendi.
|
|
5
|
+
========
|
|
6
|
+
-->
|
|
7
|
+
<template>
|
|
8
|
+
<ModalDialogoInterno
|
|
9
|
+
v-model="exibirModal"
|
|
10
|
+
:tamanho="tamanho"
|
|
11
|
+
:cor-topo="usarCorBrand ? 'brand' : 'info'"
|
|
12
|
+
:cor-botao-confirmar="usarCorBrand ? 'brand' : 'info'"
|
|
13
|
+
:titulo="titulo"
|
|
14
|
+
:descricao="descricao"
|
|
15
|
+
:texto-cancelar="textoCancelar"
|
|
16
|
+
:texto-confirmar="textoConfirmar"
|
|
17
|
+
:mostrar-botao-cancelar="mostrarBotaoCancelar"
|
|
18
|
+
:mostrar-botao-confirmar="mostrarBotaoConfirmar"
|
|
19
|
+
:mostrar-botao-fechar="mostrarBotaoFechar"
|
|
20
|
+
:fechar-ao-clicar-fora="fecharAoClicarFora"
|
|
21
|
+
:fechar-com-esc="fecharComEsc"
|
|
22
|
+
:fechar-ao-confirmar="fecharAoConfirmar"
|
|
23
|
+
:desabilitar-confirmar="desabilitarConfirmar"
|
|
24
|
+
:carregando="carregando"
|
|
25
|
+
@confirmar="emit('confirmar')"
|
|
26
|
+
@cancelar="emit('cancelar')"
|
|
27
|
+
@fechar="emit('fechar')"
|
|
28
|
+
>
|
|
29
|
+
<template #icone>
|
|
30
|
+
<slot name="icone">
|
|
31
|
+
<IconInfoCircle
|
|
32
|
+
class="icon mb-2 icone-destaque"
|
|
33
|
+
:class="usarCorBrand ? '' : 'text-info'"
|
|
34
|
+
:style="usarCorBrand ? { color: 'var(--color-brand, var(--tblr-primary))' } : {}"
|
|
35
|
+
stroke-width="1.5"
|
|
36
|
+
/>
|
|
37
|
+
</slot>
|
|
38
|
+
</template>
|
|
39
|
+
|
|
40
|
+
<template v-if="slots.titulo" #titulo>
|
|
41
|
+
<slot name="titulo"></slot>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<template v-if="slots.default" #default>
|
|
45
|
+
<slot></slot>
|
|
46
|
+
</template>
|
|
47
|
+
|
|
48
|
+
<template v-if="slots.conteudo" #conteudo>
|
|
49
|
+
<slot name="conteudo"></slot>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<template v-if="slots.extra" #extra>
|
|
53
|
+
<slot name="extra"></slot>
|
|
54
|
+
</template>
|
|
55
|
+
|
|
56
|
+
<template v-if="slots['botoes-esquerda']" #botoes-esquerda="escopo">
|
|
57
|
+
<slot name="botoes-esquerda" v-bind="escopo"></slot>
|
|
58
|
+
</template>
|
|
59
|
+
|
|
60
|
+
<template v-if="slots['botoes-meio']" #botoes-meio="escopo">
|
|
61
|
+
<slot name="botoes-meio" v-bind="escopo"></slot>
|
|
62
|
+
</template>
|
|
63
|
+
|
|
64
|
+
<template v-if="slots['botoes-direita']" #botoes-direita="escopo">
|
|
65
|
+
<slot name="botoes-direita" v-bind="escopo"></slot>
|
|
66
|
+
</template>
|
|
67
|
+
|
|
68
|
+
<template v-if="slots.footer" #footer="escopo">
|
|
69
|
+
<slot name="footer" v-bind="escopo"></slot>
|
|
70
|
+
</template>
|
|
71
|
+
</ModalDialogoInterno>
|
|
72
|
+
</template>
|
|
73
|
+
|
|
74
|
+
<script setup lang="ts">
|
|
75
|
+
import { computed, useSlots } from "vue";
|
|
76
|
+
import { IconInfoCircle } from "@tabler/icons-vue";
|
|
77
|
+
import ModalDialogoInterno, { type EscopoRodapeModal } from "./interno/ModalDialogoInterno.vue";
|
|
78
|
+
|
|
79
|
+
// Tipagem dos slots aceitos pelo componente
|
|
80
|
+
defineSlots<{
|
|
81
|
+
default?: (props: {}) => any;
|
|
82
|
+
icone?: (props: {}) => any;
|
|
83
|
+
titulo?: (props: {}) => any;
|
|
84
|
+
conteudo?: (props: {}) => any;
|
|
85
|
+
extra?: (props: {}) => any;
|
|
86
|
+
"botoes-esquerda"?: (props: EscopoRodapeModal) => any;
|
|
87
|
+
"botoes-meio"?: (props: EscopoRodapeModal) => any;
|
|
88
|
+
"botoes-direita"?: (props: EscopoRodapeModal) => any;
|
|
89
|
+
footer?: (props: EscopoRodapeModal) => any;
|
|
90
|
+
}>();
|
|
91
|
+
|
|
92
|
+
// Instância de slots para verificação segura no template
|
|
93
|
+
const slots = useSlots();
|
|
94
|
+
|
|
95
|
+
// Propriedades de configuração do modal informativo
|
|
96
|
+
const props = defineProps({
|
|
97
|
+
modelValue: { type: Boolean, default: false },
|
|
98
|
+
tamanho: { type: String as () => "sm" | "md" | "lg", default: "sm" },
|
|
99
|
+
usarCorBrand: { type: Boolean, default: false },
|
|
100
|
+
titulo: { type: String, default: "Informação" },
|
|
101
|
+
descricao: { type: String, default: "" },
|
|
102
|
+
textoCancelar: { type: String, default: "Fechar" },
|
|
103
|
+
textoConfirmar: { type: String, default: "Entendi" },
|
|
104
|
+
mostrarBotaoCancelar: { type: Boolean, default: false },
|
|
105
|
+
mostrarBotaoConfirmar: { type: Boolean, default: true },
|
|
106
|
+
mostrarBotaoFechar: { type: Boolean, default: true },
|
|
107
|
+
fecharAoClicarFora: { type: Boolean, default: true },
|
|
108
|
+
fecharComEsc: { type: Boolean, default: true },
|
|
109
|
+
fecharAoConfirmar: { type: Boolean, default: true },
|
|
110
|
+
desabilitarConfirmar: { type: Boolean, default: false },
|
|
111
|
+
carregando: { type: Boolean, default: false }
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Eventos emitidos para o componente pai
|
|
115
|
+
const emit = defineEmits(["update:modelValue", "confirmar", "cancelar", "fechar"]);
|
|
116
|
+
|
|
117
|
+
// Sincroniza o estado de abertura do modal
|
|
118
|
+
const exibirModal = computed({
|
|
119
|
+
get: () => props.modelValue,
|
|
120
|
+
set: (valor: boolean) => emit("update:modelValue", valor)
|
|
121
|
+
});
|
|
122
|
+
</script>
|
|
123
|
+
|
|
124
|
+
<style scoped>
|
|
125
|
+
.icone-destaque {
|
|
126
|
+
width: 3.5rem;
|
|
127
|
+
height: 3.5rem;
|
|
128
|
+
}
|
|
129
|
+
</style>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
========
|
|
3
|
+
Modal especializado para ações destrutivas ou alertas de erro (Danger).
|
|
4
|
+
Configura automaticamente o tema vermelho e o ícone de triângulo de alerta.
|
|
5
|
+
========
|
|
6
|
+
-->
|
|
7
|
+
<template>
|
|
8
|
+
<ModalDialogoInterno
|
|
9
|
+
v-model="exibirModal"
|
|
10
|
+
:tamanho="tamanho"
|
|
11
|
+
cor-topo="danger"
|
|
12
|
+
cor-botao-confirmar="danger"
|
|
13
|
+
:titulo="titulo"
|
|
14
|
+
:descricao="descricao"
|
|
15
|
+
:texto-cancelar="textoCancelar"
|
|
16
|
+
:texto-confirmar="textoConfirmar"
|
|
17
|
+
:mostrar-botao-cancelar="mostrarBotaoCancelar"
|
|
18
|
+
:mostrar-botao-confirmar="mostrarBotaoConfirmar"
|
|
19
|
+
:mostrar-botao-fechar="mostrarBotaoFechar"
|
|
20
|
+
:fechar-ao-clicar-fora="fecharAoClicarFora"
|
|
21
|
+
:fechar-com-esc="fecharComEsc"
|
|
22
|
+
:fechar-ao-confirmar="fecharAoConfirmar"
|
|
23
|
+
:desabilitar-confirmar="desabilitarConfirmar"
|
|
24
|
+
:carregando="carregando"
|
|
25
|
+
@confirmar="emit('confirmar')"
|
|
26
|
+
@cancelar="emit('cancelar')"
|
|
27
|
+
@fechar="emit('fechar')"
|
|
28
|
+
>
|
|
29
|
+
<template #icone>
|
|
30
|
+
<slot name="icone">
|
|
31
|
+
<IconAlertTriangle class="icon mb-2 text-danger icone-destaque" stroke-width="1.5" />
|
|
32
|
+
</slot>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<template v-if="slots.titulo" #titulo>
|
|
36
|
+
<slot name="titulo"></slot>
|
|
37
|
+
</template>
|
|
38
|
+
|
|
39
|
+
<template v-if="slots.default" #default>
|
|
40
|
+
<slot></slot>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<template v-if="slots.conteudo" #conteudo>
|
|
44
|
+
<slot name="conteudo"></slot>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
47
|
+
<template v-if="slots.extra" #extra>
|
|
48
|
+
<slot name="extra"></slot>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<template v-if="slots['botoes-esquerda']" #botoes-esquerda="escopo">
|
|
52
|
+
<slot name="botoes-esquerda" v-bind="escopo"></slot>
|
|
53
|
+
</template>
|
|
54
|
+
|
|
55
|
+
<template v-if="slots['botoes-meio']" #botoes-meio="escopo">
|
|
56
|
+
<slot name="botoes-meio" v-bind="escopo"></slot>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<template v-if="slots['botoes-direita']" #botoes-direita="escopo">
|
|
60
|
+
<slot name="botoes-direita" v-bind="escopo"></slot>
|
|
61
|
+
</template>
|
|
62
|
+
|
|
63
|
+
<template v-if="slots.footer" #footer="escopo">
|
|
64
|
+
<slot name="footer" v-bind="escopo"></slot>
|
|
65
|
+
</template>
|
|
66
|
+
</ModalDialogoInterno>
|
|
67
|
+
</template>
|
|
68
|
+
|
|
69
|
+
<script setup lang="ts">
|
|
70
|
+
import { computed, useSlots } from "vue";
|
|
71
|
+
import { IconAlertTriangle } from "@tabler/icons-vue";
|
|
72
|
+
import ModalDialogoInterno, { type EscopoRodapeModal } from "./interno/ModalDialogoInterno.vue";
|
|
73
|
+
|
|
74
|
+
// Tipagem dos slots aceitos pelo componente
|
|
75
|
+
defineSlots<{
|
|
76
|
+
default?: (props: {}) => any;
|
|
77
|
+
icone?: (props: {}) => any;
|
|
78
|
+
titulo?: (props: {}) => any;
|
|
79
|
+
conteudo?: (props: {}) => any;
|
|
80
|
+
extra?: (props: {}) => any;
|
|
81
|
+
"botoes-esquerda"?: (props: EscopoRodapeModal) => any;
|
|
82
|
+
"botoes-meio"?: (props: EscopoRodapeModal) => any;
|
|
83
|
+
"botoes-direita"?: (props: EscopoRodapeModal) => any;
|
|
84
|
+
footer?: (props: EscopoRodapeModal) => any;
|
|
85
|
+
}>();
|
|
86
|
+
|
|
87
|
+
// Instância de slots para verificação segura no template
|
|
88
|
+
const slots = useSlots();
|
|
89
|
+
|
|
90
|
+
// Propriedades customizáveis do modal de perigo
|
|
91
|
+
const props = defineProps({
|
|
92
|
+
modelValue: { type: Boolean, default: false },
|
|
93
|
+
tamanho: { type: String as () => "sm" | "md" | "lg", default: "sm" },
|
|
94
|
+
titulo: { type: String, default: "Você tem certeza?" },
|
|
95
|
+
descricao: { type: String, default: "Esta ação não poderá ser desfeita." },
|
|
96
|
+
textoCancelar: { type: String, default: "Cancelar" },
|
|
97
|
+
textoConfirmar: { type: String, default: "Deletar" },
|
|
98
|
+
mostrarBotaoCancelar: { type: Boolean, default: true },
|
|
99
|
+
mostrarBotaoConfirmar: { type: Boolean, default: true },
|
|
100
|
+
mostrarBotaoFechar: { type: Boolean, default: true },
|
|
101
|
+
fecharAoClicarFora: { type: Boolean, default: true },
|
|
102
|
+
fecharComEsc: { type: Boolean, default: true },
|
|
103
|
+
fecharAoConfirmar: { type: Boolean, default: false },
|
|
104
|
+
desabilitarConfirmar: { type: Boolean, default: false },
|
|
105
|
+
carregando: { type: Boolean, default: false }
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Eventos repassados ao componente pai
|
|
109
|
+
const emit = defineEmits(["update:modelValue", "confirmar", "cancelar", "fechar"]);
|
|
110
|
+
|
|
111
|
+
// Liga o estado do v-model ao componente interno
|
|
112
|
+
const exibirModal = computed({
|
|
113
|
+
get: () => props.modelValue,
|
|
114
|
+
set: (valor: boolean) => emit("update:modelValue", valor)
|
|
115
|
+
});
|
|
116
|
+
</script>
|
|
117
|
+
|
|
118
|
+
<style scoped>
|
|
119
|
+
.icone-destaque {
|
|
120
|
+
width: 3.5rem;
|
|
121
|
+
height: 3.5rem;
|
|
122
|
+
}
|
|
123
|
+
</style>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
========
|
|
3
|
+
Modal especializado para feedbacks de conclusão e sucesso (Success).
|
|
4
|
+
Configura automaticamente o tema verde e o ícone de verificação concluída.
|
|
5
|
+
========
|
|
6
|
+
-->
|
|
7
|
+
<template>
|
|
8
|
+
<ModalDialogoInterno
|
|
9
|
+
v-model="exibirModal"
|
|
10
|
+
:tamanho="tamanho"
|
|
11
|
+
cor-topo="success"
|
|
12
|
+
cor-botao-confirmar="success"
|
|
13
|
+
:titulo="titulo"
|
|
14
|
+
:descricao="descricao"
|
|
15
|
+
:texto-cancelar="textoCancelar"
|
|
16
|
+
:texto-confirmar="textoConfirmar"
|
|
17
|
+
:mostrar-botao-cancelar="mostrarBotaoCancelar"
|
|
18
|
+
:mostrar-botao-confirmar="mostrarBotaoConfirmar"
|
|
19
|
+
:mostrar-botao-fechar="mostrarBotaoFechar"
|
|
20
|
+
:fechar-ao-clicar-fora="fecharAoClicarFora"
|
|
21
|
+
:fechar-com-esc="fecharComEsc"
|
|
22
|
+
:fechar-ao-confirmar="fecharAoConfirmar"
|
|
23
|
+
:desabilitar-confirmar="desabilitarConfirmar"
|
|
24
|
+
:carregando="carregando"
|
|
25
|
+
@confirmar="emit('confirmar')"
|
|
26
|
+
@cancelar="emit('cancelar')"
|
|
27
|
+
@fechar="emit('fechar')"
|
|
28
|
+
>
|
|
29
|
+
<template #icone>
|
|
30
|
+
<slot name="icone">
|
|
31
|
+
<IconCircleCheck class="icon mb-2 text-success icone-destaque" stroke-width="1.5" />
|
|
32
|
+
</slot>
|
|
33
|
+
</template>
|
|
34
|
+
|
|
35
|
+
<template v-if="slots.titulo" #titulo>
|
|
36
|
+
<slot name="titulo"></slot>
|
|
37
|
+
</template>
|
|
38
|
+
|
|
39
|
+
<template v-if="slots.default" #default>
|
|
40
|
+
<slot></slot>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<template v-if="slots.conteudo" #conteudo>
|
|
44
|
+
<slot name="conteudo"></slot>
|
|
45
|
+
</template>
|
|
46
|
+
|
|
47
|
+
<template v-if="slots.extra" #extra>
|
|
48
|
+
<slot name="extra"></slot>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<template v-if="slots['botoes-esquerda']" #botoes-esquerda="escopo">
|
|
52
|
+
<slot name="botoes-esquerda" v-bind="escopo"></slot>
|
|
53
|
+
</template>
|
|
54
|
+
|
|
55
|
+
<template v-if="slots['botoes-meio']" #botoes-meio="escopo">
|
|
56
|
+
<slot name="botoes-meio" v-bind="escopo"></slot>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<template v-if="slots['botoes-direita']" #botoes-direita="escopo">
|
|
60
|
+
<slot name="botoes-direita" v-bind="escopo"></slot>
|
|
61
|
+
</template>
|
|
62
|
+
|
|
63
|
+
<template v-if="slots.footer" #footer="escopo">
|
|
64
|
+
<slot name="footer" v-bind="escopo"></slot>
|
|
65
|
+
</template>
|
|
66
|
+
</ModalDialogoInterno>
|
|
67
|
+
</template>
|
|
68
|
+
|
|
69
|
+
<script setup lang="ts">
|
|
70
|
+
import { computed, useSlots } from "vue";
|
|
71
|
+
import { IconCircleCheck } from "@tabler/icons-vue";
|
|
72
|
+
import ModalDialogoInterno, { type EscopoRodapeModal } from "./interno/ModalDialogoInterno.vue";
|
|
73
|
+
|
|
74
|
+
// Tipagem dos slots aceitos pelo componente
|
|
75
|
+
defineSlots<{
|
|
76
|
+
default?: (props: {}) => any;
|
|
77
|
+
icone?: (props: {}) => any;
|
|
78
|
+
titulo?: (props: {}) => any;
|
|
79
|
+
conteudo?: (props: {}) => any;
|
|
80
|
+
extra?: (props: {}) => any;
|
|
81
|
+
"botoes-esquerda"?: (props: EscopoRodapeModal) => any;
|
|
82
|
+
"botoes-meio"?: (props: EscopoRodapeModal) => any;
|
|
83
|
+
"botoes-direita"?: (props: EscopoRodapeModal) => any;
|
|
84
|
+
footer?: (props: EscopoRodapeModal) => any;
|
|
85
|
+
}>();
|
|
86
|
+
|
|
87
|
+
// Instância de slots para verificação segura no template
|
|
88
|
+
const slots = useSlots();
|
|
89
|
+
|
|
90
|
+
// Propriedades customizáveis do modal de sucesso
|
|
91
|
+
const props = defineProps({
|
|
92
|
+
modelValue: { type: Boolean, default: false },
|
|
93
|
+
tamanho: { type: String as () => "sm" | "md" | "lg", default: "sm" },
|
|
94
|
+
titulo: { type: String, default: "Operação concluída" },
|
|
95
|
+
descricao: { type: String, default: "" },
|
|
96
|
+
textoCancelar: { type: String, default: "Voltar" },
|
|
97
|
+
textoConfirmar: { type: String, default: "Continuar" },
|
|
98
|
+
mostrarBotaoCancelar: { type: Boolean, default: true },
|
|
99
|
+
mostrarBotaoConfirmar: { type: Boolean, default: true },
|
|
100
|
+
mostrarBotaoFechar: { type: Boolean, default: true },
|
|
101
|
+
fecharAoClicarFora: { type: Boolean, default: true },
|
|
102
|
+
fecharComEsc: { type: Boolean, default: true },
|
|
103
|
+
fecharAoConfirmar: { type: Boolean, default: true },
|
|
104
|
+
desabilitarConfirmar: { type: Boolean, default: false },
|
|
105
|
+
carregando: { type: Boolean, default: false }
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Eventos emitidos para o componente pai
|
|
109
|
+
const emit = defineEmits(["update:modelValue", "confirmar", "cancelar", "fechar"]);
|
|
110
|
+
|
|
111
|
+
// Sincroniza o v-model com o estado do modal
|
|
112
|
+
const exibirModal = computed({
|
|
113
|
+
get: () => props.modelValue,
|
|
114
|
+
set: (valor: boolean) => emit("update:modelValue", valor)
|
|
115
|
+
});
|
|
116
|
+
</script>
|
|
117
|
+
|
|
118
|
+
<style scoped>
|
|
119
|
+
.icone-destaque {
|
|
120
|
+
width: 3.5rem;
|
|
121
|
+
height: 3.5rem;
|
|
122
|
+
}
|
|
123
|
+
</style>
|