@bagelink/vue 0.0.1147 → 0.0.1155
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/common-C_IH8b5S.cjs +12580 -0
- package/dist/common-DoeNgx31.js +12579 -0
- package/dist/components/AddressSaerch.vue.d.ts +7 -0
- package/dist/components/AddressSaerch.vue.d.ts.map +1 -0
- package/dist/components/ComboBox.vue.d.ts +3 -3
- package/dist/components/Comments.vue.d.ts +2 -2
- package/dist/components/ContactSubmissions.vue.d.ts +2 -2
- package/dist/components/DataPreview.vue.d.ts +12 -35
- package/dist/components/DataPreview.vue.d.ts.map +1 -1
- package/dist/components/DataTable/DataTable.vue.d.ts +1 -1
- package/dist/components/DataTable/DataTable.vue.d.ts.map +1 -1
- package/dist/components/DataTable/useTableData.d.ts +10 -2
- package/dist/components/DataTable/useTableData.d.ts.map +1 -1
- package/dist/components/Draggable/Draggable.vue.d.ts +45 -0
- package/dist/components/Draggable/Draggable.vue.d.ts.map +1 -0
- package/dist/components/Draggable/index.d.ts +5 -0
- package/dist/components/Draggable/index.d.ts.map +1 -0
- package/dist/components/Draggable/useDraggable.d.ts +31 -0
- package/dist/components/Draggable/useDraggable.d.ts.map +1 -0
- package/dist/components/Draggable/vDraggable.d.ts +4 -0
- package/dist/components/Draggable/vDraggable.d.ts.map +1 -0
- package/dist/components/FormSchema.vue.d.ts +4 -5
- package/dist/components/LangText.vue.d.ts +2 -2
- package/dist/components/ListView.vue.d.ts.map +1 -1
- package/dist/components/ModalBglForm.vue.d.ts +20 -21
- package/dist/components/PersonPreview.vue.d.ts +4 -5
- package/dist/components/PersonPreviewFormkit.vue.d.ts +3 -4
- package/dist/components/Popover.vue.d.ts +10 -0
- package/dist/components/Popover.vue.d.ts.map +1 -0
- package/dist/components/RTXEditor.vue.d.ts +3 -3
- package/dist/components/TabbedLayout.vue.d.ts +4 -5
- package/dist/components/TableSchema.vue.d.ts +2 -2
- package/dist/components/TableSchema.vue.d.ts.map +1 -1
- package/dist/components/charts/BarChart.vue.d.ts +2 -2
- package/dist/components/form/BagelForm.vue.d.ts.map +1 -1
- package/dist/components/form/FieldArray.vue.d.ts.map +1 -1
- package/dist/components/form/ItemRef.vue.d.ts +3 -5
- package/dist/components/form/ItemRef.vue.d.ts.map +1 -1
- package/dist/components/form/MaterialIcon.vue.d.ts +3 -4
- package/dist/components/form/PlainInputField.vue.d.ts +3 -3
- package/dist/components/form/index.d.ts +0 -1
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/inputs/CurrencyInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/DatetimeInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/DurationInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/DynamicLinkField.vue.d.ts +3 -3
- package/dist/components/form/inputs/EmailInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/FloatInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/IntInput.vue.d.ts +3 -3
- package/dist/components/form/inputs/LinkField.vue.d.ts +3 -3
- package/dist/components/form/inputs/Password.vue.d.ts +3 -3
- package/dist/components/form/inputs/PlainText.vue.d.ts +3 -3
- package/dist/components/form/inputs/ReadOnlyInput.vue.d.ts +2 -2
- package/dist/components/form/inputs/RichText/Toolbar.vue.d.ts +14 -0
- package/dist/components/form/inputs/RichText/Toolbar.vue.d.ts.map +1 -0
- package/dist/components/form/inputs/RichText/formatting.d.ts +11 -0
- package/dist/components/form/inputs/RichText/formatting.d.ts.map +1 -0
- package/dist/components/form/inputs/RichText/richtext-types.d.ts +3 -0
- package/dist/components/form/inputs/RichText/richtext-types.d.ts.map +1 -0
- package/dist/components/form/inputs/RichText2/Toolbar.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichText2/index.vue.d.ts +0 -1
- package/dist/components/form/inputs/RichText2/index.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/RichTextEditor.vue.d.ts +3 -3
- package/dist/components/form/inputs/SelectField.vue.d.ts +8 -6
- package/dist/components/form/inputs/SelectField.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts +4 -4
- package/dist/components/form/inputs/TextArea.vue.d.ts +3 -3
- package/dist/components/form/inputs/TextInput.vue.d.ts +1 -1
- package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/Upload/UploadFile.vue.d.ts +86 -0
- package/dist/components/form/inputs/Upload/UploadFile.vue.d.ts.map +1 -0
- package/dist/components/formkit/AddressArray.vue.d.ts +2 -2
- package/dist/components/formkit/BankDetailsArray.vue.d.ts +2 -2
- package/dist/components/formkit/ContactArrayFormKit.vue.d.ts +2 -2
- package/dist/components/formkit/FileUploader.vue.d.ts +2 -2
- package/dist/components/formkit/MiscFields.vue.d.ts +2 -2
- package/dist/components/formkit/Toggle.vue.d.ts +2 -2
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/layout/Layout.vue.d.ts +1 -1
- package/dist/components/layout/Layout.vue.d.ts.map +1 -1
- package/dist/components/sortable/Animation.d.ts +43 -0
- package/dist/components/sortable/Animation.d.ts.map +1 -0
- package/dist/components/sortable/BrowserInfo.d.ts +7 -0
- package/dist/components/sortable/BrowserInfo.d.ts.map +1 -0
- package/dist/components/sortable/EventDispatcher.d.ts +13 -0
- package/dist/components/sortable/EventDispatcher.d.ts.map +1 -0
- package/dist/components/sortable/PluginManager.d.ts +27 -0
- package/dist/components/sortable/PluginManager.d.ts.map +1 -0
- package/dist/components/sortable/Sortable.d.ts +81 -0
- package/dist/components/sortable/Sortable.d.ts.map +1 -0
- package/dist/components/sortable/index.d.ts +5 -0
- package/dist/components/sortable/index.d.ts.map +1 -0
- package/dist/components/sortable/utils.d.ts +49 -0
- package/dist/components/sortable/utils.d.ts.map +1 -0
- package/dist/components/whatsapp/form/MsgTemplate.vue.d.ts +3 -4
- package/dist/components/whatsapp/form/TextVariableExamples.vue.d.ts +2 -2
- package/dist/composables/drag-n-drop/useDraggable.d.ts +2 -0
- package/dist/composables/drag-n-drop/useDraggable.d.ts.map +1 -0
- package/dist/composables/useSchemaField.d.ts +15 -0
- package/dist/composables/useSchemaField.d.ts.map +1 -0
- package/dist/editor-CUDRLdmS.js +4 -0
- package/dist/editor-Cu374vEW.cjs +4 -0
- package/dist/editor-a8DSbb6P.js +4 -0
- package/dist/editor-xBt_vIha.cjs +4 -0
- package/dist/heic2any-8wMqMfB_.js +933 -0
- package/dist/heic2any-BrqcNzfV.js +935 -0
- package/dist/heic2any-C8KwH72N.cjs +934 -0
- package/dist/heic2any-k9wDCKka.cjs +932 -0
- package/dist/index-DiG-xM9T.cjs +35016 -0
- package/dist/index-nGuSAiY2.js +35017 -0
- package/dist/index.cjs +1322 -884
- package/dist/index.mjs +1324 -886
- package/dist/plugins/drag-n-drop/draggable.d.ts +4 -0
- package/dist/plugins/drag-n-drop/draggable.d.ts.map +1 -0
- package/dist/plugins/drag-n-drop/droppable.d.ts +4 -0
- package/dist/plugins/drag-n-drop/droppable.d.ts.map +1 -0
- package/dist/plugins/drag-n-drop/index.d.ts +5 -0
- package/dist/plugins/drag-n-drop/index.d.ts.map +1 -0
- package/dist/plugins/drag-n-drop/useDraggable.d.ts +8 -0
- package/dist/plugins/drag-n-drop/useDraggable.d.ts.map +1 -0
- package/dist/plugins/drag-n-drop/useDroppable.d.ts +7 -0
- package/dist/plugins/drag-n-drop/useDroppable.d.ts.map +1 -0
- package/dist/style.css +186 -208
- package/dist/types/materialIcon.d.ts +2 -0
- package/dist/types/materialIcon.d.ts.map +1 -0
- package/dist/utils/objects.d.ts +0 -1
- package/package.json +1 -1
- package/src/components/DataPreview.vue +45 -116
- package/src/components/DataTable/DataTable.vue +18 -12
- package/src/components/DataTable/useTableData.ts +50 -16
- package/src/components/Draggable/Draggable.vue +64 -0
- package/src/components/Draggable/index.ts +4 -0
- package/src/components/Draggable/useDraggable.ts +632 -0
- package/src/components/Draggable/vDraggable.ts +17 -0
- package/src/components/ListView.vue +6 -2
- package/src/components/Pill.vue +1 -1
- package/src/components/form/BagelForm.vue +16 -101
- package/src/components/form/FieldArray.vue +21 -3
- package/src/components/form/index.ts +0 -1
- package/src/components/form/inputs/TextInput.vue +5 -5
- package/src/components/index.ts +5 -1
- package/src/composables/useSchemaField.ts +193 -0
- package/src/styles/text.css +15 -11
- package/dist/components/Accordion.d.ts +0 -12
- package/dist/components/Accordion.d.ts.map +0 -1
- package/dist/components/AccordionItem.d.ts +0 -34
- package/dist/components/AccordionItem.d.ts.map +0 -1
- package/dist/components/Alert.d.ts +0 -34
- package/dist/components/Alert.d.ts.map +0 -1
- package/dist/components/Avatar.d.ts +0 -36
- package/dist/components/Avatar.d.ts.map +0 -1
- package/dist/components/Badge.d.ts +0 -22
- package/dist/components/Badge.d.ts.map +0 -1
- package/dist/components/BglVideo.d.ts +0 -20
- package/dist/components/BglVideo.d.ts.map +0 -1
- package/dist/components/Btn.d.ts +0 -99
- package/dist/components/Btn.d.ts.map +0 -1
- package/dist/components/Card.d.ts +0 -39
- package/dist/components/Card.d.ts.map +0 -1
- package/dist/components/Carousel.d.ts +0 -74
- package/dist/components/Carousel.d.ts.map +0 -1
- package/dist/components/DataPreview.d.ts +0 -42
- package/dist/components/DataPreview.d.ts.map +0 -1
- package/dist/components/Drop.vue.d.ts +0 -34
- package/dist/components/Drop.vue.d.ts.map +0 -1
- package/dist/components/FileUploader.vue.d.ts +0 -60
- package/dist/components/FileUploader.vue.d.ts.map +0 -1
- package/dist/components/Flag.d.ts +0 -20
- package/dist/components/Flag.d.ts.map +0 -1
- package/dist/components/ListItem.d.ts +0 -34
- package/dist/components/ListItem.d.ts.map +0 -1
- package/dist/components/ListView.d.ts +0 -13
- package/dist/components/ListView.d.ts.map +0 -1
- package/dist/components/MapEmbed.d.ts +0 -3
- package/dist/components/MapEmbed.d.ts.map +0 -1
- package/dist/components/MaterialIcon.d.ts +0 -26
- package/dist/components/MaterialIcon.d.ts.map +0 -1
- package/dist/components/Modal.d.ts +0 -46
- package/dist/components/Modal.d.ts.map +0 -1
- package/dist/components/ModalConfirm.d.ts +0 -24
- package/dist/components/ModalConfirm.d.ts.map +0 -1
- package/dist/components/ModalForm.d.ts +0 -78
- package/dist/components/ModalForm.d.ts.map +0 -1
- package/dist/components/NavBar.d.ts +0 -64
- package/dist/components/NavBar.d.ts.map +0 -1
- package/dist/components/PageTitle.d.ts +0 -24
- package/dist/components/PageTitle.d.ts.map +0 -1
- package/dist/components/RouterWrapper.d.ts +0 -3
- package/dist/components/RouterWrapper.d.ts.map +0 -1
- package/dist/components/TableSchema.d.ts +0 -35
- package/dist/components/TableSchema.d.ts.map +0 -1
- package/dist/components/Title.d.ts +0 -42
- package/dist/components/Title.d.ts.map +0 -1
- package/dist/components/TopBar.d.ts +0 -12
- package/dist/components/TopBar.d.ts.map +0 -1
- package/dist/components/dashboard/Lineart.d.ts +0 -20
- package/dist/components/dashboard/Lineart.d.ts.map +0 -1
- package/dist/components/form/BglField.d.ts +0 -25
- package/dist/components/form/BglField.d.ts.map +0 -1
- package/dist/components/form/BglForm.d.ts +0 -75
- package/dist/components/form/BglForm.d.ts.map +0 -1
- package/dist/components/form/inputs/CheckInput.d.ts +0 -56
- package/dist/components/form/inputs/CheckInput.d.ts.map +0 -1
- package/dist/components/form/inputs/Checkbox.d.ts +0 -16
- package/dist/components/form/inputs/Checkbox.d.ts.map +0 -1
- package/dist/components/form/inputs/ColorPicker.d.ts +0 -48
- package/dist/components/form/inputs/ColorPicker.d.ts.map +0 -1
- package/dist/components/form/inputs/DateInput.d.ts +0 -64
- package/dist/components/form/inputs/DateInput.d.ts.map +0 -1
- package/dist/components/form/inputs/DatePicker.d.ts +0 -33
- package/dist/components/form/inputs/DatePicker.d.ts.map +0 -1
- package/dist/components/form/inputs/FileUpload.d.ts +0 -108
- package/dist/components/form/inputs/FileUpload.d.ts.map +0 -1
- package/dist/components/form/inputs/JSONInput.d.ts +0 -53
- package/dist/components/form/inputs/JSONInput.d.ts.map +0 -1
- package/dist/components/form/inputs/RadioGroup.d.ts +0 -42
- package/dist/components/form/inputs/RadioGroup.d.ts.map +0 -1
- package/dist/components/form/inputs/RadioPillsInput.d.ts +0 -48
- package/dist/components/form/inputs/RadioPillsInput.d.ts.map +0 -1
- package/dist/components/form/inputs/RichText.d.ts +0 -20
- package/dist/components/form/inputs/RichText.d.ts.map +0 -1
- package/dist/components/form/inputs/RichText2/Toolbar.d.ts +0 -22
- package/dist/components/form/inputs/RichText2/Toolbar.d.ts.map +0 -1
- package/dist/components/form/inputs/RichText2/index.d.ts +0 -24
- package/dist/components/form/inputs/RichText2/index.d.ts.map +0 -1
- package/dist/components/form/inputs/SelectInput.d.ts +0 -55
- package/dist/components/form/inputs/SelectInput.d.ts.map +0 -1
- package/dist/components/form/inputs/SignaturePad.d.ts +0 -72
- package/dist/components/form/inputs/SignaturePad.d.ts.map +0 -1
- package/dist/components/form/inputs/TableField.d.ts +0 -45
- package/dist/components/form/inputs/TableField.d.ts.map +0 -1
- package/dist/components/form/inputs/TelInput.d.ts +0 -241
- package/dist/components/form/inputs/TelInput.d.ts.map +0 -1
- package/dist/components/form/inputs/TextInput.d.ts +0 -90
- package/dist/components/form/inputs/TextInput.d.ts.map +0 -1
- package/dist/components/form/inputs/ToggleInput.d.ts +0 -58
- package/dist/components/form/inputs/ToggleInput.d.ts.map +0 -1
- package/dist/components/layout/BottomMenu.d.ts +0 -27
- package/dist/components/layout/BottomMenu.d.ts.map +0 -1
- package/dist/components/layout/Layout.d.ts +0 -58
- package/dist/components/layout/Layout.d.ts.map +0 -1
- package/dist/components/layout/SidebarMenu.d.ts +0 -38
- package/dist/components/layout/SidebarMenu.d.ts.map +0 -1
- package/dist/components/layout/TabbedLayout.d.ts +0 -42
- package/dist/components/layout/TabbedLayout.d.ts.map +0 -1
- package/dist/components/layout/Tabs.d.ts +0 -31
- package/dist/components/layout/Tabs.d.ts.map +0 -1
- package/dist/components/layout/TabsBody.d.ts +0 -23
- package/dist/components/layout/TabsBody.d.ts.map +0 -1
- package/dist/components/layout/TabsNav.d.ts +0 -35
- package/dist/components/layout/TabsNav.d.ts.map +0 -1
- package/dist/styles.css +0 -14073
- package/dist/vue.css +0 -14073
- package/src/components/form/BglField.vue +0 -132
- package/src/components/form/BglForm.vue +0 -157
|
@@ -4,10 +4,25 @@ import { computed, ref } from 'vue'
|
|
|
4
4
|
|
|
5
5
|
const NON_DIGIT_REGEX = /[^\d.-]/g
|
|
6
6
|
|
|
7
|
+
// Components that should receive their value as a child/slot instead of a prop
|
|
8
|
+
const SLOT_VALUE_COMPONENTS = new Set(['div', 'span', 'p'])
|
|
9
|
+
|
|
10
|
+
// Components that should receive their value as src attribute
|
|
11
|
+
const SRC_VALUE_COMPONENTS = new Set(['img', 'iframe'])
|
|
12
|
+
|
|
7
13
|
export interface UseTableDataOptions<T> extends Omit<TableDataOptions<T>, 'sortField' | 'sortDirection'> {
|
|
8
14
|
onSort?: (field: string, direction: SortDirectionsT) => void
|
|
9
15
|
}
|
|
10
16
|
|
|
17
|
+
interface TransformedDataBase {
|
|
18
|
+
[key: `_transformed_${string}`]: any
|
|
19
|
+
[key: `_slot_${string}`]: boolean
|
|
20
|
+
[key: `_src_${string}`]: boolean
|
|
21
|
+
[key: `_original_${string}`]: any
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
type TransformedData<T> = T & TransformedDataBase
|
|
25
|
+
|
|
11
26
|
export function useTableData<T extends Record<string, any>>(options: UseTableDataOptions<T>) {
|
|
12
27
|
// Create reactive reference to data prop
|
|
13
28
|
|
|
@@ -21,19 +36,40 @@ export function useTableData<T extends Record<string, any>>(options: UseTableDat
|
|
|
21
36
|
data: options.data.value,
|
|
22
37
|
}))
|
|
23
38
|
|
|
24
|
-
function transform(rowData: T): T {
|
|
25
|
-
const transformed = { ...rowData }
|
|
39
|
+
function transform(rowData: T): TransformedData<T> {
|
|
40
|
+
const transformed = { ...rowData } as TransformedData<T>
|
|
26
41
|
const schemaFields = computedSchema.value.filter((f: any) => f.id)
|
|
27
42
|
|
|
28
43
|
for (const field of schemaFields) {
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
44
|
+
const fieldId = field.id as keyof T
|
|
45
|
+
const fieldData = rowData[fieldId]
|
|
46
|
+
const transformKey = `_transformed_${String(fieldId)}` as keyof TransformedDataBase
|
|
47
|
+
const slotKey = `_slot_${String(fieldId)}` as keyof TransformedDataBase
|
|
48
|
+
const srcKey = `_src_${String(fieldId)}` as keyof TransformedDataBase
|
|
49
|
+
const originalKey = `_original_${String(fieldId)}` as keyof TransformedDataBase
|
|
50
|
+
|
|
51
|
+
// Store the original value
|
|
52
|
+
;(transformed as TransformedDataBase)[originalKey] = fieldData
|
|
53
|
+
|
|
54
|
+
// Determine if this component should receive value as slot or src
|
|
55
|
+
const isSlotValueComponent = typeof field.$el === 'string' && SLOT_VALUE_COMPONENTS.has(field.$el)
|
|
56
|
+
const isSrcValueComponent = typeof field.$el === 'string' && SRC_VALUE_COMPONENTS.has(field.$el)
|
|
57
|
+
|
|
58
|
+
;(transformed as TransformedDataBase)[slotKey] = isSlotValueComponent
|
|
59
|
+
;(transformed as TransformedDataBase)[srcKey] = isSrcValueComponent
|
|
60
|
+
|
|
61
|
+
if (field.transform) {
|
|
62
|
+
const newFieldVal = field.transform(fieldData, rowData)
|
|
63
|
+
// Store transformed value in _transformed_ key but keep original in the main field
|
|
64
|
+
;(transformed as TransformedDataBase)[transformKey] = newFieldVal
|
|
65
|
+
} else {
|
|
66
|
+
;(transformed as TransformedDataBase)[transformKey] = fieldData
|
|
67
|
+
}
|
|
32
68
|
}
|
|
33
69
|
return transformed
|
|
34
70
|
}
|
|
35
71
|
|
|
36
|
-
const computedSortField = computed(() => `_transformed_${sortField.value}`)
|
|
72
|
+
const computedSortField = computed(() => sortField.value ? `_transformed_${sortField.value}` : '')
|
|
37
73
|
|
|
38
74
|
const computedData = computed(() => {
|
|
39
75
|
const currentData = options.data.value
|
|
@@ -44,29 +80,27 @@ export function useTableData<T extends Record<string, any>>(options: UseTableDat
|
|
|
44
80
|
return currentData
|
|
45
81
|
.map(transform)
|
|
46
82
|
.sort((a, z) => {
|
|
47
|
-
|
|
48
|
-
|
|
83
|
+
const aValue = (a as any)[computedSortField.value] ?? ''
|
|
84
|
+
const bValue = (z as any)[computedSortField.value] ?? ''
|
|
49
85
|
|
|
50
86
|
if (isDate(aValue) && isDate(bValue)) {
|
|
51
|
-
|
|
52
|
-
|
|
87
|
+
return sortDirection.value === 'ASC'
|
|
88
|
+
? new Date(aValue).getTime() - new Date(bValue).getTime()
|
|
89
|
+
: new Date(bValue).getTime() - new Date(aValue).getTime()
|
|
53
90
|
}
|
|
54
91
|
|
|
55
92
|
const numAValue = Number.parseInt(`${aValue}`.replaceAll(NON_DIGIT_REGEX, ''), 10)
|
|
56
93
|
const numBValue = Number.parseInt(`${bValue}`.replaceAll(NON_DIGIT_REGEX, ''), 10)
|
|
57
94
|
|
|
58
95
|
if (!Number.isNaN(numAValue) && !Number.isNaN(numBValue)) {
|
|
59
|
-
|
|
60
|
-
return numBValue - numAValue
|
|
96
|
+
return sortDirection.value === 'ASC' ? numAValue - numBValue : numBValue - numAValue
|
|
61
97
|
}
|
|
62
98
|
|
|
63
99
|
if (typeof aValue === 'string') {
|
|
64
|
-
|
|
65
|
-
return bValue.localeCompare(aValue)
|
|
100
|
+
return sortDirection.value === 'ASC' ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue)
|
|
66
101
|
}
|
|
67
102
|
|
|
68
|
-
|
|
69
|
-
return aValue < bValue ? 1 : -1
|
|
103
|
+
return sortDirection.value === 'ASC' ? (aValue < bValue ? -1 : 1) : (aValue < bValue ? 1 : -1)
|
|
70
104
|
})
|
|
71
105
|
})
|
|
72
106
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { ref, watch, onMounted, nextTick } from 'vue'
|
|
3
|
+
import type { DraggableEvent } from './useDraggable'
|
|
4
|
+
import { useDraggable } from './useDraggable'
|
|
5
|
+
|
|
6
|
+
const props = withDefaults(defineProps<{
|
|
7
|
+
modelValue?: any[]
|
|
8
|
+
group?: string
|
|
9
|
+
handle?: string
|
|
10
|
+
mode?: 'ghost' | 'line'
|
|
11
|
+
disabled?: boolean
|
|
12
|
+
}>(), {
|
|
13
|
+
mode: 'line',
|
|
14
|
+
disabled: false
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const emit = defineEmits<{
|
|
18
|
+
'update:modelValue': [value: any[]]
|
|
19
|
+
'start': [event: MouseEvent]
|
|
20
|
+
'end': [event: DraggableEvent]
|
|
21
|
+
}>()
|
|
22
|
+
|
|
23
|
+
const dragContainer = ref<HTMLElement>()
|
|
24
|
+
|
|
25
|
+
const { initDraggableContainer } = useDraggable({
|
|
26
|
+
group: props.group,
|
|
27
|
+
handle: props.handle,
|
|
28
|
+
mode: props.mode,
|
|
29
|
+
disabled: props.disabled,
|
|
30
|
+
items: props.modelValue,
|
|
31
|
+
onStart: (event) => { emit('start', event) },
|
|
32
|
+
onEnd: (event: DraggableEvent) => {
|
|
33
|
+
const newList = [...props.modelValue!]
|
|
34
|
+
const [removed] = newList.splice(event.oldIndex, 1)
|
|
35
|
+
newList.splice(event.newIndex, 0, removed)
|
|
36
|
+
emit('update:modelValue', newList)
|
|
37
|
+
|
|
38
|
+
emit('end', event)
|
|
39
|
+
nextTick(() => {
|
|
40
|
+
if (dragContainer.value) {
|
|
41
|
+
initDraggableContainer(dragContainer.value)
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
watch(() => props.modelValue, () => {
|
|
48
|
+
if (dragContainer.value) {
|
|
49
|
+
initDraggableContainer(dragContainer.value)
|
|
50
|
+
}
|
|
51
|
+
}, { deep: true })
|
|
52
|
+
|
|
53
|
+
onMounted(() => {
|
|
54
|
+
if (dragContainer.value) {
|
|
55
|
+
initDraggableContainer(dragContainer.value)
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<template>
|
|
61
|
+
<div ref="dragContainer">
|
|
62
|
+
<slot v-for="(item, index) in modelValue" :key="index" :item="item" :index="index" />
|
|
63
|
+
</div>
|
|
64
|
+
</template>
|