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.
Files changed (152) hide show
  1. package/dist/DataAgenda/VDataAgenda.vue.d.ts +915 -0
  2. package/dist/DataAgenda/components/AgendaMatrix.vue.d.ts +64 -0
  3. package/dist/DataAgenda/components/AgendaMatrixBase.vue.d.ts +31 -0
  4. package/dist/DataAgenda/components/AgendaMatrixUnico.vue.d.ts +72 -0
  5. package/dist/DataAgenda/components/AgendaTabelaHorario.vue.d.ts +32 -0
  6. package/dist/DataAgenda/components/AgendaVueCal.vue.d.ts +94 -0
  7. package/dist/DataAgenda/components/BlocoArrastavel.vue.d.ts +37 -0
  8. package/dist/DataAgenda/components/HeaderCalendario.vue.d.ts +7 -0
  9. package/dist/DataAgenda/components/HeaderTabela.vue.d.ts +7 -0
  10. package/dist/DataAgenda/components/ModalDetalhesReserva.vue.d.ts +38 -0
  11. package/dist/DataAgenda/components/ModalReserva.vue.d.ts +157 -0
  12. package/dist/DataAgenda/composables/useAgenda.d.ts +24 -0
  13. package/dist/DataAgenda/composables/useCoresAgenda.d.ts +7 -0
  14. package/dist/DataAgenda/composables/useGradeCompartilhada.d.ts +23 -0
  15. package/dist/DataAgenda/composables/useSelecaoArrasto.d.ts +24 -0
  16. package/dist/DataAgenda/index.d.ts +2 -0
  17. package/dist/DataPageVue/components/VDataPage.vue.d.ts +50 -0
  18. package/dist/DataPageVue/index.d.ts +2 -0
  19. package/dist/DataPageVue/types/v-data-page.d.ts +53 -0
  20. package/dist/DatatableVue/components/SearchDatatable.vue.d.ts +28 -0
  21. package/dist/DatatableVue/components/VColumn.vue.d.ts +82 -0
  22. package/dist/DatatableVue/components/VColumnManager.vue.d.ts +21 -0
  23. package/dist/DatatableVue/components/VDataTable.vue.d.ts +57 -0
  24. package/dist/DatatableVue/components/VDataTableLoading.vue.d.ts +17 -0
  25. package/dist/DatatableVue/components/VOrderingIcon.vue.d.ts +10 -0
  26. package/dist/DatatableVue/components/VThDataTable.vue.d.ts +14 -0
  27. package/dist/DatatableVue/composables/useCheckBox.d.ts +11 -0
  28. package/dist/DatatableVue/composables/useDataTableConfig.d.ts +4 -0
  29. package/dist/DatatableVue/composables/useDataTableFetch.d.ts +17 -0
  30. package/dist/DatatableVue/composables/useExpandedItem.d.ts +6 -0
  31. package/dist/DatatableVue/composables/useImagePreview.d.ts +9 -0
  32. package/dist/DatatableVue/config/datatableConfig.d.ts +4 -0
  33. package/dist/DatatableVue/config/datatableDefaults.d.ts +7 -0
  34. package/dist/DatatableVue/index.d.ts +3 -0
  35. package/dist/DatatableVue/keys.d.ts +39 -0
  36. package/dist/DatatableVue/style/svgs.d.ts +20 -0
  37. package/dist/DatatableVue/types/v-data-table.d.ts +161 -0
  38. package/dist/Modals/components/BotaoFechar.vue.d.ts +36 -0
  39. package/dist/Modals/components/ModalAviso.vue.d.ts +184 -0
  40. package/dist/Modals/components/ModalBaseDefault.vue.d.ts +244 -0
  41. package/dist/Modals/components/ModalConfirmacao.vue.d.ts +184 -0
  42. package/dist/Modals/components/ModalConfirmacaoCheckbox.vue.d.ts +195 -0
  43. package/dist/Modals/components/ModalConfirmacaoInput.vue.d.ts +238 -0
  44. package/dist/Modals/components/ModalConfirmacaoSimples.vue.d.ts +187 -0
  45. package/dist/Modals/components/ModalInformacao.vue.d.ts +184 -0
  46. package/dist/Modals/components/ModalPerigo.vue.d.ts +175 -0
  47. package/dist/Modals/components/ModalSucesso.vue.d.ts +175 -0
  48. package/dist/Modals/components/interno/ModalDialogoInterno.vue.d.ts +205 -0
  49. package/dist/Modals/index.d.ts +12 -0
  50. package/dist/Modals.js +1361 -0
  51. package/dist/Pagination/Pagination.vue.d.ts +19 -0
  52. package/dist/Pagination/index.d.ts +2 -0
  53. package/dist/{Pagination-f4FVE5TX.js → Pagination-D96eBRod.js} +25 -25
  54. package/dist/Pagination.js +1 -1
  55. package/dist/{ar-Bg_10XBG.js → ar-CtSPmWrk.js} +0 -5
  56. package/dist/{bg-DyIRbFaU.js → bg-DwW4tkzm.js} +0 -5
  57. package/dist/{bn-DrKXkRvN.js → bn-Df__ccyH.js} +0 -5
  58. package/dist/{bs-BF8upphm.js → bs-j17x02qr.js} +0 -5
  59. package/dist/{ca-CGMnsdII.js → ca-B94lUx7c.js} +0 -5
  60. package/dist/core/index.d.ts +1 -0
  61. package/dist/core/plugin.d.ts +11 -0
  62. package/dist/core.js +1 -1
  63. package/dist/{cs-B-jeNB5o.js → cs-DeDzN7tG.js} +0 -5
  64. package/dist/{da-BoHemyXx.js → da-DMpC5y8O.js} +0 -5
  65. package/dist/datatableConfig-E5_08Ch4.js +4 -0
  66. package/dist/{de-DNAaiTrc.js → de-CCNUZSup.js} +0 -5
  67. package/dist/{el-Cpg3pI7i.js → el-C2kkX76k.js} +0 -5
  68. package/dist/{en-gb-KsKdvLmV.js → en-gb-sbYhvlrM.js} +0 -5
  69. package/dist/{es-COziTcsp.js → es-mNgFJGue.js} +0 -5
  70. package/dist/{et-BdTtu9t_.js → et-D0ro6m_Z.js} +0 -5
  71. package/dist/{fa-B1Ebp36t.js → fa-DYekHC6-.js} +0 -5
  72. package/dist/{fi-b4XodxNE.js → fi-CNexLCO_.js} +0 -5
  73. package/dist/{fr-BIx4sO6s.js → fr-CUXtdWLj.js} +0 -5
  74. package/dist/{he-rf_Y5d64.js → he-D4BblsAD.js} +0 -5
  75. package/dist/{hr-DOuJJGF3.js → hr-1MNJjxDo.js} +0 -5
  76. package/dist/{hu-DMc8kv_1.js → hu-BiG8mSvH.js} +0 -5
  77. package/dist/{id-DclBfDY0.js → id-CABEuSQB.js} +0 -5
  78. package/dist/iframeCommunicator/index.d.ts +2 -0
  79. package/dist/iframeCommunicator/useIframeCommunicator.d.ts +8 -0
  80. package/dist/iframeCommunicator/useThemeFromParent.d.ts +9 -0
  81. package/dist/index.d.ts +3 -140
  82. package/dist/index.js +1 -1
  83. package/dist/{is-hPcr999q.js → is-DBUkoxb1.js} +0 -5
  84. package/dist/{it-Dfz57Ogc.js → it-Am_Oo5d5.js} +0 -5
  85. package/dist/{ja-Da6Dbgu8.js → ja-C4aaunra.js} +0 -5
  86. package/dist/{ka-DK-BKZD4.js → ka-CkzS4fNj.js} +0 -5
  87. package/dist/{kaa-BVd8dKz3.js → kaa-GTw11GU-.js} +0 -5
  88. package/dist/{kk-eE3-SI4R.js → kk-BRFq2Ctd.js} +0 -5
  89. package/dist/{ko-CUMtwCHy.js → ko-BbgS6BMk.js} +0 -5
  90. package/dist/{ky-CCU0MYbD.js → ky-ClK6HL0m.js} +0 -5
  91. package/dist/{lt-CpbQmiiW.js → lt-BE0ahgri.js} +0 -5
  92. package/dist/{mn-YYwo93uK.js → mn-C-Ktk8ht.js} +0 -5
  93. package/dist/{nl-WqtgByJL.js → nl-BiG9OH1y.js} +0 -5
  94. package/dist/{no-BOG8-aOm.js → no-DVdX7xTS.js} +0 -5
  95. package/dist/{pl-BH4AyCMF.js → pl-y_N8wVAF.js} +0 -5
  96. package/dist/plugin-BZB7f-c3.js +3444 -0
  97. package/dist/{pt-br-siyrXjdv.js → pt-br-Cx8Akpcu.js} +0 -5
  98. package/dist/{pt-pt-siyrXjdv.js → pt-pt-Cx8Akpcu.js} +0 -5
  99. package/dist/{ro-C9fU41Qi.js → ro-FfAZHwo1.js} +0 -5
  100. package/dist/{ru-_d_rl3a5.js → ru-BCE9k5uo.js} +0 -5
  101. package/dist/{sk-ZT421l3d.js → sk-D-7bEf3b.js} +0 -5
  102. package/dist/{sl-Ct8Gi5v1.js → sl-DoVrM4Ht.js} +0 -5
  103. package/dist/{sq-Cw7PWK-V.js → sq-Du8jVeq7.js} +0 -5
  104. package/dist/{sr-DO-S1wn3.js → sr-DP3yke6-.js} +0 -5
  105. package/dist/{sv-NXMCPui2.js → sv-C2iGWFqL.js} +0 -5
  106. package/dist/toast/components/ToastComponent.vue.d.ts +6 -0
  107. package/dist/toast/index.d.ts +1 -0
  108. package/dist/toast/useToastStore.d.ts +11 -0
  109. package/dist/toast.js +2 -2
  110. package/dist/{tr-BpieMIth.js → tr-CvlANdCR.js} +0 -5
  111. package/dist/{uk-CqVU4EoZ.js → uk-CxFb8w2s.js} +0 -5
  112. package/dist/utils/svgFactory.d.ts +8 -0
  113. package/dist/{uz-CmcB22-w.js → uz-DmJPqTjK.js} +0 -5
  114. package/dist/{uz-cryl-C_GBVdXl.js → uz-cryl-Dt065WNc.js} +0 -5
  115. package/dist/v-sistec-features.css +1 -11
  116. package/dist/vDataAgenda.js +1877 -1885
  117. package/dist/vDataPage.js +31 -41
  118. package/dist/vDataTable.js +43 -43
  119. package/dist/{vi-C9wTd3fG.js → vi-B8R5Ozvj.js} +0 -5
  120. package/dist/{zh-cn-DY7nkJwf.js → zh-cn-DnUuIcqx.js} +0 -5
  121. package/dist/{zh-hk-KkazoDdS.js → zh-hk-mDkIkhi9.js} +0 -5
  122. package/package.json +5 -1
  123. package/src/DataAgenda/VDataAgenda.vue +233 -77
  124. package/src/DataAgenda/components/AgendaMatrix.vue +1 -0
  125. package/src/DataAgenda/components/AgendaMatrixBase.vue +357 -140
  126. package/src/DataAgenda/components/AgendaMatrixUnico.vue +1 -0
  127. package/src/DataAgenda/components/AgendaTabelaHorario.vue +489 -316
  128. package/src/DataAgenda/components/AgendaVueCal.vue +1 -0
  129. package/src/DataAgenda/index.ts +2 -1
  130. package/src/Modals/components/BotaoFechar.vue +74 -0
  131. package/src/Modals/components/ModalAviso.vue +129 -0
  132. package/src/Modals/components/ModalBaseDefault.vue +374 -0
  133. package/src/Modals/components/ModalConfirmacao.vue +129 -0
  134. package/src/Modals/components/ModalConfirmacaoCheckbox.vue +155 -0
  135. package/src/Modals/components/ModalConfirmacaoInput.vue +200 -0
  136. package/src/Modals/components/ModalConfirmacaoSimples.vue +306 -0
  137. package/src/Modals/components/ModalInformacao.vue +129 -0
  138. package/src/Modals/components/ModalPerigo.vue +123 -0
  139. package/src/Modals/components/ModalSucesso.vue +123 -0
  140. package/src/Modals/components/interno/ModalDialogoInterno.vue +365 -0
  141. package/src/Modals/index.ts +32 -0
  142. package/src/core/plugin.ts +34 -41
  143. package/src/types/global.d.ts +7 -1
  144. package/dist/Pagination.d.ts +0 -27
  145. package/dist/core.d.ts +0 -117
  146. package/dist/datatableConfig-BMFlKtgh.js +0 -4
  147. package/dist/iframeCommunicator.d.ts +0 -22
  148. package/dist/plugin-BwqrOSD_.js +0 -2097
  149. package/dist/toast.d.ts +0 -19
  150. package/dist/vDataAgenda.d.ts +0 -929
  151. package/dist/vDataPage.d.ts +0 -117
  152. 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>