rule('current_password', $condition); return $this; } public function email(bool | Closure $condition = true): static { $this->isEmail = $condition; $this->rule('email', $condition); return $this; } public function integer(bool | Closure $condition = true): static { $this->numeric($condition); $this->inputMode(static fn (): ?string => $condition ? 'numeric' : null); $this->step(static fn (): ?int => $condition ? 1 : null); $this->rule('integer', $condition); return $this; } public function mask(string | RawJs | Closure | null $mask): static { $this->mask = $mask; return $this; } /** * @param scalar | Closure | null $value */ public function maxValue($value): static { $this->maxValue = $value; $this->rule(static function (TextInput $component): string { $value = $component->getMaxValue(); return "max:{$value}"; }, static fn (TextInput $component): bool => filled($component->getMaxValue())); return $this; } /** * @param scalar | Closure | null $value */ public function minValue($value): static { $this->minValue = $value; $this->rule(static function (TextInput $component): string { $value = $component->getMinValue(); return "min:{$value}"; }, static fn (TextInput $component): bool => filled($component->getMinValue())); return $this; } public function numeric(bool | Closure $condition = true): static { $this->isNumeric = $condition; $this->inputMode(static fn (): ?string => $condition ? 'decimal' : null); $this->rule('numeric', $condition); $this->step(static fn (): ?string => $condition ? 'any' : null); return $this; } public function password(bool | Closure $condition = true): static { $this->isPassword = $condition; return $this; } public function revealable(bool | Closure $condition = true): static { $this->isRevealable = $condition; $this->suffixActions([ TextInput\Actions\ShowPasswordAction::make()->visible($condition), TextInput\Actions\HidePasswordAction::make()->visible($condition), ]); return $this; } public function isPasswordRevealable(): bool { if (! $this->evaluate($this->isRevealable)) { return false; } return $this->isPassword() ?: throw new Exception("The text input [{$this->getStatePath()}] is not a [password()], so it cannot be [revealable()]."); } public function tel(bool | Closure $condition = true): static { $this->isTel = $condition; $this->regex(static fn (TextInput $component) => $component->evaluate($condition) ? $component->getTelRegex() : null); return $this; } public function telRegex(string | Closure | null $regex): static { $this->telRegex = $regex; return $this; } public function type(string | Closure | null $type): static { $this->type = $type; return $this; } public function url(bool | Closure $condition = true): static { $this->isUrl = $condition; $this->rule('url', $condition); return $this; } public function getMask(): string | RawJs | null { return $this->evaluate($this->mask); } /** * @return scalar | null */ public function getMaxValue() { return $this->evaluate($this->maxValue); } /** * @return scalar | null */ public function getMinValue() { return $this->evaluate($this->minValue); } public function getType(): string { if ($type = $this->evaluate($this->type)) { return $type; } elseif ($this->isEmail()) { return 'email'; } elseif ($this->isNumeric()) { return 'number'; } elseif ($this->isPassword()) { return 'password'; } elseif ($this->isTel()) { return 'tel'; } elseif ($this->isUrl()) { return 'url'; } return 'text'; } public function getTelRegex(): string { return $this->evaluate($this->telRegex) ?? '/^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\.\/0-9]*$/'; } public function isEmail(): bool { return (bool) $this->evaluate($this->isEmail); } public function isNumeric(): bool { return (bool) $this->evaluate($this->isNumeric); } public function isPassword(): bool { return (bool) $this->evaluate($this->isPassword); } public function isTel(): bool { return (bool) $this->evaluate($this->isTel); } public function isUrl(): bool { return (bool) $this->evaluate($this->isUrl); } }