From e6d3ce32aac4b57261d174512c30e03d1cd333ad Mon Sep 17 00:00:00 2001 From: Nuhel Date: Sat, 19 Aug 2023 21:20:10 +0600 Subject: [PATCH 01/10] Introduce Modal Width Enum --- .../actions/src/Concerns/CanOpenModal.php | 21 +++++++++++-- packages/support/src/Enums/ModalWidth.php | 30 +++++++++++++++++++ 2 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 packages/support/src/Enums/ModalWidth.php diff --git a/packages/actions/src/Concerns/CanOpenModal.php b/packages/actions/src/Concerns/CanOpenModal.php index d0defceb77..764e1e5937 100644 --- a/packages/actions/src/Concerns/CanOpenModal.php +++ b/packages/actions/src/Concerns/CanOpenModal.php @@ -6,6 +6,7 @@ use Closure; use Filament\Actions\MountableAction; use Filament\Actions\StaticAction; use Filament\Support\Enums\Alignment; +use Filament\Support\Enums\ModalWidth; use Filament\Support\View\Components\Modal; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\View\View; @@ -68,7 +69,7 @@ trait CanOpenModal protected string | Htmlable | Closure | null $modalDescription = null; - protected string | Closure | null $modalWidth = null; + protected string | ModalWidth | Closure | null $modalWidth = null; protected bool | Closure | null $isModalHidden = false; @@ -288,7 +289,7 @@ trait CanOpenModal return $this; } - public function modalWidth(string | Closure | null $width = null): static + public function modalWidth(string | ModalWidth | Closure | null $width = null): static { $this->modalWidth = $width; @@ -510,7 +511,21 @@ trait CanOpenModal public function getModalWidth(): string { - return $this->evaluate($this->modalWidth) ?? '4xl'; + return match ($size = $this->evaluate($this->modalWidth)) { + ModalWidth::ExtraSmall => 'xs', + ModalWidth::Small => 'sm', + ModalWidth::Medium => 'md', + ModalWidth::Large => 'lg', + ModalWidth::ExtraLarge => 'xl', + ModalWidth::TwoXl => '2xl', + ModalWidth::ThreeXl => '3xl', + ModalWidth::FourXl => '4xl', + ModalWidth::FiveXl => '5xl', + ModalWidth::SixXl => '6xl', + ModalWidth::SevenXl => '7xl', + ModalWidth::Screen => 'screen', + default => $size, + } ?? '4xl'; } public function isModalFooterSticky(): bool diff --git a/packages/support/src/Enums/ModalWidth.php b/packages/support/src/Enums/ModalWidth.php new file mode 100644 index 0000000000..6601a2c359 --- /dev/null +++ b/packages/support/src/Enums/ModalWidth.php @@ -0,0 +1,30 @@ + Date: Mon, 21 Aug 2023 20:26:46 +0600 Subject: [PATCH 02/10] Wip: Moved matching logic to view. --- .../views/components/modals.blade.php | 33 ++++++++++++++++--- .../actions/src/Concerns/CanOpenModal.php | 18 ++-------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/packages/actions/resources/views/components/modals.blade.php b/packages/actions/resources/views/components/modals.blade.php index 31ef15c415..d27281cbeb 100644 --- a/packages/actions/resources/views/components/modals.blade.php +++ b/packages/actions/resources/views/components/modals.blade.php @@ -1,7 +1,30 @@ +@php + function getWidth($action){ + return match ($size = $action?->getModalWidth()) { + \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', + \Filament\Support\Enums\ModalWidth::Small => 'sm', + \Filament\Support\Enums\ModalWidth::Medium => 'md', + \Filament\Support\Enums\ModalWidth::Large => 'lg', + \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', + \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', + \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', + \Filament\Support\Enums\ModalWidth::FourXl => '4xl', + \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', + \Filament\Support\Enums\ModalWidth::SixXl => '6xl', + \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', + \Filament\Support\Enums\ModalWidth::Screen => 'screen', + default => $size, + }?? '4xl'; + } +@endphp + + @if ($this instanceof \Filament\Actions\Contracts\HasActions && (! $this->hasActionsModalRendered))
@php $action = $this->getMountedAction(); + + @endphp isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="$action?->getModalWidth()" + :width="getWidth($action)" :wire:key="$action ? $this->getId() . '.infolist.actions.' . $action->getName() . '.modal' : null" x-on:closed-form-component-action-modal.window="if (($event.detail.id === '{{ $this->getId() }}') && $wire.mountedInfolistActions.length) open()" x-on:modal-closed.stop=" @@ -138,7 +161,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="$action?->getModalWidth()" + :width="getWidth($action)" :wire:key="$action ? $this->getId() . '.table.actions.' . $action->getName() . '.modal' : null" x-on:closed-form-component-action-modal.window="if (($event.detail.id === '{{ $this->getId() }}') && $wire.mountedTableActions.length) open()" x-on:modal-closed.stop=" @@ -191,7 +214,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="$action?->getModalWidth()" + :width="getWidth($action)" :wire:key="$action ? $this->getId() . '.table.bulk-actions.' . $action->getName() . '.modal' : null" x-on:closed-form-component-action-modal.window="if (($event.detail.id === '{{ $this->getId() }}') && $wire.mountedTableBulkAction) open()" x-on:modal-closed.stop=" @@ -250,7 +273,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="$action?->getModalWidth()" + :width="getWidth($action)" :wire:key="$action ? $this->getId() . '.' . $action->getComponent()->getStatePath() . '.actions.' . $action->getName() . '.modal' : null" x-on:modal-closed.stop=" const mountedFormComponentActionShouldOpenModal = {{ \Illuminate\Support\Js::from($action && $this->mountedFormComponentActionShouldOpenModal()) }} diff --git a/packages/actions/src/Concerns/CanOpenModal.php b/packages/actions/src/Concerns/CanOpenModal.php index 764e1e5937..a7ab8b1537 100644 --- a/packages/actions/src/Concerns/CanOpenModal.php +++ b/packages/actions/src/Concerns/CanOpenModal.php @@ -509,23 +509,9 @@ trait CanOpenModal return $this->evaluate($this->modalDescription); } - public function getModalWidth(): string + public function getModalWidth(): string | ModalWidth { - return match ($size = $this->evaluate($this->modalWidth)) { - ModalWidth::ExtraSmall => 'xs', - ModalWidth::Small => 'sm', - ModalWidth::Medium => 'md', - ModalWidth::Large => 'lg', - ModalWidth::ExtraLarge => 'xl', - ModalWidth::TwoXl => '2xl', - ModalWidth::ThreeXl => '3xl', - ModalWidth::FourXl => '4xl', - ModalWidth::FiveXl => '5xl', - ModalWidth::SixXl => '6xl', - ModalWidth::SevenXl => '7xl', - ModalWidth::Screen => 'screen', - default => $size, - } ?? '4xl'; + return $this->evaluate($this->modalWidth) ?? '4xl'; } public function isModalFooterSticky(): bool From 1a9f5b505cd31f3a5a5e63cc6289d4ae55c72201 Mon Sep 17 00:00:00 2001 From: Nuhel Date: Mon, 21 Aug 2023 21:04:59 +0600 Subject: [PATCH 03/10] Wip --- .../views/components/modals.blade.php | 96 +++++++++++++++---- 1 file changed, 79 insertions(+), 17 deletions(-) diff --git a/packages/actions/resources/views/components/modals.blade.php b/packages/actions/resources/views/components/modals.blade.php index d27281cbeb..df75366de9 100644 --- a/packages/actions/resources/views/components/modals.blade.php +++ b/packages/actions/resources/views/components/modals.blade.php @@ -1,6 +1,9 @@ -@php - function getWidth($action){ - return match ($size = $action?->getModalWidth()) { +@if ($this instanceof \Filament\Actions\Contracts\HasActions && (! $this->hasActionsModalRendered)) + + @php + $action = $this->getMountedAction(); + + $modalWidth = match ($size = $action?->getModalWidth()) { \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', \Filament\Support\Enums\ModalWidth::Small => 'sm', \Filament\Support\Enums\ModalWidth::Medium => 'md', @@ -15,15 +18,6 @@ \Filament\Support\Enums\ModalWidth::Screen => 'screen', default => $size, }?? '4xl'; - } -@endphp - - -@if ($this instanceof \Filament\Actions\Contracts\HasActions && (! $this->hasActionsModalRendered)) - - @php - $action = $this->getMountedAction(); - @endphp @@ -43,7 +37,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="getWidth($action)" + :width="$modalWidth" :wire:key="$action ? $this->getId() . '.actions.' . $action->getName() . '.modal' : null" x-on:closed-form-component-action-modal.window="if (($event.detail.id === '{{ $this->getId() }}') && $wire.mountedActions.length) open()" x-on:modal-closed.stop=" @@ -84,6 +78,23 @@ @php $action = $this->getMountedInfolistAction(); + + $modalWidth = match ($size = $action?->getModalWidth()) { + \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', + \Filament\Support\Enums\ModalWidth::Small => 'sm', + \Filament\Support\Enums\ModalWidth::Medium => 'md', + \Filament\Support\Enums\ModalWidth::Large => 'lg', + \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', + \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', + \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', + \Filament\Support\Enums\ModalWidth::FourXl => '4xl', + \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', + \Filament\Support\Enums\ModalWidth::SixXl => '6xl', + \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', + \Filament\Support\Enums\ModalWidth::Screen => 'screen', + default => $size, + }?? '4xl'; + @endphp @php $action = $this->getMountedTableAction(); + + $modalWidth = match ($size = $action?->getModalWidth()) { + \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', + \Filament\Support\Enums\ModalWidth::Small => 'sm', + \Filament\Support\Enums\ModalWidth::Medium => 'md', + \Filament\Support\Enums\ModalWidth::Large => 'lg', + \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', + \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', + \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', + \Filament\Support\Enums\ModalWidth::FourXl => '4xl', + \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', + \Filament\Support\Enums\ModalWidth::SixXl => '6xl', + \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', + \Filament\Support\Enums\ModalWidth::Screen => 'screen', + default => $size, + }?? '4xl'; + @endphp @php $action = $this->getMountedTableBulkAction(); + + $modalWidth = match ($size = $action?->getModalWidth()) { + \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', + \Filament\Support\Enums\ModalWidth::Small => 'sm', + \Filament\Support\Enums\ModalWidth::Medium => 'md', + \Filament\Support\Enums\ModalWidth::Large => 'lg', + \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', + \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', + \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', + \Filament\Support\Enums\ModalWidth::FourXl => '4xl', + \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', + \Filament\Support\Enums\ModalWidth::SixXl => '6xl', + \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', + \Filament\Support\Enums\ModalWidth::Screen => 'screen', + default => $size, + }?? '4xl'; + @endphp @@ -273,7 +335,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="getWidth($action)" + :width="$modalWidth" :wire:key="$action ? $this->getId() . '.' . $action->getComponent()->getStatePath() . '.actions.' . $action->getName() . '.modal' : null" x-on:modal-closed.stop=" const mountedFormComponentActionShouldOpenModal = {{ \Illuminate\Support\Js::from($action && $this->mountedFormComponentActionShouldOpenModal()) }} From 1837a9507c6a827b9ad32350fb4bf365da6ebd5c Mon Sep 17 00:00:00 2001 From: Nuhel Date: Mon, 21 Aug 2023 21:45:39 +0600 Subject: [PATCH 04/10] Matching logic moved to modal index. --- .../views/components/modals.blade.php | 95 +------------------ .../views/components/modal/index.blade.php | 24 ++--- 2 files changed, 17 insertions(+), 102 deletions(-) diff --git a/packages/actions/resources/views/components/modals.blade.php b/packages/actions/resources/views/components/modals.blade.php index df75366de9..31ef15c415 100644 --- a/packages/actions/resources/views/components/modals.blade.php +++ b/packages/actions/resources/views/components/modals.blade.php @@ -2,23 +2,6 @@ @php $action = $this->getMountedAction(); - - $modalWidth = match ($size = $action?->getModalWidth()) { - \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', - \Filament\Support\Enums\ModalWidth::Small => 'sm', - \Filament\Support\Enums\ModalWidth::Medium => 'md', - \Filament\Support\Enums\ModalWidth::Large => 'lg', - \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', - \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', - \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', - \Filament\Support\Enums\ModalWidth::FourXl => '4xl', - \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', - \Filament\Support\Enums\ModalWidth::SixXl => '6xl', - \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', - \Filament\Support\Enums\ModalWidth::Screen => 'screen', - default => $size, - }?? '4xl'; - @endphp @php $action = $this->getMountedInfolistAction(); - - $modalWidth = match ($size = $action?->getModalWidth()) { - \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', - \Filament\Support\Enums\ModalWidth::Small => 'sm', - \Filament\Support\Enums\ModalWidth::Medium => 'md', - \Filament\Support\Enums\ModalWidth::Large => 'lg', - \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', - \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', - \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', - \Filament\Support\Enums\ModalWidth::FourXl => '4xl', - \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', - \Filament\Support\Enums\ModalWidth::SixXl => '6xl', - \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', - \Filament\Support\Enums\ModalWidth::Screen => 'screen', - default => $size, - }?? '4xl'; - @endphp @php $action = $this->getMountedTableAction(); - - $modalWidth = match ($size = $action?->getModalWidth()) { - \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', - \Filament\Support\Enums\ModalWidth::Small => 'sm', - \Filament\Support\Enums\ModalWidth::Medium => 'md', - \Filament\Support\Enums\ModalWidth::Large => 'lg', - \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', - \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', - \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', - \Filament\Support\Enums\ModalWidth::FourXl => '4xl', - \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', - \Filament\Support\Enums\ModalWidth::SixXl => '6xl', - \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', - \Filament\Support\Enums\ModalWidth::Screen => 'screen', - default => $size, - }?? '4xl'; - @endphp @php $action = $this->getMountedTableBulkAction(); - - $modalWidth = match ($size = $action?->getModalWidth()) { - \Filament\Support\Enums\ModalWidth::ExtraSmall => 'xs', - \Filament\Support\Enums\ModalWidth::Small => 'sm', - \Filament\Support\Enums\ModalWidth::Medium => 'md', - \Filament\Support\Enums\ModalWidth::Large => 'lg', - \Filament\Support\Enums\ModalWidth::ExtraLarge => 'xl', - \Filament\Support\Enums\ModalWidth::TwoXl => '2xl', - \Filament\Support\Enums\ModalWidth::ThreeXl => '3xl', - \Filament\Support\Enums\ModalWidth::FourXl => '4xl', - \Filament\Support\Enums\ModalWidth::FiveXl => '5xl', - \Filament\Support\Enums\ModalWidth::SixXl => '6xl', - \Filament\Support\Enums\ModalWidth::SevenXl => '7xl', - \Filament\Support\Enums\ModalWidth::Screen => 'screen', - default => $size, - }?? '4xl'; - @endphp @@ -335,7 +250,7 @@ :sticky-footer="$action?->isModalFooterSticky()" :sticky-header="$action?->isModalHeaderSticky()" :visible="filled($action)" - :width="$modalWidth" + :width="$action?->getModalWidth()" :wire:key="$action ? $this->getId() . '.' . $action->getComponent()->getStatePath() . '.actions.' . $action->getName() . '.modal' : null" x-on:modal-closed.stop=" const mountedFormComponentActionShouldOpenModal = {{ \Illuminate\Support\Js::from($action && $this->mountedFormComponentActionShouldOpenModal()) }} diff --git a/packages/support/resources/views/components/modal/index.blade.php b/packages/support/resources/views/components/modal/index.blade.php index b33dbf5cc7..22f80c9d11 100644 --- a/packages/support/resources/views/components/modal/index.blade.php +++ b/packages/support/resources/views/components/modal/index.blade.php @@ -148,18 +148,18 @@ 'mx-auto rounded-xl' => ! ($slideOver || ($width === 'screen')), 'hidden' => ! $visible, match ($width) { - 'xs' => 'max-w-xs', - 'sm' => 'max-w-sm', - 'md' => 'max-w-md', - 'lg' => 'max-w-lg', - 'xl' => 'max-w-xl', - '2xl' => 'max-w-2xl', - '3xl' => 'max-w-3xl', - '4xl' => 'max-w-4xl', - '5xl' => 'max-w-5xl', - '6xl' => 'max-w-6xl', - '7xl' => 'max-w-7xl', - 'screen' => 'fixed inset-0', + 'xs', \Filament\Support\Enums\ModalWidth::ExtraSmall => 'max-w-xs', + 'sm', \Filament\Support\Enums\ModalWidth::Small => 'max-w-sm', + 'md', \Filament\Support\Enums\ModalWidth::Medium => 'max-w-md', + 'lg', \Filament\Support\Enums\ModalWidth::Large => 'max-w-lg', + 'xl', \Filament\Support\Enums\ModalWidth::ExtraLarge => 'max-w-xl', + '2xl', \Filament\Support\Enums\ModalWidth::TwoXl => 'max-w-2xl', + '3xl', \Filament\Support\Enums\ModalWidth::ThreeXl => 'max-w-3xl', + '4xl', \Filament\Support\Enums\ModalWidth::FourXl => 'max-w-4xl', + '5xl', \Filament\Support\Enums\ModalWidth::FiveXl => 'max-w-5xl', + '6xl', \Filament\Support\Enums\ModalWidth::SixXl => 'max-w-6xl', + '7xl', \Filament\Support\Enums\ModalWidth::SevenXl => 'max-w-7xl', + 'screen', \Filament\Support\Enums\ModalWidth::Screen => 'fixed inset-0', default => $width, }, ]) From 13d1882d3c17e3e14b448454aa58a36bd8c4927f Mon Sep 17 00:00:00 2001 From: Nuhel Date: Sun, 27 Aug 2023 11:23:34 +0600 Subject: [PATCH 05/10] ModalWidth enum renamed to MaxWidth --- .../views/components/modal/index.blade.php | 24 +++++++++---------- .../Enums/{ModalWidth.php => MaxWidth.php} | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) rename packages/support/src/Enums/{ModalWidth.php => MaxWidth.php} (94%) diff --git a/packages/support/resources/views/components/modal/index.blade.php b/packages/support/resources/views/components/modal/index.blade.php index 22f80c9d11..2ea4f6c70f 100644 --- a/packages/support/resources/views/components/modal/index.blade.php +++ b/packages/support/resources/views/components/modal/index.blade.php @@ -148,18 +148,18 @@ 'mx-auto rounded-xl' => ! ($slideOver || ($width === 'screen')), 'hidden' => ! $visible, match ($width) { - 'xs', \Filament\Support\Enums\ModalWidth::ExtraSmall => 'max-w-xs', - 'sm', \Filament\Support\Enums\ModalWidth::Small => 'max-w-sm', - 'md', \Filament\Support\Enums\ModalWidth::Medium => 'max-w-md', - 'lg', \Filament\Support\Enums\ModalWidth::Large => 'max-w-lg', - 'xl', \Filament\Support\Enums\ModalWidth::ExtraLarge => 'max-w-xl', - '2xl', \Filament\Support\Enums\ModalWidth::TwoXl => 'max-w-2xl', - '3xl', \Filament\Support\Enums\ModalWidth::ThreeXl => 'max-w-3xl', - '4xl', \Filament\Support\Enums\ModalWidth::FourXl => 'max-w-4xl', - '5xl', \Filament\Support\Enums\ModalWidth::FiveXl => 'max-w-5xl', - '6xl', \Filament\Support\Enums\ModalWidth::SixXl => 'max-w-6xl', - '7xl', \Filament\Support\Enums\ModalWidth::SevenXl => 'max-w-7xl', - 'screen', \Filament\Support\Enums\ModalWidth::Screen => 'fixed inset-0', + 'xs', \Filament\Support\Enums\MaxWidth::ExtraSmall => 'max-w-xs', + 'sm', \Filament\Support\Enums\MaxWidth::Small => 'max-w-sm', + 'md', \Filament\Support\Enums\MaxWidth::Medium => 'max-w-md', + 'lg', \Filament\Support\Enums\MaxWidth::Large => 'max-w-lg', + 'xl', \Filament\Support\Enums\MaxWidth::ExtraLarge => 'max-w-xl', + '2xl', \Filament\Support\Enums\MaxWidth::TwoXl => 'max-w-2xl', + '3xl', \Filament\Support\Enums\MaxWidth::ThreeXl => 'max-w-3xl', + '4xl', \Filament\Support\Enums\MaxWidth::FourXl => 'max-w-4xl', + '5xl', \Filament\Support\Enums\MaxWidth::FiveXl => 'max-w-5xl', + '6xl', \Filament\Support\Enums\MaxWidth::SixXl => 'max-w-6xl', + '7xl', \Filament\Support\Enums\MaxWidth::SevenXl => 'max-w-7xl', + 'screen', \Filament\Support\Enums\MaxWidth::Screen => 'fixed inset-0', default => $width, }, ]) diff --git a/packages/support/src/Enums/ModalWidth.php b/packages/support/src/Enums/MaxWidth.php similarity index 94% rename from packages/support/src/Enums/ModalWidth.php rename to packages/support/src/Enums/MaxWidth.php index 6601a2c359..97dfea2eef 100644 --- a/packages/support/src/Enums/ModalWidth.php +++ b/packages/support/src/Enums/MaxWidth.php @@ -1,7 +1,7 @@ Date: Sun, 27 Aug 2023 11:26:47 +0600 Subject: [PATCH 06/10] Update CanOpenModal.php --- packages/actions/src/Concerns/CanOpenModal.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/actions/src/Concerns/CanOpenModal.php b/packages/actions/src/Concerns/CanOpenModal.php index a7ab8b1537..1a6bbdd2fc 100644 --- a/packages/actions/src/Concerns/CanOpenModal.php +++ b/packages/actions/src/Concerns/CanOpenModal.php @@ -6,7 +6,7 @@ use Closure; use Filament\Actions\MountableAction; use Filament\Actions\StaticAction; use Filament\Support\Enums\Alignment; -use Filament\Support\Enums\ModalWidth; +use Filament\Support\Enums\MaxWidth; use Filament\Support\View\Components\Modal; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\View\View; @@ -69,7 +69,7 @@ trait CanOpenModal protected string | Htmlable | Closure | null $modalDescription = null; - protected string | ModalWidth | Closure | null $modalWidth = null; + protected string | MaxWidth | Closure | null $modalWidth = null; protected bool | Closure | null $isModalHidden = false; @@ -289,7 +289,7 @@ trait CanOpenModal return $this; } - public function modalWidth(string | ModalWidth | Closure | null $width = null): static + public function modalWidth(string | MaxWidth | Closure | null $width = null): static { $this->modalWidth = $width; @@ -509,7 +509,7 @@ trait CanOpenModal return $this->evaluate($this->modalDescription); } - public function getModalWidth(): string | ModalWidth + public function getModalWidth(): string | MaxWidth { return $this->evaluate($this->modalWidth) ?? '4xl'; } From fe0e779161d0d63046fd698293d85a31fe0344b4 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sat, 25 Nov 2023 22:17:11 +0000 Subject: [PATCH 07/10] wip --- packages/actions/docs/04-modals.md | 6 ++-- .../actions/src/Concerns/CanOpenModal.php | 10 +++--- .../src/Concerns/CanRequireConfirmation.php | 3 +- .../views/component-container.blade.php | 26 ++++++++------- .../src/Components/Concerns/HasMaxWidth.php | 7 ++-- packages/infolists/docs/03-entries/03-icon.md | 2 +- .../views/component-container.blade.php | 26 ++++++++------- .../views/components/icon-entry.blade.php | 2 +- .../src/Components/Concerns/HasMaxWidth.php | 7 ++-- .../Components/IconEntry/IconEntrySize.php | 2 ++ packages/panels/docs/04-pages.md | 8 +++-- packages/panels/docs/09-configuration.md | 5 +-- .../views/components/layout/index.blade.php | 32 ++++++++++--------- .../views/components/layout/simple.blade.php | 25 ++++++++------- packages/panels/src/Facades/Filament.php | 3 +- packages/panels/src/FilamentManager.php | 3 +- packages/panels/src/Pages/BasePage.php | 3 +- packages/panels/src/Pages/SimplePage.php | 4 ++- .../src/Panel/Concerns/HasMaxContentWidth.php | 8 +++-- .../views/components/modal/index.blade.php | 25 ++++++++------- packages/support/src/Enums/MaxWidth.php | 26 +++++++++++---- packages/tables/docs/03-columns/03-icon.md | 2 +- .../views/columns/icon-column.blade.php | 2 +- .../tables/src/Actions/AssociateAction.php | 3 +- packages/tables/src/Actions/AttachAction.php | 3 +- .../src/Columns/IconColumn/IconColumnSize.php | 2 ++ 26 files changed, 147 insertions(+), 98 deletions(-) diff --git a/packages/actions/docs/04-modals.md b/packages/actions/docs/04-modals.md index ccba9c312e..2161d957f3 100644 --- a/packages/actions/docs/04-modals.md +++ b/packages/actions/docs/04-modals.md @@ -323,9 +323,11 @@ Action::make('updateAuthor') ## Changing the modal width -You can change the width of the modal by using the `modalWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `xs`, `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`, `6xl`, `7xl`, and `screen`: +You can change the width of the modal by using the `modalWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `TwoExtraLarge`, `ThreeExtraLarge`, `FourExtraLarge`, `FiveExtraLarge`, `SixExtraLarge`, `SevenExtraLarge`, and `Screen`: ```php +use Filament\Support\Enums\MaxWidth; + Action::make('updateAuthor') ->form([ // ... @@ -333,7 +335,7 @@ Action::make('updateAuthor') ->action(function (array $data): void { // ... }) - ->modalWidth('5xl') + ->modalWidth(MaxWidth::FiveExtraLarge) ``` ## Conditionally hiding the modal diff --git a/packages/actions/src/Concerns/CanOpenModal.php b/packages/actions/src/Concerns/CanOpenModal.php index 61f5c9af11..ec2dd59894 100644 --- a/packages/actions/src/Concerns/CanOpenModal.php +++ b/packages/actions/src/Concerns/CanOpenModal.php @@ -70,7 +70,7 @@ trait CanOpenModal protected string | Htmlable | Closure | null $modalDescription = null; - protected string | MaxWidth | Closure | null $modalWidth = null; + protected MaxWidth | string | Closure | null $modalWidth = null; protected bool | Closure | null $isModalHidden = false; @@ -290,7 +290,7 @@ trait CanOpenModal return $this; } - public function modalWidth(string | MaxWidth | Closure | null $width = null): static + public function modalWidth(MaxWidth | string | Closure | null $width = null): static { $this->modalWidth = $width; @@ -485,7 +485,7 @@ trait CanOpenModal public function getModalAlignment(): Alignment | string { - return $this->evaluate($this->modalAlignment) ?? (in_array($this->getModalWidth(), ['xs', 'sm']) ? Alignment::Center : Alignment::Start); + return $this->evaluate($this->modalAlignment) ?? (in_array($this->getModalWidth(), [MaxWidth::ExtraSmall, MaxWidth::Small, 'xs', 'sm'])) ? Alignment::Center : Alignment::Start; } public function getModalSubmitActionLabel(): string @@ -523,9 +523,9 @@ trait CanOpenModal return $this->evaluate($this->modalDescription); } - public function getModalWidth(): string | MaxWidth + public function getModalWidth(): MaxWidth | string { - return $this->evaluate($this->modalWidth) ?? '4xl'; + return $this->evaluate($this->modalWidth) ?? MaxWidth::FourExtraLarge; } public function isModalFooterSticky(): bool diff --git a/packages/actions/src/Concerns/CanRequireConfirmation.php b/packages/actions/src/Concerns/CanRequireConfirmation.php index de1f5f710f..09775ee029 100644 --- a/packages/actions/src/Concerns/CanRequireConfirmation.php +++ b/packages/actions/src/Concerns/CanRequireConfirmation.php @@ -5,6 +5,7 @@ namespace Filament\Actions\Concerns; use Closure; use Filament\Actions\MountableAction; use Filament\Support\Enums\Alignment; +use Filament\Support\Enums\MaxWidth; use Filament\Support\Facades\FilamentIcon; trait CanRequireConfirmation @@ -16,7 +17,7 @@ trait CanRequireConfirmation $this->modalIcon(fn (MountableAction $action): ?string => $action->evaluate($condition) ? (FilamentIcon::resolve('actions::modal.confirmation') ?? 'heroicon-o-exclamation-triangle') : null); $this->modalDescription(fn (MountableAction $action): ?string => $action->evaluate($condition) ? __('filament-actions::modal.confirmation') : null); $this->modalSubmitActionLabel(fn (MountableAction $action): ?string => $action->evaluate($condition) ? __('filament-actions::modal.actions.confirm.label') : null); - $this->modalWidth(fn (MountableAction $action): ?string => $action->evaluate($condition) ? 'md' : null); + $this->modalWidth(fn (MountableAction $action): ?MaxWidth => $action->evaluate($condition) ? MaxWidth::Medium : null); return $this; } diff --git a/packages/forms/resources/views/component-container.blade.php b/packages/forms/resources/views/component-container.blade.php index 97e8d45500..416fa2b7e6 100644 --- a/packages/forms/resources/views/component-container.blade.php +++ b/packages/forms/resources/views/component-container.blade.php @@ -1,3 +1,7 @@ +@php + use Filament\Support\Enums\MaxWidth; +@endphp + getMaxWidth()) { - 'xs' => 'max-w-xs', - 'sm' => 'max-w-sm', - 'md' => 'max-w-md', - 'lg' => 'max-w-lg', - 'xl' => 'max-w-xl', - '2xl' => 'max-w-2xl', - '3xl' => 'max-w-3xl', - '4xl' => 'max-w-4xl', - '5xl' => 'max-w-5xl', - '6xl' => 'max-w-6xl', - '7xl' => 'max-w-7xl', + MaxWidth::ExtraSmall, 'xs' => 'max-w-xs', + MaxWidth::Small, 'sm' => 'max-w-sm', + MaxWidth::Medium, 'md' => 'max-w-md', + MaxWidth::Large, 'lg' => 'max-w-lg', + MaxWidth::ExtraLarge, 'xl' => 'max-w-xl', + MaxWidth::TwoExtraLarge, '2xl' => 'max-w-2xl', + MaxWidth::ThreeExtraLarge, '3xl' => 'max-w-3xl', + MaxWidth::FourExtraLarge, '4xl' => 'max-w-4xl', + MaxWidth::FiveExtraLarge, '5xl' => 'max-w-5xl', + MaxWidth::SixExtraLarge, '6xl' => 'max-w-6xl', + MaxWidth::SevenExtraLarge, '7xl' => 'max-w-7xl', default => $maxWidth, }, ]) diff --git a/packages/forms/src/Components/Concerns/HasMaxWidth.php b/packages/forms/src/Components/Concerns/HasMaxWidth.php index a9e72f5f2e..8154608c4e 100644 --- a/packages/forms/src/Components/Concerns/HasMaxWidth.php +++ b/packages/forms/src/Components/Concerns/HasMaxWidth.php @@ -3,19 +3,20 @@ namespace Filament\Forms\Components\Concerns; use Closure; +use Filament\Support\Enums\MaxWidth; trait HasMaxWidth { - protected string | Closure | null $maxWidth = null; + protected MaxWidth | string | Closure | null $maxWidth = null; - public function maxWidth(string | Closure | null $width): static + public function maxWidth(MaxWidth | string | Closure | null $width): static { $this->maxWidth = $width; return $this; } - public function getMaxWidth(): ?string + public function getMaxWidth(): MaxWidth | string | null { return $this->evaluate($this->maxWidth); } diff --git a/packages/infolists/docs/03-entries/03-icon.md b/packages/infolists/docs/03-entries/03-icon.md index 4e691bacc0..8f3c2b8d3f 100644 --- a/packages/infolists/docs/03-entries/03-icon.md +++ b/packages/infolists/docs/03-entries/03-icon.md @@ -44,7 +44,7 @@ In the function, `$state` is the value of the entry, and `$record` can be used t ## Customizing the size -The default icon size is `IconEntrySize::Large`, but you may customize the size to be either `IconEntrySize::ExtraSmall`, `IconEntrySize::Small`, `IconEntrySize::Medium`, `IconEntrySize::ExtraLarge` or `IconEntrySize::ExtraExtraLarge`: +The default icon size is `IconEntrySize::Large`, but you may customize the size to be either `IconEntrySize::ExtraSmall`, `IconEntrySize::Small`, `IconEntrySize::Medium`, `IconEntrySize::ExtraLarge` or `IconEntrySize::TwoExtraLarge`: ```php use Filament\Infolists\Components\IconEntry; diff --git a/packages/infolists/resources/views/component-container.blade.php b/packages/infolists/resources/views/component-container.blade.php index 251475af32..60ea850bf8 100644 --- a/packages/infolists/resources/views/component-container.blade.php +++ b/packages/infolists/resources/views/component-container.blade.php @@ -1,3 +1,7 @@ +@php + use Filament\Support\Enums\MaxWidth; +@endphp +
getMaxWidth()) { - 'xs' => 'max-w-xs', - 'sm' => 'max-w-sm', - 'md' => 'max-w-md', - 'lg' => 'max-w-lg', - 'xl' => 'max-w-xl', - '2xl' => 'max-w-2xl', - '3xl' => 'max-w-3xl', - '4xl' => 'max-w-4xl', - '5xl' => 'max-w-5xl', - '6xl' => 'max-w-6xl', - '7xl' => 'max-w-7xl', + MaxWidth::ExtraSmall, 'xs' => 'max-w-xs', + MaxWidth::Small, 'sm' => 'max-w-sm', + MaxWidth::Medium, 'md' => 'max-w-md', + MaxWidth::Large, 'lg' => 'max-w-lg', + MaxWidth::ExtraLarge, 'xl' => 'max-w-xl', + MaxWidth::TwoExtraLarge, '2xl' => 'max-w-2xl', + MaxWidth::ThreeExtraLarge, '3xl' => 'max-w-3xl', + MaxWidth::FourExtraLarge, '4xl' => 'max-w-4xl', + MaxWidth::FiveExtraLarge, '5xl' => 'max-w-5xl', + MaxWidth::SixExtraLarge, '6xl' => 'max-w-6xl', + MaxWidth::SevenExtraLarge, '7xl' => 'max-w-7xl', default => $maxWidth, }, ]) diff --git a/packages/infolists/resources/views/components/icon-entry.blade.php b/packages/infolists/resources/views/components/icon-entry.blade.php index 9628a495c6..f5a06a6cb0 100644 --- a/packages/infolists/resources/views/components/icon-entry.blade.php +++ b/packages/infolists/resources/views/components/icon-entry.blade.php @@ -30,7 +30,7 @@ IconEntrySize::Medium, 'md' => 'fi-in-icon-item-size-md h-5 w-5', IconEntrySize::Large, 'lg' => 'fi-in-icon-item-size-lg h-6 w-6', IconEntrySize::ExtraLarge, 'xl' => 'fi-in-icon-item-size-xl h-7 w-7', - IconEntrySize::ExtraExtraLarge, '2xl' => 'fi-in-icon-item-size-2xl h-8 w-8', + IconEntrySize::TwoExtraLarge, IconEntrySize::ExtraExtraLarge, '2xl' => 'fi-in-icon-item-size-2xl h-8 w-8', default => $size, }, match ($color) { diff --git a/packages/infolists/src/Components/Concerns/HasMaxWidth.php b/packages/infolists/src/Components/Concerns/HasMaxWidth.php index fc2cf32bdf..04396bf086 100644 --- a/packages/infolists/src/Components/Concerns/HasMaxWidth.php +++ b/packages/infolists/src/Components/Concerns/HasMaxWidth.php @@ -3,19 +3,20 @@ namespace Filament\Infolists\Components\Concerns; use Closure; +use Filament\Support\Enums\MaxWidth; trait HasMaxWidth { - protected string | Closure | null $maxWidth = null; + protected MaxWidth | string | Closure | null $maxWidth = null; - public function maxWidth(string | Closure | null $width): static + public function maxWidth(MaxWidth | string | Closure | null $width): static { $this->maxWidth = $width; return $this; } - public function getMaxWidth(): ?string + public function getMaxWidth(): MaxWidth | string | null { return $this->evaluate($this->maxWidth); } diff --git a/packages/infolists/src/Components/IconEntry/IconEntrySize.php b/packages/infolists/src/Components/IconEntry/IconEntrySize.php index 2d0ab724b3..2f84f4687c 100644 --- a/packages/infolists/src/Components/IconEntry/IconEntrySize.php +++ b/packages/infolists/src/Components/IconEntry/IconEntrySize.php @@ -14,5 +14,7 @@ enum IconEntrySize case ExtraLarge; + case TwoExtraLarge; + case ExtraExtraLarge; } diff --git a/packages/panels/docs/04-pages.md b/packages/panels/docs/04-pages.md index c1993ba087..42f3d00fe9 100644 --- a/packages/panels/docs/04-pages.md +++ b/packages/panels/docs/04-pages.md @@ -296,11 +296,13 @@ This example assumes you have a Blade view at `resources/views/filament/settings ## Customizing the maximum content width -By default, Filament will restrict the width of the content on the page, so it doesn't become too wide on large screens. To change this, you may override the `getMaxContentWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `xs`, `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`, `6xl`, `7xl`, `prose`, `screen-sm`, `screen-md`, `screen-lg`, `screen-xl`, `screen-2xl` and `full`. The default is `7xl`: +By default, Filament will restrict the width of the content on the page, so it doesn't become too wide on large screens. To change this, you may override the `getMaxContentWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `TwoExtraLarge`, `ThreeExtraLarge`, `FourExtraLarge`, `FiveExtraLarge`, `SixExtraLarge`, `SevenExtraLarge`, `Prose`, `ScreenSmall`, `ScreenMedium`, `ScreenLarge`, `ScreenExtraLarge`, `ScreenTwoExtraLarge` and `Full`. The default is `SevenExtraLarge`: ```php -public function getMaxContentWidth(): ?string +use Filament\Support\Enums\MaxWidth; + +public function getMaxContentWidth(): MaxWidth { - return 'full'; + return MaxWidth::Full; } ``` diff --git a/packages/panels/docs/09-configuration.md b/packages/panels/docs/09-configuration.md index e299a316ce..d090d271a9 100644 --- a/packages/panels/docs/09-configuration.md +++ b/packages/panels/docs/09-configuration.md @@ -100,16 +100,17 @@ public function panel(Panel $panel): Panel ## Customizing the maximum content width -By default, Filament will restrict the width of the content on a page, so it doesn't become too wide on large screens. To change this, you may use the `maxContentWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `xs`, `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`, `6xl`, `7xl`, `prose`, `screen-sm`, `screen-md`, `screen-lg`, `screen-xl`, `screen-2xl` and `full`. The default is `7xl`: +By default, Filament will restrict the width of the content on a page, so it doesn't become too wide on large screens. To change this, you may use the `maxContentWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `TwoExtraLarge`, `ThreeExtraLarge`, `FourExtraLarge`, `FiveExtraLarge`, `SixExtraLarge`, `SevenExtraLarge`, `Prose`, `ScreenSmall`, `ScreenMedium`, `ScreenLarge`, `ScreenExtraLarge`, `ScreenTwoExtraLarge` and `Full`. The default is `SevenExtraLarge`: ```php use Filament\Panel; +use Filament\Support\Enums\MaxWidth; public function panel(Panel $panel): Panel { return $panel // ... - ->maxContentWidth('full'); + ->maxContentWidth(MaxWidth::Full); } ``` diff --git a/packages/panels/resources/views/components/layout/index.blade.php b/packages/panels/resources/views/components/layout/index.blade.php index 7ccf178632..da5fe43b07 100644 --- a/packages/panels/resources/views/components/layout/index.blade.php +++ b/packages/panels/resources/views/components/layout/index.blade.php @@ -1,4 +1,6 @@ @php + use Filament\Support\Enums\MaxWidth; + $navigation = filament()->getNavigation(); @endphp @@ -44,21 +46,21 @@
getMaxContentWidth() ?? '7xl')) { - 'xl' => 'max-w-xl', - '2xl' => 'max-w-2xl', - '3xl' => 'max-w-3xl', - '4xl' => 'max-w-4xl', - '5xl' => 'max-w-5xl', - '6xl' => 'max-w-6xl', - '7xl' => 'max-w-7xl', - 'prose' => 'max-w-prose', - 'screen-sm' => 'max-w-screen-sm', - 'screen-md' => 'max-w-screen-md', - 'screen-lg' => 'max-w-screen-lg', - 'screen-xl' => 'max-w-screen-xl', - 'screen-2xl' => 'max-w-screen-2xl', - 'full' => 'max-w-full', + match ($maxContentWidth ??= (filament()->getMaxContentWidth() ?? MaxWidth::SevenExtraLarge)) { + MaxWidth::ExtraLarge, 'xl' => 'max-w-xl', + MaxWidth::TwoExtraLarge, '2xl' => 'max-w-2xl', + MaxWidth::ThreeExtraLarge, '3xl' => 'max-w-3xl', + MaxWidth::FourExtraLarge, '4xl' => 'max-w-4xl', + MaxWidth::FiveExtraLarge, '5xl' => 'max-w-5xl', + MaxWidth::SixExtraLarge, '6xl' => 'max-w-6xl', + MaxWidth::SevenExtraLarge, '7xl' => 'max-w-7xl', + MaxWidth::Prose, 'prose' => 'max-w-prose', + MaxWidth::ScreenSmall, 'screen-sm' => 'max-w-screen-sm', + MaxWidth::ScreenMedium, 'screen-md' => 'max-w-screen-md', + MaxWidth::ScreenLarge, 'screen-lg' => 'max-w-screen-lg', + MaxWidth::ScreenExtraLarge, 'screen-xl' => 'max-w-screen-xl', + MaxWidth::ScreenTwoExtraLarge, 'screen-2xl' => 'max-w-screen-2xl', + MaxWidth::Full, 'full' => 'max-w-full', default => $maxContentWidth, }, ]) diff --git a/packages/panels/resources/views/components/layout/simple.blade.php b/packages/panels/resources/views/components/layout/simple.blade.php index 379955f327..0caa3060a9 100644 --- a/packages/panels/resources/views/components/layout/simple.blade.php +++ b/packages/panels/resources/views/components/layout/simple.blade.php @@ -1,3 +1,7 @@ +@php + use Filament\Support\Enums\MaxWidth; +@endphp + @props([ 'after' => null, @@ -25,17 +29,16 @@ @class([ 'fi-simple-main my-16 w-full bg-white px-6 py-12 shadow-sm ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10 sm:rounded-xl sm:px-12', match ($maxWidth ?? null) { - 'xs' => 'sm:max-w-xs', - 'sm' => 'sm:max-w-sm', - 'md' => 'sm:max-w-md', - 'lg' => 'sm:max-w-lg', - 'xl' => 'sm:max-w-xl', - '2xl' => 'sm:max-w-2xl', - '3xl' => 'sm:max-w-3xl', - '4xl' => 'sm:max-w-4xl', - '5xl' => 'sm:max-w-5xl', - '6xl' => 'sm:max-w-6xl', - '7xl' => 'sm:max-w-7xl', + MaxWidth::ExtraSmall, 'xs' => 'sm:max-w-xs', + MaxWidth::Small, 'sm' => 'sm:max-w-sm', + MaxWidth::Medium, 'md' => 'sm:max-w-md', + MaxWidth::ExtraLarge, 'xl' => 'sm:max-w-xl', + MaxWidth::TwoExtraLarge, '2xl' => 'sm:max-w-2xl', + MaxWidth::ThreeExtraLarge, '3xl' => 'sm:max-w-3xl', + MaxWidth::FourExtraLarge, '4xl' => 'sm:max-w-4xl', + MaxWidth::FiveExtraLarge, '5xl' => 'sm:max-w-5xl', + MaxWidth::SixExtraLarge, '6xl' => 'sm:max-w-6xl', + MaxWidth::SevenExtraLarge, '7xl' => 'sm:max-w-7xl', default => 'sm:max-w-lg', }, ]) diff --git a/packages/panels/src/Facades/Filament.php b/packages/panels/src/Facades/Filament.php index ac8eb9f941..d9e0a54fa6 100644 --- a/packages/panels/src/Facades/Filament.php +++ b/packages/panels/src/Facades/Filament.php @@ -13,6 +13,7 @@ use Filament\Navigation\NavigationGroup; use Filament\Navigation\NavigationItem; use Filament\Panel; use Filament\Support\Assets\Theme; +use Filament\Support\Enums\MaxWidth; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\CanResetPassword; use Illuminate\Contracts\Auth\MustVerifyEmail; @@ -48,7 +49,7 @@ use Illuminate\Support\Facades\Facade; * @method static string | null getHomeUrl() * @method static string | null getLoginUrl(array $parameters = []) * @method static string getLogoutUrl(array $parameters = []) - * @method static string | null getMaxContentWidth() + * @method static MaxWidth | string | null getMaxContentWidth() * @method static string | null getModelResource(string | Model $model) * @method static string getNameForDefaultAvatar(Model | Authenticatable $user) * @method static array getNavigation() diff --git a/packages/panels/src/FilamentManager.php b/packages/panels/src/FilamentManager.php index 4510d91904..d1e332ed6c 100644 --- a/packages/panels/src/FilamentManager.php +++ b/packages/panels/src/FilamentManager.php @@ -17,6 +17,7 @@ use Filament\Navigation\MenuItem; use Filament\Navigation\NavigationGroup; use Filament\Navigation\NavigationItem; use Filament\Support\Assets\Theme; +use Filament\Support\Enums\MaxWidth; use Filament\Support\Facades\FilamentAsset; use Filament\Support\Facades\FilamentView; use Filament\Widgets\Widget; @@ -203,7 +204,7 @@ class FilamentManager return $this->getCurrentPanel()->getLogoutUrl($parameters); } - public function getMaxContentWidth(): ?string + public function getMaxContentWidth(): MaxWidth | string | null { return $this->getCurrentPanel()->getMaxContentWidth(); } diff --git a/packages/panels/src/Pages/BasePage.php b/packages/panels/src/Pages/BasePage.php index 3fa1bc65d0..b35bbeb7dc 100644 --- a/packages/panels/src/Pages/BasePage.php +++ b/packages/panels/src/Pages/BasePage.php @@ -10,6 +10,7 @@ use Filament\Forms\Contracts\HasForms; use Filament\Infolists\Concerns\InteractsWithInfolists; use Filament\Infolists\Contracts\HasInfolists; use Filament\Support\Enums\Alignment; +use Filament\Support\Enums\MaxWidth; use Filament\Support\Exceptions\Halt; use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\View\View; @@ -70,7 +71,7 @@ abstract class BasePage extends Component implements HasActions, HasForms, HasIn ->title(); } - public function getMaxContentWidth(): ?string + public function getMaxContentWidth(): MaxWidth | string | null { return $this->maxContentWidth; } diff --git a/packages/panels/src/Pages/SimplePage.php b/packages/panels/src/Pages/SimplePage.php index 4dc0aa8793..35ea4891a8 100644 --- a/packages/panels/src/Pages/SimplePage.php +++ b/packages/panels/src/Pages/SimplePage.php @@ -2,6 +2,8 @@ namespace Filament\Pages; +use Filament\Support\Enums\MaxWidth; + abstract class SimplePage extends BasePage { protected static string $layout = 'filament-panels::components.layout.simple'; @@ -15,7 +17,7 @@ abstract class SimplePage extends BasePage ]; } - public function getMaxWidth(): ?string + public function getMaxWidth(): MaxWidth | string | null { return $this->maxWidth; } diff --git a/packages/panels/src/Panel/Concerns/HasMaxContentWidth.php b/packages/panels/src/Panel/Concerns/HasMaxContentWidth.php index b83195dce2..1530f77d17 100644 --- a/packages/panels/src/Panel/Concerns/HasMaxContentWidth.php +++ b/packages/panels/src/Panel/Concerns/HasMaxContentWidth.php @@ -2,18 +2,20 @@ namespace Filament\Panel\Concerns; +use Filament\Support\Enums\MaxWidth; + trait HasMaxContentWidth { - protected ?string $maxContentWidth = null; + protected MaxWidth | string | null $maxContentWidth = null; - public function maxContentWidth(?string $maxContentWidth): static + public function maxContentWidth(MaxWidth | string | null $maxContentWidth): static { $this->maxContentWidth = $maxContentWidth; return $this; } - public function getMaxContentWidth(): ?string + public function getMaxContentWidth(): MaxWidth | string | null { return $this->maxContentWidth; } diff --git a/packages/support/resources/views/components/modal/index.blade.php b/packages/support/resources/views/components/modal/index.blade.php index 5b1df9f99d..6ab4c1fcb5 100644 --- a/packages/support/resources/views/components/modal/index.blade.php +++ b/packages/support/resources/views/components/modal/index.blade.php @@ -1,5 +1,6 @@ @php use Filament\Support\Enums\Alignment; + use Filament\Support\Enums\MaxWidth; @endphp @props([ @@ -159,18 +160,18 @@ 'mx-auto rounded-xl' => ! ($slideOver || ($width === 'screen')), 'hidden' => ! $visible, match ($width) { - 'xs', \Filament\Support\Enums\MaxWidth::ExtraSmall => 'max-w-xs', - 'sm', \Filament\Support\Enums\MaxWidth::Small => 'max-w-sm', - 'md', \Filament\Support\Enums\MaxWidth::Medium => 'max-w-md', - 'lg', \Filament\Support\Enums\MaxWidth::Large => 'max-w-lg', - 'xl', \Filament\Support\Enums\MaxWidth::ExtraLarge => 'max-w-xl', - '2xl', \Filament\Support\Enums\MaxWidth::TwoXl => 'max-w-2xl', - '3xl', \Filament\Support\Enums\MaxWidth::ThreeXl => 'max-w-3xl', - '4xl', \Filament\Support\Enums\MaxWidth::FourXl => 'max-w-4xl', - '5xl', \Filament\Support\Enums\MaxWidth::FiveXl => 'max-w-5xl', - '6xl', \Filament\Support\Enums\MaxWidth::SixXl => 'max-w-6xl', - '7xl', \Filament\Support\Enums\MaxWidth::SevenXl => 'max-w-7xl', - 'screen', \Filament\Support\Enums\MaxWidth::Screen => 'fixed inset-0', + MaxWidth::ExtraSmall, 'xs' => 'max-w-xs', + MaxWidth::Small, 'sm' => 'max-w-sm', + MaxWidth::Medium, 'md' => 'max-w-md', + MaxWidth::Large, 'lg' => 'max-w-lg', + MaxWidth::ExtraLarge, 'xl' => 'max-w-xl', + MaxWidth::TwoExtraLarge, '2xl' => 'max-w-2xl', + MaxWidth::ThreeExtraLarge, '3xl' => 'max-w-3xl', + MaxWidth::FourExtraLarge, '4xl' => 'max-w-4xl', + MaxWidth::FiveExtraLarge, '5xl' => 'max-w-5xl', + MaxWidth::SixExtraLarge, '6xl' => 'max-w-6xl', + MaxWidth::SevenExtraLarge, '7xl' => 'max-w-7xl', + MaxWidth::Screen, 'screen' => 'fixed inset-0', default => $width, }, ]) diff --git a/packages/support/src/Enums/MaxWidth.php b/packages/support/src/Enums/MaxWidth.php index 97dfea2eef..b146f5c4a7 100644 --- a/packages/support/src/Enums/MaxWidth.php +++ b/packages/support/src/Enums/MaxWidth.php @@ -1,6 +1,7 @@ 'fi-ta-icon-item-size-md h-5 w-5', IconColumnSize::Large, 'lg' => 'fi-ta-icon-item-size-lg h-6 w-6', IconColumnSize::ExtraLarge, 'xl' => 'fi-ta-icon-item-size-xl h-7 w-7', - IconColumnSize::ExtraExtraLarge, '2xl' => 'fi-ta-icon-item-size-2xl h-8 w-8', + IconColumnSize::TwoExtraLarge, IconColumnSize::ExtraExtraLarge, '2xl' => 'fi-ta-icon-item-size-2xl h-8 w-8', default => $size, }, match ($color) { diff --git a/packages/tables/src/Actions/AssociateAction.php b/packages/tables/src/Actions/AssociateAction.php index 513c97629a..7551b7114b 100644 --- a/packages/tables/src/Actions/AssociateAction.php +++ b/packages/tables/src/Actions/AssociateAction.php @@ -6,6 +6,7 @@ use Closure; use Filament\Actions\Concerns\CanCustomizeProcess; use Filament\Forms\Components\Select; use Filament\Forms\Form; +use Filament\Support\Enums\MaxWidth; use Filament\Tables\Table; use Illuminate\Database\Connection; use Illuminate\Database\Eloquent\Builder; @@ -52,7 +53,7 @@ class AssociateAction extends Action $this->modalSubmitActionLabel(__('filament-actions::associate.single.modal.actions.associate.label')); - $this->modalWidth('lg'); + $this->modalWidth(MaxWidth::Large); $this->extraModalFooterActions(function (): array { return $this->canAssociateAnother ? [ diff --git a/packages/tables/src/Actions/AttachAction.php b/packages/tables/src/Actions/AttachAction.php index 00ffd64374..78773a911a 100644 --- a/packages/tables/src/Actions/AttachAction.php +++ b/packages/tables/src/Actions/AttachAction.php @@ -6,6 +6,7 @@ use Closure; use Filament\Actions\Concerns\CanCustomizeProcess; use Filament\Forms\Components\Select; use Filament\Forms\Form; +use Filament\Support\Enums\MaxWidth; use Filament\Support\Services\RelationshipJoiner; use Filament\Tables\Table; use Illuminate\Database\Connection; @@ -52,7 +53,7 @@ class AttachAction extends Action $this->modalSubmitActionLabel(__('filament-actions::attach.single.modal.actions.attach.label')); - $this->modalWidth('lg'); + $this->modalWidth(MaxWidth::Large); $this->extraModalFooterActions(function (): array { return $this->canAttachAnother() ? [ diff --git a/packages/tables/src/Columns/IconColumn/IconColumnSize.php b/packages/tables/src/Columns/IconColumn/IconColumnSize.php index 24c3724c2d..05e88a2c9c 100644 --- a/packages/tables/src/Columns/IconColumn/IconColumnSize.php +++ b/packages/tables/src/Columns/IconColumn/IconColumnSize.php @@ -14,5 +14,7 @@ enum IconColumnSize case ExtraLarge; + case TwoExtraLarge; + case ExtraExtraLarge; } From ba97aef930f74881e266985233d9e4a3ef230a71 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sat, 25 Nov 2023 22:28:12 +0000 Subject: [PATCH 08/10] wip --- packages/actions/docs/05-grouping-actions.md | 6 +++-- packages/actions/src/Concerns/HasDropdown.php | 7 ++--- packages/forms/src/Components/Builder.php | 7 ++--- .../views/components/dropdown/index.blade.php | 26 +++++++++++-------- packages/tables/docs/04-filters.md | 5 ++-- .../src/Table/Concerns/CanToggleColumns.php | 13 +++++----- .../tables/src/Table/Concerns/HasFilters.php | 13 +++++----- 7 files changed, 44 insertions(+), 33 deletions(-) diff --git a/packages/actions/docs/05-grouping-actions.md b/packages/actions/docs/05-grouping-actions.md index 3f1c7b6d6b..62c9180dca 100644 --- a/packages/actions/docs/05-grouping-actions.md +++ b/packages/actions/docs/05-grouping-actions.md @@ -70,13 +70,15 @@ The `dropdown(false)` method puts the actions inside the parent dropdown, instea ## Setting the width of the dropdown -The dropdown may be set to a width by using the `dropdownWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `xs`, `sm`, `md`, `lg`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`, `6xl` and `7xl`: +The dropdown may be set to a width by using the `dropdownWidth()` method. Options correspond to [Tailwind's max-width scale](https://tailwindcss.com/docs/max-width). The options are `ExtraSmall`, `Small`, `Medium`, `Large`, `ExtraLarge`, `TwoExtraLarge`, `ThreeExtraLarge`, `FourExtraLarge`, `FiveExtraLarge`, `SixExtraLarge` and `SevenExtraLarge`: ```php +use Filament\Support\Enums\MaxWidth; + ActionGroup::make([ // Array of actions ]) - ->dropdownWidth('xs') + ->dropdownWidth(MaxWidth::ExtraSmall) ``` ## Controlling the maximum height of the dropdown diff --git a/packages/actions/src/Concerns/HasDropdown.php b/packages/actions/src/Concerns/HasDropdown.php index ba0d9f4883..c421f2c3b8 100644 --- a/packages/actions/src/Concerns/HasDropdown.php +++ b/packages/actions/src/Concerns/HasDropdown.php @@ -3,6 +3,7 @@ namespace Filament\Actions\Concerns; use Closure; +use Filament\Support\Enums\MaxWidth; trait HasDropdown { @@ -12,7 +13,7 @@ trait HasDropdown protected string | Closure | null $dropdownMaxHeight = null; - protected string | Closure | null $dropdownWidth = null; + protected MaxWidth | string | Closure | null $dropdownWidth = null; public function dropdown(bool | Closure $condition = true): static { @@ -35,7 +36,7 @@ trait HasDropdown return $this; } - public function dropdownWidth(string | Closure | null $width): static + public function dropdownWidth(MaxWidth | string | Closure | null $width): static { $this->dropdownWidth = $width; @@ -52,7 +53,7 @@ trait HasDropdown return $this->evaluate($this->dropdownMaxHeight); } - public function getDropdownWidth(): ?string + public function getDropdownWidth(): MaxWidth | string | null { return $this->evaluate($this->dropdownWidth); } diff --git a/packages/forms/src/Components/Builder.php b/packages/forms/src/Components/Builder.php index d22cb2f7e6..497ebad9b8 100644 --- a/packages/forms/src/Components/Builder.php +++ b/packages/forms/src/Components/Builder.php @@ -7,6 +7,7 @@ use Filament\Forms\ComponentContainer; use Filament\Forms\Components\Actions\Action; use Filament\Forms\Components\Builder\Block; use Filament\Support\Enums\ActionSize; +use Filament\Support\Enums\MaxWidth; use Filament\Support\Facades\FilamentIcon; use Illuminate\Support\Arr; use Illuminate\Support\Str; @@ -75,7 +76,7 @@ class Builder extends Field implements Contracts\CanConcealComponents */ protected ?array $blockPickerColumns = []; - protected string | Closure | null $blockPickerWidth = null; + protected MaxWidth | string | Closure | null $blockPickerWidth = null; protected function setUp(): void { @@ -870,14 +871,14 @@ class Builder extends Field implements Contracts\CanConcealComponents return $columns; } - public function blockPickerWidth(string | Closure | null $width): static + public function blockPickerWidth(MaxWidth | string | Closure | null $width): static { $this->blockPickerWidth = $width; return $this; } - public function getBlockPickerWidth(): ?string + public function getBlockPickerWidth(): MaxWidth | string | null { return $this->evaluate($this->blockPickerWidth); } diff --git a/packages/support/resources/views/components/dropdown/index.blade.php b/packages/support/resources/views/components/dropdown/index.blade.php index 5fa180e8cf..f7fdf8ea85 100644 --- a/packages/support/resources/views/components/dropdown/index.blade.php +++ b/packages/support/resources/views/components/dropdown/index.blade.php @@ -8,6 +8,10 @@ 'width' => null, ]) +@php + use Filament\Support\Enums\MaxWidth; +@endphp +
url = Filament::getVerifyEmailUrl($event->user); - - $event->user->notify($notification); - } -} diff --git a/packages/panels/src/Pages/Auth/Register.php b/packages/panels/src/Pages/Auth/Register.php index 107693489b..0929a2cbb9 100644 --- a/packages/panels/src/Pages/Auth/Register.php +++ b/packages/panels/src/Pages/Auth/Register.php @@ -4,6 +4,7 @@ namespace Filament\Pages\Auth; use DanHarrin\LivewireRateLimiting\Exceptions\TooManyRequestsException; use DanHarrin\LivewireRateLimiting\WithRateLimiting; +use Exception; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Facades\Filament; @@ -11,13 +12,15 @@ use Filament\Forms\Components\Component; use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Http\Responses\Auth\Contracts\RegistrationResponse; +use Filament\Notifications\Auth\VerifyEmail; use Filament\Notifications\Notification; use Filament\Pages\Concerns\InteractsWithFormActions; use Filament\Pages\SimplePage; use Illuminate\Auth\EloquentUserProvider; -use Illuminate\Auth\Events\Registered; use Illuminate\Auth\SessionGuard; +use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Contracts\Support\Htmlable; +use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules\Password; @@ -74,11 +77,7 @@ class Register extends SimplePage $user = $this->getUserModel()::create($data); - app()->bind( - \Illuminate\Auth\Listeners\SendEmailVerificationNotification::class, - \Filament\Listeners\Auth\SendEmailVerificationNotification::class, - ); - event(new Registered($user)); + $this->sendEmailVerificationNotification($user); Filament::auth()->login($user); @@ -87,6 +86,28 @@ class Register extends SimplePage return app(RegistrationResponse::class); } + protected function sendEmailVerificationNotification(Model $user): void + { + if (! $user instanceof MustVerifyEmail) { + return; + } + + if ($user->hasVerifiedEmail()) { + return; + } + + if (! method_exists($user, 'notify')) { + $userClass = $user::class; + + throw new Exception("Model [{$userClass}] does not have a [notify()] method."); + } + + $notification = new VerifyEmail(); + $notification->url = Filament::getVerifyEmailUrl($user); + + $user->notify($notification); + } + public function form(Form $form): Form { return $form; diff --git a/tests/src/Panels/Auth/RegisterTest.php b/tests/src/Panels/Auth/RegisterTest.php index acbe83e393..4dcb552dd4 100644 --- a/tests/src/Panels/Auth/RegisterTest.php +++ b/tests/src/Panels/Auth/RegisterTest.php @@ -1,11 +1,11 @@ assertGuest(); @@ -36,7 +36,7 @@ it('can register', function () { ->call('register') ->assertRedirect(Filament::getUrl()); - Event::assertDispatched(Registered::class); + Notification::assertSentTimes(VerifyEmail::class, expectedCount: 1); $this->assertAuthenticated(); @@ -47,6 +47,8 @@ it('can register', function () { }); it('can register and redirect user to their intended URL', function () { + Notification::fake(); + session()->put('url.intended', $intendedUrl = Str::random()); Filament::getCurrentPanel()->requiresEmailVerification(false); @@ -65,7 +67,7 @@ it('can register and redirect user to their intended URL', function () { }); it('can throttle registration attempts', function () { - Event::fake(); + Notification::fake(); $this->assertGuest(); @@ -87,7 +89,7 @@ it('can throttle registration attempts', function () { auth()->logout(); } - Event::assertDispatchedTimes(Registered::class, times: 2); + Notification::assertSentTimes(VerifyEmail::class, expectedCount: 2); livewire(Register::class) ->fillForm([ @@ -100,7 +102,7 @@ it('can throttle registration attempts', function () { ->assertNotified() ->assertNoRedirect(); - Event::assertDispatchedTimes(Registered::class, times: 2); + Notification::assertSentTimes(VerifyEmail::class, expectedCount: 2); $this->assertGuest(); }); From 8aa2b894ea99691cfe0ad2a60994786a78a8f60b Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sat, 25 Nov 2023 23:32:00 +0000 Subject: [PATCH 10/10] Fix panel objects shared between requests --- packages/panels/src/Facades/Filament.php | 4 ++-- packages/panels/src/PanelProvider.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/panels/src/Facades/Filament.php b/packages/panels/src/Facades/Filament.php index d9e0a54fa6..9c68de8aa8 100644 --- a/packages/panels/src/Facades/Filament.php +++ b/packages/panels/src/Facades/Filament.php @@ -121,11 +121,11 @@ class Filament extends Facade return 'filament'; } - public static function registerPanel(Panel $panel): void + public static function registerPanel(Panel | Closure $panel): void { static::getFacadeApplication()->resolving( static::getFacadeAccessor(), - fn (FilamentManager $filamentManager) => $filamentManager->registerPanel($panel), + fn (FilamentManager $filamentManager) => $filamentManager->registerPanel(value($panel)), ); } } diff --git a/packages/panels/src/PanelProvider.php b/packages/panels/src/PanelProvider.php index 802c59a1bf..d66ab20a6b 100644 --- a/packages/panels/src/PanelProvider.php +++ b/packages/panels/src/PanelProvider.php @@ -12,7 +12,7 @@ abstract class PanelProvider extends ServiceProvider public function register(): void { Filament::registerPanel( - $this->panel(Panel::make()), + fn (): Panel => $this->panel(Panel::make()), ); } }