| Arrayable | string | Closure */ protected array | Arrayable | string | Closure $options = []; protected ?string $placeholder = null; /** * @param array | Arrayable | Closure $options */ public function options(array | Arrayable | Closure $options): static { $this->options = $options; return $this; } public function placeholder(string $placeholder): static { $this->placeholder = $placeholder; return $this; } /** * @return array */ public function getOptions(): array { $options = $this->evaluate($this->options); $enum = $options; if ( is_string($enum) && enum_exists($enum) ) { return collect($enum::cases()) ->when( is_a($enum, LabelInterface::class, allow_string: true), fn (Collection $options): Collection => $options ->mapWithKeys(fn ($case) => [ ($case?->value ?? $case->name) => $case->getLabel() ?? $case->name, ]), fn (Collection $options): Collection => $options ->mapWithKeys(fn ($case) => [ ($case?->value ?? $case->name) => $case->name, ]), ) ->all(); } if ($options instanceof Arrayable) { $options = $options->toArray(); } return $options; } public function getPlaceholder(): ?string { return $this->placeholder; } }