@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.
Files changed (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/bin/devapps-vue.js +3 -0
  4. package/dist/index.cjs +556 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.js +510 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/ui.cjs +515 -0
  9. package/dist/ui.cjs.map +1 -0
  10. package/dist/ui.js +485 -0
  11. package/dist/ui.js.map +1 -0
  12. package/package.json +57 -0
  13. package/stubs/components/component.vue.stub +17 -0
  14. package/stubs/module/basic/component.vue.stub +9 -0
  15. package/stubs/module/basic/index.ts.stub +1 -0
  16. package/stubs/module/crud/modal/components/DeleteModal.vue.stub +35 -0
  17. package/stubs/module/crud/modal/components/FormModal.vue.stub +88 -0
  18. package/stubs/module/crud/modal/components/List.vue.stub +60 -0
  19. package/stubs/module/crud/modal/index.ts.stub +4 -0
  20. package/stubs/module/crud/modal/router.ts.stub +11 -0
  21. package/stubs/module/crud/modal/services/service.ts.stub +9 -0
  22. package/stubs/module/crud/modal/stores/store.ts.stub +9 -0
  23. package/stubs/module/crud/modal/types/types.ts.stub +16 -0
  24. package/stubs/module/crud/modal/views/View.vue.stub +83 -0
  25. package/stubs/module/crud/page/components/DeleteModal.vue.stub +35 -0
  26. package/stubs/module/crud/page/components/Form.vue.stub +62 -0
  27. package/stubs/module/crud/page/components/List.vue.stub +42 -0
  28. package/stubs/module/crud/page/index.ts.stub +4 -0
  29. package/stubs/module/crud/page/pages/CreatePage.vue.stub +27 -0
  30. package/stubs/module/crud/page/pages/EditPage.vue.stub +34 -0
  31. package/stubs/module/crud/page/pages/ListPage.vue.stub +59 -0
  32. package/stubs/module/crud/page/pages/ShowPage.vue.stub +28 -0
  33. package/stubs/module/crud/page/router.ts.stub +26 -0
  34. package/stubs/module/crud/page/services/service.ts.stub +9 -0
  35. package/stubs/module/crud/page/stores/store.ts.stub +9 -0
  36. package/stubs/module/crud/page/types/types.ts.stub +16 -0
  37. package/stubs/module/dashboard/Dashboard.vue.stub +24 -0
  38. package/stubs/module/dashboard/index.ts.stub +1 -0
  39. package/stubs/module/dashboard/router.ts.stub +11 -0
  40. package/stubs/module/resource/List.vue.stub +19 -0
  41. package/stubs/module/resource/index.ts.stub +3 -0
  42. package/stubs/module/resource/service.ts.stub +9 -0
  43. package/stubs/module/resource/store.ts.stub +9 -0
  44. package/stubs/module/resource/types.ts.stub +10 -0
  45. package/stubs/pages/page.vue.stub +14 -0
  46. package/stubs/services/service.ts.stub +13 -0
  47. package/stubs/stores/store.ts.stub +19 -0
  48. package/stubs/types/types.ts.stub +6 -0
package/dist/ui.js ADDED
@@ -0,0 +1,485 @@
1
+ // sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=script
2
+ import { defineComponent as _defineComponent } from "vue";
3
+ import { ref, watch, onUnmounted } from "vue";
4
+ var BaseModal_default = /* @__PURE__ */ _defineComponent({
5
+ __name: "BaseModal",
6
+ props: {
7
+ open: { type: Boolean, required: true },
8
+ size: { type: String, required: false },
9
+ closeOnBackdrop: { type: Boolean, required: false },
10
+ closeOnEsc: { type: Boolean, required: false },
11
+ closable: { type: Boolean, required: false },
12
+ loading: { type: Boolean, required: false }
13
+ },
14
+ emits: ["close"],
15
+ setup(__props, { expose: __expose, emit: __emit }) {
16
+ __expose();
17
+ const props = __props;
18
+ const emit = __emit;
19
+ const isVisible = ref(props.open);
20
+ watch(() => props.open, (newVal) => {
21
+ isVisible.value = newVal;
22
+ if (newVal) {
23
+ document.body.style.overflow = "hidden";
24
+ } else {
25
+ document.body.style.overflow = "";
26
+ }
27
+ });
28
+ onUnmounted(() => {
29
+ document.body.style.overflow = "";
30
+ });
31
+ function handleBackdropClick() {
32
+ if (props.closeOnBackdrop !== false && !props.loading && props.closable !== false) {
33
+ emit("close");
34
+ }
35
+ }
36
+ function handleEscape(e) {
37
+ if (e.key === "Escape" && props.open && props.closeOnEsc !== false && !props.loading && props.closable !== false) {
38
+ emit("close");
39
+ }
40
+ }
41
+ if (typeof window !== "undefined") {
42
+ window.addEventListener("keydown", handleEscape);
43
+ onUnmounted(() => window.removeEventListener("keydown", handleEscape));
44
+ }
45
+ const sizeClasses = {
46
+ sm: "max-w-md",
47
+ md: "max-w-lg",
48
+ lg: "max-w-2xl",
49
+ xl: "max-w-4xl"
50
+ };
51
+ const __returned__ = { props, emit, isVisible, handleBackdropClick, handleEscape, sizeClasses };
52
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
53
+ return __returned__;
54
+ }
55
+ });
56
+
57
+ // sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/BaseModal.vue?type=template
58
+ 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";
59
+ var _hoisted_1 = {
60
+ key: 0,
61
+ class: "flex items-center justify-between border-b px-6 py-4"
62
+ };
63
+ var _hoisted_2 = { class: "flex-1" };
64
+ var _hoisted_3 = ["disabled"];
65
+ var _hoisted_4 = { class: "p-6 overflow-y-auto" };
66
+ var _hoisted_5 = {
67
+ key: 1,
68
+ class: "border-t px-6 py-4 bg-gray-50 rounded-b-lg"
69
+ };
70
+ var _hoisted_6 = {
71
+ key: 2,
72
+ class: "absolute inset-0 bg-white/50 flex items-center justify-center rounded-lg z-10"
73
+ };
74
+ function render(_ctx, _cache, $props, $setup, $data, $options) {
75
+ return _openBlock(), _createBlock(_Teleport, { to: "body" }, [
76
+ _createVNode(_Transition, {
77
+ "enter-active-class": "transition duration-200 ease-out",
78
+ "enter-from-class": "opacity-0",
79
+ "enter-to-class": "opacity-100",
80
+ "leave-active-class": "transition duration-150 ease-in",
81
+ "leave-from-class": "opacity-100",
82
+ "leave-to-class": "opacity-0"
83
+ }, {
84
+ default: _withCtx(() => [
85
+ $setup.isVisible ? (_openBlock(), _createElementBlock("div", {
86
+ key: 0,
87
+ 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",
88
+ onClick: $setup.handleBackdropClick
89
+ }, [
90
+ _createVNode(_Transition, {
91
+ "enter-active-class": "transition duration-200 ease-out",
92
+ "enter-from-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
93
+ "enter-to-class": "opacity-100 translate-y-0 sm:scale-100",
94
+ "leave-active-class": "transition duration-150 ease-in",
95
+ "leave-from-class": "opacity-100 translate-y-0 sm:scale-100",
96
+ "leave-to-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
97
+ }, {
98
+ default: _withCtx(() => [
99
+ $setup.isVisible ? (_openBlock(), _createElementBlock(
100
+ "div",
101
+ {
102
+ key: 0,
103
+ class: _normalizeClass(["relative w-full rounded-lg bg-white shadow-xl flex flex-col max-h-[90vh]", $setup.sizeClasses[$setup.props.size || "md"]]),
104
+ onClick: _cache[1] || (_cache[1] = _withModifiers(() => {
105
+ }, ["stop"]))
106
+ },
107
+ [
108
+ _createCommentVNode(" Header "),
109
+ _ctx.$slots.header || $setup.props.closable !== false ? (_openBlock(), _createElementBlock("div", _hoisted_1, [
110
+ _createElementVNode("div", _hoisted_2, [
111
+ _renderSlot(_ctx.$slots, "header")
112
+ ]),
113
+ $setup.props.closable !== false ? (_openBlock(), _createElementBlock("button", {
114
+ key: 0,
115
+ type: "button",
116
+ class: "ml-4 text-gray-400 hover:text-gray-500 disabled:opacity-50",
117
+ disabled: $setup.props.loading,
118
+ onClick: _cache[0] || (_cache[0] = ($event) => $setup.emit("close"))
119
+ }, [..._cache[2] || (_cache[2] = [
120
+ _createElementVNode(
121
+ "span",
122
+ { class: "sr-only" },
123
+ "Close",
124
+ -1
125
+ /* CACHED */
126
+ ),
127
+ _createElementVNode(
128
+ "svg",
129
+ {
130
+ class: "h-6 w-6",
131
+ fill: "none",
132
+ viewBox: "0 0 24 24",
133
+ "stroke-width": "1.5",
134
+ stroke: "currentColor"
135
+ },
136
+ [
137
+ _createElementVNode("path", {
138
+ "stroke-linecap": "round",
139
+ "stroke-linejoin": "round",
140
+ d: "M6 18L18 6M6 6l12 12"
141
+ })
142
+ ],
143
+ -1
144
+ /* CACHED */
145
+ )
146
+ ])], 8, _hoisted_3)) : _createCommentVNode("v-if", true)
147
+ ])) : _createCommentVNode("v-if", true),
148
+ _createCommentVNode(" Body "),
149
+ _createElementVNode("div", _hoisted_4, [
150
+ _renderSlot(_ctx.$slots, "default")
151
+ ]),
152
+ _createCommentVNode(" Footer "),
153
+ _ctx.$slots.footer ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
154
+ _renderSlot(_ctx.$slots, "footer")
155
+ ])) : _createCommentVNode("v-if", true),
156
+ _createCommentVNode(" Loading Overlay "),
157
+ $setup.props.loading ? (_openBlock(), _createElementBlock("div", _hoisted_6, [..._cache[3] || (_cache[3] = [
158
+ _createElementVNode(
159
+ "div",
160
+ { class: "w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin" },
161
+ null,
162
+ -1
163
+ /* CACHED */
164
+ )
165
+ ])])) : _createCommentVNode("v-if", true)
166
+ ],
167
+ 2
168
+ /* CLASS */
169
+ )) : _createCommentVNode("v-if", true)
170
+ ]),
171
+ _: 3
172
+ /* FORWARDED */
173
+ })
174
+ ])) : _createCommentVNode("v-if", true)
175
+ ]),
176
+ _: 3
177
+ /* FORWARDED */
178
+ })
179
+ ]);
180
+ }
181
+
182
+ // src/ui/components/BaseModal.vue
183
+ BaseModal_default.render = render;
184
+ BaseModal_default.__file = "src/ui/components/BaseModal.vue";
185
+ var BaseModal_default2 = BaseModal_default;
186
+
187
+ // sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=script
188
+ import { defineComponent as _defineComponent2 } from "vue";
189
+ import { ref as ref2, computed, watch as watch2 } from "vue";
190
+ var ConfirmDeleteModal_default = /* @__PURE__ */ _defineComponent2({
191
+ __name: "ConfirmDeleteModal",
192
+ props: {
193
+ open: { type: Boolean, required: true },
194
+ title: { type: String, required: false },
195
+ description: { type: String, required: false },
196
+ confirmationLabel: { type: String, required: true },
197
+ loading: { type: Boolean, required: false }
198
+ },
199
+ emits: ["close", "confirm"],
200
+ setup(__props, { expose: __expose, emit: __emit }) {
201
+ __expose();
202
+ const props = __props;
203
+ const emit = __emit;
204
+ const input = ref2("");
205
+ watch2(() => props.open, (isOpen) => {
206
+ if (isOpen) {
207
+ input.value = "";
208
+ }
209
+ });
210
+ const canConfirm = computed(() => {
211
+ return input.value === props.confirmationLabel;
212
+ });
213
+ function handleConfirm() {
214
+ if (canConfirm.value && !props.loading) {
215
+ emit("confirm");
216
+ }
217
+ }
218
+ const __returned__ = { props, emit, input, canConfirm, handleConfirm, BaseModal: BaseModal_default2 };
219
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
220
+ return __returned__;
221
+ }
222
+ });
223
+
224
+ // sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ConfirmDeleteModal.vue?type=template
225
+ import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode2, vModelText as _vModelText, withDirectives as _withDirectives, withCtx as _withCtx2, openBlock as _openBlock2, createBlock as _createBlock2 } from "vue";
226
+ var _hoisted_12 = { class: "text-lg font-semibold text-red-600" };
227
+ var _hoisted_22 = { class: "space-y-4" };
228
+ var _hoisted_32 = { class: "text-sm text-gray-600" };
229
+ var _hoisted_42 = { class: "bg-gray-50 p-3 rounded font-mono text-sm border flex items-center justify-center font-bold" };
230
+ var _hoisted_52 = ["disabled"];
231
+ var _hoisted_62 = { class: "flex justify-end gap-2" };
232
+ var _hoisted_7 = ["disabled"];
233
+ var _hoisted_8 = ["disabled"];
234
+ function render2(_ctx, _cache, $props, $setup, $data, $options) {
235
+ return _openBlock2(), _createBlock2($setup["BaseModal"], {
236
+ open: $props.open,
237
+ loading: $props.loading,
238
+ size: "sm",
239
+ onClose: _cache[2] || (_cache[2] = ($event) => $setup.emit("close"))
240
+ }, {
241
+ header: _withCtx2(() => [
242
+ _createElementVNode2(
243
+ "h2",
244
+ _hoisted_12,
245
+ _toDisplayString($props.title || "Confirm Deletion"),
246
+ 1
247
+ /* TEXT */
248
+ )
249
+ ]),
250
+ footer: _withCtx2(() => [
251
+ _createElementVNode2("div", _hoisted_62, [
252
+ _createElementVNode2("button", {
253
+ type: "button",
254
+ class: "px-4 py-2 rounded border text-sm font-medium text-gray-700 bg-white hover:bg-gray-50",
255
+ disabled: $props.loading,
256
+ onClick: _cache[1] || (_cache[1] = ($event) => $setup.emit("close"))
257
+ }, " Cancel ", 8, _hoisted_7),
258
+ _createElementVNode2("button", {
259
+ type: "button",
260
+ 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",
261
+ disabled: !$setup.canConfirm || $props.loading,
262
+ onClick: $setup.handleConfirm
263
+ }, _toDisplayString($props.loading ? "Deleting..." : "Delete"), 9, _hoisted_8)
264
+ ])
265
+ ]),
266
+ default: _withCtx2(() => [
267
+ _createElementVNode2("div", _hoisted_22, [
268
+ _createElementVNode2(
269
+ "p",
270
+ _hoisted_32,
271
+ _toDisplayString($props.description || "This action cannot be undone. Please type the identifier to confirm."),
272
+ 1
273
+ /* TEXT */
274
+ ),
275
+ _createElementVNode2(
276
+ "div",
277
+ _hoisted_42,
278
+ _toDisplayString($props.confirmationLabel),
279
+ 1
280
+ /* TEXT */
281
+ ),
282
+ _createElementVNode2("div", null, [
283
+ _cache[3] || (_cache[3] = _createElementVNode2(
284
+ "label",
285
+ {
286
+ for: "confirm-input",
287
+ class: "block text-sm font-medium text-gray-700 mb-1"
288
+ },
289
+ " Type the identifier to confirm ",
290
+ -1
291
+ /* CACHED */
292
+ )),
293
+ _withDirectives(_createElementVNode2("input", {
294
+ id: "confirm-input",
295
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.input = $event),
296
+ type: "text",
297
+ 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",
298
+ disabled: $props.loading,
299
+ autocomplete: "off"
300
+ }, null, 8, _hoisted_52), [
301
+ [_vModelText, $setup.input]
302
+ ])
303
+ ])
304
+ ])
305
+ ]),
306
+ _: 1
307
+ /* STABLE */
308
+ }, 8, ["open", "loading"]);
309
+ }
310
+
311
+ // src/ui/components/ConfirmDeleteModal.vue
312
+ ConfirmDeleteModal_default.render = render2;
313
+ ConfirmDeleteModal_default.__file = "src/ui/components/ConfirmDeleteModal.vue";
314
+ var ConfirmDeleteModal_default2 = ConfirmDeleteModal_default;
315
+
316
+ // sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=script
317
+ import { defineComponent as _defineComponent3 } from "vue";
318
+
319
+ // src/ui/composables/useToast.ts
320
+ import { ref as ref3 } from "vue";
321
+ var toasts = ref3([]);
322
+ var nextId = 1;
323
+ function useToast() {
324
+ function addToast(message, type = "info", duration = 3e3) {
325
+ const id = nextId++;
326
+ toasts.value.push({ id, message, type, duration });
327
+ if (duration > 0) {
328
+ setTimeout(() => {
329
+ removeToast(id);
330
+ }, duration);
331
+ }
332
+ }
333
+ function removeToast(id) {
334
+ const index = toasts.value.findIndex((t) => t.id === id);
335
+ if (index !== -1) {
336
+ toasts.value.splice(index, 1);
337
+ }
338
+ }
339
+ return {
340
+ toasts,
341
+ addToast,
342
+ removeToast
343
+ };
344
+ }
345
+
346
+ // sfc-script:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=script
347
+ var ToastContainer_default = /* @__PURE__ */ _defineComponent3({
348
+ __name: "ToastContainer",
349
+ setup(__props, { expose: __expose }) {
350
+ __expose();
351
+ const { toasts: toasts2, removeToast } = useToast();
352
+ const iconClasses = {
353
+ success: "text-green-400",
354
+ error: "text-red-400",
355
+ warning: "text-yellow-400",
356
+ info: "text-blue-400"
357
+ };
358
+ const bgClasses = {
359
+ success: "bg-green-50 text-green-800 border-green-200",
360
+ error: "bg-red-50 text-red-800 border-red-200",
361
+ warning: "bg-yellow-50 text-yellow-800 border-yellow-200",
362
+ info: "bg-blue-50 text-blue-800 border-blue-200"
363
+ };
364
+ const icons = {
365
+ 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>`,
366
+ 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>`,
367
+ 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>`,
368
+ 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>`
369
+ };
370
+ const __returned__ = { toasts: toasts2, removeToast, iconClasses, bgClasses, icons };
371
+ Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
372
+ return __returned__;
373
+ }
374
+ });
375
+
376
+ // sfc-template:/home/caio/Área de trabalho/DevApps/devapps-vue-kit/src/ui/components/ToastContainer.vue?type=template
377
+ import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock3, createElementBlock as _createElementBlock2, normalizeClass as _normalizeClass2, createElementVNode as _createElementVNode3, toDisplayString as _toDisplayString2, TransitionGroup as _TransitionGroup, withCtx as _withCtx3, createVNode as _createVNode2 } from "vue";
378
+ var _hoisted_13 = {
379
+ "aria-live": "assertive",
380
+ class: "pointer-events-none fixed inset-0 flex items-end px-4 py-6 sm:items-start sm:p-6 z-[100]"
381
+ };
382
+ var _hoisted_23 = { class: "flex w-full flex-col items-center space-y-4 sm:items-end" };
383
+ var _hoisted_33 = { class: "p-4" };
384
+ var _hoisted_43 = { class: "flex items-start" };
385
+ var _hoisted_53 = ["innerHTML"];
386
+ var _hoisted_63 = { class: "ml-3 w-0 flex-1 pt-0.5" };
387
+ var _hoisted_72 = { class: "text-sm font-medium" };
388
+ var _hoisted_82 = { class: "ml-4 flex flex-shrink-0" };
389
+ var _hoisted_9 = ["onClick"];
390
+ function render3(_ctx, _cache, $props, $setup, $data, $options) {
391
+ return _openBlock3(), _createElementBlock2("div", _hoisted_13, [
392
+ _createElementVNode3("div", _hoisted_23, [
393
+ _createVNode2(_TransitionGroup, {
394
+ "enter-active-class": "transform ease-out duration-300 transition",
395
+ "enter-from-class": "translate-y-2 opacity-0 sm:translate-y-0 sm:translate-x-2",
396
+ "enter-to-class": "translate-y-0 opacity-100 sm:translate-x-0",
397
+ "leave-active-class": "transition ease-in duration-100",
398
+ "leave-from-class": "opacity-100",
399
+ "leave-to-class": "opacity-0"
400
+ }, {
401
+ default: _withCtx3(() => [
402
+ (_openBlock3(true), _createElementBlock2(
403
+ _Fragment,
404
+ null,
405
+ _renderList($setup.toasts, (toast) => {
406
+ return _openBlock3(), _createElementBlock2(
407
+ "div",
408
+ {
409
+ key: toast.id,
410
+ class: _normalizeClass2(["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]])
411
+ },
412
+ [
413
+ _createElementVNode3("div", _hoisted_33, [
414
+ _createElementVNode3("div", _hoisted_43, [
415
+ _createElementVNode3("div", {
416
+ class: _normalizeClass2(["flex-shrink-0", $setup.iconClasses[toast.type]]),
417
+ innerHTML: $setup.icons[toast.type]
418
+ }, null, 10, _hoisted_53),
419
+ _createElementVNode3("div", _hoisted_63, [
420
+ _createElementVNode3(
421
+ "p",
422
+ _hoisted_72,
423
+ _toDisplayString2(toast.message),
424
+ 1
425
+ /* TEXT */
426
+ )
427
+ ]),
428
+ _createElementVNode3("div", _hoisted_82, [
429
+ _createElementVNode3("button", {
430
+ type: "button",
431
+ class: "inline-flex rounded-md bg-transparent text-gray-400 hover:text-gray-500 focus:outline-none",
432
+ onClick: ($event) => $setup.removeToast(toast.id)
433
+ }, [..._cache[0] || (_cache[0] = [
434
+ _createElementVNode3(
435
+ "span",
436
+ { class: "sr-only" },
437
+ "Close",
438
+ -1
439
+ /* CACHED */
440
+ ),
441
+ _createElementVNode3(
442
+ "svg",
443
+ {
444
+ class: "h-5 w-5",
445
+ viewBox: "0 0 20 20",
446
+ fill: "currentColor",
447
+ "aria-hidden": "true"
448
+ },
449
+ [
450
+ _createElementVNode3("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" })
451
+ ],
452
+ -1
453
+ /* CACHED */
454
+ )
455
+ ])], 8, _hoisted_9)
456
+ ])
457
+ ])
458
+ ])
459
+ ],
460
+ 2
461
+ /* CLASS */
462
+ );
463
+ }),
464
+ 128
465
+ /* KEYED_FRAGMENT */
466
+ ))
467
+ ]),
468
+ _: 1
469
+ /* STABLE */
470
+ })
471
+ ])
472
+ ]);
473
+ }
474
+
475
+ // src/ui/components/ToastContainer.vue
476
+ ToastContainer_default.render = render3;
477
+ ToastContainer_default.__file = "src/ui/components/ToastContainer.vue";
478
+ var ToastContainer_default2 = ToastContainer_default;
479
+ export {
480
+ BaseModal_default2 as BaseModal,
481
+ ConfirmDeleteModal_default2 as ConfirmDeleteModal,
482
+ ToastContainer_default2 as ToastContainer,
483
+ useToast
484
+ };
485
+ //# sourceMappingURL=ui.js.map
package/dist/ui.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["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":["<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","ref","watch","ref","watch","_createElementVNode","_withCtx","_openBlock","_createBlock","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","render","ConfirmDeleteModal_default","ref","toasts","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_withCtx","_createVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","render","render","ToastContainer_default"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@devappsnpm/vue-kit",
3
+ "version": "0.1.0",
4
+ "description": "Vue 3 toolkit for Laravel API applications",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.js"
14
+ },
15
+ "./ui": {
16
+ "types": "./dist/ui.d.ts",
17
+ "import": "./dist/ui.mjs",
18
+ "require": "./dist/ui.js"
19
+ }
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git@github.com-devapps:devappsteam/devapps-vue-kit.git"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "stubs",
28
+ "bin"
29
+ ],
30
+ "bin": {
31
+ "devapps-vue": "./bin/devapps-vue.js"
32
+ },
33
+ "scripts": {
34
+ "build": "tsup && vue-tsc --declaration --emitDeclarationOnly --outDir dist",
35
+ "dev": "tsup --watch",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "vitest",
38
+ "test:run": "vitest run"
39
+ },
40
+ "peerDependencies": {
41
+ "pinia": "^3.0.0",
42
+ "vue": "^3.5.0"
43
+ },
44
+ "dependencies": {
45
+ "axios": "^1.0.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^24.0.0",
49
+ "esbuild-plugin-vue3": "^0.5.1",
50
+ "happy-dom": "^20.14.5",
51
+ "tsup": "^8.0.0",
52
+ "tsx": "^4.0.0",
53
+ "typescript": "^5.0.0",
54
+ "vitest": "^3.0.0",
55
+ "vue-tsc": "^3.3.11"
56
+ }
57
+ }
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'vue'
3
+
4
+ const props = defineProps<{
5
+ // msg: string
6
+ }>()
7
+ </script>
8
+
9
+ <template>
10
+ <div class="{{ moduleSlug }}-component">
11
+ <!-- Component content -->
12
+ </div>
13
+ </template>
14
+
15
+ <style scoped>
16
+ /* Component styles */
17
+ </style>
@@ -0,0 +1,9 @@
1
+ <script setup lang="ts">
2
+ // {{ ModuleName }} basic component
3
+ </script>
4
+
5
+ <template>
6
+ <div class="{{ moduleSlug }}-component">
7
+ <slot />
8
+ </div>
9
+ </template>