tiknil/wire-table
Wire Table is a Livewire-powered data table component for Laravel. Define columns and rows in PHP and render interactive, responsive tables in Blade, with sorting, filtering, searching, and pagination built in—a lightweight option for admin panels and dashboards.
This package owns scroll positioning (scrollTo) behaviour and, since v2.2.0, accepts custom scroll targets rather than only a fixed default selector. v2.2.1 is a patch release that fixes missing nested configuration values not being loaded from the package defaults — no API changes, but it does change what your config file resolves to, so re-verify your config after upgrading.
Minimal steps:
composer require <vendor>/<package> # or: composer update <vendor>/<package>
php artisan vendor:publish --tag=<package>-config
bootstrap/providers.php for Laravel 11+ or config/app.php for older apps).scrollTo targets are resolved. On v2.2.1, diff your published config against the package's config/ original: nested keys you never declared now correctly fall back to defaults, so the effective config may differ from what you saw on v2.2.0.php artisan config:clear (and config:cache on deploy) before testing — a cached config from 2.2.0 will mask the fix entirely.Keep the first integration to one page and one target before rolling it out globally.
Default target (pre-2.2.0 behaviour). Existing code that relied on the implicit selector keeps working; nothing needs to change on upgrade. Treat this as your baseline smoke test after composer update.
Custom scrollTo targets (v2.2.0+). Pass an explicit target instead of relying on the default. Typical shapes you will encounter:
{{-- Blade component / directive style --}}
<x-scroll-to target="#pricing" />
// Config- or runtime-driven targets
'scroll_to' => [
'default' => '#top',
'targets' => [
'pricing' => '#pricing',
'faq' => '#faq',
],
],
// Client-side usage
scrollTo({ target: document.querySelector('#pricing') });
Partial config overrides (now reliable on v2.2.1). Because nested values fall back to the package defaults, you can publish the config and declare only the branches you care about — e.g. set scroll_to.targets.pricing and leave the rest unset. On v2.2.0 an undeclared nested branch could resolve as missing rather than defaulted; if you worked around that by duplicating the whole default tree into your config, consider trimming it back to just your overrides so future package defaults still reach you.
Per-page target maps. Define named targets in config and reference them by key in views. This keeps selectors out of templates and makes it trivial to re-point a CTA without touching Blade files — the clearest day-to-day win from v2.2.0.
Dynamic targets from data. For CMS-driven pages or multi-step forms, resolve the target from a model attribute or request parameter and pass it through. Validate the value against an allow-list of known targets to avoid arbitrary selector injection.
Integration with navigation. Combine with request()->routeIs(...) checks or a @php $scrollTarget = ... @endphp block to auto-scroll to the active section on page load, and use the same target map for both server-rendered anchors and client-side handlers so there is one source of truth.
Progressive enhancement. Render real href="#section" anchors and let the package take over on click. Users without JS, and crawlers, still get working navigation.
Regression guard for config resolution. Add a small test that asserts your resolved config contains the expected nested defaults and your overrides — this is precisely the class of bug v2.2.1 fixes, and it will catch the next regression in config merging before it reaches a page.
mergeConfigFrom() is a shallow merge at the top level; nested arrays are replaced wholesale unless the package merges them explicitly. v2.2.1 fixes exactly this — missing nested values now load from the package defaults. If you were on v2.2.0 and saw null/missing values for keys you never declared, upgrading should resolve it; if you papered over it by hardcoding the full default tree, re-test before deleting those workarounds.php artisan config:cache bakes the merged array at deploy time. Clear and rebuild it as part of the upgrade, or you will "test" the old broken merge and conclude the patch did nothing.src/ and any published JS) before assuming. Passing an element where a string is expected (or vice versa) fails silently in most scroll implementations.$nextTick, Livewire.hook('morph.updated', ...), or a DOMContentLoaded guard.scroll-margin-top (or the package's offset option, if present) on target elements.php artisan view:clear && php artisan config:clear — otherwise the old JS bundle without custom-target support keeps being served. Check public/vendor/<package>/ for a republished asset.querySelector; unvalidated values can throw and break the whole scroll handler.prefers-reduced-motion and move focus to the target (tabindex="-1" + .focus()) so keyboard users land where the viewport did.data-scroll-target is the cheapest regression guard when you next upgrade; a config assertion covers the merge behaviour.composer.json (^2.2.1) and read patch notes before bumping.How can I help you explore Laravel packages today?