@ramathibodi/nuxt-commons 0.1.74 → 0.1.75
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/README.md +115 -115
- package/dist/module.json +1 -1
- package/dist/runtime/components/Alert.vue +58 -58
- package/dist/runtime/components/BarcodeReader.vue +130 -130
- package/dist/runtime/components/ExportCSV.vue +110 -110
- package/dist/runtime/components/FileBtn.vue +79 -79
- package/dist/runtime/components/ImportCSV.vue +151 -151
- package/dist/runtime/components/MrzReader.vue +168 -168
- package/dist/runtime/components/SplitterPanel.vue +67 -67
- package/dist/runtime/components/TabsGroup.vue +39 -39
- package/dist/runtime/components/TextBarcode.vue +66 -66
- package/dist/runtime/components/device/IdCardButton.vue +95 -95
- package/dist/runtime/components/device/IdCardWebSocket.vue +207 -207
- package/dist/runtime/components/device/Scanner.vue +350 -350
- package/dist/runtime/components/dialog/Confirm.vue +112 -112
- package/dist/runtime/components/dialog/Host.vue +88 -88
- package/dist/runtime/components/dialog/Index.vue +84 -84
- package/dist/runtime/components/dialog/Loading.vue +51 -51
- package/dist/runtime/components/dialog/default/Confirm.vue +112 -112
- package/dist/runtime/components/dialog/default/Loading.vue +60 -60
- package/dist/runtime/components/dialog/default/Notify.vue +82 -82
- package/dist/runtime/components/dialog/default/Printing.vue +46 -46
- package/dist/runtime/components/dialog/default/VerifyUser.vue +144 -144
- package/dist/runtime/components/document/Form.vue +50 -50
- package/dist/runtime/components/document/TemplateBuilder.vue +536 -536
- package/dist/runtime/components/form/ActionPad.vue +156 -156
- package/dist/runtime/components/form/Birthdate.vue +116 -116
- package/dist/runtime/components/form/CheckboxGroup.vue +99 -99
- package/dist/runtime/components/form/CodeEditor.vue +45 -45
- package/dist/runtime/components/form/Date.vue +270 -270
- package/dist/runtime/components/form/DateTime.vue +220 -220
- package/dist/runtime/components/form/Dialog.vue +178 -178
- package/dist/runtime/components/form/EditPad.vue +157 -157
- package/dist/runtime/components/form/File.vue +295 -295
- package/dist/runtime/components/form/Hidden.vue +44 -44
- package/dist/runtime/components/form/Iterator.vue +538 -538
- package/dist/runtime/components/form/Login.vue +143 -143
- package/dist/runtime/components/form/Pad.vue +399 -399
- package/dist/runtime/components/form/SignPad.vue +226 -226
- package/dist/runtime/components/form/System.vue +34 -34
- package/dist/runtime/components/form/Table.vue +391 -391
- package/dist/runtime/components/form/TableData.vue +236 -236
- package/dist/runtime/components/form/Time.vue +177 -177
- package/dist/runtime/components/form/images/Capture.vue +245 -245
- package/dist/runtime/components/form/images/Edit.vue +133 -133
- package/dist/runtime/components/form/images/Field.vue +331 -331
- package/dist/runtime/components/form/images/Pad.vue +54 -54
- package/dist/runtime/components/label/Date.vue +37 -37
- package/dist/runtime/components/label/DateAgo.vue +102 -102
- package/dist/runtime/components/label/DateCount.vue +152 -152
- package/dist/runtime/components/label/Field.vue +111 -111
- package/dist/runtime/components/label/FormatMoney.vue +37 -37
- package/dist/runtime/components/label/Mask.vue +46 -46
- package/dist/runtime/components/label/Object.vue +21 -21
- package/dist/runtime/components/master/Autocomplete.vue +89 -89
- package/dist/runtime/components/master/Combobox.vue +88 -88
- package/dist/runtime/components/master/RadioGroup.vue +90 -90
- package/dist/runtime/components/master/Select.vue +70 -70
- package/dist/runtime/components/master/label.vue +55 -55
- package/dist/runtime/components/model/Autocomplete.vue +91 -91
- package/dist/runtime/components/model/Combobox.vue +90 -90
- package/dist/runtime/components/model/Pad.vue +114 -114
- package/dist/runtime/components/model/Select.vue +78 -84
- package/dist/runtime/components/model/Table.vue +370 -370
- package/dist/runtime/components/model/iterator.vue +497 -497
- package/dist/runtime/components/model/label.vue +58 -58
- package/dist/runtime/components/pdf/Print.vue +75 -75
- package/dist/runtime/components/pdf/View.vue +146 -146
- package/dist/runtime/composables/dialog.d.ts +1 -1
- package/dist/runtime/composables/graphql.d.ts +1 -1
- package/dist/runtime/composables/graphqlModel.d.ts +9 -9
- package/dist/runtime/composables/graphqlModelItem.d.ts +7 -7
- package/dist/runtime/composables/graphqlModelOperation.d.ts +6 -6
- package/dist/runtime/composables/userPermission.d.ts +1 -1
- package/dist/runtime/labs/Calendar.vue +99 -99
- package/dist/runtime/labs/form/EditMobile.vue +152 -152
- package/dist/runtime/labs/form/TextFieldMask.vue +43 -43
- package/dist/runtime/plugins/clientConfig.d.ts +1 -1
- package/dist/runtime/plugins/default.d.ts +1 -1
- package/dist/runtime/plugins/dialogManager.d.ts +1 -1
- package/dist/runtime/plugins/permission.d.ts +1 -1
- package/dist/runtime/types/alert.d.ts +11 -11
- package/dist/runtime/types/clientConfig.d.ts +13 -13
- package/dist/runtime/types/dialogManager.d.ts +35 -35
- package/dist/runtime/types/formDialog.d.ts +5 -5
- package/dist/runtime/types/graphqlOperation.d.ts +23 -23
- package/dist/runtime/types/menu.d.ts +31 -31
- package/dist/runtime/types/modules.d.ts +7 -7
- package/dist/runtime/types/permission.d.ts +13 -13
- package/package.json +131 -131
- package/scripts/enrich-vue-docs-from-ai.mjs +197 -197
- package/scripts/generate-ai-summary.mjs +321 -321
- package/scripts/generate-composables-md.mjs +129 -129
- package/scripts/postInstall.cjs +70 -70
- package/templates/.codegen/codegen.ts +32 -32
- package/templates/.codegen/plugin-schema-object.js +161 -161
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
/**
|
|
3
|
-
* ExportCSV exports array data to spreadsheet files, flattening nested fields before file generation.
|
|
4
|
-
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
-
*/
|
|
6
|
-
import { ref } from 'vue'
|
|
7
|
-
import * as XLSX from 'xlsx'
|
|
8
|
-
import { VBtn } from 'vuetify/components/VBtn'
|
|
9
|
-
import { useAlert } from '../composables/alert'
|
|
10
|
-
|
|
11
|
-
interface ExportButtonProps extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
|
|
12
|
-
fileName?: string // File name used when downloading or printing generated files.
|
|
13
|
-
sheetName?: string // Configuration option used by ExportCSV.
|
|
14
|
-
modelValue?: object[] // Bound value for v-model synchronization with the parent component.
|
|
15
|
-
stringFields?: Array<string> // Field paths that must stay as string values (no nested object conversion).
|
|
16
|
-
tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Public props accepted by ExportCSV.
|
|
21
|
-
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
22
|
-
*/
|
|
23
|
-
const props = withDefaults(defineProps<ExportButtonProps>(), {
|
|
24
|
-
fileName: 'download',
|
|
25
|
-
sheetName: 'Sheet1',
|
|
26
|
-
stringFields: ()=>[],
|
|
27
|
-
tooltip: ()=>({text: 'Export', location: 'bottom'}),
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
const alert = useAlert()
|
|
31
|
-
const loading = ref(false)
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Triggers file export
|
|
35
|
-
*/
|
|
36
|
-
function exportFile() {
|
|
37
|
-
if (props.modelValue && Array.isArray(props.modelValue) && props.modelValue.length > 0) {
|
|
38
|
-
loading.value = true
|
|
39
|
-
|
|
40
|
-
try {
|
|
41
|
-
const workbook = XLSX.utils.book_new()
|
|
42
|
-
const worksheet = XLSX.utils.json_to_sheet(flattenNestedFields(props.modelValue))
|
|
43
|
-
const fileName = `${props.fileName}.xlsx`
|
|
44
|
-
|
|
45
|
-
XLSX.utils.book_append_sheet(workbook, worksheet, props.sheetName)
|
|
46
|
-
XLSX.writeFile(workbook, fileName)
|
|
47
|
-
} catch (error: any) {
|
|
48
|
-
alert?.addAlert({ message: `Export failed: ${error.message}`, alertType: 'error' })
|
|
49
|
-
} finally {
|
|
50
|
-
loading.value = false
|
|
51
|
-
}
|
|
52
|
-
} else {
|
|
53
|
-
alert?.addAlert({ message: 'Invalid or no data to export', alertType: 'error' })
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Recursively flattens nested fields for export
|
|
59
|
-
* @param items - Array of objects to flatten
|
|
60
|
-
*/
|
|
61
|
-
function flattenNestedFields(items: any[]) {
|
|
62
|
-
return items.map((item: any) => {
|
|
63
|
-
return flattenObject(item)
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Recursively flattens an object, converting nested keys into dot-separated keys
|
|
69
|
-
* @param obj - Object to flatten
|
|
70
|
-
* @param parentKey - Parent key (for recursion)
|
|
71
|
-
* @param separator - Separator for nested keys
|
|
72
|
-
*/
|
|
73
|
-
function flattenObject(obj: any, parentKey = '', separator = '.') {
|
|
74
|
-
return Object.keys(obj).reduce((acc: any, key: string) => {
|
|
75
|
-
const newKey = parentKey ? `${parentKey}${separator}${key}` : key
|
|
76
|
-
const value = obj[key]
|
|
77
|
-
|
|
78
|
-
if (value && typeof value === 'object' && !Array.isArray(value) && !props.stringFields.includes(newKey)) {
|
|
79
|
-
Object.assign(acc, flattenObject(value, newKey, separator))
|
|
80
|
-
} else {
|
|
81
|
-
acc[newKey] = typeof value === 'object' ? JSON.stringify(value) : value
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return acc
|
|
85
|
-
}, {})
|
|
86
|
-
}
|
|
87
|
-
</script>
|
|
88
|
-
|
|
89
|
-
<template>
|
|
90
|
-
<VBtn
|
|
91
|
-
v-bind="$attrs"
|
|
92
|
-
color="primary"
|
|
93
|
-
:loading="loading"
|
|
94
|
-
:disabled="loading"
|
|
95
|
-
text="Export CSV"
|
|
96
|
-
@click="exportFile"
|
|
97
|
-
v-tooltip="props.tooltip"
|
|
98
|
-
>
|
|
99
|
-
<template
|
|
100
|
-
v-for="(_, name, index) in ($slots as {})"
|
|
101
|
-
:key="index"
|
|
102
|
-
#[name]="slotData"
|
|
103
|
-
>
|
|
104
|
-
<slot
|
|
105
|
-
:name="name"
|
|
106
|
-
v-bind="((slotData || {}) as object)"
|
|
107
|
-
/>
|
|
108
|
-
</template>
|
|
109
|
-
</VBtn>
|
|
110
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
/**
|
|
3
|
+
* ExportCSV exports array data to spreadsheet files, flattening nested fields before file generation.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import { ref } from 'vue'
|
|
7
|
+
import * as XLSX from 'xlsx'
|
|
8
|
+
import { VBtn } from 'vuetify/components/VBtn'
|
|
9
|
+
import { useAlert } from '../composables/alert'
|
|
10
|
+
|
|
11
|
+
interface ExportButtonProps extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
|
|
12
|
+
fileName?: string // File name used when downloading or printing generated files.
|
|
13
|
+
sheetName?: string // Configuration option used by ExportCSV.
|
|
14
|
+
modelValue?: object[] // Bound value for v-model synchronization with the parent component.
|
|
15
|
+
stringFields?: Array<string> // Field paths that must stay as string values (no nested object conversion).
|
|
16
|
+
tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Public props accepted by ExportCSV.
|
|
21
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
22
|
+
*/
|
|
23
|
+
const props = withDefaults(defineProps<ExportButtonProps>(), {
|
|
24
|
+
fileName: 'download',
|
|
25
|
+
sheetName: 'Sheet1',
|
|
26
|
+
stringFields: ()=>[],
|
|
27
|
+
tooltip: ()=>({text: 'Export', location: 'bottom'}),
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
const alert = useAlert()
|
|
31
|
+
const loading = ref(false)
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Triggers file export
|
|
35
|
+
*/
|
|
36
|
+
function exportFile() {
|
|
37
|
+
if (props.modelValue && Array.isArray(props.modelValue) && props.modelValue.length > 0) {
|
|
38
|
+
loading.value = true
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
const workbook = XLSX.utils.book_new()
|
|
42
|
+
const worksheet = XLSX.utils.json_to_sheet(flattenNestedFields(props.modelValue))
|
|
43
|
+
const fileName = `${props.fileName}.xlsx`
|
|
44
|
+
|
|
45
|
+
XLSX.utils.book_append_sheet(workbook, worksheet, props.sheetName)
|
|
46
|
+
XLSX.writeFile(workbook, fileName)
|
|
47
|
+
} catch (error: any) {
|
|
48
|
+
alert?.addAlert({ message: `Export failed: ${error.message}`, alertType: 'error' })
|
|
49
|
+
} finally {
|
|
50
|
+
loading.value = false
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
alert?.addAlert({ message: 'Invalid or no data to export', alertType: 'error' })
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Recursively flattens nested fields for export
|
|
59
|
+
* @param items - Array of objects to flatten
|
|
60
|
+
*/
|
|
61
|
+
function flattenNestedFields(items: any[]) {
|
|
62
|
+
return items.map((item: any) => {
|
|
63
|
+
return flattenObject(item)
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Recursively flattens an object, converting nested keys into dot-separated keys
|
|
69
|
+
* @param obj - Object to flatten
|
|
70
|
+
* @param parentKey - Parent key (for recursion)
|
|
71
|
+
* @param separator - Separator for nested keys
|
|
72
|
+
*/
|
|
73
|
+
function flattenObject(obj: any, parentKey = '', separator = '.') {
|
|
74
|
+
return Object.keys(obj).reduce((acc: any, key: string) => {
|
|
75
|
+
const newKey = parentKey ? `${parentKey}${separator}${key}` : key
|
|
76
|
+
const value = obj[key]
|
|
77
|
+
|
|
78
|
+
if (value && typeof value === 'object' && !Array.isArray(value) && !props.stringFields.includes(newKey)) {
|
|
79
|
+
Object.assign(acc, flattenObject(value, newKey, separator))
|
|
80
|
+
} else {
|
|
81
|
+
acc[newKey] = typeof value === 'object' ? JSON.stringify(value) : value
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return acc
|
|
85
|
+
}, {})
|
|
86
|
+
}
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<template>
|
|
90
|
+
<VBtn
|
|
91
|
+
v-bind="$attrs"
|
|
92
|
+
color="primary"
|
|
93
|
+
:loading="loading"
|
|
94
|
+
:disabled="loading"
|
|
95
|
+
text="Export CSV"
|
|
96
|
+
@click="exportFile"
|
|
97
|
+
v-tooltip="props.tooltip"
|
|
98
|
+
>
|
|
99
|
+
<template
|
|
100
|
+
v-for="(_, name, index) in ($slots as {})"
|
|
101
|
+
:key="index"
|
|
102
|
+
#[name]="slotData"
|
|
103
|
+
>
|
|
104
|
+
<slot
|
|
105
|
+
:name="name"
|
|
106
|
+
v-bind="((slotData || {}) as object)"
|
|
107
|
+
/>
|
|
108
|
+
</template>
|
|
109
|
+
</VBtn>
|
|
110
|
+
</template>
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
/**
|
|
3
|
-
* FileBtn wraps file selection behavior into a reusable button interface that works with form and upload flows.
|
|
4
|
-
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
-
*/
|
|
6
|
-
import {ref} from 'vue'
|
|
7
|
-
import {VBtn} from 'vuetify/components/VBtn'
|
|
8
|
-
|
|
9
|
-
interface Props extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
|
|
10
|
-
accept?: string // Accepted file MIME types or extensions for file selection.
|
|
11
|
-
multiple?: boolean // Allows selecting or uploading more than one file.
|
|
12
|
-
iconOnly?: boolean // icon name/class used in UI rendering
|
|
13
|
-
modelValue?: File | File[] | undefined // Bound value for v-model synchronization with the parent component.
|
|
14
|
-
tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Public props accepted by FileBtn.
|
|
19
|
-
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
20
|
-
*/
|
|
21
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
22
|
-
multiple: false,
|
|
23
|
-
accept: '*',
|
|
24
|
-
tooltip: 'Upload File',
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Custom events emitted by FileBtn.
|
|
29
|
-
* Parents can listen to these events to react to user actions and internal state changes.
|
|
30
|
-
*/
|
|
31
|
-
const emit = defineEmits<{
|
|
32
|
-
(event: 'update:modelValue', value: File | File[] | undefined): void
|
|
33
|
-
}>()
|
|
34
|
-
|
|
35
|
-
const fileInput = ref<HTMLInputElement>()
|
|
36
|
-
const files = ref<File | File[]>()
|
|
37
|
-
|
|
38
|
-
const openFileInput = () => {
|
|
39
|
-
fileInput.value?.click()
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const reset = () => {
|
|
43
|
-
files.value = undefined
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const emitFiles = () => {
|
|
47
|
-
emit('update:modelValue', files.value)
|
|
48
|
-
files.value = []
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
defineExpose({ reset })
|
|
52
|
-
</script>
|
|
53
|
-
|
|
54
|
-
<template>
|
|
55
|
-
<v-btn
|
|
56
|
-
v-bind="$attrs"
|
|
57
|
-
@click="openFileInput"
|
|
58
|
-
v-tooltip="tooltip"
|
|
59
|
-
>
|
|
60
|
-
<template
|
|
61
|
-
v-for="(_, name, index) in ($slots as {})"
|
|
62
|
-
:key="index"
|
|
63
|
-
#[name]="slotData"
|
|
64
|
-
>
|
|
65
|
-
<slot
|
|
66
|
-
:name="name"
|
|
67
|
-
v-bind="((slotData || {}) as object)"
|
|
68
|
-
/>
|
|
69
|
-
</template>
|
|
70
|
-
</v-btn>
|
|
71
|
-
<v-file-input
|
|
72
|
-
ref="fileInput"
|
|
73
|
-
v-model="files"
|
|
74
|
-
@update:modelValue="emitFiles"
|
|
75
|
-
:accept="props.accept"
|
|
76
|
-
:multiple="props.multiple"
|
|
77
|
-
style="display: none"
|
|
78
|
-
/>
|
|
79
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
/**
|
|
3
|
+
* FileBtn wraps file selection behavior into a reusable button interface that works with form and upload flows.
|
|
4
|
+
* This doc block is consumed by vue-docgen for generated API documentation.
|
|
5
|
+
*/
|
|
6
|
+
import {ref} from 'vue'
|
|
7
|
+
import {VBtn} from 'vuetify/components/VBtn'
|
|
8
|
+
|
|
9
|
+
interface Props extends /* @vue-ignore */ InstanceType<typeof VBtn['$props']> {
|
|
10
|
+
accept?: string // Accepted file MIME types or extensions for file selection.
|
|
11
|
+
multiple?: boolean // Allows selecting or uploading more than one file.
|
|
12
|
+
iconOnly?: boolean // icon name/class used in UI rendering
|
|
13
|
+
modelValue?: File | File[] | undefined // Bound value for v-model synchronization with the parent component.
|
|
14
|
+
tooltip?: string | Record<string,any> | undefined // Tooltip text or config object shown for the action control.
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Public props accepted by FileBtn.
|
|
19
|
+
* Document each prop field with intent, defaults, and side effects for clear generated docs.
|
|
20
|
+
*/
|
|
21
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
22
|
+
multiple: false,
|
|
23
|
+
accept: '*',
|
|
24
|
+
tooltip: 'Upload File',
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Custom events emitted by FileBtn.
|
|
29
|
+
* Parents can listen to these events to react to user actions and internal state changes.
|
|
30
|
+
*/
|
|
31
|
+
const emit = defineEmits<{
|
|
32
|
+
(event: 'update:modelValue', value: File | File[] | undefined): void
|
|
33
|
+
}>()
|
|
34
|
+
|
|
35
|
+
const fileInput = ref<HTMLInputElement>()
|
|
36
|
+
const files = ref<File | File[]>()
|
|
37
|
+
|
|
38
|
+
const openFileInput = () => {
|
|
39
|
+
fileInput.value?.click()
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const reset = () => {
|
|
43
|
+
files.value = undefined
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const emitFiles = () => {
|
|
47
|
+
emit('update:modelValue', files.value)
|
|
48
|
+
files.value = []
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
defineExpose({ reset })
|
|
52
|
+
</script>
|
|
53
|
+
|
|
54
|
+
<template>
|
|
55
|
+
<v-btn
|
|
56
|
+
v-bind="$attrs"
|
|
57
|
+
@click="openFileInput"
|
|
58
|
+
v-tooltip="tooltip"
|
|
59
|
+
>
|
|
60
|
+
<template
|
|
61
|
+
v-for="(_, name, index) in ($slots as {})"
|
|
62
|
+
:key="index"
|
|
63
|
+
#[name]="slotData"
|
|
64
|
+
>
|
|
65
|
+
<slot
|
|
66
|
+
:name="name"
|
|
67
|
+
v-bind="((slotData || {}) as object)"
|
|
68
|
+
/>
|
|
69
|
+
</template>
|
|
70
|
+
</v-btn>
|
|
71
|
+
<v-file-input
|
|
72
|
+
ref="fileInput"
|
|
73
|
+
v-model="files"
|
|
74
|
+
@update:modelValue="emitFiles"
|
|
75
|
+
:accept="props.accept"
|
|
76
|
+
:multiple="props.multiple"
|
|
77
|
+
style="display: none"
|
|
78
|
+
/>
|
|
79
|
+
</template>
|