diff --git a/packages/actions/resources/views/button-action.blade.php b/packages/actions/resources/views/button-action.blade.php index 18719f78dd..c60d30acff 100644 --- a/packages/actions/resources/views/button-action.blade.php +++ b/packages/actions/resources/views/button-action.blade.php @@ -1,10 +1,11 @@ {{ $getLabel() }} diff --git a/packages/actions/resources/views/button-group.blade.php b/packages/actions/resources/views/button-group.blade.php index ee9ddda527..39317c6035 100644 --- a/packages/actions/resources/views/button-group.blade.php +++ b/packages/actions/resources/views/button-group.blade.php @@ -1,10 +1,11 @@ {{ $getLabel() }} diff --git a/packages/actions/resources/views/components/action.blade.php b/packages/actions/resources/views/components/action.blade.php index de6c34c7cf..9dc2d0a542 100644 --- a/packages/actions/resources/views/components/action.blade.php +++ b/packages/actions/resources/views/components/action.blade.php @@ -26,8 +26,6 @@ :tooltip="$action->getTooltip()" :disabled="$isDisabled" :icon="$icon ?? $action->getIcon()" - :icon-size="$action->getIconSize()" - :size="$action->getSize()" :label-sr-only="$action->isLabelHidden()" :attributes="\Filament\Support\prepare_inherited_attributes($attributes)->merge($action->getExtraAttributes(), escape: false)" > diff --git a/packages/actions/resources/views/components/group.blade.php b/packages/actions/resources/views/components/group.blade.php index 4832334bb9..801bade53e 100644 --- a/packages/actions/resources/views/components/group.blade.php +++ b/packages/actions/resources/views/components/group.blade.php @@ -8,6 +8,8 @@ 'dynamicComponent' => null, 'group' => null, 'icon' => null, + 'iconPosition' => null, + 'iconSize' => null, 'iconButton' => false, 'label' => null, 'link' => false, @@ -24,6 +26,8 @@ ->color($color) ->dropdownPlacement($dropdownPlacement) ->icon($icon) + ->iconPosition($iconPosition) + ->iconSize($iconSize) ->label($label) ->size($size) ->tooltip($tooltip) @@ -89,12 +93,11 @@ {{ $slot }} diff --git a/packages/actions/resources/views/icon-button-action.blade.php b/packages/actions/resources/views/icon-button-action.blade.php index 3e292e582b..68cb5c5cc1 100644 --- a/packages/actions/resources/views/icon-button-action.blade.php +++ b/packages/actions/resources/views/icon-button-action.blade.php @@ -1,6 +1,8 @@ diff --git a/packages/actions/resources/views/icon-button-group.blade.php b/packages/actions/resources/views/icon-button-group.blade.php index e20b83b230..71478548ae 100644 --- a/packages/actions/resources/views/icon-button-group.blade.php +++ b/packages/actions/resources/views/icon-button-group.blade.php @@ -1,6 +1,8 @@ diff --git a/packages/actions/resources/views/link-action.blade.php b/packages/actions/resources/views/link-action.blade.php index 07cebb20f0..61413470ea 100644 --- a/packages/actions/resources/views/link-action.blade.php +++ b/packages/actions/resources/views/link-action.blade.php @@ -3,6 +3,7 @@ dynamic-component="filament::link" :icon-position="$getIconPosition()" :icon-size="$getIconSize()" + :size="$getSize()" class="fi-ac-link-action" > {{ $getLabel() }} diff --git a/packages/actions/resources/views/link-group.blade.php b/packages/actions/resources/views/link-group.blade.php index 8b9fefd25c..91a886c03c 100644 --- a/packages/actions/resources/views/link-group.blade.php +++ b/packages/actions/resources/views/link-group.blade.php @@ -1,8 +1,9 @@ diff --git a/packages/notifications/src/Actions/Action.php b/packages/notifications/src/Actions/Action.php index c8656c0b6e..954abf6ccc 100644 --- a/packages/notifications/src/Actions/Action.php +++ b/packages/notifications/src/Actions/Action.php @@ -6,8 +6,6 @@ use Closure; use Filament\Actions\Contracts\Groupable; use Filament\Actions\StaticAction; use Filament\Support\Enums\ActionSize; -use Filament\Support\Enums\IconPosition; -use Filament\Support\Enums\IconSize; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Str; @@ -56,17 +54,8 @@ class Action extends StaticAction implements Arrayable, Groupable 'dispatchToComponent' => $this->getDispatchToComponent(), 'extraAttributes' => $this->getExtraAttributes(), 'icon' => $this->getIcon(), - 'iconPosition' => match ($iconPosition = $this->getIconPosition()) { - IconPosition::After => 'after', - IconPosition::Before => 'before', - default => $iconPosition, - }, - 'iconSize' => match ($iconSize = $this->getIconSize()) { - IconSize::Small => 'sm', - IconSize::Medium => 'md', - IconSize::Large => 'lg', - default => $iconSize, - }, + 'iconPosition' => $this->getIconPosition(), + 'iconSize' => $this->getIconSize(), 'isOutlined' => $this->isOutlined(), 'isDisabled' => $this->isDisabled(), 'label' => $this->getLabel(), @@ -74,14 +63,8 @@ class Action extends StaticAction implements Arrayable, Groupable 'shouldMarkAsRead' => $this->shouldMarkAsRead(), 'shouldMarkAsUnread' => $this->shouldMarkAsUnread(), 'shouldOpenUrlInNewTab' => $this->shouldOpenUrlInNewTab(), - 'size' => match ($size = $this->getSize()) { - ActionSize::ExtraSmall => 'xs', - ActionSize::Small => 'sm', - ActionSize::Medium => 'md', - ActionSize::Large => 'lg', - ActionSize::ExtraLarge => 'xl', - default => $size, - }, + 'size' => $this->getSize(), + 'tooltip' => $this->getTooltip(), 'url' => $this->getUrl(), 'view' => $this->getView(), ]; @@ -123,6 +106,7 @@ class Action extends StaticAction implements Arrayable, Groupable $static->markAsUnread($data['shouldMarkAsUnread'] ?? false); $static->outlined($data['isOutlined'] ?? false); $static->url($data['url'] ?? null, $data['shouldOpenUrlInNewTab'] ?? false); + $static->tooltip($data['tooltip'] ?? null); return $static; } diff --git a/packages/notifications/src/Actions/ActionGroup.php b/packages/notifications/src/Actions/ActionGroup.php index dbd4ccd9bb..1cd050de27 100644 --- a/packages/notifications/src/Actions/ActionGroup.php +++ b/packages/notifications/src/Actions/ActionGroup.php @@ -3,9 +3,8 @@ namespace Filament\Notifications\Actions; use Filament\Actions\ActionGroup as BaseActionGroup; -use Filament\Support\Enums\IconPosition; -use Filament\Support\Enums\IconSize; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Str; /** * @property array $actions @@ -20,20 +19,19 @@ class ActionGroup extends BaseActionGroup implements Arrayable return [ 'actions' => collect($this->getActions())->toArray(), 'color' => $this->getColor(), + 'dropdownMaxHeight' => $this->getDropdownMaxHeight(), + 'dropdownPlacement' => $this->getDropdownPlacement(), + 'dropdownWidth' => $this->getDropdownWidth(), + 'extraAttributes' => $this->getExtraAttributes(), + 'hasDropdown' => $this->hasDropdown(), 'icon' => $this->getIcon(), - 'iconPosition' => match ($iconPosition = $this->getIconPosition()) { - IconPosition::After => 'after', - IconPosition::Before => 'before', - default => $iconPosition, - }, - 'iconSize' => match ($iconSize = $this->getIconSize()) { - IconSize::Small => 'sm', - IconSize::Medium => 'md', - IconSize::Large => 'large', - default => $iconSize, - }, + 'iconPosition' => $this->getIconPosition(), + 'iconSize' => $this->getIconSize(), + 'isOutlined' => $this->isOutlined(), 'label' => $this->getLabel(), + 'size' => $this->getSize(), 'tooltip' => $this->getTooltip(), + 'view' => $this->getView(), ]; } @@ -44,18 +42,45 @@ class ActionGroup extends BaseActionGroup implements Arrayable { $static = static::make( array_map( - fn (array $action): Action => Action::fromArray($action), + fn (array $action): Action | ActionGroup => match (array_key_exists('actions', $action)) { + true => ActionGroup::fromArray($action), + false => Action::fromArray($action), + }, $data['actions'] ?? [], ), ); + $view = $data['view'] ?? null; + + if (filled($view) && ($static->getView() !== $view) && static::isViewSafe($view)) { + $static->view($view); + } + + if (filled($size = $data['size'] ?? null)) { + $static->size($size); + } + $static->color($data['color'] ?? null); + $static->dropdown($data['hasDropdown'] ?? false); + $static->dropdownMaxHeight($data['dropdownMaxHeight'] ?? null); + $static->dropdownPlacement($data['dropdownPlacement'] ?? null); + $static->dropdownWidth($data['dropdownWidth'] ?? null); + $static->extraAttributes($data['extraAttributes'] ?? []); $static->icon($data['icon'] ?? null); $static->iconPosition($data['iconPosition'] ?? null); $static->iconSize($data['iconSize'] ?? null); $static->label($data['label'] ?? null); + $static->outlined($data['isOutlined'] ?? null); $static->tooltip($data['tooltip'] ?? null); return $static; } + + /** + * @param view-string $view + */ + protected static function isViewSafe(string $view): bool + { + return Str::startsWith($view, 'filament-actions::'); + } } diff --git a/packages/support/src/Enums/IconPosition.php b/packages/support/src/Enums/IconPosition.php index c45750f200..9983279358 100644 --- a/packages/support/src/Enums/IconPosition.php +++ b/packages/support/src/Enums/IconPosition.php @@ -2,9 +2,9 @@ namespace Filament\Support\Enums; -enum IconPosition +enum IconPosition: string { - case Before; + case Before = 'before'; - case After; + case After = 'after'; } diff --git a/packages/support/src/Enums/IconSize.php b/packages/support/src/Enums/IconSize.php index 339b5f9104..f7e85d094a 100644 --- a/packages/support/src/Enums/IconSize.php +++ b/packages/support/src/Enums/IconSize.php @@ -2,11 +2,11 @@ namespace Filament\Support\Enums; -enum IconSize +enum IconSize: string { - case Small; + case Small = 'sm'; - case Medium; + case Medium = 'md'; - case Large; + case Large = 'lg'; }