定制 mrshanebarron/dropdown 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

mrshanebarron/dropdown

最新稳定版本:v1.0.4

Composer 安装命令:

composer require mrshanebarron/dropdown

包简介

Dropdown menu component for Laravel - supports Livewire and Vue

README 文档

README

A dropdown menu component for Laravel applications. Supports various widths, alignments, and auto-close behaviors. Works with Livewire and Vue 3.

Installation

composer require mrshanebarron/dropdown

Livewire Usage

Basic Usage

<livewire:sb-dropdown>
    <x-slot name="trigger">
        <button>Options</button>
    </x-slot>

    <a href="#" class="block px-4 py-2 hover:bg-gray-100">Edit</a>
    <a href="#" class="block px-4 py-2 hover:bg-gray-100">Delete</a>
</livewire:sb-dropdown>

Right Aligned

<livewire:sb-dropdown align="right">
    <x-slot name="trigger">
        <button>Menu</button>
    </x-slot>

    <a href="#">Profile</a>
    <a href="#">Settings</a>
    <a href="#">Logout</a>
</livewire:sb-dropdown>

Custom Width

<livewire:sb-dropdown width="72">
    <x-slot name="trigger">
        <button>Wide Menu</button>
    </x-slot>

    <div class="p-4">Custom content here</div>
</livewire:sb-dropdown>

Livewire Props

Prop Type Default Description
align string 'left' Alignment: left, right, center
width string '48' Width: 48, 56, 64, 72, 96
close-on-click boolean true Close when item clicked
close-on-outside-click boolean true Close on outside click

Vue 3 Usage

Setup

import { SbDropdown, SbDropdownItem } from './vendor/sb-dropdown';
app.component('SbDropdown', SbDropdown);
app.component('SbDropdownItem', SbDropdownItem);

Basic Usage

<template>
  <SbDropdown>
    <template #trigger>
      <button class="px-4 py-2 bg-gray-100 rounded">
        Options
      </button>
    </template>

    <a href="#" class="block px-4 py-2 hover:bg-gray-100">Edit</a>
    <a href="#" class="block px-4 py-2 hover:bg-gray-100">Duplicate</a>
    <a href="#" class="block px-4 py-2 hover:bg-gray-100">Delete</a>
  </SbDropdown>
</template>

Alignment Options

<template>
  <!-- Left aligned (default) -->
  <SbDropdown align="left">...</SbDropdown>

  <!-- Right aligned -->
  <SbDropdown align="right">...</SbDropdown>

  <!-- Center aligned -->
  <SbDropdown align="center">...</SbDropdown>
</template>

Width Options

<template>
  <SbDropdown width="48">...</SbDropdown>  <!-- 12rem -->
  <SbDropdown width="56">...</SbDropdown>  <!-- 14rem -->
  <SbDropdown width="64">...</SbDropdown>  <!-- 16rem -->
  <SbDropdown width="72">...</SbDropdown>  <!-- 18rem -->
  <SbDropdown width="96">...</SbDropdown>  <!-- 24rem -->
</template>

User Menu Example

<template>
  <SbDropdown align="right" width="56">
    <template #trigger>
      <button class="flex items-center gap-2">
        <SbAvatar :src="user.avatar" :name="user.name" size="sm" />
        <span>{{ user.name }}</span>
      </button>
    </template>

    <div class="px-4 py-3 border-b">
      <p class="text-sm text-gray-900">{{ user.name }}</p>
      <p class="text-xs text-gray-500">{{ user.email }}</p>
    </div>

    <a href="/profile" class="block px-4 py-2 hover:bg-gray-100">Profile</a>
    <a href="/settings" class="block px-4 py-2 hover:bg-gray-100">Settings</a>

    <div class="border-t">
      <button @click="logout" class="block w-full px-4 py-2 text-left text-red-600 hover:bg-gray-100">
        Logout
      </button>
    </div>
  </SbDropdown>
</template>

Prevent Auto-Close

<template>
  <!-- Don't close when clicking items -->
  <SbDropdown :close-on-click="false">
    <template #trigger>
      <button>Filters</button>
    </template>

    <label class="flex items-center px-4 py-2">
      <input type="checkbox" v-model="filters.active" class="mr-2">
      Active
    </label>
    <label class="flex items-center px-4 py-2">
      <input type="checkbox" v-model="filters.archived" class="mr-2">
      Archived
    </label>
  </SbDropdown>
</template>

Vue Props

Prop Type Default Description
align String 'left' Position: left, right, center
width String '48' Width class suffix
closeOnClick Boolean true Close when content clicked
closeOnOutsideClick Boolean true Close on outside click

Slots

Slot Description
trigger Element that opens dropdown
default Dropdown menu content

Features

  • Auto-close: Closes on outside click and Escape key
  • Animations: Smooth fade and slide transitions
  • Flexible Width: Multiple preset width options
  • Alignment: Left, right, or center aligned

Accessibility

  • role="menu" attribute
  • aria-orientation="vertical"
  • Escape key closes menu
  • Focus management

Styling

Uses Tailwind CSS:

  • White background with shadow
  • Ring border effect
  • Smooth transition animation
  • Z-index for proper stacking

Requirements

  • PHP 8.1+
  • Laravel 10, 11, or 12
  • Tailwind CSS 3.x

License

MIT License

统计信息

  • 总下载量: 11
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: Blade

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-12-16