value)); } public static function section(): array { return [ [ __('domains/system/pages.settings.sections.web') => [ self::WEB_NAME, self::WEB_DESCRIPTION, self::WEB_ADDRESS, self::WEB_PHONE, self::WEB_EMAIL, self::WEB_LOGO, self::WEB_FAVICON, ], ], [ __('domains/system/pages.settings.sections.general') => [ self::DEFAULT_LANGUAGE, self::TIMEZONE, ], __('domains/system/pages.settings.sections.webmaster') => [ self::GOOGLE_TAG_MANAGER_ID, self::GOOGLE_WEBMASTER_ID, ], ], ]; } public function inputType(): InputType { return match ($this) { self::WEB_LOGO, self::WEB_FAVICON => InputType::FILE, self::DEFAULT_LANGUAGE, self::TIMEZONE => InputType::SELECT, self::WEB_DESCRIPTION => InputType::TEXTAREA, default => InputType::TEXTLINE }; } public function inputAttributes(): array { $options = match ($this) { self::WEB_LOGO, self::WEB_FAVICON => [ 'allow-image-crop' => true, 'allow-image-resize' => true, 'allow-image-transform' => true, 'image-crop-aspect-ratio' => '1:1', 'image-resize-target-width' => '500', 'image-resize-target-height' => '500', ], self::TIMEZONE, self::DEFAULT_LANGUAGE => ['options' => $this->options()], default => [], }; $options['label'] = $this->label(); return $options; } public function validation(): array { return match ($this) { self::WEB_LOGO, self::WEB_FAVICON => ['required', 'file', 'mimetypes:'.implode(',', FileType::IMAGE->mimeType()), 'max:1024'], default => ['required', 'string'], }; } public function default(): ?string { return match ($this) { self::DEFAULT_LANGUAGE => 'en', self::TIMEZONE => 'UTC', self::WEB_NAME => 'Acme Inc', self::WEB_ADDRESS => '123 Main St, Anytown, USA', self::WEB_PHONE => '+1234567890', self::WEB_EMAIL => 'acme@web.io', default => null }; } public function options(): array { return match ($this) { self::DEFAULT_LANGUAGE => [ 'en' => 'English', 'id' => 'Indonesian', ], self::TIMEZONE => [ 'UTC' => 'UTC', 'Asia/Jakarta' => 'Asia/Jakarta', 'Asia/Makassar' => 'Asia/Makassar', 'Asia/Jayapura' => 'Asia/Jayapura', ], default => [], }; } public function isImage(): bool { return in_array($this, [ self::WEB_LOGO, self::WEB_FAVICON, ]); } }