Installation
composer require wishborn/fancy-flux
php artisan vendor:publish --tag=fancy-flux-config
Configure the prefix in config/fancy-flux.php or .env (e.g., FANCY_FLUX_PREFIX=fancy).
First Use Case: Carousel
use Wishborn\FancyFlux\Components\Carousel;
class MyComponent extends Component {
public function render() {
return view('livewire.my-component')->with([
'carouselItems' => ['Item 1', 'Item 2', 'Item 3'],
]);
}
}
In Blade:
<x-fancy::carousel :items="$carouselItems" />
First Use Case: Color Picker
use Wishborn\FancyFlux\Components\ColorPicker;
class MyComponent extends Component {
public $selectedColor = '#000000';
public function render() {
return view('livewire.my-component');
}
}
In Blade:
<x-fancy::color-picker wire:model="selectedColor" />
First Use Case: Emoji Select
use Wishborn\FancyFlux\Components\EmojiSelect;
class MyComponent extends Component {
public $selectedEmoji = '';
public function render() {
return view('livewire.my-component');
}
}
In Blade:
<x-fancy::emoji-select wire:model="selectedEmoji" />
Component Registration
Use the use_flux_namespace config to auto-register components under the flux namespace (e.g., <x-flux.fancy::carousel>). Disable if conflicts arise.
Dynamic Data Binding
All components support Livewire’s wire:model for two-way binding. Example:
<x-fancy::color-picker wire:model="user.profile_color" />
Customization via Props Pass props to override defaults:
<x-fancy::carousel
:items="$items"
:loop="true"
:autoplay="5000"
:per-page="3"
/>
Slot Support Use slots for custom content (e.g., carousel item templates):
<x-fancy::carousel>
<x-slot name="item">
<div class="p-4 bg-white rounded-lg">
{{ $item }}
</div>
</x-slot>
</x-flux.fancy::carousel>
Theming
Override Tailwind/Flux styles via config/fancy-flux.php:
'theme' => [
'carousel' => [
'container' => 'bg-gray-100',
'item' => 'p-4',
],
],
Or extend the package’s CSS in your assets.
Integration with Forms
Use wire:model for form fields (e.g., emoji picker for comments):
<x-fancy::emoji-select wire:model="comment.emoji" />
Lazy Loading
Dynamically load components via Alpine.js or Livewire’s mount():
public function mount() {
$this->loadCarouselItems = false;
}
<div x-data="{ showCarousel: false }">
<button @click="showCarousel = true">Load Carousel</button>
<x-fancy::carousel
x-show="showCarousel"
:items="$carouselItems"
/>
</div>
Server-Side Logic Pre-process data in Livewire methods:
public function updateCarouselItems() {
$this->carouselItems = Cache::remember('carousel_items', now()->addHours(1), function () {
return Item::all()->pluck('name');
});
}
Flux Compatibility
Ensure your Flux version supports the package (check composer.json for flux dependency).
Asset Management Publish assets for customization:
php artisan vendor:publish --tag=fancy-flux-assets
Testing Use Livewire’s testing utilities:
$this->assertComponentRendered('fancy::carousel');
$this->assertEmitted('carousel-item-selected', ['item' => 'Item 1']);
Localization
Extend the package’s language files (resources/lang) for multi-language support.
Namespace Conflicts
prefix in config (e.g., fancy_) and use <x-fancy_::carousel>.Livewire Version Mismatch
composer.json for livewire/livewire compatibility. Downgrade/upgrade as needed.Asset Loading
npm run dev or npm run build after publishing assets.Environment-Specific Config
.env overrides (e.g., FANCY_FLUX_PREFIX=prod_fancy) and restart the server.Performance with Large Datasets
<x-fancy::carousel :items="$chunkedItems[0]" />
<button wire:click="loadMore">Load More</button>
Component Not Found
prefix and namespace usage (e.g., <x-fancy::carousel> vs <x-flux.fancy::carousel>).app/Providers/AppServiceProvider.php:
public function boot() {
Flux::registerComponents([
\Wishborn\FancyFlux\Components\Carousel::class,
]);
}
Styling Issues
public/vendor/fancy-flux/css/fancy-flux.css) for overrides.Livewire Events Not Firing
wire:model or wire:click is correctly bound.protected $listeners = ['carousel-item-selected' => 'handleSelection'];
Demo Routes Enabled
enable_demo_routes = false in config or .env.Extending Components Create child components for custom logic:
class CustomCarousel extends Carousel {
public function render() {
return view('components.custom-carousel')->with([
'items' => $this->items,
]);
}
}
Accessibility Add ARIA attributes via props:
<x-fancy::emoji-select
wire:model="emoji"
aria-label="Select an emoji for your message"
/>
Dark Mode Support Use Flux’s dark mode classes or extend the package’s theme:
'theme' => [
'dark' => [
'carousel' => [
'container' => 'bg-gray-800',
],
],
],
Server-Side Rendering
For SEO, pre-render components in Livewire’s hydrate() or use @once directives:
@once
<x-fancy::carousel :items="$seoItems" />
@endonce
Performance Optimization
lazy prop to load images on scroll.:colors="$limitedPalette".<x-fancy::emoji-select :emojis="$smileys" />
How can I help you explore Laravel packages today?