@tb-dev/vue 4.0.6 → 4.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +224 -235
- package/package.json +8 -8
package/dist/index.js
CHANGED
|
@@ -1,303 +1,292 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { inject as inject$1,
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { isNil, unwrap } from "@tb-dev/utils";
|
|
2
|
+
import { computed, effectScope, inject as inject$1, readonly, ref, toRef, toValue } from "vue";
|
|
3
|
+
import { breakpointsTailwind, computedAsync, onKeyStroke, tryOnScopeDispose, useAsyncState, useBreakpoints as useBreakpoints$1, useElementSize as useElementSize$1, useLocalStorage, useSessionStorage, useWindowSize, watchImmediate } from "@vueuse/core";
|
|
4
|
+
import { Mutex } from "es-toolkit";
|
|
5
|
+
//#region src/utils/app.ts
|
|
7
6
|
function getCurrentApp() {
|
|
8
|
-
|
|
7
|
+
return unwrap(globalThis.__VUEUTILS__.app, "No active app");
|
|
9
8
|
}
|
|
10
9
|
function setCurrentApp(app) {
|
|
11
|
-
|
|
10
|
+
globalThis.__VUEUTILS__.app = app;
|
|
12
11
|
}
|
|
13
12
|
function tryGetCurrentApp() {
|
|
14
|
-
|
|
13
|
+
return globalThis.__VUEUTILS__.app;
|
|
15
14
|
}
|
|
16
15
|
function trySetCurrentApp(app) {
|
|
17
|
-
|
|
16
|
+
globalThis.__VUEUTILS__.app ??= app;
|
|
18
17
|
}
|
|
19
18
|
function runWithContext(fn) {
|
|
20
|
-
|
|
19
|
+
return getCurrentApp().runWithContext(fn);
|
|
21
20
|
}
|
|
22
21
|
function provide(key, value) {
|
|
23
|
-
|
|
22
|
+
getCurrentApp().provide(key, value);
|
|
24
23
|
}
|
|
25
24
|
function inject(key) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
return value;
|
|
25
|
+
const value = tryInject(key);
|
|
26
|
+
if (typeof value === "undefined") throw new TypeError("Injection failed: value not provided");
|
|
27
|
+
return value;
|
|
31
28
|
}
|
|
32
29
|
function tryInject(key) {
|
|
33
|
-
|
|
30
|
+
return runWithContext(() => inject$1(key));
|
|
34
31
|
}
|
|
35
32
|
function tryInjectOrElse(key, fn) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
33
|
+
let value = tryInject(key);
|
|
34
|
+
if (typeof value === "undefined") {
|
|
35
|
+
value = fn();
|
|
36
|
+
provide(key, value);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
//#region src/utils/error.ts
|
|
44
42
|
function getErrorHandler() {
|
|
45
|
-
|
|
43
|
+
return globalThis.__VUEUTILS__.errorHandler;
|
|
46
44
|
}
|
|
47
45
|
function setErrorHandler(fn, app = true) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
handleError(err, true);
|
|
57
|
-
};
|
|
58
|
-
}
|
|
46
|
+
globalThis.__VUEUTILS__.errorHandler = fn;
|
|
47
|
+
if (app) {
|
|
48
|
+
if (app === true) app = getCurrentApp();
|
|
49
|
+
else trySetCurrentApp(app);
|
|
50
|
+
app.config.errorHandler = (err) => {
|
|
51
|
+
handleError(err, true);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
59
54
|
}
|
|
60
55
|
function handleError(err, rethrow = true) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
} else if (rethrow) {
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
56
|
+
if (globalThis.__VUEUTILS__.errorHandler) Promise.try(globalThis.__VUEUTILS__.errorHandler, err);
|
|
57
|
+
else if (rethrow) throw err;
|
|
66
58
|
}
|
|
67
|
-
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/utils/maybe.ts
|
|
68
61
|
function maybe(value, fn) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
62
|
+
const _value = toValue(value);
|
|
63
|
+
return isNil(_value) ? null : fn(_value);
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/composables/console/index.ts
|
|
67
|
+
var console = {
|
|
68
|
+
assert,
|
|
69
|
+
debug,
|
|
70
|
+
error,
|
|
71
|
+
info,
|
|
72
|
+
log,
|
|
73
|
+
trace,
|
|
74
|
+
warn
|
|
81
75
|
};
|
|
82
76
|
function assert(cond, message) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
return watchImmediate(toRef(cond), (value) => {
|
|
78
|
+
globalThis.console.assert(value ?? false, message);
|
|
79
|
+
});
|
|
86
80
|
}
|
|
87
81
|
function debug(source) {
|
|
88
|
-
|
|
82
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.debug(value));
|
|
89
83
|
}
|
|
90
84
|
function error(source) {
|
|
91
|
-
|
|
85
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.error(value));
|
|
92
86
|
}
|
|
93
87
|
function info(source) {
|
|
94
|
-
|
|
88
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.info(value));
|
|
95
89
|
}
|
|
96
90
|
function log(source) {
|
|
97
|
-
|
|
91
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.log(value));
|
|
98
92
|
}
|
|
99
93
|
function trace(source) {
|
|
100
|
-
|
|
94
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.trace(value));
|
|
101
95
|
}
|
|
102
96
|
function warn(source) {
|
|
103
|
-
|
|
97
|
+
return watchImmediate(toRef(source), (value) => globalThis.console.warn(value));
|
|
104
98
|
}
|
|
105
|
-
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/composables/useMutex/index.ts
|
|
106
101
|
function useMutex(options) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
lock
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
|
|
102
|
+
const mutex = new Mutex();
|
|
103
|
+
const locked = ref(mutex.isLocked);
|
|
104
|
+
let onError;
|
|
105
|
+
if (typeof options?.onError === "function") onError = options.onError;
|
|
106
|
+
else if (options?.onError !== false) onError = handleError;
|
|
107
|
+
async function acquire() {
|
|
108
|
+
await mutex.acquire();
|
|
109
|
+
locked.value = mutex.isLocked;
|
|
110
|
+
}
|
|
111
|
+
function release() {
|
|
112
|
+
mutex.release();
|
|
113
|
+
locked.value = mutex.isLocked;
|
|
114
|
+
}
|
|
115
|
+
function lock(fn) {
|
|
116
|
+
const { resolve, reject, promise } = Promise.withResolvers();
|
|
117
|
+
acquire().then(() => fn()).then((value) => resolve(value)).catch(reject).finally(release);
|
|
118
|
+
if (onError) return promise.catch(onError);
|
|
119
|
+
return promise;
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
locked: readonly(locked),
|
|
123
|
+
acquire,
|
|
124
|
+
release,
|
|
125
|
+
lock
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/composables/asyncRef/index.ts
|
|
139
130
|
function asyncRef(initial, fn, options = {}) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
158
|
-
|
|
131
|
+
const value = useAsyncState(fn, initial, {
|
|
132
|
+
immediate: options.immediate ?? true,
|
|
133
|
+
onError: handleError,
|
|
134
|
+
resetOnExecute: false,
|
|
135
|
+
shallow: true,
|
|
136
|
+
throwError: false,
|
|
137
|
+
...options
|
|
138
|
+
});
|
|
139
|
+
const load = async () => {
|
|
140
|
+
await value.execute();
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
state: value.state,
|
|
144
|
+
loading: value.isLoading,
|
|
145
|
+
isReady: value.isReady,
|
|
146
|
+
load
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//#endregion
|
|
150
|
+
//#region src/composables/localRef/index.ts
|
|
159
151
|
function localRef(key, initial, options) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
152
|
+
return useLocalStorage(key, initial, {
|
|
153
|
+
deep: options?.deep ?? true,
|
|
154
|
+
initOnMounted: options?.initOnMounted ?? true,
|
|
155
|
+
listenToStorageChanges: options?.listenToStorageChanges ?? true,
|
|
156
|
+
mergeDefaults: options?.mergeDefaults ?? true,
|
|
157
|
+
onError: options?.onError ?? handleError,
|
|
158
|
+
writeDefaults: options?.writeDefaults ?? true,
|
|
159
|
+
serializer: {
|
|
160
|
+
read: JSON.parse,
|
|
161
|
+
write: JSON.stringify
|
|
162
|
+
},
|
|
163
|
+
...options
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
//#region src/composables/onKeyDown/index.ts
|
|
175
168
|
function onKeyDown(key, handler, options = {}) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (toValue(enabled) && handler) {
|
|
198
|
-
Promise.try(handler, e).catch(handleError);
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
const on = () => {
|
|
202
|
-
return onKeyStroke(key, callback, {
|
|
203
|
-
...options,
|
|
204
|
-
eventName: "keydown",
|
|
205
|
-
dedupe
|
|
206
|
-
});
|
|
207
|
-
};
|
|
208
|
-
let stop;
|
|
209
|
-
if (detached) {
|
|
210
|
-
const scope = effectScope(
|
|
211
|
-
/* detached */
|
|
212
|
-
true
|
|
213
|
-
);
|
|
214
|
-
stop = scope.run(() => on());
|
|
215
|
-
} else {
|
|
216
|
-
stop = on();
|
|
217
|
-
tryOnScopeDispose(() => stop());
|
|
218
|
-
}
|
|
219
|
-
return stop;
|
|
169
|
+
const { altKey = false, ctrlKey = false, dedupe = true, detached = false, enabled = true, metaKey = false, prevent = true, shiftKey = false, stopPropagation = false } = options;
|
|
170
|
+
const callback = (e) => {
|
|
171
|
+
if (e.altKey !== altKey || e.ctrlKey !== ctrlKey || e.metaKey !== metaKey || e.shiftKey !== shiftKey) return;
|
|
172
|
+
if (prevent) e.preventDefault();
|
|
173
|
+
if (stopPropagation) e.stopPropagation();
|
|
174
|
+
if (toValue(enabled) && handler) Promise.try(handler, e).catch(handleError);
|
|
175
|
+
};
|
|
176
|
+
const on = () => {
|
|
177
|
+
return onKeyStroke(key, callback, {
|
|
178
|
+
...options,
|
|
179
|
+
eventName: "keydown",
|
|
180
|
+
dedupe
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
let stop;
|
|
184
|
+
if (detached) stop = effectScope(true).run(() => on());
|
|
185
|
+
else {
|
|
186
|
+
stop = on();
|
|
187
|
+
tryOnScopeDispose(() => stop());
|
|
188
|
+
}
|
|
189
|
+
return stop;
|
|
220
190
|
}
|
|
221
191
|
function onAltKeyDown(key, handler, options) {
|
|
222
|
-
|
|
192
|
+
return onKeyDown(key, handler, {
|
|
193
|
+
...options,
|
|
194
|
+
altKey: true
|
|
195
|
+
});
|
|
223
196
|
}
|
|
224
197
|
function onCtrlKeyDown(key, handler, options) {
|
|
225
|
-
|
|
198
|
+
return onKeyDown(key, handler, {
|
|
199
|
+
...options,
|
|
200
|
+
ctrlKey: true
|
|
201
|
+
});
|
|
226
202
|
}
|
|
227
203
|
function onShiftKeyDown(key, handler, options) {
|
|
228
|
-
|
|
204
|
+
return onKeyDown(key, handler, {
|
|
205
|
+
...options,
|
|
206
|
+
shiftKey: true
|
|
207
|
+
});
|
|
229
208
|
}
|
|
230
209
|
function onCtrlShiftKeyDown(key, handler, options) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
210
|
+
return onKeyDown(key, handler, {
|
|
211
|
+
...options,
|
|
212
|
+
ctrlKey: true,
|
|
213
|
+
shiftKey: true
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region src/composables/sessionRef/index.ts
|
|
234
218
|
function sessionRef(key, initial, options) {
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
219
|
+
return useSessionStorage(key, initial, {
|
|
220
|
+
deep: options?.deep ?? true,
|
|
221
|
+
initOnMounted: options?.initOnMounted ?? true,
|
|
222
|
+
listenToStorageChanges: options?.listenToStorageChanges ?? true,
|
|
223
|
+
mergeDefaults: options?.mergeDefaults ?? true,
|
|
224
|
+
onError: options?.onError ?? handleError,
|
|
225
|
+
writeDefaults: options?.writeDefaults ?? true,
|
|
226
|
+
serializer: {
|
|
227
|
+
read: JSON.parse,
|
|
228
|
+
write: JSON.stringify
|
|
229
|
+
},
|
|
230
|
+
...options
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
//#endregion
|
|
234
|
+
//#region src/composables/asyncComputed/index.ts
|
|
250
235
|
function asyncComputed(initial, callback, options) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
236
|
+
return computedAsync(callback, initial, {
|
|
237
|
+
onError: handleError,
|
|
238
|
+
shallow: true,
|
|
239
|
+
lazy: false,
|
|
240
|
+
...options
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/composables/useWindowSize/index.ts
|
|
260
245
|
function useWindowHeight() {
|
|
261
|
-
|
|
246
|
+
return useWindowSize().height;
|
|
262
247
|
}
|
|
263
248
|
function useWindowWidth() {
|
|
264
|
-
|
|
249
|
+
return useWindowSize().width;
|
|
265
250
|
}
|
|
266
|
-
|
|
251
|
+
//#endregion
|
|
252
|
+
//#region src/composables/useElementSize/index.ts
|
|
267
253
|
function useElementSize(element) {
|
|
268
|
-
|
|
254
|
+
return useElementSize$1(toRef(element), {
|
|
255
|
+
height: 0,
|
|
256
|
+
width: 0
|
|
257
|
+
}, { box: "border-box" });
|
|
269
258
|
}
|
|
270
259
|
function useHeight(element) {
|
|
271
|
-
|
|
260
|
+
return useElementSize(element).height;
|
|
272
261
|
}
|
|
273
262
|
function useHeightDiff(element, lhs) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
263
|
+
const height = useHeight(element);
|
|
264
|
+
const lhsRef = lhs ? toRef(lhs) : useWindowHeight();
|
|
265
|
+
return computed(() => lhsRef.value - height.value);
|
|
277
266
|
}
|
|
278
267
|
function useWidth(element) {
|
|
279
|
-
|
|
268
|
+
return useElementSize(element).width;
|
|
280
269
|
}
|
|
281
270
|
function useWidthDiff(element, lhs) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
271
|
+
const width = useWidth(element);
|
|
272
|
+
const lhsRef = lhs ? toRef(lhs) : useWindowWidth();
|
|
273
|
+
return computed(() => lhsRef.value - width.value);
|
|
285
274
|
}
|
|
286
|
-
|
|
287
|
-
|
|
275
|
+
//#endregion
|
|
276
|
+
//#region src/composables/useBreakpoints/index.ts
|
|
277
|
+
var breakpointsKey = Symbol();
|
|
288
278
|
function useBreakpoints() {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
export { asyncComputed, asyncRef, console, getCurrentApp, getErrorHandler, handleError, inject, localRef, maybe, onAltKeyDown, onCtrlKeyDown, onCtrlShiftKeyDown, onKeyDown, onShiftKeyDown, provide, runWithContext, sessionRef, setCurrentApp, setErrorHandler, tryGetCurrentApp, tryInject, tryInjectOrElse, trySetCurrentApp, useBreakpoints, useElementSize, useHeight, useHeightDiff, useMutex, useWidth, useWidthDiff, useWindowHeight, useWindowWidth };
|
|
279
|
+
return tryInjectOrElse(breakpointsKey, () => {
|
|
280
|
+
return useBreakpoints$1(breakpointsTailwind);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
//#endregion
|
|
284
|
+
//#region src/index.ts
|
|
285
|
+
if (!Object.hasOwn(globalThis, "__VUEUTILS__")) Object.defineProperty(globalThis, "__VUEUTILS__", {
|
|
286
|
+
configurable: false,
|
|
287
|
+
enumerable: true,
|
|
288
|
+
writable: false,
|
|
289
|
+
value: {}
|
|
290
|
+
});
|
|
291
|
+
//#endregion
|
|
292
|
+
export { asyncComputed, asyncRef, console, getCurrentApp, getErrorHandler, handleError, inject, localRef, maybe, onAltKeyDown, onCtrlKeyDown, onCtrlShiftKeyDown, onKeyDown, onShiftKeyDown, provide, runWithContext, sessionRef, setCurrentApp, setErrorHandler, tryGetCurrentApp, tryInject, tryInjectOrElse, trySetCurrentApp, useBreakpoints, useElementSize, useHeight, useHeightDiff, useMutex, useWidth, useWidthDiff, useWindowHeight, useWindowSize, useWindowWidth };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tb-dev/vue",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.7",
|
|
4
4
|
"description": "Vue utilities",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
"composables"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@tb-dev/utils": "^7.3.
|
|
27
|
+
"@tb-dev/utils": "^7.3.5",
|
|
28
28
|
"@vueuse/core": "^14.2.1",
|
|
29
|
-
"es-toolkit": "^1.
|
|
30
|
-
"vue": "^3.5.
|
|
29
|
+
"es-toolkit": "^1.45.1",
|
|
30
|
+
"vue": "^3.5.30"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@tb-dev/eslint-config": "^9.0.
|
|
34
|
-
"@types/node": "^25.
|
|
35
|
-
"eslint": "^10.0.
|
|
33
|
+
"@tb-dev/eslint-config": "^9.0.3",
|
|
34
|
+
"@types/node": "^25.5.0",
|
|
35
|
+
"eslint": "^10.0.3",
|
|
36
36
|
"tslib": "^2.8.1",
|
|
37
37
|
"typedoc": "^0.28.17",
|
|
38
38
|
"typedoc-plugin-mdn-links": "^5.1.1",
|
|
39
39
|
"typescript": "~5.9.3",
|
|
40
|
-
"vite": "^
|
|
40
|
+
"vite": "^8.0.0",
|
|
41
41
|
"vite-plugin-dts": "^4.5.4"
|
|
42
42
|
},
|
|
43
43
|
"files": [
|