From 4d1bda2cd363ce81bb77b0e084e1d85a87c1813b Mon Sep 17 00:00:00 2001 From: Lucian Behind The Scenes Date: Wed, 25 Feb 2026 00:18:41 +0200 Subject: [PATCH 1/4] feat: add scroll spy progress highlighting to docs headings sidebar Implements an Alpine.js scroll spy that tracks which heading is currently in view and marks all headings above it as "passed", giving the reader a visual progress indicator in the right sidebar. --- resources/css/app.css | 20 ++- resources/js/app.js | 138 ++++++++++++++++++ .../views/components/docs/headings.blade.php | 27 ++-- 3 files changed, 171 insertions(+), 14 deletions(-) diff --git a/resources/css/app.css b/resources/css/app.css index 3d50187..48e5799 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -402,9 +402,14 @@ padding-left: 1.5rem; } -/* Active state: darker border + darker text */ -[data-flux-navlist] [data-flux-navlist-item][data-current], -[data-flux-navlist] [data-flux-navlist-item][data-current='true'] { +/* Passed state: headings the reader has scrolled past (progress indicator) */ +[data-flux-navlist] [data-flux-navlist-item][data-passed] { + border-left-color: #18181b; /* zinc-900 */ + color: #52525b; /* zinc-600 - softer than current */ +} + +/* Current heading: full active treatment */ +[data-flux-navlist] [data-flux-navlist-item][data-current] { border-left-color: #18181b !important; /* zinc-900 */ color: #18181b !important; /* zinc-900 */ font-weight: 500 !important; @@ -412,7 +417,7 @@ } /* Hover state for inactive items */ -[data-flux-navlist] [data-flux-navlist-item]:not([data-current]):hover { +[data-flux-navlist] [data-flux-navlist-item]:not([data-passed]):hover { color: #52525b; /* zinc-600 - gentle lift */ border-left-color: #71717a; /* zinc-500 - more visible */ background: transparent !important; @@ -428,12 +433,17 @@ color: #a1a1aa; /* zinc-400 - soft, inviting */ } +.dark [data-flux-navlist] [data-flux-navlist-item][data-passed] { + border-left-color: #fafafa; /* zinc-50 */ + color: #a1a1aa; /* zinc-400 - softer than current */ +} + .dark [data-flux-navlist] [data-flux-navlist-item][data-current] { border-left-color: #fafafa !important; /* zinc-50 */ color: #fafafa !important; /* zinc-50 */ } -.dark [data-flux-navlist] [data-flux-navlist-item]:not([data-current]):hover { +.dark [data-flux-navlist] [data-flux-navlist-item]:not([data-passed]):hover { border-left-color: #a1a1aa; /* zinc-400 - more visible */ color: #fafafa; /* zinc-50 - gentle lift */ } diff --git a/resources/js/app.js b/resources/js/app.js index a31b0c6..73c151d 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -247,6 +247,144 @@ document.addEventListener('keydown', (event) => { openDocsImageLightbox(activeElement, { restoreFocus: true }); }); +// ---- +// Scroll Spy - Right Sidebar Progress Highlighting +// ---- + +document.addEventListener('alpine:init', () => { + Alpine.data('docsScrollSpy', () => ({ + activeIndex: -1, + headingIds: [], + observer: null, + scrollListener: null, + + init() { + this.setup(); + + // Re-initialize after Livewire SPA navigation (new page content) + document.addEventListener('livewire:navigated', () => { + this.teardown(); + + this.$nextTick(() => this.setup()); + }); + }, + + setup() { + // Collect heading IDs from sidebar anchor links (Flux renders items as tags directly) + const links = this.$root.querySelectorAll('[data-flux-navlist-item][href^="#"]'); + this.headingIds = Array.from(links).map((link) => link.getAttribute('href').slice(1)); + + if (this.headingIds.length === 0) { + return; + } + + // Track which headings have crossed into the top observation zone + const visible = new Set(); + + this.observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + visible.add(entry.target.id); + } else { + visible.delete(entry.target.id); + } + }); + + this.updateActiveFromVisible(visible); + }, + { + // Top zone: below sticky header (~80px), observe top ~30% of viewport + rootMargin: '-80px 0px -66% 0px', + }, + ); + + this.headingIds.forEach((id) => { + const el = document.getElementById(id); + if (el) { + this.observer.observe(el); + } + }); + + // Handle bottom-of-page: activate last heading when scrolled to end + this.scrollListener = () => { + const nearBottom = window.innerHeight + window.scrollY >= document.body.offsetHeight - 40; + + if (nearBottom && this.headingIds.length > 0) { + this.activeIndex = this.headingIds.length - 1; + } + }; + window.addEventListener('scroll', this.scrollListener, { passive: true }); + + // Set initial state for headings already in view + this.$nextTick(() => { + const initialVisible = new Set(); + + this.headingIds.forEach((id) => { + const el = document.getElementById(id); + if (!el) { + return; + } + + const rect = el.getBoundingClientRect(); + if (rect.top < window.innerHeight * 0.34) { + initialVisible.add(id); + } + }); + + this.updateActiveFromVisible(initialVisible); + }); + }, + + updateActiveFromVisible(visible) { + // Find the last heading (by document order) that's in the observation zone + let lastVisibleIndex = -1; + + for (let i = this.headingIds.length - 1; i >= 0; i--) { + if (visible.has(this.headingIds[i])) { + lastVisibleIndex = i; + break; + } + } + + if (lastVisibleIndex !== -1) { + this.activeIndex = lastVisibleIndex; + } else if (visible.size === 0) { + // Nothing visible in zone — find the last heading above the viewport top + for (let i = this.headingIds.length - 1; i >= 0; i--) { + const el = document.getElementById(this.headingIds[i]); + if (el && el.getBoundingClientRect().top < 100) { + this.activeIndex = i; + return; + } + } + + // Scrolled to very top — no heading active + this.activeIndex = -1; + } + }, + + teardown() { + if (this.observer) { + this.observer.disconnect(); + this.observer = null; + } + + if (this.scrollListener) { + window.removeEventListener('scroll', this.scrollListener); + this.scrollListener = null; + } + + this.activeIndex = -1; + this.headingIds = []; + }, + + destroy() { + this.teardown(); + }, + })); +}); + // Use livewire:navigated for SPA compatibility (fires on initial load AND after navigation) document.addEventListener('livewire:navigated', () => { prepareDocsLightboxImages(); diff --git a/resources/views/components/docs/headings.blade.php b/resources/views/components/docs/headings.blade.php index 80781eb..f7eb55a 100644 --- a/resources/views/components/docs/headings.blade.php +++ b/resources/views/components/docs/headings.blade.php @@ -3,15 +3,24 @@ ]) @if (count($headings) > 1) - - - @foreach ($headings as $heading) - @if ($heading['level'] <= 3 && $heading['id']) - $heading['level'] === 3])> + @php + $filteredHeadings = array_values(array_filter($headings, fn ($h) => $h['level'] <= 3 && $h['id'])); + @endphp + +
+ + + @foreach ($filteredHeadings as $index => $heading) + $heading['level'] === 3]) + > {{ $heading['text'] }} - @endif - @endforeach - - + @endforeach + + +
@endif From 1ffc457fc929abbaf25bc499b9a4c95bdd689d1b Mon Sep 17 00:00:00 2001 From: Lucian Behind The Scenes Date: Wed, 25 Feb 2026 12:58:02 +0200 Subject: [PATCH 2/4] fix: resolve scroll spy listener leak and heading filter logic Store livewire:navigated listener reference so it can be properly removed in destroy(), preventing duplicate listeners on SPA navigation. Move heading filter outside @if so count check uses filtered headings; fix data-passed binding from >= to > so current item isn't marked passed. --- resources/js/app.js | 11 +++++++++-- .../views/components/docs/headings.blade.php | 15 +++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/resources/js/app.js b/resources/js/app.js index 73c151d..52535e6 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -257,16 +257,18 @@ document.addEventListener('alpine:init', () => { headingIds: [], observer: null, scrollListener: null, + navigatedListener: null, init() { this.setup(); // Re-initialize after Livewire SPA navigation (new page content) - document.addEventListener('livewire:navigated', () => { + this.navigatedListener = () => { this.teardown(); this.$nextTick(() => this.setup()); - }); + }; + document.addEventListener('livewire:navigated', this.navigatedListener); }, setup() { @@ -380,6 +382,11 @@ document.addEventListener('alpine:init', () => { }, destroy() { + if (this.navigatedListener) { + document.removeEventListener('livewire:navigated', this.navigatedListener); + this.navigatedListener = null; + } + this.teardown(); }, })); diff --git a/resources/views/components/docs/headings.blade.php b/resources/views/components/docs/headings.blade.php index f7eb55a..a8da8c2 100644 --- a/resources/views/components/docs/headings.blade.php +++ b/resources/views/components/docs/headings.blade.php @@ -2,21 +2,16 @@ 'headings', ]) -@if (count($headings) > 1) - @php - $filteredHeadings = array_values(array_filter($headings, fn ($h) => $h['level'] <= 3 && $h['id'])); - @endphp +@php + $filteredHeadings = array_values(array_filter($headings, fn ($h) => $h['level'] <= 3 && $h['id'])); +@endphp +@if (count($filteredHeadings) > 1)
@foreach ($filteredHeadings as $index => $heading) - $heading['level'] === 3]) - > + $heading['level'] === 3])> {{ $heading['text'] }} @endforeach From ebe4714a70f90eff80d412eb1e03bc818f325b0d Mon Sep 17 00:00:00 2001 From: Lucian Behind The Scenes Date: Wed, 25 Feb 2026 12:58:05 +0200 Subject: [PATCH 3/4] chore: update IDE helpers for Laravel 12.53.0 --- .phpstorm.meta.php | 2 +- _ide_helper.php | 197 ++++++++++++++++-------- composer.lock | 366 +++++++++++++++++++++++---------------------- 3 files changed, 317 insertions(+), 248 deletions(-) diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php index 229e445..0b6da74 100644 --- a/.phpstorm.meta.php +++ b/.phpstorm.meta.php @@ -2446,7 +2446,7 @@ registerArgumentsSet('routes', 'boost.browser-logs','default-livewire.update', 'livewire.upload-file','livewire.preview-file','home','docs.show','command-index', -'storage.local',); +'storage.local','storage.local.upload',); registerArgumentsSet('views', '8c026b058f5337eae33f20fdb97d2c88::command-index','8c026b058f5337eae33f20fdb97d2c88::docs-viewer','command-index','components.docs.alert','components.docs.code-block', 'components.docs.content','components.docs.footer','components.docs.header','components.docs.headings','components.docs.toc', diff --git a/_ide_helper.php b/_ide_helper.php index 301bd63..b9cb1ee 100644 --- a/_ide_helper.php +++ b/_ide_helper.php @@ -5,7 +5,7 @@ /** * A helper file for Laravel, to provide autocomplete information to your IDE - * Generated for Laravel 12.51.0. + * Generated for Laravel 12.53.0. * * This file should not be included in your code, only analyzed by your IDE! * @@ -431,7 +431,7 @@ public static function environmentFile() } /** - * Get the fully qualified path to the environment file. + * Get the fully-qualified path to the environment file. * * @return string * @static @@ -3299,7 +3299,7 @@ public static function bindDirective($name, $handler) * Register a handler for custom directives. * * @param string $name - * @param callable $handler + * @param ($bind is true ? \Closure : callable) $handler * @param bool $bind * @return void * @throws \InvalidArgumentException @@ -4593,7 +4593,7 @@ public static function setApplication($app) /** * Determine if an item exists in the cache. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @return bool * @static */ @@ -4606,7 +4606,7 @@ public static function has($key) /** * Determine if an item doesn't exist in the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @return bool * @static */ @@ -4619,7 +4619,7 @@ public static function missing($key) /** * Retrieve an item from the cache by key. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @param mixed $default * @return mixed * @static @@ -4666,7 +4666,7 @@ public static function getMultiple($keys, $default = null) /** * Retrieve an item from the cache and delete it. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @param mixed $default * @return mixed * @static @@ -4680,7 +4680,7 @@ public static function pull($key, $default = null) /** * Retrieve a string item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param (\Closure():(string|null))|string|null $default * @return string * @throws \InvalidArgumentException @@ -4695,7 +4695,7 @@ public static function string($key, $default = null) /** * Retrieve an integer item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param (\Closure():(int|null))|int|null $default * @return int * @throws \InvalidArgumentException @@ -4710,7 +4710,7 @@ public static function integer($key, $default = null) /** * Retrieve a float item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param (\Closure():(float|null))|float|null $default * @return float * @throws \InvalidArgumentException @@ -4725,7 +4725,7 @@ public static function float($key, $default = null) /** * Retrieve a boolean item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param (\Closure():(bool|null))|bool|null $default * @return bool * @throws \InvalidArgumentException @@ -4740,7 +4740,7 @@ public static function boolean($key, $default = null) /** * Retrieve an array item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param (\Closure():(array|null))|array|null $default * @return array * @throws \InvalidArgumentException @@ -4755,7 +4755,7 @@ public static function array($key, $default = null) /** * Store an item in the cache. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @param mixed $value * @param \DateTimeInterface|\DateInterval|int|null $ttl * @return bool @@ -4770,7 +4770,7 @@ public static function put($key, $value, $ttl = null) /** * Store an item in the cache. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @param mixed $value * @param \DateTimeInterface|\DateInterval|int|null $ttl * @return bool @@ -4819,7 +4819,7 @@ public static function setMultiple($values, $ttl = null) /** * Store an item in the cache if the key does not exist. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @param mixed $value * @param \DateTimeInterface|\DateInterval|int|null $ttl * @return bool @@ -4834,7 +4834,7 @@ public static function add($key, $value, $ttl = null) /** * Increment the value of an item in the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return int|bool * @static @@ -4848,7 +4848,7 @@ public static function increment($key, $value = 1) /** * Decrement the value of an item in the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return int|bool * @static @@ -4862,7 +4862,7 @@ public static function decrement($key, $value = 1) /** * Store an item in the cache indefinitely. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return bool * @static @@ -4877,7 +4877,7 @@ public static function forever($key, $value) * Get an item from the cache, or execute the given Closure and store the result. * * @template TCacheValue - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param \Closure|\DateTimeInterface|\DateInterval|int|null $ttl * @param \Closure(): TCacheValue $callback * @return TCacheValue @@ -4893,7 +4893,7 @@ public static function remember($key, $ttl, $callback) * Get an item from the cache, or execute the given Closure and store the result forever. * * @template TCacheValue - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param \Closure(): TCacheValue $callback * @return TCacheValue * @static @@ -4908,7 +4908,7 @@ public static function sear($key, $callback) * Get an item from the cache, or execute the given Closure and store the result forever. * * @template TCacheValue - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param \Closure(): TCacheValue $callback * @return TCacheValue * @static @@ -4923,7 +4923,7 @@ public static function rememberForever($key, $callback) * Retrieve an item from the cache by key, refreshing it in the background if it is stale. * * @template TCacheValue - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param array{ 0: \DateTimeInterface|\DateInterval|int, 1: \DateTimeInterface|\DateInterval|int } $ttl * @param (callable(): TCacheValue) $callback * @param array{ seconds?: int, owner?: string }|null $lock @@ -4941,7 +4941,7 @@ public static function flexible($key, $ttl, $callback, $lock = null, $alwaysDefe * Execute a callback while holding an atomic lock on a cache mutex to prevent overlapping calls. * * @template TReturn - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param callable(): TReturn $callback * @param int $lockFor * @param int $waitFor @@ -4956,10 +4956,23 @@ public static function withoutOverlapping($key, $callback, $lockFor = 0, $waitFo return $instance->withoutOverlapping($key, $callback, $lockFor, $waitFor, $owner); } + /** + * Funnel a callback for a maximum number of simultaneous executions. + * + * @param \UnitEnum|string $name + * @return \Illuminate\Cache\Limiters\ConcurrencyLimiterBuilder + * @static + */ + public static function funnel($name) + { + /** @var \Illuminate\Cache\Repository $instance */ + return $instance->funnel($name); + } + /** * Remove an item from the cache. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @return bool * @static */ @@ -4972,7 +4985,7 @@ public static function forget($key) /** * Remove an item from the cache. * - * @param \BackedEnum|\UnitEnum|array|string $key + * @param \UnitEnum|array|string $key * @return bool * @static */ @@ -5128,7 +5141,7 @@ public static function setEventDispatcher($events) /** * Determine if a cached value exists. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @return bool * @static */ @@ -5141,7 +5154,7 @@ public static function offsetExists($key) /** * Retrieve an item from the cache by key. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @return mixed * @static */ @@ -5154,7 +5167,7 @@ public static function offsetGet($key) /** * Store an item in the cache for the default time. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return void * @static @@ -5168,7 +5181,7 @@ public static function offsetSet($key, $value) /** * Remove an item from the cache. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @return void * @static */ @@ -8667,7 +8680,7 @@ public static function setQueueResolver($resolver) /** * Set the database transaction manager resolver implementation. * - * @param (callable(): \Illuminate\Database\DatabaseTransactionsManager|null) $resolver + * @param (callable(): (\Illuminate\Database\DatabaseTransactionsManager|null)) $resolver * @return \Illuminate\Events\Dispatcher * @static */ @@ -13648,7 +13661,7 @@ class RateLimiter { /** * Register a named limiter configuration. * - * @param \BackedEnum|\UnitEnum|string $name + * @param \UnitEnum|string $name * @param \Closure $callback * @return \Illuminate\Cache\RateLimiter * @static @@ -13662,7 +13675,7 @@ public static function for($name, $callback) /** * Get the given named rate limiter. * - * @param \BackedEnum|\UnitEnum|string $name + * @param \UnitEnum|string $name * @return \Closure|null * @static */ @@ -14586,6 +14599,7 @@ public static function hasSession($skipIfUninitialized = false) /** * Gets the Session. * + * @throws \Symfony\Component\HttpFoundation\Exception\SessionNotFoundException * @throws SessionNotFoundException When session is not set properly * @static */ @@ -19405,7 +19419,7 @@ public static function except($keys) /** * Checks if a key exists. * - * @param \BackedEnum|\UnitEnum|string|array $key + * @param \UnitEnum|string|array $key * @return bool * @static */ @@ -19418,7 +19432,7 @@ public static function exists($key) /** * Determine if the given key is missing from the session data. * - * @param \BackedEnum|\UnitEnum|string|array $key + * @param \UnitEnum|string|array $key * @return bool * @static */ @@ -19431,7 +19445,7 @@ public static function missing($key) /** * Determine if a key is present and not null. * - * @param \BackedEnum|\UnitEnum|string|array $key + * @param \UnitEnum|string|array $key * @return bool * @static */ @@ -19444,7 +19458,7 @@ public static function has($key) /** * Determine if any of the given keys are present and not null. * - * @param \BackedEnum|\UnitEnum|string|array $key + * @param \UnitEnum|string|array $key * @return bool * @static */ @@ -19457,7 +19471,7 @@ public static function hasAny($key) /** * Get an item from the session. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $default * @return mixed * @static @@ -19471,7 +19485,7 @@ public static function get($key, $default = null) /** * Get the value of a given key and then forget it. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $default * @return mixed * @static @@ -19525,7 +19539,7 @@ public static function replace($attributes) /** * Put a key / value pair or array of key / value pairs in the session. * - * @param \BackedEnum|\UnitEnum|string|array $key + * @param \UnitEnum|string|array $key * @param mixed $value * @return void * @static @@ -19539,7 +19553,7 @@ public static function put($key, $value = null) /** * Get an item from the session, or store the default value. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param \Closure $callback * @return mixed * @static @@ -19553,7 +19567,7 @@ public static function remember($key, $callback) /** * Push a value onto a session array. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return void * @static @@ -19567,7 +19581,7 @@ public static function push($key, $value) /** * Increment the value of an item in the session. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param int $amount * @return mixed * @static @@ -19581,7 +19595,7 @@ public static function increment($key, $amount = 1) /** * Decrement the value of an item in the session. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param int $amount * @return int * @static @@ -19595,7 +19609,7 @@ public static function decrement($key, $amount = 1) /** * Flash a key / value pair to the session. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return void * @static @@ -19609,7 +19623,7 @@ public static function flash($key, $value = true) /** * Flash a key / value pair to the session for immediate use. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @param mixed $value * @return void * @static @@ -19673,7 +19687,7 @@ public static function cache() /** * Remove an item from the session, returning its value. * - * @param \BackedEnum|\UnitEnum|string $key + * @param \UnitEnum|string $key * @return mixed * @static */ @@ -19686,7 +19700,7 @@ public static function remove($key) /** * Remove one or many items from the session. * - * @param \BackedEnum|\UnitEnum|string|array $keys + * @param \UnitEnum|string|array $keys * @return void * @static */ @@ -20291,6 +20305,18 @@ public static function providesTemporaryUrls() return $instance->providesTemporaryUrls(); } + /** + * Determine if temporary upload URLs can be generated. + * + * @return bool + * @static + */ + public static function providesTemporaryUploadUrls() + { + /** @var \Illuminate\Filesystem\LocalFilesystemAdapter $instance */ + return $instance->providesTemporaryUploadUrls(); + } + /** * Get a temporary URL for the file at the given path. * @@ -20306,6 +20332,21 @@ public static function temporaryUrl($path, $expiration, $options = []) return $instance->temporaryUrl($path, $expiration, $options); } + /** + * Get a temporary upload URL for the file at the given path. + * + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options + * @return array + * @static + */ + public static function temporaryUploadUrl($path, $expiration, $options = []) + { + /** @var \Illuminate\Filesystem\LocalFilesystemAdapter $instance */ + return $instance->temporaryUploadUrl($path, $expiration, $options); + } + /** * Specify the name of the disk the adapter is managing. * @@ -20860,23 +20901,6 @@ public static function url($path) return $instance->url($path); } - /** - * Get a temporary upload URL for the file at the given path. - * - * @param string $path - * @param \DateTimeInterface $expiration - * @param array $options - * @return array - * @throws \RuntimeException - * @static - */ - public static function temporaryUploadUrl($path, $expiration, $options = []) - { - //Method inherited from \Illuminate\Filesystem\FilesystemAdapter - /** @var \Illuminate\Filesystem\LocalFilesystemAdapter $instance */ - return $instance->temporaryUploadUrl($path, $expiration, $options); - } - /** * Get an array of all files in a directory. * @@ -21030,6 +21054,20 @@ public static function buildTemporaryUrlsUsing($callback) $instance->buildTemporaryUrlsUsing($callback); } + /** + * Define a custom temporary upload URL builder callback. + * + * @param \Closure $callback + * @return void + * @static + */ + public static function buildTemporaryUploadUrlsUsing($callback) + { + //Method inherited from \Illuminate\Filesystem\FilesystemAdapter + /** @var \Illuminate\Filesystem\LocalFilesystemAdapter $instance */ + $instance->buildTemporaryUploadUrlsUsing($callback); + } + /** * Register a custom macro. * @@ -26333,7 +26371,7 @@ public static function selectSub($query, $as) /** * Add a select expression to the query. * - * @param \Illuminate\Contracts\Database\Query\Expression $expression + * @param \Illuminate\Contracts\Database\Query\Expression|string $expression * @param string $as * @return \Illuminate\Database\Eloquent\Builder * @static @@ -26888,6 +26926,35 @@ public static function orWhereNotLike($column, $value, $caseSensitive = false) return $instance->orWhereNotLike($column, $value, $caseSensitive); } + /** + * Add a "where null safe equals" clause to the query. + * + * @param \Illuminate\Contracts\Database\Query\Expression|string $column + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Builder + * @static + */ + public static function whereNullSafeEquals($column, $value, $boolean = 'and') + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->whereNullSafeEquals($column, $value, $boolean); + } + + /** + * Add an "or where null safe equals" clause to the query. + * + * @param \Illuminate\Contracts\Database\Query\Expression|string $column + * @param mixed $value + * @return \Illuminate\Database\Eloquent\Builder + * @static + */ + public static function orWhereNullSafeEquals($column, $value) + { + /** @var \Illuminate\Database\Query\Builder $instance */ + return $instance->orWhereNullSafeEquals($column, $value); + } + /** * Add a "where in" clause to the query. * diff --git a/composer.lock b/composer.lock index 03ba171..4e76b71 100644 --- a/composer.lock +++ b/composer.lock @@ -62,16 +62,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.369.34", + "version": "3.371.0", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "5db21cd0e5c8a5b5344596649033acf861a5e117" + "reference": "80bafcdc7f22362e204f49c5adfea66e85939cc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5db21cd0e5c8a5b5344596649033acf861a5e117", - "reference": "5db21cd0e5c8a5b5344596649033acf861a5e117", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/80bafcdc7f22362e204f49c5adfea66e85939cc8", + "reference": "80bafcdc7f22362e204f49c5adfea66e85939cc8", "shasum": "" }, "require": { @@ -153,9 +153,9 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.369.34" + "source": "https://github.com/aws/aws-sdk-php/tree/3.371.0" }, - "time": "2026-02-13T19:09:12+00:00" + "time": "2026-02-24T19:08:17+00:00" }, { "name": "brick/math", @@ -1413,16 +1413,16 @@ }, { "name": "laravel/framework", - "version": "v12.51.0", + "version": "v12.53.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16" + "reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ce4de3feb211e47c4f959d309ccf8a2733b1bc16", - "reference": "ce4de3feb211e47c4f959d309ccf8a2733b1bc16", + "url": "https://api.github.com/repos/laravel/framework/zipball/f57f035c0d34503d9ff30be76159bb35a003cd1f", + "reference": "f57f035c0d34503d9ff30be76159bb35a003cd1f", "shasum": "" }, "require": { @@ -1631,7 +1631,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-02-10T18:20:19+00:00" + "time": "2026-02-24T14:35:15+00:00" }, { "name": "laravel/prompts", @@ -1694,16 +1694,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v2.0.9", + "version": "v2.0.10", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "8f631589ab07b7b52fead814965f5a800459cb3e" + "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/8f631589ab07b7b52fead814965f5a800459cb3e", - "reference": "8f631589ab07b7b52fead814965f5a800459cb3e", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669", + "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669", "shasum": "" }, "require": { @@ -1751,7 +1751,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2026-02-03T06:55:34+00:00" + "time": "2026-02-20T19:59:49+00:00" }, { "name": "laravel/tinker", @@ -2380,29 +2380,29 @@ }, { "name": "livewire/flux", - "version": "v2.12.0", + "version": "v2.12.2", "source": { "type": "git", "url": "https://github.com/livewire/flux.git", - "reference": "78bc26f54a29c28ff916751b9f796f4ce1592003" + "reference": "68a3b06b62b23bae82e02d6be39722cf2a8770ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/flux/zipball/78bc26f54a29c28ff916751b9f796f4ce1592003", - "reference": "78bc26f54a29c28ff916751b9f796f4ce1592003", + "url": "https://api.github.com/repos/livewire/flux/zipball/68a3b06b62b23bae82e02d6be39722cf2a8770ff", + "reference": "68a3b06b62b23bae82e02d6be39722cf2a8770ff", "shasum": "" }, "require": { - "illuminate/console": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "illuminate/view": "^10.0|^11.0|^12.0", + "illuminate/console": "^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "illuminate/view": "^10.0|^11.0|^12.0|^13.0", "laravel/prompts": "^0.1|^0.2|^0.3", "livewire/livewire": "^3.7.4|^4.0", "php": "^8.1", - "symfony/console": "^6.0|^7.0" + "symfony/console": "^6.0|^7.0|^8.0" }, "conflict": { - "livewire/blaze": "<1.0.0" + "livewire/blaze": "<1.0.0-beta.2" }, "type": "library", "extra": { @@ -2440,32 +2440,32 @@ ], "support": { "issues": "https://github.com/livewire/flux/issues", - "source": "https://github.com/livewire/flux/tree/v2.12.0" + "source": "https://github.com/livewire/flux/tree/v2.12.2" }, - "time": "2026-02-09T23:35:27+00:00" + "time": "2026-02-24T16:29:56+00:00" }, { "name": "livewire/flux-pro", - "version": "2.12.0", + "version": "2.12.2", "dist": { "type": "zip", - "url": "https://composer.fluxui.dev/download/a10af361-cb0b-48fd-8bc5-5fb4dda59618/flux-pro-2.12.0.zip", - "reference": "15e43b7d8f96914195432b18b7b64b3e30a96288", - "shasum": "42d5b2f496b6b126d3e26186d355c6c9a92623e1" + "url": "https://composer.fluxui.dev/download/a129da01-0b6c-4769-9430-e9156c8da2ba/flux-pro-2.12.2.zip", + "reference": "f2fdc138527e51f628d296199e8f9241cbdcd645", + "shasum": "2b7c84785b253a90522fae68d962f61c53259cb7" }, "require": { - "illuminate/console": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "illuminate/view": "^10.0|^11.0|^12.0", + "illuminate/console": "^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "illuminate/view": "^10.0|^11.0|^12.0|^13.0", "laravel/prompts": "^0.1.24|^0.2|^0.3", - "livewire/flux": "2.12.0|dev-main", + "livewire/flux": "2.12.2|dev-main", "livewire/livewire": "^3.7.4|^4.0", "php": "^8.1", - "symfony/console": "^6.0|^7.0" + "symfony/console": "^6.0|^7.0|^8.0" }, "require-dev": { "livewire/volt": "*", - "orchestra/testbench": "^10.8" + "orchestra/testbench": "^10.8|^11.0" }, "type": "library", "extra": { @@ -2515,7 +2515,7 @@ "livewire", "ui" ], - "time": "2026-02-10T00:40:52+00:00" + "time": "2026-02-25T09:20:33+00:00" }, { "name": "livewire/livewire", @@ -2599,16 +2599,16 @@ "source": { "type": "git", "url": "https://github.com/loadinglucian/deployer-php.git", - "reference": "555f41ff65c63c526dc8ed1691f01f80f131528f" + "reference": "75a1f84c6ee154b0d8e65a47460e04d94f2c51a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/loadinglucian/deployer-php/zipball/555f41ff65c63c526dc8ed1691f01f80f131528f", - "reference": "555f41ff65c63c526dc8ed1691f01f80f131528f", + "url": "https://api.github.com/repos/loadinglucian/deployer-php/zipball/75a1f84c6ee154b0d8e65a47460e04d94f2c51a8", + "reference": "75a1f84c6ee154b0d8e65a47460e04d94f2c51a8", "shasum": "" }, "require": { - "aws/aws-sdk-php": "^3.369", + "aws/aws-sdk-php": "^3.371", "ext-pcntl": "*", "guzzlehttp/guzzle": "^7.10", "jeremykendall/php-domain-parser": "^6.4", @@ -2645,7 +2645,7 @@ "authors": [ { "name": "Lucian Văcăroiu", - "email": "lucian@bigpixelrocket.com" + "email": "silviulucian@gmail.com" } ], "description": "Server and site deployment tool for PHP", @@ -2659,7 +2659,7 @@ "issues": "https://github.com/loadinglucian/deployer-php/issues", "source": "https://github.com/loadinglucian/deployer-php/tree/main" }, - "time": "2026-02-15T12:05:19+00:00" + "time": "2026-02-25T10:49:09+00:00" }, { "name": "monolog/monolog", @@ -2937,16 +2937,16 @@ }, { "name": "nette/schema", - "version": "v1.3.4", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7" + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/086497a2f34b82fede9b5a41cc8e131d087cd8f7", - "reference": "086497a2f34b82fede9b5a41cc8e131d087cd8f7", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", "shasum": "" }, "require": { @@ -2954,8 +2954,10 @@ "php": "8.1 - 8.5" }, "require-dev": { + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.6", - "phpstan/phpstan": "^2.0@stable", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -2996,9 +2998,9 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.4" + "source": "https://github.com/nette/schema/tree/v1.3.5" }, - "time": "2026-02-08T02:54:00+00:00" + "time": "2026-02-23T03:47:12+00:00" }, { "name": "nette/utils", @@ -3151,31 +3153,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.3.3", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017" + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017", - "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.3.6" + "symfony/console": "^7.4.4 || ^8.0.4" }, "require-dev": { - "illuminate/console": "^11.46.1", - "laravel/pint": "^1.25.1", + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", "phpstan/phpstan": "^1.12.32", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.3.5", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -3207,7 +3209,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Its like Tailwind CSS, but for the console.", + "description": "It's like Tailwind CSS, but for the console.", "keywords": [ "cli", "console", @@ -3218,7 +3220,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3" + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" }, "funding": [ { @@ -3234,7 +3236,7 @@ "type": "github" } ], - "time": "2025-11-20T02:34:59+00:00" + "time": "2026-02-16T23:10:27+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -4931,29 +4933,29 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.92.7", + "version": "1.93.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "f09a799850b1ed765103a4f0b4355006360c49a5" + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5", - "reference": "f09a799850b1ed765103a4f0b4355006360c49a5", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", "shasum": "" }, "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", - "php": "^8.0" + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", - "pestphp/pest": "^1.23|^2.1|^3.1", - "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", - "phpunit/phpunit": "^9.5.24|^10.5|^11.5", - "spatie/pest-plugin-test-time": "^1.1|^2.2" + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" }, "type": "library", "autoload": { @@ -4980,7 +4982,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0" }, "funding": [ { @@ -4988,33 +4990,33 @@ "type": "github" } ], - "time": "2025-07-17T15:46:43+00:00" + "time": "2026-02-21T12:49:54+00:00" }, { "name": "spatie/php-structure-discoverer", - "version": "2.3.3", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/spatie/php-structure-discoverer.git", - "reference": "552a5b974a9853a32e5677a66e85ae615a96a90b" + "reference": "9a53c79b48fca8b6d15faa8cbba47cc430355146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/552a5b974a9853a32e5677a66e85ae615a96a90b", - "reference": "552a5b974a9853a32e5677a66e85ae615a96a90b", + "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/9a53c79b48fca8b6d15faa8cbba47cc430355146", + "reference": "9a53c79b48fca8b6d15faa8cbba47cc430355146", "shasum": "" }, "require": { - "illuminate/collections": "^11.0|^12.0", + "illuminate/collections": "^11.0|^12.0|^13.0", "php": "^8.3", "spatie/laravel-package-tools": "^1.92.7", "symfony/finder": "^6.0|^7.3.5|^8.0" }, "require-dev": { "amphp/parallel": "^2.3.2", - "illuminate/console": "^11.0|^12.0", + "illuminate/console": "^11.0|^12.0|^13.0", "nunomaduro/collision": "^7.0|^8.8.3", - "orchestra/testbench": "^9.5|^10.8", + "orchestra/testbench": "^9.5|^10.8|^11.0", "pestphp/pest": "^3.8|^4.0", "pestphp/pest-plugin-laravel": "^3.2|^4.0", "phpstan/extension-installer": "^1.4.3", @@ -5059,7 +5061,7 @@ ], "support": { "issues": "https://github.com/spatie/php-structure-discoverer/issues", - "source": "https://github.com/spatie/php-structure-discoverer/tree/2.3.3" + "source": "https://github.com/spatie/php-structure-discoverer/tree/2.4.0" }, "funding": [ { @@ -5067,7 +5069,7 @@ "type": "github" } ], - "time": "2025-11-24T16:41:01+00:00" + "time": "2026-02-21T15:57:15+00:00" }, { "name": "symfony/clock", @@ -8418,16 +8420,16 @@ }, { "name": "brianium/paratest", - "version": "v7.17.0", + "version": "v7.19.0", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "53cb90a6aa3ef3840458781600628ade058a18b9" + "reference": "7c6c29af7c4b406b49ce0c6b0a3a81d3684474e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/53cb90a6aa3ef3840458781600628ade058a18b9", - "reference": "53cb90a6aa3ef3840458781600628ade058a18b9", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/7c6c29af7c4b406b49ce0c6b0a3a81d3684474e6", + "reference": "7c6c29af7c4b406b49ce0c6b0a3a81d3684474e6", "shasum": "" }, "require": { @@ -8438,13 +8440,13 @@ "fidry/cpu-core-counter": "^1.3.0", "jean85/pretty-package-versions": "^2.1.1", "php": "~8.3.0 || ~8.4.0 || ~8.5.0", - "phpunit/php-code-coverage": "^12.5.2", - "phpunit/php-file-iterator": "^6", - "phpunit/php-timer": "^8", - "phpunit/phpunit": "^12.5.8", - "sebastian/environment": "^8.0.3", - "symfony/console": "^7.3.4 || ^8.0.0", - "symfony/process": "^7.3.4 || ^8.0.0" + "phpunit/php-code-coverage": "^12.5.3 || ^13.0.1", + "phpunit/php-file-iterator": "^6.0.1 || ^7", + "phpunit/php-timer": "^8 || ^9", + "phpunit/phpunit": "^12.5.9 || ^13", + "sebastian/environment": "^8.0.3 || ^9", + "symfony/console": "^7.4.4 || ^8.0.4", + "symfony/process": "^7.4.5 || ^8.0.5" }, "require-dev": { "doctrine/coding-standard": "^14.0.0", @@ -8455,7 +8457,7 @@ "phpstan/phpstan-deprecation-rules": "^2.0.3", "phpstan/phpstan-phpunit": "^2.0.12", "phpstan/phpstan-strict-rules": "^2.0.8", - "symfony/filesystem": "^7.3.2 || ^8.0.0" + "symfony/filesystem": "^7.4.0 || ^8.0.1" }, "bin": [ "bin/paratest", @@ -8495,7 +8497,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.17.0" + "source": "https://github.com/paratestphp/paratest/tree/v7.19.0" }, "funding": [ { @@ -8507,7 +8509,7 @@ "type": "paypal" } ], - "time": "2026-02-05T09:14:44+00:00" + "time": "2026-02-06T10:53:26+00:00" }, { "name": "composer/class-map-generator", @@ -9708,39 +9710,36 @@ }, { "name": "nunomaduro/collision", - "version": "v8.8.3", + "version": "v8.9.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4" + "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4", - "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935", + "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935", "shasum": "" }, "require": { - "filp/whoops": "^2.18.1", - "nunomaduro/termwind": "^2.3.1", + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", "php": "^8.2.0", - "symfony/console": "^7.3.0" + "symfony/console": "^7.4.4 || ^8.0.4" }, "conflict": { - "laravel/framework": "<11.44.2 || >=13.0.0", - "phpunit/phpunit": "<11.5.15 || >=13.0.0" + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" }, "require-dev": { - "brianium/paratest": "^7.8.3", - "larastan/larastan": "^3.4.2", - "laravel/framework": "^11.44.2 || ^12.18", - "laravel/pint": "^1.22.1", - "laravel/sail": "^1.43.1", - "laravel/sanctum": "^4.1.1", - "laravel/tinker": "^2.10.1", - "orchestra/testbench-core": "^9.12.0 || ^10.4", - "pestphp/pest": "^3.8.2 || ^4.0.0", - "sebastian/environment": "^7.2.1 || ^8.0" + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.2", + "laravel/framework": "^11.48.0 || ^12.52.0", + "laravel/pint": "^1.27.1", + "orchestra/testbench-core": "^9.12.0 || ^10.9.0", + "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0" }, "type": "library", "extra": { @@ -9803,45 +9802,45 @@ "type": "patreon" } ], - "time": "2025-11-20T02:55:25+00:00" + "time": "2026-02-17T17:33:08+00:00" }, { "name": "pestphp/pest", - "version": "v4.3.2", + "version": "v4.4.1", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "3a4329ddc7a2b67c19fca8342a668b39be3ae398" + "reference": "f96a1b27864b585b0b29b0ee7331176726f7e54a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/3a4329ddc7a2b67c19fca8342a668b39be3ae398", - "reference": "3a4329ddc7a2b67c19fca8342a668b39be3ae398", + "url": "https://api.github.com/repos/pestphp/pest/zipball/f96a1b27864b585b0b29b0ee7331176726f7e54a", + "reference": "f96a1b27864b585b0b29b0ee7331176726f7e54a", "shasum": "" }, "require": { - "brianium/paratest": "^7.16.1", - "nunomaduro/collision": "^8.8.3", - "nunomaduro/termwind": "^2.3.3", + "brianium/paratest": "^7.19.0", + "nunomaduro/collision": "^8.9.0", + "nunomaduro/termwind": "^2.4.0", "pestphp/pest-plugin": "^4.0.0", "pestphp/pest-plugin-arch": "^4.0.0", "pestphp/pest-plugin-mutate": "^4.0.1", "pestphp/pest-plugin-profanity": "^4.2.1", "php": "^8.3.0", - "phpunit/phpunit": "^12.5.8", - "symfony/process": "^7.4.4|^8.0.0" + "phpunit/phpunit": "^12.5.12", + "symfony/process": "^7.4.5|^8.0.5" }, "conflict": { "filp/whoops": "<2.18.3", - "phpunit/phpunit": ">12.5.8", + "phpunit/phpunit": ">12.5.12", "sebastian/exporter": "<7.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { - "pestphp/pest-dev-tools": "^4.0.0", - "pestphp/pest-plugin-browser": "^4.2.1", + "pestphp/pest-dev-tools": "^4.1.0", + "pestphp/pest-plugin-browser": "^4.3.0", "pestphp/pest-plugin-type-coverage": "^4.0.3", - "psy/psysh": "^0.12.18" + "psy/psysh": "^0.12.20" }, "bin": [ "bin/pest" @@ -9907,7 +9906,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v4.3.2" + "source": "https://github.com/pestphp/pest/tree/v4.4.1" }, "funding": [ { @@ -9919,7 +9918,7 @@ "type": "github" } ], - "time": "2026-01-28T01:01:19+00:00" + "time": "2026-02-17T15:27:18+00:00" }, { "name": "pestphp/pest-plugin", @@ -10063,27 +10062,27 @@ }, { "name": "pestphp/pest-plugin-laravel", - "version": "v4.0.0", + "version": "v4.1.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest-plugin-laravel.git", - "reference": "e12a07046b826a40b1c8632fd7b80d6b8d7b628e" + "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/e12a07046b826a40b1c8632fd7b80d6b8d7b628e", - "reference": "e12a07046b826a40b1c8632fd7b80d6b8d7b628e", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/3057a36669ff11416cc0dc2b521b3aec58c488d0", + "reference": "3057a36669ff11416cc0dc2b521b3aec58c488d0", "shasum": "" }, "require": { - "laravel/framework": "^11.45.2|^12.25.0", - "pestphp/pest": "^4.0.0", + "laravel/framework": "^11.45.2|^12.52.0|^13.0", + "pestphp/pest": "^4.4.1", "php": "^8.3.0" }, "require-dev": { - "laravel/dusk": "^8.3.3", - "orchestra/testbench": "^9.13.0|^10.5.0", - "pestphp/pest-dev-tools": "^4.0.0" + "laravel/dusk": "^8.3.6", + "orchestra/testbench": "^9.13.0|^10.9.0|^11.0", + "pestphp/pest-dev-tools": "^4.1.0" }, "type": "library", "extra": { @@ -10121,7 +10120,7 @@ "unit" ], "support": { - "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v4.0.0" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v4.1.0" }, "funding": [ { @@ -10133,7 +10132,7 @@ "type": "github" } ], - "time": "2025-08-20T12:46:37+00:00" + "time": "2026-02-21T00:29:45+00:00" }, { "name": "pestphp/pest-plugin-mutate", @@ -10387,11 +10386,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.39", + "version": "2.1.40", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", - "reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b", + "reference": "9b2c7aeb83a75d8680ea5e7c9b7fca88052b766b", "shasum": "" }, "require": { @@ -10436,7 +10435,7 @@ "type": "github" } ], - "time": "2026-02-11T14:48:56+00:00" + "time": "2026-02-23T15:04:35+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10786,16 +10785,16 @@ }, { "name": "phpunit/phpunit", - "version": "12.5.8", + "version": "12.5.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889" + "reference": "418e06b3b46b0d54bad749ff4907fc7dfb530199" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/37ddb96c14bfee10304825edbb7e66d341ec6889", - "reference": "37ddb96c14bfee10304825edbb7e66d341ec6889", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/418e06b3b46b0d54bad749ff4907fc7dfb530199", + "reference": "418e06b3b46b0d54bad749ff4907fc7dfb530199", "shasum": "" }, "require": { @@ -10809,8 +10808,8 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.2", - "phpunit/php-file-iterator": "^6.0.0", + "phpunit/php-code-coverage": "^12.5.3", + "phpunit/php-file-iterator": "^6.0.1", "phpunit/php-invoker": "^6.0.0", "phpunit/php-text-template": "^5.0.0", "phpunit/php-timer": "^8.0.0", @@ -10821,6 +10820,7 @@ "sebastian/exporter": "^7.0.2", "sebastian/global-state": "^8.0.2", "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", "sebastian/type": "^6.0.3", "sebastian/version": "^6.0.0", "staabm/side-effects-detector": "^1.0.5" @@ -10863,7 +10863,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.8" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.12" }, "funding": [ { @@ -10887,20 +10887,20 @@ "type": "tidelift" } ], - "time": "2026-01-27T06:12:29+00:00" + "time": "2026-02-16T08:34:36+00:00" }, { "name": "rector/rector", - "version": "2.3.6", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b" + "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/ca9ebb81d280cd362ea39474dabd42679e32ca6b", - "reference": "ca9ebb81d280cd362ea39474dabd42679e32ca6b", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/bbd37aedd8df749916cffa2a947cfc4714d1ba2c", + "reference": "bbd37aedd8df749916cffa2a947cfc4714d1ba2c", "shasum": "" }, "require": { @@ -10939,7 +10939,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.6" + "source": "https://github.com/rectorphp/rector/tree/2.3.8" }, "funding": [ { @@ -10947,7 +10947,7 @@ "type": "github" } ], - "time": "2026-02-06T14:25:06+00:00" + "time": "2026-02-22T09:45:50+00:00" }, { "name": "roave/security-advisories", @@ -10955,12 +10955,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16" + "reference": "a4ad87335e09715cfde5736995bc602c8a200b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", - "reference": "7f3e95c9ebf1b16e002dd2c913d30d962c2a6a16", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/a4ad87335e09715cfde5736995bc602c8a200b80", + "reference": "a4ad87335e09715cfde5736995bc602c8a200b80", "shasum": "" }, "conflict": { @@ -11128,6 +11128,7 @@ "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "directorytree/imapengine": "<1.22.3", "dl/yag": "<3.0.1", "dmk/webkitpdf": "<1.1.4", "dnadesign/silverstripe-elemental": "<5.3.12", @@ -11230,7 +11231,7 @@ "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", - "firebase/php-jwt": "<6", + "firebase/php-jwt": "<7", "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", @@ -11268,7 +11269,7 @@ "genix/cms": "<=1.1.11", "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", - "getformwork/formwork": "<2.2", + "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<=5.2.1", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", @@ -11391,7 +11392,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<25.12", + "librenms/librenms": "<26.2", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -11573,7 +11574,7 @@ "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=11.5.13|>=12.0.0.0-RC1-dev,<12.3.1", + "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3", "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", @@ -11599,7 +11600,7 @@ "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", - "pterodactyl/panel": "<1.12", + "pterodactyl/panel": "<1.12.1", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", @@ -11702,7 +11703,7 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.6|>=6,<6.2.5", + "statamic/cms": "<5.73.10|>=6,<6.3.3", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -11874,7 +11875,7 @@ "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", - "wwbn/avideo": "<14.3", + "wwbn/avideo": "<21", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", @@ -11933,7 +11934,8 @@ "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<=6.1.53" + "zoujingli/thinkadmin": "<=6.1.53", + "zumba/json-serializer": "<3.2.3" }, "default-branch": true, "type": "metapackage", @@ -11971,7 +11973,7 @@ "type": "tidelift" } ], - "time": "2026-02-13T23:11:21+00:00" + "time": "2026-02-24T21:13:17+00:00" }, { "name": "sebastian/cli-parser", @@ -12924,23 +12926,23 @@ }, { "name": "ta-tikoma/phpunit-architecture-test", - "version": "0.8.6", + "version": "0.8.7", "source": { "type": "git", "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", - "reference": "ad48430b92901fd7d003fdaf2d7b139f96c0906e" + "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/ad48430b92901fd7d003fdaf2d7b139f96c0906e", - "reference": "ad48430b92901fd7d003fdaf2d7b139f96c0906e", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/1248f3f506ca9641d4f68cebcd538fa489754db8", + "reference": "1248f3f506ca9641d4f68cebcd538fa489754db8", "shasum": "" }, "require": { "nikic/php-parser": "^4.18.0 || ^5.0.0", "php": "^8.1.0", "phpdocumentor/reflection-docblock": "^5.3.0 || ^6.0.0", - "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0 || ^13.0.0", "symfony/finder": "^6.4.0 || ^7.0.0 || ^8.0.0" }, "require-dev": { @@ -12977,9 +12979,9 @@ ], "support": { "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", - "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.6" + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.7" }, - "time": "2026-01-30T07:16:00+00:00" + "time": "2026-02-17T17:25:14+00:00" }, { "name": "theseer/tokenizer", From 11c5936ef370ad8a2794c1efdefd36138267fdfd Mon Sep 17 00:00:00 2001 From: Lucian Behind The Scenes Date: Wed, 25 Feb 2026 13:16:13 +0200 Subject: [PATCH 4/4] fixup --- app/Console/Commands/DocsClearCommand.php | 2 ++ app/Models/User.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/app/Console/Commands/DocsClearCommand.php b/app/Console/Commands/DocsClearCommand.php index 5ce259e..aab3248 100644 --- a/app/Console/Commands/DocsClearCommand.php +++ b/app/Console/Commands/DocsClearCommand.php @@ -9,8 +9,10 @@ final class DocsClearCommand extends Command { + #[\Override] protected $signature = 'docs:clear'; + #[\Override] protected $description = 'Clear docs output files'; public function handle(DocsOutputCacheService $docsOutput): int diff --git a/app/Models/User.php b/app/Models/User.php index 2c2f4f2..5094e73 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -17,6 +17,7 @@ class User extends Authenticatable * * @var list */ + #[\Override] protected $fillable = [ 'name', 'email', @@ -28,6 +29,7 @@ class User extends Authenticatable * * @var list */ + #[\Override] protected $hidden = [ 'password', 'remember_token',