| Arrayable | string | Closure */ protected array | Arrayable | string | Closure $options = []; protected ?string $placeholder = null; /** * @param array | Arrayable | string | Closure $options */ public function options(array | Arrayable | string | 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) ?? []; if ( is_string($options) && enum_exists($enum = $options) ) { if (is_a($enum, LabelInterface::class, allow_string: true)) { return array_reduce($enum::cases(), function (array $carry, LabelInterface & UnitEnum $case): array { $carry[$case?->value ?? $case->name] = $case->getLabel() ?? $case->name; return $carry; }, []); } return array_reduce($enum::cases(), function (array $carry, UnitEnum $case): array { $carry[$case?->value ?? $case->name] = $case->name; return $carry; }, []); } if ($options instanceof Arrayable) { $options = $options->toArray(); } return $options; } public function getPlaceholder(): ?string { return $this->placeholder; } }