composer require parvion/accessibility
php artisan vendor:publish --tag=accessibility-config
@accessibility directive in your layout file (e.g., resources/views/layouts/app.blade.php).
@accessibility
Enable High Contrast Mode for users with visual impairments:
config/accessibility.php:
'high_contrast' => [
'enabled' => true,
'shortcuts' => [
'enabled' => true,
'modifiers' => ['alt'],
'key' => 'c',
],
],
Alt+C (default shortcut).Feature Toggling: Dynamically enable/disable features via config:
'features' => [
'font_size' => ['enabled' => true],
'skip_to_content' => ['enabled' => false], // Disable if redundant
],
Livewire/Alpine Integration: Reinitialize the toolbar after dynamic content updates:
// Livewire
window.addEventListener('livewire:navigated', () => {
window.accessibility?.reinit();
});
// Alpine.js
document.addEventListener('alpine:init', () => {
window.accessibility?.reinit();
});
Custom Shortcuts: Override defaults for consistency with your app’s keyboard scheme:
'global_shortcuts' => [
'toggle_panel' => [
'enabled' => true,
'modifiers' => ['ctrl'],
'key' => 'a', // Ctrl+A to match your app’s shortcuts
],
],
Theme Consistency: Match toolbar colors to your app’s design system:
'colors' => [
'primary' => '#2563eb', // Match your primary brand color
],
Conditional Loading: Disable the toolbar for admin users or specific routes:
@if(!auth()->user()->is_admin)
@accessibility
@endif
Localization: Translate feature names and tooltips via Laravel’s localization system:
'labels' => [
'high_contrast' => __('accessibility.high_contrast'),
],
Shortcut Conflicts:
Alt+S for save actions).Event Listeners tab) to inspect keyboard events.LocalStorage Quirks:
localStorage manually if users report persistent settings:
localStorage.removeItem('accessibility_settings');
store_settings in config for testing:
'store_settings' => env('APP_DEBUG') ? false : true,
CSS Specificity:
body.acc-high-contrast {
background-color: #000 !important;
color: #fff !important;
}
SPA Frameworks:
document.addEventListener('turbo:load', () => window.accessibility?.reinit());
Console Logs: Enable debug mode in config:
'debug' => true, // Logs shortcuts and feature toggles to console
Feature Isolation: Test individual features by disabling others in config:
'features' => [
'font_size' => ['enabled' => false],
'high_contrast' => ['enabled' => true], // Test in isolation
],
Custom Features: Extend the toolbar via JavaScript:
window.accessibility?.registerFeature({
id: 'custom_feature',
label: 'Custom Feature',
toggle: () => {
document.body.classList.toggle('acc-custom-feature');
},
});
Server-Side Logic: Use middleware to enforce accessibility settings for specific users:
// app/Http/Middleware/EnforceAccessibility.php
public function handle($request, Closure $next) {
if ($request->user()->needs_accessibility) {
session(['accessibility_override' => true]);
}
return $next($request);
}
Analytics: Track feature usage (e.g., High Contrast) via Laravel Mixins:
// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Blade;
Blade::directive('trackAccessibility', function ($feature) {
return "<?php session(['accessibility_'.$feature.'_used' => true]); ?>";
});
How can I help you explore Laravel packages today?