Commit Graph

29376 Commits

Author SHA1 Message Date
dependabot[bot] af5ee35326 chore(deps): bump postcss from 8.5.6 to 8.5.13 (#19801)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.6 to 8.5.13.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.6...8.5.13)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-01 14:20:43 +01:00
RenHai Wen 46a2cd1221 fix: prevent tenant root routes from taking precedence over application routes (#19780)
* fix: prevent tenant root routes from taking precedence over application routes

* fix phpstan

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-05-01 14:17:20 +01:00
Niklas Wildenburg 3f457910ba fix broken Cropper.js documentation link (#19790)
* fix broken Cropper.js documentation link

it seems the link changed with the Cropper.js update to v2 and they introduced a new website

Signed-off-by: Niklas Wildenburg <niklascanisius@me.com>

* Update FileUpload.php

---------

Signed-off-by: Niklas Wildenburg <niklascanisius@me.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-05-01 13:39:20 +01:00
ahmed-rashad-alnaggar 124e17966a fix: remount table header and toolbar to refresh x-show after state changes (#19787)
* Update header and toolbar reactivity

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Update index.blade.php

---------

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-05-01 13:32:48 +01:00
Dan Harrin 059cd013cc Update 01-overview.md 2026-05-01 13:19:23 +01:00
Sngt25 d315251953 Document visibility in condition functions
Added section on using visibility in condition functions for relationship data.

Signed-off-by: Sngt25 <151845701+Sngt25@users.noreply.github.com>
2026-05-01 13:12:51 +01:00
Bartłomiej Gajda ab0886bed4 Fix: Equal height for slideOver header and TopBar (#19776)
* fix

* revert unwanted change

* Update theme.css

* stop leaking styling changes into non-slideover modals

* Retake screenshots

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-05-01 12:59:34 +01:00
Bartłomiej Gajda f6fe7a160c fix (#19775) 2026-05-01 12:24:24 +01:00
ahmed-rashad-alnaggar 758054a772 refactor: Chart.js implementation in chart widgets (#19681)
* Refactor chart widget blade

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Refactor chart component

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Refactor chart component dist

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Refactor chart widget canvas style attributes

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Refactor chart component resize logic

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Update chart.js

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Refactor chart component update theme logic

Added user-defined color options for chart customization.

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Update chart.js

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Fix chart sizing when `maxHeight` is '100%'

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Add DPR handling

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Update chart.js

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>

* Reduce animation

* refactor

* bring changes to stats/chart

* Remove animation

---------

Signed-off-by: ahmed-rashad-alnaggar <131385452+ahmed-rashad-alnaggar@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-05-01 12:23:14 +01:00
Dan Harrin 926db5727c task: Refactor color contrast resolution (#19774) 2026-05-01 10:28:09 +01:00
Bartłomiej Gajda 6b2e56641e Fix: slideover position in filters and column manager (#19769)
* slideover position fix

* rename

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-26 10:54:24 +01:00
Ján Hamrák ae1b63b546 SK,CZ,PL,ES translations (#19766)
Add missing SK,CZ,PL,ES translations
2026-04-26 10:43:27 +01:00
Priit 4283ffcb2e Chore/et translations imrovements (#19765)
* chore: fix code style

* chore: Estonian language translations fix errors amd use less formal style

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: priithansen <priithansen@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
2026-04-24 14:17:03 +01:00
Josh Salway 8f341895a9 [4.x] fix(actions): batch cancel, failed() handler, explicit retry defaults (#19754)
* fix(actions): add batch-cancel early-return and failed() handler to ExportCsv and ImportCsv

Two pure additions on both row-processor jobs. No existing property
is touched; `$maxExceptions = 5`, `retryUntil()`, `backoff()`,
`middleware()`, and `tags()` delegation all preserved.

- `if ($this->batch()?->cancelled()) { return; }` at the top of
  `handle()` so a batch cancelled via `Bus::findBatch($id)->cancel()`
  stops in-flight chunks on the next worker cycle instead of running
  every popped chunk to completion.
- `failed()` handler with scalar-only log context (`export_id` /
  `import_id`, `page`, `batch_id`, exception class, exception
  message). No secret leakage.

Tests:

- `{Export,Import}CsvBatchCancellationTest`: use
  `withFakeBatch(cancelledAt: ...)` + Mockery
  `shouldNotReceive('getAttribute')->with('user')` to prove the
  early-return fires.
- `{Export,Import}CsvFailedHandlerTest`: call
  `failed(new RuntimeException(...))` against `Log::shouldReceive('error')`
  to pin the structured log context shape.

* fix(actions): add failed() + explicit $tries/$maxExceptions to three standalone jobs

These three jobs have never had retry properties set. The implicit
design is "inherit the worker default," which varies by platform:
`queue:work` uses 1, `vapor:work` signature says 0 but runtime
overrides to `SQS_TRIES ?? 3`, Horizon supervisor configs vary.
Make the intent explicit per each job's idempotency and runtime
profile.

PrepareCsvExport (Batchable orchestrator, non-idempotent):
`$tries = 1` (retry would re-dispatch children via `batch()->add()`),
`$maxExceptions = 0`, batch-cancel early-return, `failed()` handler.
No `$timeout`: work scales with source-query size, keep worker-
inherited timeout rather than cap at 60s.

ExportCompletion (not Batchable, non-idempotent notifier):
`$tries = 1` (retry would double-notify), `$maxExceptions = 0`,
`failed()` handler. No `$timeout`: single `Notification::send()` or
`Notification::sendToDatabase()` call, sub-second runtime.

CreateXlsxFile (not Batchable, idempotent file converter):
`$tries = 3` (re-reads CSV chunks and overwrites same XLSX, so
transient failures recover), `$backoff = [30, 60, 300]` (avoids
0-second retry loop since `$tries > 1`), `$maxExceptions = 0`,
`failed()` handler. No `$timeout`: XLSX conversion runtime is
O(row count), large exports need worker-inherited timeout (Vapor
Lambda ceiling, Horizon supervisor) rather than 60s cap.

None of these three delegate `retryUntil()`, so `$tries` is the
active attempts bound. Public API unchanged.

* Remove tests (too brittle)

* Remove failed() hooks (too opinionated)

* cs

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
v4.11.1
2026-04-24 08:49:45 +01:00
RenHai Wen aff36d7540 fix: ignore invalid notification IDs in database notification actions (#19752)
* fix: prevent invalid notification id handling in notification actions

* refactor: use Str::isUuid for notification id validation

* test: cover database notification id handling

* fix: validate notification id as UUID before performing database actions
2026-04-24 08:31:07 +01:00
Dan Harrin 61853ee76b fix: Invalid file path validation (#19759) 2026-04-23 11:43:22 +01:00
Dan Harrin d2a690d274 Clean up file path protection feature docs & naming v4.11.0 2026-04-21 12:02:12 +01:00
Bartłomiej Gajda 366e415e20 colors translations (#19740) 2026-04-21 11:02:38 +01:00
CamKemBell 7dac7d1c83 Add Width enum cases to add missing tailwind options. (#19737)
* Add width enum cases and source styles

Agent-Logs-Url: https://github.com/CamKemBell/filament/sessions/d1f38cbb-48d3-4436-a334-9bf8b6f251a2

Co-authored-by: CamKemBell <217516035+CamKemBell@users.noreply.github.com>

* Build updated width styles

Agent-Logs-Url: https://github.com/CamKemBell/filament/sessions/d1f38cbb-48d3-4436-a334-9bf8b6f251a2

Co-authored-by: CamKemBell <217516035+CamKemBell@users.noreply.github.com>

* Revert unnecessary test assertion changes

Agent-Logs-Url: https://github.com/CamKemBell/filament/sessions/10de9a43-ef20-4d0f-b354-2ed14e37a57f

Co-authored-by: CamKemBell <217516035+CamKemBell@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: CamKemBell <217516035+CamKemBell@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-21 11:02:15 +01:00
Dan Harrin d887941b48 fix: Grouping by soft deleted relationship with trashed records (#19742)
* fix: Grouping by soft deleted relationship with trashed records

* Update TicketMessageFactory.php
2026-04-21 11:01:42 +01:00
zvizvi 2da8e3ca1b Add Hebrew translations for select/deselect actions in export (#19739)
* Add select and deselect actions in Hebrew export

* Update export messages to Hebrew translations
2026-04-21 10:00:35 +01:00
Dan Harrin 3b521d2ee7 feature: Styling custom block previews with prose (#19741) 2026-04-21 09:33:51 +01:00
Gaspar Sukk 77ac2913da feat: Add Estonian (et) translations (#19725)
* feat: Add Estonian (et) translations

* feat: Register FilePond Estonian (et-ee) locale

* chore: fix code style

* Update file-upload.js

---------

Co-authored-by: GasparSukk <GasparSukk@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:47:32 +01:00
Dan Harrin d4c0e0c385 feature: FileUpload/RichEditor file path protection (#19731)
* feature: `FileUpload`/`RIchEditor` file path protection

* more tests

* cs && build
2026-04-20 13:45:14 +01:00
Omar Alnabris 49bfa189e9 Evaluate badge color with badge state (#19706)
* Evaluate badge color with badge state

* missing places

* docs

* simplify

* cleanup

* Update HasBadge.php

* fix assertions

---------

Signed-off-by: Dan Harrin <git@danharrin.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:36:26 +01:00
Maher El Gamil 822f107798 Add configurable temporary URL expiry duration (#19733)
* Add configurable temporary URL expiry duration

- Add 'temporary_url_expiry' config option (default: 30 minutes)
- Update all temporary URL generation to use config
- Allows users to customize expiry duration in config/filament.php

* clean up

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:27:46 +01:00
Mark Chaney 22841f5ffc Feature: Add configurable filters remove-all action (#19730)
* Add configurable filters remove-all action

* Isolate filters remove-all override tests

* Update HasFilters.php

* cleanup and screenshot

* fix spacing

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:27:34 +01:00
Will Aguilar 26919fa894 feat: add ->size() support to Filament\Schemas\Components\Icon (#19726)
* feat: add ->size() support to Filament\Schemas\Components\Icon

* cleanup

* docs

* improve ss

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:27:17 +01:00
Shaharyar Ahmed 630af63d01 Loading indicator refactor (#19721)
* Refactor loading indicator to use a bindable contract

* chore: fix code style

* cleanup

* consistency

* chore: fix code style

---------

Signed-off-by: Shaharyar Ahmed <shery.codes@gmail.com>
Co-authored-by: Shaharyar Ahmed <shaharyar@DESKTOP-U23GP1D.localdomain>
Co-authored-by: Shaharyar-WebDev <Shaharyar-WebDev@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
Co-authored-by: danharrin <danharrin@users.noreply.github.com>
2026-04-20 13:27:00 +01:00
Tom Janssen 6bc46098af Modify import completed notification (#19714)
* add code

* add for exports, clean up and docs

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:26:50 +01:00
Marcel a4f07a54c4 Add page header heading render hook (#19702)
* Add page header heading render hook

* cleanup

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:26:34 +01:00
Omar Alnabris b8c80cdee8 Support dynamic navigation visibility (#19701)
* support dynamic navigation visibility

* clean up and test and docs

* simplify

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:26:23 +01:00
ukeloop ecae6fcf8b feat: add support for backed enum locale (#19684)
* feat: add support for backed enum locale

* chore: fix code style

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
Co-authored-by: ukeloop <ukeloop@users.noreply.github.com>
2026-04-20 13:26:16 +01:00
Bartłomiej Gajda 8df2c3563b Feature: SlideOver position (#19636)
* slideover position

* cs

* reverts unwanted change

* fix

* clean up and docs

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:25:22 +01:00
Craig Anderson 8ac9d46a61 Add hiddenLabel() support to table column summarizers (#19634)
* Add hiddenLabel() support to table column summarizers

* Add docs
2026-04-20 13:25:11 +01:00
Bartłomiej Gajda 8afdcc59cf Feature: enhanced translation tool (#19607)
* line in translation tool

* wip

* wip

* cs

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:24:59 +01:00
Bartłomiej Gajda e06e1c7854 Feature: Extra modal overlay attributes (#19603)
* extra overlay attributes

* cs

* readme

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:24:50 +01:00
Chris Jones 7bf516d8af feat: expose TipTap/ProseMirror globals for custom rich editor extensions (#19559)
* feat: expose TipTap/ProseMirror globals for custom extensions

Custom extensions loaded via RichContentPlugin::getTipTapJsExtensions()
are fetched at runtime via dynamic import(). Each extension bundle must
currently include its own copy of TipTap/ProseMirror, leading to:

- Duplicate ProseMirror instances on the page
- instanceof checks failing across bundles (e.g. DecorationSet)
- ~150-200 KB of redundant JS per extension

This adds window.Filament.TipTap with the core ProseMirror modules
(@tiptap/core, @tiptap/pm/state, @tiptap/pm/view, @tiptap/pm/model)
already bundled in rich-editor.js. Custom extension builds can mark
@tiptap/* as external and resolve from this global at runtime,
sharing the same ProseMirror instance as the host editor.

Non-breaking: existing extensions that bundle their own TipTap
continue to work unchanged.

* Discard changes to packages/forms/dist/components/rich-editor.js

* chore: fix code style

* clean up & docs

---------

Co-authored-by: leek <leek@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:24:33 +01:00
Abdulmajeed Jamaan d35bc5460e Feat: Add custom openable/downloadable URLs support for file uploads (#19481)
* Add openableUrl support for file uploads

Include server-provided openable URLs in uploaded file metadata and use them for the file open action. JS: add uploadedFile.metadata to the file options and prefer metadata.openableUrl (falling back to file.source) when generating the open link. PHP: introduce a getOpenableUrlUsing closure property and setter, and populate metadata.openableUrl for each stored file by evaluating the callback. This enables customizable/signed URLs or alternate domains for opening uploaded files.

* chore: fix code style

* Add downloadable URL support for file uploads

Support custom downloadable URLs for uploaded files. Backend: add a getDownloadableUrlUsing callback and property on BaseFileUpload, populate metadata.downloadableUrl when isDownloadable() and the callback is set, and ensure openable URL generation checks isOpenable(). Frontend: prefer metadata.downloadableUrl for the download anchor href (fallback to file.source behavior removed). This enables serving custom download links separate from the file source.

* Format conditionals in BaseFileUpload

Remove an extra blank line and standardize conditional formatting in BaseFileUpload: add consistent spacing and braces for the openable/downloadable URL checks and tidy up the getDownloadableUrlUsing method. Purely stylistic changes with no functional impact.

* run composer cs

* clean up

---------

Co-authored-by: Abdulmajeed-Jamaan <Abdulmajeed-Jamaan@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:24:23 +01:00
arzcode 11ef6c6a88 Add deferred badge loading for relation manager tabs (#19464)
* feat: add deferred badge loading for relation manager tabs

Extends the deferred tab badge loading introduced in PR #19336 to
relation manager tabs, fixing two upstream issues:

1. `RelationManager::getTabComponent()` was evaluating `getBadge()`
   eagerly before the deferred mechanism could intercept it.
2. `HasRelationManagers::getRelationManagersContentComponent()` built
   `Tabs::make()` with no key, causing `callSchemaComponentMethod()` to
   receive null when the async badge fetch fired.

Changes:
- Add `protected static bool $deferBadge = false` to `RelationManager`
  with an overrideable `isBadgeDeferred()` method for per-record control
- Add fluent `->deferBadge()` and `isBadgeDeferred()` to `RelationGroup`
- Add `->key('relationManagerTabs')` to the `Tabs` built in
  `HasRelationManagers`
- Add docs and tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* cleanup

---------

Co-authored-by: buzkall <buzkall@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:24:09 +01:00
pintend 1d9fe463b9 feat: ActionGroup in headerActions() and footerActions() of schema components (#19431)
* feat: ActionGroup in HeaderAction

* tests and add footer actions support

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:23:56 +01:00
pintend f618314662 feat: get item index in itemLabel on Repeater (#19430)
* pass index to getItemLabel

* tests, docs, builder

---------

Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 13:23:41 +01:00
Amirhossein 4bda006b2b add missing Persian translations for export column selection actions (#19736)
Added missing Persian translations for the export column selection actions
in the Filament actions export language file.

The following keys were missing in the `fa` locale:

- actions.select_all
- actions.deselect_all

These translations ensure the column selection controls in the export
modal are properly localized for Persian users.

Signed-off-by: Amirhossein <amirhosseinzangali@gmail.com>
2026-04-20 11:45:11 +01:00
Rupesh Shrestha d8350fe6a5 Improve/boost guidelines v4 (#19734)
* improve: add Set/Get reactive snippet, table filters, edit test, and relationship mistake

Added examples for reactive field mutation and computed column values. Updated guidelines for using SelectFilter and actions with modal forms.

Signed-off-by: Rupesh Shrestha <46959961+rupeshstha@users.noreply.github.com>

* Revise core guidelines for forms and layouts

Updated guidelines for reactive field mutation and layout components.

Signed-off-by: Rupesh Shrestha <46959961+rupeshstha@users.noreply.github.com>

* condense

---------

Signed-off-by: Rupesh Shrestha <46959961+rupeshstha@users.noreply.github.com>
Co-authored-by: Dan Harrin <git@danharrin.com>
2026-04-20 11:44:44 +01:00
Dan Harrin 37c3a6d755 fix: Deferred badge loading on each Livewire component update (#19735) 2026-04-20 09:32:25 +01:00
Dan Harrin 58a7529666 Drop 8.2 PHPStan as it will no longer install 2026-04-18 09:15:09 +01:00
Dan Harrin d13a7c84d5 Update TextColumnTest.php 2026-04-18 08:49:45 +01:00
Dan Harrin 3ac5562dec Update TextColumnTest.php 2026-04-17 11:41:46 +01:00
Dan Harrin 9c30ac93d6 fix: Hide resize handles on disabled rich editor (#19718) v4.10.2 2026-04-17 10:50:18 +01:00
Dan Harrin 2dc3c6e9e8 fix: Flash notifications with multiple Livewire components (#19717) 2026-04-17 10:34:39 +01:00