diff --git a/app/components/Draggable/ExampleOne.vue b/app/components/Draggable/ExampleOne.vue new file mode 100644 index 0000000..505a7f4 --- /dev/null +++ b/app/components/Draggable/ExampleOne.vue @@ -0,0 +1,66 @@ + + + + + + {{ item.value }} + + + diff --git a/app/components/Draggable/ExampleTwo.vue b/app/components/Draggable/ExampleTwo.vue new file mode 100644 index 0000000..f20c053 --- /dev/null +++ b/app/components/Draggable/ExampleTwo.vue @@ -0,0 +1,84 @@ + + + + + + + {{ job }} + + + + {{ item.value }} + + + + diff --git a/app/pages/components/Draggable.vue b/app/pages/components/Draggable.vue new file mode 100644 index 0000000..0d7b0f2 --- /dev/null +++ b/app/pages/components/Draggable.vue @@ -0,0 +1,32 @@ + + + + + + + Example One + + + + Single Draggable Area + + + + + + + + Example Two + + + + Multiple Draggable Areas + + + + + + diff --git a/app/pages/index.ts b/app/pages/index.ts index 4b9c550..ec75615 100644 --- a/app/pages/index.ts +++ b/app/pages/index.ts @@ -21,6 +21,7 @@ export { default as Combobox } from "./components/Combobox.vue" export { default as Command } from "./components/Command.vue" export { default as ConfirmDialog } from "./components/ConfirmDialog.vue" export { default as Dialog } from "./components/Dialog.vue" +export { default as Draggable } from "./components/Draggable.vue" export { default as Drawer } from "./components/Drawer.vue" export { default as DropdownMenu } from "./components/DropdownMenu.vue" export { default as Flasher } from "./components/Flasher.vue" diff --git a/app/router/index.ts b/app/router/index.ts index 8ab4844..ad949fe 100644 --- a/app/router/index.ts +++ b/app/router/index.ts @@ -25,6 +25,7 @@ import { Command, ConfirmDialog, Dialog, + Draggable, Drawer, DropdownMenu, Flasher, @@ -132,6 +133,12 @@ const routes = [ component: ConfirmDialog, meta: { layout: ComponentLayout, shadcn: false }, }, + { + name: "Draggable", + path: "/components/draggable", + component: Draggable, + meta: { layout: ComponentLayout, shadcn: false }, + }, { name: "Dropdown Menu", path: "/components/dropdown-menu", diff --git a/src/components/draggable/DraggableArea.vue b/src/components/draggable/DraggableArea.vue new file mode 100644 index 0000000..6c469e0 --- /dev/null +++ b/src/components/draggable/DraggableArea.vue @@ -0,0 +1,43 @@ + + + + + + + + + diff --git a/src/components/draggable/DraggableItem.vue b/src/components/draggable/DraggableItem.vue new file mode 100644 index 0000000..7fcc200 --- /dev/null +++ b/src/components/draggable/DraggableItem.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/src/components/draggable/index.ts b/src/components/draggable/index.ts new file mode 100644 index 0000000..c95ffdd --- /dev/null +++ b/src/components/draggable/index.ts @@ -0,0 +1,4 @@ +export { default as DraggableArea } from './DraggableArea.vue' +export { default as DraggableItem } from './DraggableItem.vue' + +export { useDraggable } from './useDraggable' diff --git a/src/components/draggable/useDraggable.ts b/src/components/draggable/useDraggable.ts new file mode 100644 index 0000000..6c07b34 --- /dev/null +++ b/src/components/draggable/useDraggable.ts @@ -0,0 +1,31 @@ +import { ref, type Ref } from 'vue' + +export type DraggableContext = { + draggedFromArea: Ref + draggedToArea: Ref + draggableItem: Ref + draggableIndex: Ref + resetDraggable: () => void +} + +const draggedFromArea = ref(null) +const draggedToArea = ref(null) +const draggableItem = ref(null) +const draggableIndex = ref(null) + +const resetDraggable = () => { + draggedFromArea.value = null + draggedToArea.value = null + draggableItem.value = null + draggableIndex.value = null +} + +export function useDraggable(): DraggableContext { + return { + draggedFromArea, + draggedToArea, + draggableItem, + draggableIndex, + resetDraggable, + } +} diff --git a/src/index.ts b/src/index.ts index ac5cfbb..96950d0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -28,6 +28,7 @@ export * from "@/components/collapsible" export * from "@/components/combobox" export * from "@/components/command" export * from "@/components/dialog" +export * from "@/components/draggable" export * from "@/components/drawer" export * from "@/components/dropdown-menu" export * from "@/components/input"