SidebarRail.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. <script setup lang="ts">
  2. import type { HTMLAttributes } from "vue"
  3. import { cn } from '@/Packages/Shadcn/Lib/utils'
  4. import { useSidebar } from "./utils"
  5. const props = defineProps<{
  6. class?: HTMLAttributes["class"]
  7. }>()
  8. const { toggleSidebar } = useSidebar()
  9. </script>
  10. <template>
  11. <button
  12. data-sidebar="rail"
  13. data-slot="sidebar-rail"
  14. aria-label="Toggle Sidebar"
  15. :tabindex="-1"
  16. title="Toggle Sidebar"
  17. :class="cn(
  18. 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',
  19. 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',
  20. '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
  21. 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',
  22. '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
  23. '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
  24. props.class,
  25. )"
  26. @click="toggleSidebar"
  27. >
  28. <slot />
  29. </button>
  30. </template>