Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Wirekit Laravel Package

pushery/wirekit

WireKit is a free, open-source UI component library for Laravel Livewire. Build dashboards and marketing pages with Tailwind CSS v4 and Alpine.js—themeable, accessible, dark-mode aware components for forms, navigation, overlays, layouts, and more.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Steps

  1. Installation

    composer require pushery/wirekit
    

    Add to your layout:

    <head>
        @wirekitStyles
        @vite(['resources/css/app.css', 'resources/js/app.js'])
    </head>
    <body>
        {{ $slot }}
        @wirekitScripts
    </body>
    

    Include Blade source path in app.css:

    @source '../../vendor/pushery/wirekit/resources/views/**/*.blade.php';
    
  2. First Component Use a basic form component in a Livewire blade:

    <x-wirekit::input
        label="Email"
        type="email"
        name="email"
        wire:model="email"
    />
    
  3. Verify Setup Run the CLI doctor to check for common issues:

    php artisan wirekit:doctor
    

First Use Case

Replace a vanilla Livewire form with WireKit’s pre-styled components:

<x-wirekit::form wire:submit="save">
    <x-wirekit::input label="Username" wire:model="username" />
    <x-wirekit::button type="submit">Save</x-wirekit::button>
</x-wirekit::form>

Key: Leverage wire:model for Livewire integration while gaining Tailwind-styled UI.


Implementation Patterns

Core Workflows

  1. Component Composition Use slots for custom content (e.g., dropdown triggers):

    <x-wirekit::dropdown>
        <x-slot:trigger>
            <x-wirekit::button>Menu</x-wirekit::button>
        </x-slot:trigger>
        <x-wirekit::dropdown.item>Item 1</x-wirekit::dropdown.item>
    </x-wirekit::dropdown>
    
  2. Livewire Integration Bind stateful controls with wire:model:

    <x-wirekit::slider
        label="Volume"
        wire:model="volume"
        :min="0"
        :max="100"
    />
    

    Tip: Use .debounce or .lazy for sliders to avoid excessive Livewire updates.

  3. Theming Override CSS variables in app.css:

    @layer base {
        :root {
            --color-wk-accent: var(--color-blue-600);
        }
    }
    
  4. Dark Mode WireKit is dark-mode aware by default. Use dark: variants in Tailwind:

    <x-wirekit::button class="dark:bg-gray-800">Toggle</x-wirekit::button>
    

Integration Tips

  • Icons: Use semantic aliases (e.g., icon="copy"). Configure presets in config/wirekit.php:
    'icons' => [
        'presets' => ['heroicons', 'lucide'],
    ],
    
  • Charts: Switch libraries via config:
    'charts' => [
        'library' => 'apexcharts', // or 'chartjs'
    ],
    
  • Forms: Use <x-wirekit::form> with wire:submit for validation-aware submissions.

Advanced Patterns

  1. Event Listeners Listen to component events (e.g., tab changes):

    <x-wirekit::tabs x-on:wirekit:tab-changed="$wire.onTabChanged($event.detail.tab)">
        <!-- tabs -->
    </x-wirekit::tabs>
    

    Livewire Method:

    public function onTabChanged($tab) {
        $this->activeTab = $tab;
    }
    
  2. Custom Components Extend WireKit’s structure:

    <x-wirekit::card>
        <x-slot:header>
            <h3>Custom Card</h3>
        </x-slot:header>
        <p>Content here.</p>
    </x-wirekit::card>
    
  3. CLI Introspection Inspect components dynamically:

    php artisan wirekit:show dropdown --as=json
    

Gotchas and Tips

Pitfalls

  1. Livewire Binding

    • Issue: Stateful controls (e.g., <x-wirekit::slider>) may trigger excessive Livewire updates if not debounced.
    • Fix: Use wire:model.lazy or wire:model.debounce.500ms.
  2. Icon Aliases

    • Issue: Custom icon aliases may fail if not configured in config/wirekit.php.
    • Fix: Verify presets and use the icon documentation.
  3. Editor Extensions

    • Issue: <x-wirekit::editor>’s extensions prop defaults to [] (not ['StarterKit']).
    • Fix: Ensure your window.tiptapEditor factory handles extensions independently.
  4. Dark Mode Contrast

    • Issue: Decorative borders may trigger false WCAG failures.
    • Fix: Use wirekit:doctor:a11y --theme-contrast to audit and exempt decorative borders.
  5. Multi-Select Pre-Selection

    • Issue: :value prop on <x-wirekit::multi-select> may not work if passed incorrectly.
    • Fix: Use an array of option keys (e.g., :value="['php', 'js']").

Debugging

  • Unknown Props: Enable WireKit’s debug mode to catch invalid props in tests:
    // In a test:
    $this->assertWireKitPropWarning('invalid-prop');
    
  • CLI Doctor: Run php artisan wirekit:doctor to diagnose setup issues.
  • Manifests: Use wirekit:export-json to generate machine-readable component schemas.

Extension Points

  1. Custom Themes Override CSS variables globally or per-component:

    .custom-theme .wk-button {
        --color-wk-accent: #ff0000;
    }
    
  2. Slot Overrides Replace default slots (e.g., <x-slot:trigger> in dropdowns) for full control.

  3. Chart Libraries Mix chartjs and apexcharts by overriding per-instance:

    <x-wirekit::chart library="apexcharts" ...>
    
  4. Accessibility Use wirekit:doctor:a11y to audit contrast and keyboard navigation.

Pro Tips

  • Component Discovery: Browse the live docs for interactive examples.
  • Performance: Lazy-load heavy components (e.g., charts) with Alpine.js:
    <x-wirekit::chart x-data="{ loaded: false }" x-on:load="loaded = true" ...>
        <div x-show="loaded">...</div>
    </x-wirekit::chart>
    
  • Livewire + Alpine: Combine wire:model with Alpine for reactive UIs:
    <x-wirekit::input
        wire:model="search"
        x-model="localSearch"
        x-on:input="$wire.set('search', $event.target.value)"
    />
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
aimeos/prisma
besmartand-pro/php-quality-config
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor
spatie/laravel-javascript-views