@nvent-addon/app 0.5.15 → 1.0.0-alpha.10

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 (95) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +3 -2
  3. package/dist/runtime/app/components/DashboardCard.d.vue.ts +1 -1
  4. package/dist/runtime/app/components/DashboardCard.vue.d.ts +1 -1
  5. package/dist/runtime/app/composables/useWorkers.d.ts +57 -0
  6. package/dist/runtime/app/composables/useWorkers.js +42 -0
  7. package/dist/runtime/app/pages/dashboard.vue +1 -654
  8. package/dist/runtime/app/pages/index.vue +25 -41
  9. package/dist/runtime/app/pages/workers.vue +458 -0
  10. package/dist/runtime/server/api/_workers/index.get.d.ts +8 -0
  11. package/dist/runtime/server/api/_workers/index.get.js +14 -0
  12. package/package.json +13 -12
  13. package/dist/runtime/app/components/ComponentRouter.d.vue.ts +0 -46
  14. package/dist/runtime/app/components/ComponentRouter.vue +0 -26
  15. package/dist/runtime/app/components/ComponentRouter.vue.d.ts +0 -46
  16. package/dist/runtime/app/components/ComponentShell.d.vue.ts +0 -23
  17. package/dist/runtime/app/components/ComponentShell.vue +0 -97
  18. package/dist/runtime/app/components/ComponentShell.vue.d.ts +0 -23
  19. package/dist/runtime/app/components/ConfirmDialog.d.vue.ts +0 -33
  20. package/dist/runtime/app/components/ConfirmDialog.vue +0 -120
  21. package/dist/runtime/app/components/ConfirmDialog.vue.d.ts +0 -33
  22. package/dist/runtime/app/composables/useComponentRouter.d.ts +0 -46
  23. package/dist/runtime/app/composables/useComponentRouter.js +0 -248
  24. package/dist/runtime/app/pages/flows/[name].vue +0 -750
  25. package/dist/runtime/app/pages/flows/index.d.vue.ts +0 -3
  26. package/dist/runtime/app/pages/flows/index.vue +0 -381
  27. package/dist/runtime/app/pages/flows/index.vue.d.ts +0 -3
  28. package/dist/runtime/app/pages/queues/index.d.vue.ts +0 -3
  29. package/dist/runtime/app/pages/queues/index.vue +0 -236
  30. package/dist/runtime/app/pages/queues/index.vue.d.ts +0 -3
  31. package/dist/runtime/app/pages/queues/job.d.vue.ts +0 -3
  32. package/dist/runtime/app/pages/queues/job.vue +0 -261
  33. package/dist/runtime/app/pages/queues/job.vue.d.ts +0 -3
  34. package/dist/runtime/app/pages/queues/jobs.d.vue.ts +0 -3
  35. package/dist/runtime/app/pages/queues/jobs.vue +0 -595
  36. package/dist/runtime/app/pages/queues/jobs.vue.d.ts +0 -3
  37. package/dist/runtime/app/pages/settings/scheduler.d.vue.ts +0 -3
  38. package/dist/runtime/app/pages/settings/scheduler.vue +0 -310
  39. package/dist/runtime/app/pages/settings/scheduler.vue.d.ts +0 -3
  40. package/dist/runtime/app/pages/triggers/[name]/edit.d.vue.ts +0 -3
  41. package/dist/runtime/app/pages/triggers/[name]/edit.vue +0 -429
  42. package/dist/runtime/app/pages/triggers/[name]/edit.vue.d.ts +0 -3
  43. package/dist/runtime/app/pages/triggers/[name].d.vue.ts +0 -3
  44. package/dist/runtime/app/pages/triggers/[name].vue +0 -870
  45. package/dist/runtime/app/pages/triggers/[name].vue.d.ts +0 -3
  46. package/dist/runtime/app/pages/triggers/index.d.vue.ts +0 -3
  47. package/dist/runtime/app/pages/triggers/index.vue +0 -525
  48. package/dist/runtime/app/pages/triggers/index.vue.d.ts +0 -3
  49. package/dist/runtime/app/pages/triggers/new.d.vue.ts +0 -3
  50. package/dist/runtime/app/pages/triggers/new.vue +0 -610
  51. package/dist/runtime/app/pages/triggers/new.vue.d.ts +0 -3
  52. package/dist/runtime/server/api/_flows/[name]/clear-history.delete.d.ts +0 -10
  53. package/dist/runtime/server/api/_flows/[name]/clear-history.delete.js +0 -49
  54. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.d.ts +0 -2
  55. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/cancel.post.js +0 -21
  56. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/restart.post.d.ts +0 -2
  57. package/dist/runtime/server/api/_flows/[name]/runs/[runId]/restart.post.js +0 -21
  58. package/dist/runtime/server/api/_flows/[name]/runs.get.d.ts +0 -17
  59. package/dist/runtime/server/api/_flows/[name]/runs.get.js +0 -64
  60. package/dist/runtime/server/api/_flows/[name]/start.post.d.ts +0 -2
  61. package/dist/runtime/server/api/_flows/[name]/start.post.js +0 -9
  62. package/dist/runtime/server/api/_flows/index.get.d.ts +0 -7
  63. package/dist/runtime/server/api/_flows/index.get.js +0 -5
  64. package/dist/runtime/server/api/_flows/recent-runs.get.d.ts +0 -15
  65. package/dist/runtime/server/api/_flows/recent-runs.get.js +0 -67
  66. package/dist/runtime/server/api/_flows/ws.d.ts +0 -80
  67. package/dist/runtime/server/api/_flows/ws.js +0 -309
  68. package/dist/runtime/server/api/_queues/[name]/job/[id].get.d.ts +0 -2
  69. package/dist/runtime/server/api/_queues/[name]/job/[id].get.js +0 -14
  70. package/dist/runtime/server/api/_queues/[name]/job/index.get.d.ts +0 -2
  71. package/dist/runtime/server/api/_queues/[name]/job/index.get.js +0 -39
  72. package/dist/runtime/server/api/_queues/index.get.d.ts +0 -2
  73. package/dist/runtime/server/api/_queues/index.get.js +0 -106
  74. package/dist/runtime/server/api/_queues/ws.d.ts +0 -48
  75. package/dist/runtime/server/api/_queues/ws.js +0 -215
  76. package/dist/runtime/server/api/_scheduler/jobs.get.d.ts +0 -19
  77. package/dist/runtime/server/api/_scheduler/jobs.get.js +0 -36
  78. package/dist/runtime/server/api/_triggers/[name]/events.get.d.ts +0 -6
  79. package/dist/runtime/server/api/_triggers/[name]/events.get.js +0 -43
  80. package/dist/runtime/server/api/_triggers/[name]/index.get.d.ts +0 -6
  81. package/dist/runtime/server/api/_triggers/[name]/index.get.js +0 -76
  82. package/dist/runtime/server/api/_triggers/[name].delete.d.ts +0 -7
  83. package/dist/runtime/server/api/_triggers/[name].delete.js +0 -37
  84. package/dist/runtime/server/api/_triggers/[name].patch.d.ts +0 -7
  85. package/dist/runtime/server/api/_triggers/[name].patch.js +0 -117
  86. package/dist/runtime/server/api/_triggers/index.get.d.ts +0 -6
  87. package/dist/runtime/server/api/_triggers/index.get.js +0 -44
  88. package/dist/runtime/server/api/_triggers/index.post.d.ts +0 -7
  89. package/dist/runtime/server/api/_triggers/index.post.js +0 -124
  90. package/dist/runtime/server/api/_triggers/stats.get.d.ts +0 -6
  91. package/dist/runtime/server/api/_triggers/stats.get.js +0 -41
  92. package/dist/runtime/server/api/_triggers/ws.d.ts +0 -74
  93. package/dist/runtime/server/api/_triggers/ws.js +0 -315
  94. /package/dist/runtime/app/pages/{flows/[name].d.vue.ts → workers.d.vue.ts} +0 -0
  95. /package/dist/runtime/app/pages/{flows/[name].vue.d.ts → workers.vue.d.ts} +0 -0
@@ -1,429 +0,0 @@
1
- <template>
2
- <ClientOnly>
3
- <template #fallback>
4
- <div class="h-full flex items-center justify-center">
5
- <div class="text-center">
6
- <UIcon
7
- name="i-lucide-loader-2"
8
- class="w-8 h-8 animate-spin mx-auto mb-3 text-gray-400"
9
- />
10
- <p class="text-sm text-gray-500 dark:text-gray-400">
11
- Loading...
12
- </p>
13
- </div>
14
- </div>
15
- </template>
16
- <div class="h-full flex flex-col overflow-hidden bg-gray-50 dark:bg-gray-950">
17
- <!-- Header -->
18
- <NventTriggerEditHeader
19
- :is-saving="isSaving"
20
- :has-changes="hasChanges"
21
- @back="goBack"
22
- @cancel="goBack"
23
- @save="handleSave"
24
- />
25
-
26
- <!-- Loading State -->
27
- <div
28
- v-if="status === 'pending' && !trigger"
29
- class="flex-1 flex items-center justify-center"
30
- >
31
- <div class="text-center">
32
- <UIcon
33
- name="i-lucide-loader-2"
34
- class="w-8 h-8 animate-spin mx-auto mb-3 text-gray-400"
35
- />
36
- <p class="text-sm text-gray-500 dark:text-gray-400">
37
- Loading trigger...
38
- </p>
39
- </div>
40
- </div>
41
-
42
- <!-- Error State -->
43
- <div
44
- v-else-if="!trigger"
45
- class="flex-1 flex items-center justify-center"
46
- >
47
- <div class="text-center">
48
- <UIcon
49
- name="i-lucide-alert-circle"
50
- class="w-12 h-12 mx-auto mb-3 text-red-400"
51
- />
52
- <h2 class="text-lg font-semibold text-gray-900 dark:text-gray-100 mb-1">
53
- Trigger not found
54
- </h2>
55
- <p class="text-sm text-gray-500 dark:text-gray-400 mb-4">
56
- The trigger you're looking for doesn't exist.
57
- </p>
58
- <UButton
59
- color="neutral"
60
- @click="goBack"
61
- >
62
- Go Back
63
- </UButton>
64
- </div>
65
- </div>
66
-
67
- <!-- Main Content -->
68
- <div
69
- v-else
70
- class="flex-1 overflow-y-auto p-6"
71
- >
72
- <div class="max-w-4xl mx-auto">
73
- <!-- Error Alert -->
74
- <UAlert
75
- v-if="saveError"
76
- color="error"
77
- variant="subtle"
78
- :title="saveError"
79
- :close-button="{ icon: 'i-lucide-x' }"
80
- @close="saveError = null"
81
- />
82
-
83
- <!-- Success Alert -->
84
- <UAlert
85
- v-if="saveSuccess"
86
- color="success"
87
- variant="subtle"
88
- title="Trigger updated successfully"
89
- :close-button="{ icon: 'i-lucide-x' }"
90
- @close="saveSuccess = false"
91
- />
92
-
93
- <!-- Main Form -->
94
- <UForm
95
- ref="form"
96
- :schema="currentSchema"
97
- :state="formState"
98
- class="space-y-6"
99
- @submit="onSubmit"
100
- @error="onError"
101
- >
102
- <!-- Basic Information -->
103
- <NventTriggerBasicInfoCard
104
- v-model="formState"
105
- is-edit
106
- />
107
-
108
- <!-- Status Control -->
109
- <NventTriggerStatusConfig
110
- v-model="formState.status"
111
- nested
112
- />
113
-
114
- <!-- Type-Specific Configuration -->
115
- <NventTriggerWebhookConfig
116
- v-if="formState.type === 'webhook'"
117
- v-model="formState.webhook"
118
- name="webhook"
119
- />
120
-
121
- <NventTriggerScheduleConfig
122
- v-if="formState.type === 'schedule'"
123
- v-model="formState.schedule"
124
- name="schedule"
125
- />
126
-
127
- <NventTriggerEventConfig
128
- v-if="formState.type === 'event'"
129
- v-model="formState.config"
130
- name="config"
131
- />
132
-
133
- <!-- Flow Subscriptions -->
134
- <NventTriggerFlowSubscriptions
135
- :subscriptions="formState.subscriptions"
136
- :flows="flows"
137
- @toggle="toggleFlowSubscription"
138
- />
139
- </UForm>
140
-
141
- <!-- Danger Zone -->
142
- <NventTriggerDangerZone
143
- class="mt-6"
144
- :is-deleting="isDeleting"
145
- @delete="handleDelete"
146
- />
147
- </div>
148
- </div>
149
- </div>
150
-
151
- <!-- Delete Confirmation Dialog -->
152
- <ConfirmDialog
153
- v-model:open="showDeleteDialog"
154
- title="Delete Trigger"
155
- :description="`Are you sure you want to delete the trigger '${trigger?.displayName || trigger?.name}'?`"
156
- :items="[
157
- 'All subscriptions will be removed',
158
- 'Event history will be preserved',
159
- 'This action cannot be undone'
160
- ]"
161
- warning="This is a permanent action."
162
- confirm-label="Delete Trigger"
163
- confirm-color="error"
164
- icon="i-lucide-alert-triangle"
165
- icon-color="error"
166
- :loading="isDeleting"
167
- @confirm="confirmDelete"
168
- @cancel="showDeleteDialog = false"
169
- />
170
- </ClientOnly>
171
- </template>
172
-
173
- <script setup>
174
- import { ref, computed, watch, useToast } from "#imports";
175
- import { useTrigger } from "../../../composables/useTrigger";
176
- import { useAnalyzedFlows } from "../../../composables/useAnalyzedFlows";
177
- import { useComponentRouter } from "../../../composables/useComponentRouter";
178
- import ConfirmDialog from "../../../components/ConfirmDialog.vue";
179
- import { z } from "zod";
180
- const router = useComponentRouter();
181
- const toast = useToast();
182
- const route = computed(() => {
183
- if (!router.route?.value?.path) return null;
184
- const path = router.route.value.path;
185
- const match = path.match(/\/triggers\/([^/]+)\/edit/);
186
- return match && match[1] ? decodeURIComponent(match[1]) : null;
187
- });
188
- const triggerName = computed(() => route.value);
189
- const { trigger, status, refresh } = useTrigger(triggerName);
190
- const flows = useAnalyzedFlows();
191
- const baseSchema = z.object({
192
- name: z.string().min(1, "Name is required"),
193
- displayName: z.string().min(1, "Display name is required"),
194
- description: z.string(),
195
- type: z.enum(["event", "webhook", "schedule", "manual"]),
196
- scope: z.enum(["flow", "run"]),
197
- subscriptions: z.array(z.string())
198
- });
199
- const webhookSchema = baseSchema.extend({
200
- webhook: z.object({
201
- path: z.string().min(1, "Webhook path is required"),
202
- method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]),
203
- requireAuth: z.boolean(),
204
- authHeader: z.string().min(1, "Auth header is required").optional()
205
- })
206
- });
207
- const scheduleSchema = baseSchema.extend({
208
- schedule: z.object({
209
- cron: z.string().optional(),
210
- interval: z.number().min(1, "Interval must be at least 1 second").optional(),
211
- timezone: z.string().min(1, "Timezone is required"),
212
- enabled: z.boolean()
213
- }).refine(
214
- (data) => data.cron || data.interval,
215
- { message: "Either cron expression or interval is required", path: ["cron"] }
216
- )
217
- });
218
- const eventSchema = baseSchema.extend({
219
- config: z.object({
220
- event: z.string().min(1, "Event name is required"),
221
- filter: z.string().optional()
222
- })
223
- });
224
- const manualSchema = baseSchema;
225
- const currentSchema = computed(() => {
226
- switch (formState.value.type) {
227
- case "webhook":
228
- return webhookSchema;
229
- case "schedule":
230
- return scheduleSchema;
231
- case "event":
232
- return eventSchema;
233
- default:
234
- return manualSchema;
235
- }
236
- });
237
- const formState = ref({
238
- name: "",
239
- displayName: "",
240
- description: "",
241
- type: "event",
242
- scope: "flow",
243
- status: "active",
244
- webhook: {
245
- path: "",
246
- method: "POST",
247
- requireAuth: false,
248
- authHeader: "X-API-Key"
249
- },
250
- schedule: {
251
- cron: "",
252
- interval: void 0,
253
- timezone: "UTC",
254
- enabled: true
255
- },
256
- config: {
257
- event: "",
258
- filter: ""
259
- },
260
- subscriptions: []
261
- });
262
- const form = ref();
263
- const isSaving = ref(false);
264
- watch(trigger, (newTrigger) => {
265
- if (newTrigger && !isSaving.value) {
266
- formState.value.name = newTrigger.name;
267
- formState.value.displayName = newTrigger.displayName || newTrigger.name;
268
- formState.value.description = newTrigger.description || "";
269
- formState.value.type = newTrigger.type;
270
- formState.value.scope = newTrigger.scope;
271
- formState.value.status = newTrigger.status || "active";
272
- if (newTrigger.webhook) {
273
- formState.value.webhook = {
274
- path: newTrigger.webhook.path || "",
275
- method: newTrigger.webhook.method || "POST",
276
- requireAuth: !!newTrigger.webhook.auth,
277
- authHeader: newTrigger.webhook.auth?.header || "X-API-Key"
278
- };
279
- }
280
- if (newTrigger.schedule) {
281
- formState.value.schedule = {
282
- cron: newTrigger.schedule.cron || "",
283
- interval: newTrigger.schedule.interval,
284
- timezone: newTrigger.schedule.timezone || "UTC",
285
- enabled: newTrigger.schedule.enabled ?? true
286
- };
287
- }
288
- if (newTrigger.config) {
289
- formState.value.config = {
290
- event: newTrigger.config.event || "",
291
- filter: newTrigger.config.filter ? JSON.stringify(newTrigger.config.filter, null, 2) : ""
292
- };
293
- }
294
- formState.value.subscriptions = Array.from(new Set(newTrigger.subscribedFlows || []));
295
- }
296
- }, { immediate: true });
297
- const toggleFlowSubscription = (flowName) => {
298
- const index = formState.value.subscriptions.indexOf(flowName);
299
- if (index === -1) {
300
- formState.value.subscriptions.push(flowName);
301
- } else {
302
- formState.value.subscriptions.splice(index, 1);
303
- }
304
- };
305
- const manualDirty = ref(false);
306
- watch(() => formState.value.subscriptions, () => {
307
- manualDirty.value = true;
308
- }, { deep: true });
309
- const hasChanges = computed(() => {
310
- if (form.value?.dirty || manualDirty.value) return true;
311
- if (!trigger.value) return false;
312
- return formState.value.displayName !== (trigger.value.displayName || trigger.value.name) || formState.value.description !== (trigger.value.description || "") || formState.value.status !== (trigger.value.status || "active") || JSON.stringify([...formState.value.subscriptions].sort()) !== JSON.stringify([...trigger.value.subscribedFlows || []].sort()) || trigger.value.type === "webhook" && (formState.value.webhook.path !== (trigger.value.webhook?.path || "") || formState.value.webhook.method !== (trigger.value.webhook?.method || "POST")) || trigger.value.type === "schedule" && (formState.value.schedule.cron !== (trigger.value.schedule?.cron || "") || formState.value.schedule.interval !== trigger.value.schedule?.interval || formState.value.schedule.timezone !== (trigger.value.schedule?.timezone || "UTC") || formState.value.schedule.enabled !== (trigger.value.schedule?.enabled ?? true)) || trigger.value.type === "event" && (formState.value.config.event !== (trigger.value.config?.event || "") || formState.value.config.filter !== (trigger.value.config?.filter ? JSON.stringify(trigger.value.config.filter, null, 2) : ""));
313
- });
314
- const saveError = ref(null);
315
- const saveSuccess = ref(false);
316
- const onSubmit = async (event) => {
317
- if (!trigger.value || isSaving.value) return;
318
- isSaving.value = true;
319
- saveError.value = null;
320
- saveSuccess.value = false;
321
- try {
322
- const data = event.data;
323
- const payload = {
324
- displayName: data.displayName,
325
- description: data.description,
326
- status: formState.value.status,
327
- subscriptions: formState.value.subscriptions
328
- // Use formState directly for subscriptions
329
- };
330
- if (formState.value.type === "webhook") {
331
- payload.config = {
332
- path: formState.value.webhook.path,
333
- method: formState.value.webhook.method,
334
- requireAuth: formState.value.webhook.requireAuth,
335
- authHeader: formState.value.webhook.authHeader
336
- };
337
- } else if (formState.value.type === "schedule") {
338
- payload.config = {
339
- cron: formState.value.schedule.cron || void 0,
340
- interval: formState.value.schedule.interval,
341
- timezone: formState.value.schedule.timezone,
342
- enabled: formState.value.schedule.enabled
343
- };
344
- } else if (formState.value.type === "event") {
345
- payload.config = {
346
- event: formState.value.config.event,
347
- filter: formState.value.config.filter || void 0
348
- };
349
- }
350
- const response = await $fetch(`/api/_triggers/${encodeURIComponent(trigger.value.name)}`, {
351
- method: "PATCH",
352
- body: payload
353
- });
354
- if (response.error) {
355
- saveError.value = response.error;
356
- toast.add({ title: "Error", description: response.error, color: "error" });
357
- } else {
358
- saveSuccess.value = true;
359
- toast.add({ title: "Success", description: "Trigger updated successfully", color: "success" });
360
- await new Promise((resolve) => setTimeout(resolve, 300));
361
- isSaving.value = false;
362
- await refresh();
363
- manualDirty.value = false;
364
- if (form.value) {
365
- form.value.clear();
366
- }
367
- setTimeout(() => {
368
- saveSuccess.value = false;
369
- }, 3e3);
370
- }
371
- } catch (err) {
372
- const message = err instanceof Error ? err.message : "Failed to update trigger";
373
- saveError.value = message;
374
- toast.add({ title: "Error", description: message, color: "error" });
375
- isSaving.value = false;
376
- }
377
- };
378
- const onError = (event) => {
379
- if (event?.errors?.[0]) {
380
- const error = event.errors[0];
381
- toast.add({
382
- title: "Validation Error",
383
- description: error.message || "Please check your form inputs",
384
- color: "error"
385
- });
386
- if (error.id) {
387
- const element = document.getElementById(error.id);
388
- element?.focus();
389
- element?.scrollIntoView({ behavior: "smooth", block: "center" });
390
- }
391
- }
392
- };
393
- const handleSave = () => {
394
- form.value?.submit();
395
- };
396
- const isDeleting = ref(false);
397
- const showDeleteDialog = ref(false);
398
- const handleDelete = () => {
399
- showDeleteDialog.value = true;
400
- };
401
- const confirmDelete = async () => {
402
- if (!trigger.value) return;
403
- isDeleting.value = true;
404
- saveError.value = null;
405
- try {
406
- const response = await $fetch(`/api/_triggers/${encodeURIComponent(trigger.value.name)}`, {
407
- method: "DELETE"
408
- });
409
- if (response.error) {
410
- saveError.value = response.error;
411
- showDeleteDialog.value = false;
412
- } else {
413
- toast.add({ title: "Success", description: "Trigger deleted successfully", color: "success" });
414
- showDeleteDialog.value = false;
415
- setTimeout(() => {
416
- router.push("/triggers");
417
- }, 500);
418
- }
419
- } catch (err) {
420
- saveError.value = err instanceof Error ? err.message : "Failed to delete trigger";
421
- showDeleteDialog.value = false;
422
- } finally {
423
- isDeleting.value = false;
424
- }
425
- };
426
- const goBack = () => {
427
- router.push(`/triggers/${encodeURIComponent(trigger.value?.name || "")}`);
428
- };
429
- </script>
@@ -1,3 +0,0 @@
1
- declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- declare const _default: typeof __VLS_export;
3
- export default _default;
@@ -1,3 +0,0 @@
1
- declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
- declare const _default: typeof __VLS_export;
3
- export default _default;