@devappsnpm/vue-kit 0.1.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/LICENSE +21 -0
- package/README.md +82 -0
- package/bin/devapps-vue.js +3 -0
- package/dist/index.cjs +556 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +510 -0
- package/dist/index.js.map +1 -0
- package/dist/ui.cjs +515 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.js +485 -0
- package/dist/ui.js.map +1 -0
- package/package.json +57 -0
- package/stubs/components/component.vue.stub +17 -0
- package/stubs/module/basic/component.vue.stub +9 -0
- package/stubs/module/basic/index.ts.stub +1 -0
- package/stubs/module/crud/modal/components/DeleteModal.vue.stub +35 -0
- package/stubs/module/crud/modal/components/FormModal.vue.stub +88 -0
- package/stubs/module/crud/modal/components/List.vue.stub +60 -0
- package/stubs/module/crud/modal/index.ts.stub +4 -0
- package/stubs/module/crud/modal/router.ts.stub +11 -0
- package/stubs/module/crud/modal/services/service.ts.stub +9 -0
- package/stubs/module/crud/modal/stores/store.ts.stub +9 -0
- package/stubs/module/crud/modal/types/types.ts.stub +16 -0
- package/stubs/module/crud/modal/views/View.vue.stub +83 -0
- package/stubs/module/crud/page/components/DeleteModal.vue.stub +35 -0
- package/stubs/module/crud/page/components/Form.vue.stub +62 -0
- package/stubs/module/crud/page/components/List.vue.stub +42 -0
- package/stubs/module/crud/page/index.ts.stub +4 -0
- package/stubs/module/crud/page/pages/CreatePage.vue.stub +27 -0
- package/stubs/module/crud/page/pages/EditPage.vue.stub +34 -0
- package/stubs/module/crud/page/pages/ListPage.vue.stub +59 -0
- package/stubs/module/crud/page/pages/ShowPage.vue.stub +28 -0
- package/stubs/module/crud/page/router.ts.stub +26 -0
- package/stubs/module/crud/page/services/service.ts.stub +9 -0
- package/stubs/module/crud/page/stores/store.ts.stub +9 -0
- package/stubs/module/crud/page/types/types.ts.stub +16 -0
- package/stubs/module/dashboard/Dashboard.vue.stub +24 -0
- package/stubs/module/dashboard/index.ts.stub +1 -0
- package/stubs/module/dashboard/router.ts.stub +11 -0
- package/stubs/module/resource/List.vue.stub +19 -0
- package/stubs/module/resource/index.ts.stub +3 -0
- package/stubs/module/resource/service.ts.stub +9 -0
- package/stubs/module/resource/store.ts.stub +9 -0
- package/stubs/module/resource/types.ts.stub +10 -0
- package/stubs/pages/page.vue.stub +14 -0
- package/stubs/services/service.ts.stub +13 -0
- package/stubs/stores/store.ts.stub +19 -0
- package/stubs/types/types.ts.stub +6 -0
package/dist/ui.cjs
ADDED
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/ui.ts
|
|
21
|
+
var ui_exports = {};
|
|
22
|
+
__export(ui_exports, {
|
|
23
|
+
BaseModal: () => BaseModal_default2,
|
|
24
|
+
ConfirmDeleteModal: () => ConfirmDeleteModal_default2,
|
|
25
|
+
ToastContainer: () => ToastContainer_default2,
|
|
26
|
+
useToast: () => useToast
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(ui_exports);
|
|
29
|
+
|
|
30
|
+
// sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=script
|
|
31
|
+
var import_vue = require("vue");
|
|
32
|
+
var import_vue2 = require("vue");
|
|
33
|
+
var BaseModal_default = /* @__PURE__ */ (0, import_vue.defineComponent)({
|
|
34
|
+
__name: "BaseModal",
|
|
35
|
+
props: {
|
|
36
|
+
open: { type: Boolean, required: true },
|
|
37
|
+
size: { type: String, required: false },
|
|
38
|
+
closeOnBackdrop: { type: Boolean, required: false },
|
|
39
|
+
closeOnEsc: { type: Boolean, required: false },
|
|
40
|
+
closable: { type: Boolean, required: false },
|
|
41
|
+
loading: { type: Boolean, required: false }
|
|
42
|
+
},
|
|
43
|
+
emits: ["close"],
|
|
44
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
45
|
+
__expose();
|
|
46
|
+
const props = __props;
|
|
47
|
+
const emit = __emit;
|
|
48
|
+
const isVisible = (0, import_vue2.ref)(props.open);
|
|
49
|
+
(0, import_vue2.watch)(() => props.open, (newVal) => {
|
|
50
|
+
isVisible.value = newVal;
|
|
51
|
+
if (newVal) {
|
|
52
|
+
document.body.style.overflow = "hidden";
|
|
53
|
+
} else {
|
|
54
|
+
document.body.style.overflow = "";
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
(0, import_vue2.onUnmounted)(() => {
|
|
58
|
+
document.body.style.overflow = "";
|
|
59
|
+
});
|
|
60
|
+
function handleBackdropClick() {
|
|
61
|
+
if (props.closeOnBackdrop !== false && !props.loading && props.closable !== false) {
|
|
62
|
+
emit("close");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function handleEscape(e) {
|
|
66
|
+
if (e.key === "Escape" && props.open && props.closeOnEsc !== false && !props.loading && props.closable !== false) {
|
|
67
|
+
emit("close");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (typeof window !== "undefined") {
|
|
71
|
+
window.addEventListener("keydown", handleEscape);
|
|
72
|
+
(0, import_vue2.onUnmounted)(() => window.removeEventListener("keydown", handleEscape));
|
|
73
|
+
}
|
|
74
|
+
const sizeClasses = {
|
|
75
|
+
sm: "max-w-md",
|
|
76
|
+
md: "max-w-lg",
|
|
77
|
+
lg: "max-w-2xl",
|
|
78
|
+
xl: "max-w-4xl"
|
|
79
|
+
};
|
|
80
|
+
const __returned__ = { props, emit, isVisible, handleBackdropClick, handleEscape, sizeClasses };
|
|
81
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
82
|
+
return __returned__;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=template
|
|
87
|
+
var import_vue3 = require("vue");
|
|
88
|
+
var _hoisted_1 = {
|
|
89
|
+
key: 0,
|
|
90
|
+
class: "flex items-center justify-between border-b px-6 py-4"
|
|
91
|
+
};
|
|
92
|
+
var _hoisted_2 = { class: "flex-1" };
|
|
93
|
+
var _hoisted_3 = ["disabled"];
|
|
94
|
+
var _hoisted_4 = { class: "p-6 overflow-y-auto" };
|
|
95
|
+
var _hoisted_5 = {
|
|
96
|
+
key: 1,
|
|
97
|
+
class: "border-t px-6 py-4 bg-gray-50 rounded-b-lg"
|
|
98
|
+
};
|
|
99
|
+
var _hoisted_6 = {
|
|
100
|
+
key: 2,
|
|
101
|
+
class: "absolute inset-0 bg-white/50 flex items-center justify-center rounded-lg z-10"
|
|
102
|
+
};
|
|
103
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
104
|
+
return (0, import_vue3.openBlock)(), (0, import_vue3.createBlock)(import_vue3.Teleport, { to: "body" }, [
|
|
105
|
+
(0, import_vue3.createVNode)(import_vue3.Transition, {
|
|
106
|
+
"enter-active-class": "transition duration-200 ease-out",
|
|
107
|
+
"enter-from-class": "opacity-0",
|
|
108
|
+
"enter-to-class": "opacity-100",
|
|
109
|
+
"leave-active-class": "transition duration-150 ease-in",
|
|
110
|
+
"leave-from-class": "opacity-100",
|
|
111
|
+
"leave-to-class": "opacity-0"
|
|
112
|
+
}, {
|
|
113
|
+
default: (0, import_vue3.withCtx)(() => [
|
|
114
|
+
$setup.isVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", {
|
|
115
|
+
key: 0,
|
|
116
|
+
class: "fixed inset-0 z-50 flex items-center justify-center overflow-y-auto overflow-x-hidden bg-black/50 p-4 sm:p-0",
|
|
117
|
+
onClick: $setup.handleBackdropClick
|
|
118
|
+
}, [
|
|
119
|
+
(0, import_vue3.createVNode)(import_vue3.Transition, {
|
|
120
|
+
"enter-active-class": "transition duration-200 ease-out",
|
|
121
|
+
"enter-from-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
|
|
122
|
+
"enter-to-class": "opacity-100 translate-y-0 sm:scale-100",
|
|
123
|
+
"leave-active-class": "transition duration-150 ease-in",
|
|
124
|
+
"leave-from-class": "opacity-100 translate-y-0 sm:scale-100",
|
|
125
|
+
"leave-to-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
|
126
|
+
}, {
|
|
127
|
+
default: (0, import_vue3.withCtx)(() => [
|
|
128
|
+
$setup.isVisible ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
key: 0,
|
|
132
|
+
class: (0, import_vue3.normalizeClass)(["relative w-full rounded-lg bg-white shadow-xl flex flex-col max-h-[90vh]", $setup.sizeClasses[$setup.props.size || "md"]]),
|
|
133
|
+
onClick: _cache[1] || (_cache[1] = (0, import_vue3.withModifiers)(() => {
|
|
134
|
+
}, ["stop"]))
|
|
135
|
+
},
|
|
136
|
+
[
|
|
137
|
+
(0, import_vue3.createCommentVNode)(" Header "),
|
|
138
|
+
_ctx.$slots.header || $setup.props.closable !== false ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_1, [
|
|
139
|
+
(0, import_vue3.createElementVNode)("div", _hoisted_2, [
|
|
140
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "header")
|
|
141
|
+
]),
|
|
142
|
+
$setup.props.closable !== false ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("button", {
|
|
143
|
+
key: 0,
|
|
144
|
+
type: "button",
|
|
145
|
+
class: "ml-4 text-gray-400 hover:text-gray-500 disabled:opacity-50",
|
|
146
|
+
disabled: $setup.props.loading,
|
|
147
|
+
onClick: _cache[0] || (_cache[0] = ($event) => $setup.emit("close"))
|
|
148
|
+
}, [..._cache[2] || (_cache[2] = [
|
|
149
|
+
(0, import_vue3.createElementVNode)(
|
|
150
|
+
"span",
|
|
151
|
+
{ class: "sr-only" },
|
|
152
|
+
"Close",
|
|
153
|
+
-1
|
|
154
|
+
/* CACHED */
|
|
155
|
+
),
|
|
156
|
+
(0, import_vue3.createElementVNode)(
|
|
157
|
+
"svg",
|
|
158
|
+
{
|
|
159
|
+
class: "h-6 w-6",
|
|
160
|
+
fill: "none",
|
|
161
|
+
viewBox: "0 0 24 24",
|
|
162
|
+
"stroke-width": "1.5",
|
|
163
|
+
stroke: "currentColor"
|
|
164
|
+
},
|
|
165
|
+
[
|
|
166
|
+
(0, import_vue3.createElementVNode)("path", {
|
|
167
|
+
"stroke-linecap": "round",
|
|
168
|
+
"stroke-linejoin": "round",
|
|
169
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
170
|
+
})
|
|
171
|
+
],
|
|
172
|
+
-1
|
|
173
|
+
/* CACHED */
|
|
174
|
+
)
|
|
175
|
+
])], 8, _hoisted_3)) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
176
|
+
])) : (0, import_vue3.createCommentVNode)("v-if", true),
|
|
177
|
+
(0, import_vue3.createCommentVNode)(" Body "),
|
|
178
|
+
(0, import_vue3.createElementVNode)("div", _hoisted_4, [
|
|
179
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "default")
|
|
180
|
+
]),
|
|
181
|
+
(0, import_vue3.createCommentVNode)(" Footer "),
|
|
182
|
+
_ctx.$slots.footer ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_5, [
|
|
183
|
+
(0, import_vue3.renderSlot)(_ctx.$slots, "footer")
|
|
184
|
+
])) : (0, import_vue3.createCommentVNode)("v-if", true),
|
|
185
|
+
(0, import_vue3.createCommentVNode)(" Loading Overlay "),
|
|
186
|
+
$setup.props.loading ? ((0, import_vue3.openBlock)(), (0, import_vue3.createElementBlock)("div", _hoisted_6, [..._cache[3] || (_cache[3] = [
|
|
187
|
+
(0, import_vue3.createElementVNode)(
|
|
188
|
+
"div",
|
|
189
|
+
{ class: "w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin" },
|
|
190
|
+
null,
|
|
191
|
+
-1
|
|
192
|
+
/* CACHED */
|
|
193
|
+
)
|
|
194
|
+
])])) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
195
|
+
],
|
|
196
|
+
2
|
|
197
|
+
/* CLASS */
|
|
198
|
+
)) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
199
|
+
]),
|
|
200
|
+
_: 3
|
|
201
|
+
/* FORWARDED */
|
|
202
|
+
})
|
|
203
|
+
])) : (0, import_vue3.createCommentVNode)("v-if", true)
|
|
204
|
+
]),
|
|
205
|
+
_: 3
|
|
206
|
+
/* FORWARDED */
|
|
207
|
+
})
|
|
208
|
+
]);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// src/ui/components/BaseModal.vue
|
|
212
|
+
BaseModal_default.render = render;
|
|
213
|
+
BaseModal_default.__file = "src/ui/components/BaseModal.vue";
|
|
214
|
+
var BaseModal_default2 = BaseModal_default;
|
|
215
|
+
|
|
216
|
+
// sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=script
|
|
217
|
+
var import_vue4 = require("vue");
|
|
218
|
+
var import_vue5 = require("vue");
|
|
219
|
+
var ConfirmDeleteModal_default = /* @__PURE__ */ (0, import_vue4.defineComponent)({
|
|
220
|
+
__name: "ConfirmDeleteModal",
|
|
221
|
+
props: {
|
|
222
|
+
open: { type: Boolean, required: true },
|
|
223
|
+
title: { type: String, required: false },
|
|
224
|
+
description: { type: String, required: false },
|
|
225
|
+
confirmationLabel: { type: String, required: true },
|
|
226
|
+
loading: { type: Boolean, required: false }
|
|
227
|
+
},
|
|
228
|
+
emits: ["close", "confirm"],
|
|
229
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
230
|
+
__expose();
|
|
231
|
+
const props = __props;
|
|
232
|
+
const emit = __emit;
|
|
233
|
+
const input = (0, import_vue5.ref)("");
|
|
234
|
+
(0, import_vue5.watch)(() => props.open, (isOpen) => {
|
|
235
|
+
if (isOpen) {
|
|
236
|
+
input.value = "";
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
const canConfirm = (0, import_vue5.computed)(() => {
|
|
240
|
+
return input.value === props.confirmationLabel;
|
|
241
|
+
});
|
|
242
|
+
function handleConfirm() {
|
|
243
|
+
if (canConfirm.value && !props.loading) {
|
|
244
|
+
emit("confirm");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const __returned__ = { props, emit, input, canConfirm, handleConfirm, BaseModal: BaseModal_default2 };
|
|
248
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
249
|
+
return __returned__;
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=template
|
|
254
|
+
var import_vue6 = require("vue");
|
|
255
|
+
var _hoisted_12 = { class: "text-lg font-semibold text-red-600" };
|
|
256
|
+
var _hoisted_22 = { class: "space-y-4" };
|
|
257
|
+
var _hoisted_32 = { class: "text-sm text-gray-600" };
|
|
258
|
+
var _hoisted_42 = { class: "bg-gray-50 p-3 rounded font-mono text-sm border flex items-center justify-center font-bold" };
|
|
259
|
+
var _hoisted_52 = ["disabled"];
|
|
260
|
+
var _hoisted_62 = { class: "flex justify-end gap-2" };
|
|
261
|
+
var _hoisted_7 = ["disabled"];
|
|
262
|
+
var _hoisted_8 = ["disabled"];
|
|
263
|
+
function render2(_ctx, _cache, $props, $setup, $data, $options) {
|
|
264
|
+
return (0, import_vue6.openBlock)(), (0, import_vue6.createBlock)($setup["BaseModal"], {
|
|
265
|
+
open: $props.open,
|
|
266
|
+
loading: $props.loading,
|
|
267
|
+
size: "sm",
|
|
268
|
+
onClose: _cache[2] || (_cache[2] = ($event) => $setup.emit("close"))
|
|
269
|
+
}, {
|
|
270
|
+
header: (0, import_vue6.withCtx)(() => [
|
|
271
|
+
(0, import_vue6.createElementVNode)(
|
|
272
|
+
"h2",
|
|
273
|
+
_hoisted_12,
|
|
274
|
+
(0, import_vue6.toDisplayString)($props.title || "Confirm Deletion"),
|
|
275
|
+
1
|
|
276
|
+
/* TEXT */
|
|
277
|
+
)
|
|
278
|
+
]),
|
|
279
|
+
footer: (0, import_vue6.withCtx)(() => [
|
|
280
|
+
(0, import_vue6.createElementVNode)("div", _hoisted_62, [
|
|
281
|
+
(0, import_vue6.createElementVNode)("button", {
|
|
282
|
+
type: "button",
|
|
283
|
+
class: "px-4 py-2 rounded border text-sm font-medium text-gray-700 bg-white hover:bg-gray-50",
|
|
284
|
+
disabled: $props.loading,
|
|
285
|
+
onClick: _cache[1] || (_cache[1] = ($event) => $setup.emit("close"))
|
|
286
|
+
}, " Cancel ", 8, _hoisted_7),
|
|
287
|
+
(0, import_vue6.createElementVNode)("button", {
|
|
288
|
+
type: "button",
|
|
289
|
+
class: "px-4 py-2 rounded text-sm font-medium text-white bg-red-600 hover:bg-red-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors",
|
|
290
|
+
disabled: !$setup.canConfirm || $props.loading,
|
|
291
|
+
onClick: $setup.handleConfirm
|
|
292
|
+
}, (0, import_vue6.toDisplayString)($props.loading ? "Deleting..." : "Delete"), 9, _hoisted_8)
|
|
293
|
+
])
|
|
294
|
+
]),
|
|
295
|
+
default: (0, import_vue6.withCtx)(() => [
|
|
296
|
+
(0, import_vue6.createElementVNode)("div", _hoisted_22, [
|
|
297
|
+
(0, import_vue6.createElementVNode)(
|
|
298
|
+
"p",
|
|
299
|
+
_hoisted_32,
|
|
300
|
+
(0, import_vue6.toDisplayString)($props.description || "This action cannot be undone. Please type the identifier to confirm."),
|
|
301
|
+
1
|
|
302
|
+
/* TEXT */
|
|
303
|
+
),
|
|
304
|
+
(0, import_vue6.createElementVNode)(
|
|
305
|
+
"div",
|
|
306
|
+
_hoisted_42,
|
|
307
|
+
(0, import_vue6.toDisplayString)($props.confirmationLabel),
|
|
308
|
+
1
|
|
309
|
+
/* TEXT */
|
|
310
|
+
),
|
|
311
|
+
(0, import_vue6.createElementVNode)("div", null, [
|
|
312
|
+
_cache[3] || (_cache[3] = (0, import_vue6.createElementVNode)(
|
|
313
|
+
"label",
|
|
314
|
+
{
|
|
315
|
+
for: "confirm-input",
|
|
316
|
+
class: "block text-sm font-medium text-gray-700 mb-1"
|
|
317
|
+
},
|
|
318
|
+
" Type the identifier to confirm ",
|
|
319
|
+
-1
|
|
320
|
+
/* CACHED */
|
|
321
|
+
)),
|
|
322
|
+
(0, import_vue6.withDirectives)((0, import_vue6.createElementVNode)("input", {
|
|
323
|
+
id: "confirm-input",
|
|
324
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.input = $event),
|
|
325
|
+
type: "text",
|
|
326
|
+
class: "w-full rounded border-gray-300 shadow-sm px-3 py-2 border focus:border-red-500 focus:ring-red-500 sm:text-sm",
|
|
327
|
+
disabled: $props.loading,
|
|
328
|
+
autocomplete: "off"
|
|
329
|
+
}, null, 8, _hoisted_52), [
|
|
330
|
+
[import_vue6.vModelText, $setup.input]
|
|
331
|
+
])
|
|
332
|
+
])
|
|
333
|
+
])
|
|
334
|
+
]),
|
|
335
|
+
_: 1
|
|
336
|
+
/* STABLE */
|
|
337
|
+
}, 8, ["open", "loading"]);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// src/ui/components/ConfirmDeleteModal.vue
|
|
341
|
+
ConfirmDeleteModal_default.render = render2;
|
|
342
|
+
ConfirmDeleteModal_default.__file = "src/ui/components/ConfirmDeleteModal.vue";
|
|
343
|
+
var ConfirmDeleteModal_default2 = ConfirmDeleteModal_default;
|
|
344
|
+
|
|
345
|
+
// sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=script
|
|
346
|
+
var import_vue8 = require("vue");
|
|
347
|
+
|
|
348
|
+
// src/ui/composables/useToast.ts
|
|
349
|
+
var import_vue7 = require("vue");
|
|
350
|
+
var toasts = (0, import_vue7.ref)([]);
|
|
351
|
+
var nextId = 1;
|
|
352
|
+
function useToast() {
|
|
353
|
+
function addToast(message, type = "info", duration = 3e3) {
|
|
354
|
+
const id = nextId++;
|
|
355
|
+
toasts.value.push({ id, message, type, duration });
|
|
356
|
+
if (duration > 0) {
|
|
357
|
+
setTimeout(() => {
|
|
358
|
+
removeToast(id);
|
|
359
|
+
}, duration);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
function removeToast(id) {
|
|
363
|
+
const index = toasts.value.findIndex((t) => t.id === id);
|
|
364
|
+
if (index !== -1) {
|
|
365
|
+
toasts.value.splice(index, 1);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
toasts,
|
|
370
|
+
addToast,
|
|
371
|
+
removeToast
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=script
|
|
376
|
+
var ToastContainer_default = /* @__PURE__ */ (0, import_vue8.defineComponent)({
|
|
377
|
+
__name: "ToastContainer",
|
|
378
|
+
setup(__props, { expose: __expose }) {
|
|
379
|
+
__expose();
|
|
380
|
+
const { toasts: toasts2, removeToast } = useToast();
|
|
381
|
+
const iconClasses = {
|
|
382
|
+
success: "text-green-400",
|
|
383
|
+
error: "text-red-400",
|
|
384
|
+
warning: "text-yellow-400",
|
|
385
|
+
info: "text-blue-400"
|
|
386
|
+
};
|
|
387
|
+
const bgClasses = {
|
|
388
|
+
success: "bg-green-50 text-green-800 border-green-200",
|
|
389
|
+
error: "bg-red-50 text-red-800 border-red-200",
|
|
390
|
+
warning: "bg-yellow-50 text-yellow-800 border-yellow-200",
|
|
391
|
+
info: "bg-blue-50 text-blue-800 border-blue-200"
|
|
392
|
+
};
|
|
393
|
+
const icons = {
|
|
394
|
+
success: `<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>`,
|
|
395
|
+
error: `<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg>`,
|
|
396
|
+
warning: `<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /></svg>`,
|
|
397
|
+
info: `<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z" /></svg>`
|
|
398
|
+
};
|
|
399
|
+
const __returned__ = { toasts: toasts2, removeToast, iconClasses, bgClasses, icons };
|
|
400
|
+
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
401
|
+
return __returned__;
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
// sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=template
|
|
406
|
+
var import_vue9 = require("vue");
|
|
407
|
+
var _hoisted_13 = {
|
|
408
|
+
"aria-live": "assertive",
|
|
409
|
+
class: "pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-[100]"
|
|
410
|
+
};
|
|
411
|
+
var _hoisted_23 = { class: "flex w-full flex-col items-center space-y-4 sm:items-end" };
|
|
412
|
+
var _hoisted_33 = { class: "p-4" };
|
|
413
|
+
var _hoisted_43 = { class: "flex items-start" };
|
|
414
|
+
var _hoisted_53 = ["innerHTML"];
|
|
415
|
+
var _hoisted_63 = { class: "ml-3 w-0 flex-1 pt-0.5" };
|
|
416
|
+
var _hoisted_72 = { class: "text-sm font-medium" };
|
|
417
|
+
var _hoisted_82 = { class: "ml-4 flex flex-shrink-0" };
|
|
418
|
+
var _hoisted_9 = ["onClick"];
|
|
419
|
+
function render3(_ctx, _cache, $props, $setup, $data, $options) {
|
|
420
|
+
return (0, import_vue9.openBlock)(), (0, import_vue9.createElementBlock)("div", _hoisted_13, [
|
|
421
|
+
(0, import_vue9.createElementVNode)("div", _hoisted_23, [
|
|
422
|
+
(0, import_vue9.createVNode)(import_vue9.TransitionGroup, {
|
|
423
|
+
"enter-active-class": "transform ease-out duration-300 transition",
|
|
424
|
+
"enter-from-class": "translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2",
|
|
425
|
+
"enter-to-class": "translate-y-0 opacity-100 sm:translate-x-0",
|
|
426
|
+
"leave-active-class": "transition ease-in duration-100",
|
|
427
|
+
"leave-from-class": "opacity-100",
|
|
428
|
+
"leave-to-class": "opacity-0"
|
|
429
|
+
}, {
|
|
430
|
+
default: (0, import_vue9.withCtx)(() => [
|
|
431
|
+
((0, import_vue9.openBlock)(true), (0, import_vue9.createElementBlock)(
|
|
432
|
+
import_vue9.Fragment,
|
|
433
|
+
null,
|
|
434
|
+
(0, import_vue9.renderList)($setup.toasts, (toast) => {
|
|
435
|
+
return (0, import_vue9.openBlock)(), (0, import_vue9.createElementBlock)(
|
|
436
|
+
"div",
|
|
437
|
+
{
|
|
438
|
+
key: toast.id,
|
|
439
|
+
class: (0, import_vue9.normalizeClass)(["pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg border shadow-lg ring-1 ring-black ring-opacity-5", $setup.bgClasses[toast.type]])
|
|
440
|
+
},
|
|
441
|
+
[
|
|
442
|
+
(0, import_vue9.createElementVNode)("div", _hoisted_33, [
|
|
443
|
+
(0, import_vue9.createElementVNode)("div", _hoisted_43, [
|
|
444
|
+
(0, import_vue9.createElementVNode)("div", {
|
|
445
|
+
class: (0, import_vue9.normalizeClass)(["flex-shrink-0", $setup.iconClasses[toast.type]]),
|
|
446
|
+
innerHTML: $setup.icons[toast.type]
|
|
447
|
+
}, null, 10, _hoisted_53),
|
|
448
|
+
(0, import_vue9.createElementVNode)("div", _hoisted_63, [
|
|
449
|
+
(0, import_vue9.createElementVNode)(
|
|
450
|
+
"p",
|
|
451
|
+
_hoisted_72,
|
|
452
|
+
(0, import_vue9.toDisplayString)(toast.message),
|
|
453
|
+
1
|
|
454
|
+
/* TEXT */
|
|
455
|
+
)
|
|
456
|
+
]),
|
|
457
|
+
(0, import_vue9.createElementVNode)("div", _hoisted_82, [
|
|
458
|
+
(0, import_vue9.createElementVNode)("button", {
|
|
459
|
+
type: "button",
|
|
460
|
+
class: "inline-flex rounded-md bg-transparent text-gray-400 hover:text-gray-500 focus:outline-none",
|
|
461
|
+
onClick: ($event) => $setup.removeToast(toast.id)
|
|
462
|
+
}, [..._cache[0] || (_cache[0] = [
|
|
463
|
+
(0, import_vue9.createElementVNode)(
|
|
464
|
+
"span",
|
|
465
|
+
{ class: "sr-only" },
|
|
466
|
+
"Close",
|
|
467
|
+
-1
|
|
468
|
+
/* CACHED */
|
|
469
|
+
),
|
|
470
|
+
(0, import_vue9.createElementVNode)(
|
|
471
|
+
"svg",
|
|
472
|
+
{
|
|
473
|
+
class: "h-5 w-5",
|
|
474
|
+
viewBox: "0 0 20 20",
|
|
475
|
+
fill: "currentColor",
|
|
476
|
+
"aria-hidden": "true"
|
|
477
|
+
},
|
|
478
|
+
[
|
|
479
|
+
(0, import_vue9.createElementVNode)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" })
|
|
480
|
+
],
|
|
481
|
+
-1
|
|
482
|
+
/* CACHED */
|
|
483
|
+
)
|
|
484
|
+
])], 8, _hoisted_9)
|
|
485
|
+
])
|
|
486
|
+
])
|
|
487
|
+
])
|
|
488
|
+
],
|
|
489
|
+
2
|
|
490
|
+
/* CLASS */
|
|
491
|
+
);
|
|
492
|
+
}),
|
|
493
|
+
128
|
|
494
|
+
/* KEYED_FRAGMENT */
|
|
495
|
+
))
|
|
496
|
+
]),
|
|
497
|
+
_: 1
|
|
498
|
+
/* STABLE */
|
|
499
|
+
})
|
|
500
|
+
])
|
|
501
|
+
]);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// src/ui/components/ToastContainer.vue
|
|
505
|
+
ToastContainer_default.render = render3;
|
|
506
|
+
ToastContainer_default.__file = "src/ui/components/ToastContainer.vue";
|
|
507
|
+
var ToastContainer_default2 = ToastContainer_default;
|
|
508
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
509
|
+
0 && (module.exports = {
|
|
510
|
+
BaseModal,
|
|
511
|
+
ConfirmDeleteModal,
|
|
512
|
+
ToastContainer,
|
|
513
|
+
useToast
|
|
514
|
+
});
|
|
515
|
+
//# sourceMappingURL=ui.cjs.map
|
package/dist/ui.cjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui.ts","src/ui/components/BaseModal.vue","sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=template","../src/ui/components/BaseModal.vue","src/ui/components/ConfirmDeleteModal.vue","sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=template","../src/ui/components/ConfirmDeleteModal.vue","../src/ui/composables/useToast.ts","src/ui/components/ToastContainer.vue","sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=template","../src/ui/components/ToastContainer.vue"],"sourcesContent":["export { default as BaseModal } from './ui/components/BaseModal.vue'\nexport { default as ConfirmDeleteModal } from './ui/components/ConfirmDeleteModal.vue'\nexport { default as ToastContainer } from './ui/components/ToastContainer.vue'\nexport { useToast } from './ui/composables/useToast'\nexport type { Toast, ToastType } from './ui/composables/useToast'\n","<script setup lang=\"ts\">\nimport { ref, watch, onUnmounted } from 'vue'\n\nconst props = defineProps<{\n open: boolean\n size?: 'sm' | 'md' | 'lg' | 'xl'\n closeOnBackdrop?: boolean\n closeOnEsc?: boolean\n closable?: boolean\n loading?: boolean\n}>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst isVisible = ref(props.open)\n\nwatch(() => props.open, (newVal) => {\n isVisible.value = newVal\n if (newVal) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n})\n\nonUnmounted(() => {\n document.body.style.overflow = ''\n})\n\nfunction handleBackdropClick() {\n if (props.closeOnBackdrop !== false && !props.loading && props.closable !== false) {\n emit('close')\n }\n}\n\nfunction handleEscape(e: KeyboardEvent) {\n if (e.key === 'Escape' && props.open && props.closeOnEsc !== false && !props.loading && props.closable !== false) {\n emit('close')\n }\n}\n\n// Add event listener for Escape key\nif (typeof window !== 'undefined') {\n window.addEventListener('keydown', handleEscape)\n onUnmounted(() => window.removeEventListener('keydown', handleEscape))\n}\n\nconst sizeClasses = {\n sm: 'max-w-md',\n md: 'max-w-lg',\n lg: 'max-w-2xl',\n xl: 'max-w-4xl',\n}\n</script>\n\n<template>\n <Teleport to=\"body\">\n <Transition\n enter-active-class=\"transition duration-200 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition duration-150 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div v-if=\"isVisible\" class=\"fixed inset-0 z-50 flex items-center justify-center overflow-y-auto overflow-x-hidden bg-black/50 p-4 sm:p-0\" @click=\"handleBackdropClick\">\n <Transition\n enter-active-class=\"transition duration-200 ease-out\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"transition duration-150 ease-in\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-if=\"isVisible\"\n class=\"relative w-full rounded-lg bg-white shadow-xl flex flex-col max-h-[90vh]\"\n :class=\"sizeClasses[props.size || 'md']\"\n @click.stop\n >\n <!-- Header -->\n <div v-if=\"$slots.header || props.closable !== false\" class=\"flex items-center justify-between border-b px-6 py-4\">\n <div class=\"flex-1\">\n <slot name=\"header\"></slot>\n </div>\n <button\n v-if=\"props.closable !== false\"\n type=\"button\"\n class=\"ml-4 text-gray-400 hover:text-gray-500 disabled:opacity-50\"\n :disabled=\"props.loading\"\n @click=\"emit('close')\"\n >\n <span class=\"sr-only\">Close</span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"p-6 overflow-y-auto\">\n <slot></slot>\n </div>\n\n <!-- Footer -->\n <div v-if=\"$slots.footer\" class=\"border-t px-6 py-4 bg-gray-50 rounded-b-lg\">\n <slot name=\"footer\"></slot>\n </div>\n \n <!-- Loading Overlay -->\n <div v-if=\"props.loading\" class=\"absolute inset-0 bg-white/50 flex items-center justify-center rounded-lg z-10\">\n <div class=\"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\"></div>\n </div>\n </div>\n </Transition>\n </div>\n </Transition>\n </Teleport>\n</template>\n","import { createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, withModifiers as _withModifiers, normalizeClass as _normalizeClass, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"flex items-center justify-between border-b px-6 py-4\"\n}\nconst _hoisted_2 = { class: \"flex-1\" }\nconst _hoisted_3 = [\"disabled\"]\nconst _hoisted_4 = { class: \"p-6 overflow-y-auto\" }\nconst _hoisted_5 = {\n key: 1,\n class: \"border-t px-6 py-4 bg-gray-50 rounded-b-lg\"\n}\nconst _hoisted_6 = {\n key: 2,\n class: \"absolute inset-0 bg-white/50 flex items-center justify-center rounded-lg z-10\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n _createVNode(_Transition, {\n \"enter-active-class\": \"transition duration-200 ease-out\",\n \"enter-from-class\": \"opacity-0\",\n \"enter-to-class\": \"opacity-100\",\n \"leave-active-class\": \"transition duration-150 ease-in\",\n \"leave-from-class\": \"opacity-100\",\n \"leave-to-class\": \"opacity-0\"\n }, {\n default: _withCtx(() => [\n ($setup.isVisible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"fixed inset-0 z-50 flex items-center justify-center overflow-y-auto overflow-x-hidden bg-black/50 p-4 sm:p-0\",\n onClick: $setup.handleBackdropClick\n }, [\n _createVNode(_Transition, {\n \"enter-active-class\": \"transition duration-200 ease-out\",\n \"enter-from-class\": \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\",\n \"enter-to-class\": \"opacity-100 translate-y-0 sm:scale-100\",\n \"leave-active-class\": \"transition duration-150 ease-in\",\n \"leave-from-class\": \"opacity-100 translate-y-0 sm:scale-100\",\n \"leave-to-class\": \"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n }, {\n default: _withCtx(() => [\n ($setup.isVisible)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"relative w-full rounded-lg bg-white shadow-xl flex flex-col max-h-[90vh]\", $setup.sizeClasses[$setup.props.size || 'md']]),\n onClick: _cache[1] || (_cache[1] = _withModifiers(() => {}, [\"stop\"]))\n }, [\n _createCommentVNode(\" Header \"),\n (_ctx.$slots.header || $setup.props.closable !== false)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"header\")\n ]),\n ($setup.props.closable !== false)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n type: \"button\",\n class: \"ml-4 text-gray-400 hover:text-gray-500 disabled:opacity-50\",\n disabled: $setup.props.loading,\n onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n }, [...(_cache[2] || (_cache[2] = [\n _createElementVNode(\"span\", { class: \"sr-only\" }, \"Close\", -1 /* CACHED */),\n _createElementVNode(\"svg\", {\n class: \"h-6 w-6\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n \"stroke-width\": \"1.5\",\n stroke: \"currentColor\"\n }, [\n _createElementVNode(\"path\", {\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\",\n d: \"M6 18L18 6M6 6l12 12\"\n })\n ], -1 /* CACHED */)\n ]))], 8 /* PROPS */, _hoisted_3))\n : _createCommentVNode(\"v-if\", true)\n ]))\n : _createCommentVNode(\"v-if\", true),\n _createCommentVNode(\" Body \"),\n _createElementVNode(\"div\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n _createCommentVNode(\" Footer \"),\n (_ctx.$slots.footer)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"footer\")\n ]))\n : _createCommentVNode(\"v-if\", true),\n _createCommentVNode(\" Loading Overlay \"),\n ($setup.props.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [...(_cache[3] || (_cache[3] = [\n _createElementVNode(\"div\", { class: \"w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin\" }, null, -1 /* CACHED */)\n ]))]))\n : _createCommentVNode(\"v-if\", true)\n ], 2 /* CLASS */))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _: 3 /* FORWARDED */\n })\n ]))\n : _createCommentVNode(\"v-if\", true)\n ]),\n _: 3 /* FORWARDED */\n })\n ]))\n}","import script from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=script\";import { render } from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=template\"; script.render = render;script.__file = \"src/ui/components/BaseModal.vue\";export default script;","<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\nimport BaseModal from './BaseModal.vue'\n\nconst props = defineProps<{\n open: boolean\n title?: string\n description?: string\n confirmationLabel: string\n loading?: boolean\n}>()\n\nconst emit = defineEmits<{\n close: []\n confirm: []\n}>()\n\nconst input = ref('')\n\nwatch(() => props.open, (isOpen) => {\n if (isOpen) {\n input.value = ''\n }\n})\n\nconst canConfirm = computed(() => {\n return input.value === props.confirmationLabel\n})\n\nfunction handleConfirm() {\n if (canConfirm.value && !props.loading) {\n emit('confirm')\n }\n}\n</script>\n\n<template>\n <BaseModal\n :open=\"open\"\n :loading=\"loading\"\n size=\"sm\"\n @close=\"emit('close')\"\n >\n <template #header>\n <h2 class=\"text-lg font-semibold text-red-600\">\n {{ title || 'Confirm Deletion' }}\n </h2>\n </template>\n\n <div class=\"space-y-4\">\n <p class=\"text-sm text-gray-600\">\n {{ description || 'This action cannot be undone. Please type the identifier to confirm.' }}\n </p>\n\n <div class=\"bg-gray-50 p-3 rounded font-mono text-sm border flex items-center justify-center font-bold\">\n {{ confirmationLabel }}\n </div>\n\n <div>\n <label for=\"confirm-input\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Type the identifier to confirm\n </label>\n <input\n id=\"confirm-input\"\n v-model=\"input\"\n type=\"text\"\n class=\"w-full rounded border-gray-300 shadow-sm px-3 py-2 border focus:border-red-500 focus:ring-red-500 sm:text-sm\"\n :disabled=\"loading\"\n autocomplete=\"off\"\n />\n </div>\n </div>\n\n <template #footer>\n <div class=\"flex justify-end gap-2\">\n <button\n type=\"button\"\n class=\"px-4 py-2 rounded border text-sm font-medium text-gray-700 bg-white hover:bg-gray-50\"\n :disabled=\"loading\"\n @click=\"emit('close')\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"px-4 py-2 rounded text-sm font-medium text-white bg-red-600 hover:bg-red-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n :disabled=\"!canConfirm || loading\"\n @click=\"handleConfirm\"\n >\n {{ loading ? 'Deleting...' : 'Delete' }}\n </button>\n </div>\n </template>\n </BaseModal>\n</template>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-lg font-semibold text-red-600\" }\nconst _hoisted_2 = { class: \"space-y-4\" }\nconst _hoisted_3 = { class: \"text-sm text-gray-600\" }\nconst _hoisted_4 = { class: \"bg-gray-50 p-3 rounded font-mono text-sm border flex items-center justify-center font-bold\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { class: \"flex justify-end gap-2\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createBlock($setup[\"BaseModal\"], {\n open: $props.open,\n loading: $props.loading,\n size: \"sm\",\n onClose: _cache[2] || (_cache[2] = $event => ($setup.emit('close')))\n }, {\n header: _withCtx(() => [\n _createElementVNode(\"h2\", _hoisted_1, _toDisplayString($props.title || 'Confirm Deletion'), 1 /* TEXT */)\n ]),\n footer: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"button\", {\n type: \"button\",\n class: \"px-4 py-2 rounded border text-sm font-medium text-gray-700 bg-white hover:bg-gray-50\",\n disabled: $props.loading,\n onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('close')))\n }, \" Cancel \", 8 /* PROPS */, _hoisted_7),\n _createElementVNode(\"button\", {\n type: \"button\",\n class: \"px-4 py-2 rounded text-sm font-medium text-white bg-red-600 hover:bg-red-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\",\n disabled: !$setup.canConfirm || $props.loading,\n onClick: $setup.handleConfirm\n }, _toDisplayString($props.loading ? 'Deleting...' : 'Delete'), 9 /* TEXT, PROPS */, _hoisted_8)\n ])\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"p\", _hoisted_3, _toDisplayString($props.description || 'This action cannot be undone. Please type the identifier to confirm.'), 1 /* TEXT */),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString($props.confirmationLabel), 1 /* TEXT */),\n _createElementVNode(\"div\", null, [\n _cache[3] || (_cache[3] = _createElementVNode(\"label\", {\n for: \"confirm-input\",\n class: \"block text-sm font-medium text-gray-700 mb-1\"\n }, \" Type the identifier to confirm \", -1 /* CACHED */)),\n _withDirectives(_createElementVNode(\"input\", {\n id: \"confirm-input\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.input) = $event)),\n type: \"text\",\n class: \"w-full rounded border-gray-300 shadow-sm px-3 py-2 border focus:border-red-500 focus:ring-red-500 sm:text-sm\",\n disabled: $props.loading,\n autocomplete: \"off\"\n }, null, 8 /* PROPS */, _hoisted_5), [\n [_vModelText, $setup.input]\n ])\n ])\n ])\n ]),\n _: 1 /* STABLE */\n }, 8 /* PROPS */, [\"open\", \"loading\"]))\n}","import script from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=script\";import { render } from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=template\"; script.render = render;script.__file = \"src/ui/components/ConfirmDeleteModal.vue\";export default script;","import { ref } from 'vue'\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\n\nexport interface Toast {\n id: number\n message: string\n type: ToastType\n duration: number\n}\n\nconst toasts = ref<Toast[]>([])\nlet nextId = 1\n\nexport function useToast() {\n function addToast(message: string, type: ToastType = 'info', duration = 3000) {\n const id = nextId++\n toasts.value.push({ id, message, type, duration })\n\n if (duration > 0) {\n setTimeout(() => {\n removeToast(id)\n }, duration)\n }\n }\n\n function removeToast(id: number) {\n const index = toasts.value.findIndex((t) => t.id === id)\n if (index !== -1) {\n toasts.value.splice(index, 1)\n }\n }\n\n return {\n toasts,\n addToast,\n removeToast,\n }\n}\n","<script setup lang=\"ts\">\nimport { useToast } from '../composables/useToast'\n\nconst { toasts, removeToast } = useToast()\n\nconst iconClasses = {\n success: 'text-green-400',\n error: 'text-red-400',\n warning: 'text-yellow-400',\n info: 'text-blue-400',\n}\n\nconst bgClasses = {\n success: 'bg-green-50 text-green-800 border-green-200',\n error: 'bg-red-50 text-red-800 border-red-200',\n warning: 'bg-yellow-50 text-yellow-800 border-yellow-200',\n info: 'bg-blue-50 text-blue-800 border-blue-200',\n}\n\nconst icons = {\n success: `<svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" /></svg>`,\n error: `<svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" /></svg>`,\n warning: `<svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" /></svg>`,\n info: `<svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z\" /></svg>`,\n}\n</script>\n\n<template>\n <div aria-live=\"assertive\" class=\"pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-[100]\">\n <div class=\"flex w-full flex-col items-center space-y-4 sm:items-end\">\n <TransitionGroup\n enter-active-class=\"transform ease-out duration-300 transition\"\n enter-from-class=\"translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2\"\n enter-to-class=\"translate-y-0 opacity-100 sm:translate-x-0\"\n leave-active-class=\"transition ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-for=\"toast in toasts\"\n :key=\"toast.id\"\n class=\"pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg border shadow-lg ring-1 ring-black ring-opacity-5\"\n :class=\"bgClasses[toast.type]\"\n >\n <div class=\"p-4\">\n <div class=\"flex items-start\">\n <div class=\"flex-shrink-0\" :class=\"iconClasses[toast.type]\" v-html=\"icons[toast.type]\"></div>\n <div class=\"ml-3 w-0 flex-1 pt-0.5\">\n <p class=\"text-sm font-medium\">{{ toast.message }}</p>\n </div>\n <div class=\"ml-4 flex flex-shrink-0\">\n <button\n type=\"button\"\n class=\"inline-flex rounded-md bg-transparent text-gray-400 hover:text-gray-500 focus:outline-none\"\n @click=\"removeToast(toast.id)\"\n >\n <span class=\"sr-only\">Close</span>\n <svg class=\"h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n </div>\n </TransitionGroup>\n </div>\n </div>\n</template>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n \"aria-live\": \"assertive\",\n class: \"pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-[100]\"\n}\nconst _hoisted_2 = { class: \"flex w-full flex-col items-center space-y-4 sm:items-end\" }\nconst _hoisted_3 = { class: \"p-4\" }\nconst _hoisted_4 = { class: \"flex items-start\" }\nconst _hoisted_5 = [\"innerHTML\"]\nconst _hoisted_6 = { class: \"ml-3 w-0 flex-1 pt-0.5\" }\nconst _hoisted_7 = { class: \"text-sm font-medium\" }\nconst _hoisted_8 = { class: \"ml-4 flex flex-shrink-0\" }\nconst _hoisted_9 = [\"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createVNode(_TransitionGroup, {\n \"enter-active-class\": \"transform ease-out duration-300 transition\",\n \"enter-from-class\": \"translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2\",\n \"enter-to-class\": \"translate-y-0 opacity-100 sm:translate-x-0\",\n \"leave-active-class\": \"transition ease-in duration-100\",\n \"leave-from-class\": \"opacity-100\",\n \"leave-to-class\": \"opacity-0\"\n }, {\n default: _withCtx(() => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.toasts, (toast) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: toast.id,\n class: _normalizeClass([\"pointer-events-auto w-full max-w-sm overflow-hidden rounded-lg border shadow-lg ring-1 ring-black ring-opacity-5\", $setup.bgClasses[toast.type]])\n }, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"flex-shrink-0\", $setup.iconClasses[toast.type]]),\n innerHTML: $setup.icons[toast.type]\n }, null, 10 /* CLASS, PROPS */, _hoisted_5),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"p\", _hoisted_7, _toDisplayString(toast.message), 1 /* TEXT */)\n ]),\n _createElementVNode(\"div\", _hoisted_8, [\n _createElementVNode(\"button\", {\n type: \"button\",\n class: \"inline-flex rounded-md bg-transparent text-gray-400 hover:text-gray-500 focus:outline-none\",\n onClick: $event => ($setup.removeToast(toast.id))\n }, [...(_cache[0] || (_cache[0] = [\n _createElementVNode(\"span\", { class: \"sr-only\" }, \"Close\", -1 /* CACHED */),\n _createElementVNode(\"svg\", {\n class: \"h-5 w-5\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\"\n }, [\n _createElementVNode(\"path\", { d: \"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z\" })\n ], -1 /* CACHED */)\n ]))], 8 /* PROPS */, _hoisted_9)\n ])\n ])\n ])\n ], 2 /* CLASS */))\n }), 128 /* KEYED_FRAGMENT */))\n ]),\n _: 1 /* STABLE */\n })\n ])\n ]))\n}","import script from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=script\";import { render } from \"/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=template\"; script.render = render;script.__file = \"src/ui/components/ToastContainer.vue\";export default script;"],"mappings":"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","names":["BaseModal_default","ConfirmDeleteModal_default","ToastContainer_default","import_vue","import_vue","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_normalizeClass","_withModifiers","_createCommentVNode","_createElementVNode","_renderSlot","BaseModal_default","import_vue","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_openBlock","_createBlock","_withCtx","_createElementVNode","_toDisplayString","_withDirectives","_vModelText","render","ConfirmDeleteModal_default","import_vue","toasts","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","render","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_TransitionGroup","_withCtx","_Fragment","_renderList","_normalizeClass","_toDisplayString","render","ToastContainer_default"]}
|