From 07d78c898faa2012694d0ea100a06fa9acbe20a0 Mon Sep 17 00:00:00 2001 From: Wendell Adriel Date: Tue, 16 May 2023 13:08:59 +0100 Subject: [PATCH 1/3] Add minicli logo in README file --- .gitattributes | 1 + README.md | 7 ++++++- art/minicli.png | Bin 0 -> 46866 bytes 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 art/minicli.png diff --git a/.gitattributes b/.gitattributes index 455116e..807a737 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,6 @@ * text=auto +/.art export-ignore /.github export-ignore /tests export-ignore .editorconfig export-ignore diff --git a/README.md b/README.md index adeb38c..da483df 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ -# Minicli Framework +
+

+ Minicli +

Minicli Framework

+

+
This repo contains the source code for the Minicli Framework - a great way to extend the core minicli application. diff --git a/art/minicli.png b/art/minicli.png new file mode 100644 index 0000000000000000000000000000000000000000..061201c8001a122f544a8b5b2fbe07a781373ec6 GIT binary patch literal 46866 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 @ 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 Date: Tue, 16 May 2023 13:20:50 +0100 Subject: [PATCH 2/3] Add ThemeStyle class, update Theming Engine to use it and fix static analysis issues --- src/Theme/Catalog/DefaultTheme.php | 90 ++++++++++++++++++------------ src/Theme/ThemeContract.php | 61 ++++++++++++++------ src/Theme/ThemeStyle.php | 23 ++++++++ 3 files changed, 119 insertions(+), 55 deletions(-) create mode 100644 src/Theme/ThemeStyle.php diff --git a/src/Theme/Catalog/DefaultTheme.php b/src/Theme/Catalog/DefaultTheme.php index fc75227..9eb16d1 100644 --- a/src/Theme/Catalog/DefaultTheme.php +++ b/src/Theme/Catalog/DefaultTheme.php @@ -5,69 +5,85 @@ namespace Minicli\Framework\Theme\Catalog; use Minicli\Framework\Theme\Enums\Background; +use Minicli\Framework\Theme\Enums\FontWeight; use Minicli\Framework\Theme\Enums\Foreground; use Minicli\Framework\Theme\ThemeContract; -use StringBackedEnum; +use Minicli\Framework\Theme\ThemeStyle; final class DefaultTheme implements ThemeContract { - public function default(): array + public function default(): ThemeStyle { - return [ - Foreground::WHITE, - ]; + return ThemeStyle::make(Foreground::WHITE); } - public function alt(): array + public function alt(): ThemeStyle { - return [ - Foreground::BLACK, - Background::WHITE, - ]; + return ThemeStyle::make(Foreground::BLACK, Background::WHITE); } - public function error(): array + public function error(): ThemeStyle { - return [ - Foreground::RED, - ]; + return ThemeStyle::make(Foreground::RED); } - public function errorAlt(): array + public function errorAlt(): ThemeStyle { - return [ - Foreground::WHITE, - Background::RED, - ]; + return ThemeStyle::make(Foreground::WHITE, Background::RED); } - public function success(): array + public function warning(): ThemeStyle { - return [ - Foreground::GREEN, - ]; + return ThemeStyle::make(Foreground::YELLOW); } - public function successAlt(): array + public function warningAlt(): ThemeStyle { - return [ - Foreground::WHITE, - Background::GREEN, - ]; + return ThemeStyle::make(Foreground::WHITE, Background::YELLOW); } - public function info(): array + public function success(): ThemeStyle { - return [ - Foreground::CYAN, - ]; + return ThemeStyle::make(Foreground::GREEN); } - public function infoAlt(): array + public function successAlt(): ThemeStyle { - return [ - Foreground::WHITE, - Background::CYAN, - ]; + return ThemeStyle::make(Foreground::WHITE, Background::GREEN); + } + + public function info(): ThemeStyle + { + return ThemeStyle::make(Foreground::CYAN); + } + + public function infoAlt(): ThemeStyle + { + return ThemeStyle::make(Foreground::WHITE, Background::CYAN); + } + + public function bold(): ThemeStyle + { + return ThemeStyle::make(FontWeight::BOLD); + } + + public function dim(): ThemeStyle + { + return ThemeStyle::make(FontWeight::DIM); + } + + public function italic(): ThemeStyle + { + return ThemeStyle::make(FontWeight::ITALIC); + } + + public function underline(): ThemeStyle + { + return ThemeStyle::make(FontWeight::UNDERLINE); + } + + public function invert(): ThemeStyle + { + return ThemeStyle::make(FontWeight::INVERT); } } diff --git a/src/Theme/ThemeContract.php b/src/Theme/ThemeContract.php index edd707d..56eb443 100644 --- a/src/Theme/ThemeContract.php +++ b/src/Theme/ThemeContract.php @@ -4,55 +4,80 @@ namespace Minicli\Framework\Theme; -use StringBackedEnum; - interface ThemeContract { /** * Default style - * @return array */ - public function default(): array; + public function default(): ThemeStyle; /** * Alternative style for Default - * @return array */ - public function alt(): array; + public function alt(): ThemeStyle; /** * Error style - * @return array */ - public function error(): array; + public function error(): ThemeStyle; /** * Alternative style for Error - * @return array */ - public function errorAlt(): array; + public function errorAlt(): ThemeStyle; + + /** + * Warning style + */ + public function warning(): ThemeStyle; + + /** + * Alternative style for Warning + */ + public function warningAlt(): ThemeStyle; /** * Success style - * @return array */ - public function success(): array; + public function success(): ThemeStyle; /** * Alternative style for Success - * @return array */ - public function successAlt(): array; + public function successAlt(): ThemeStyle; /** * Info style - * @return array */ - public function info(): array; + public function info(): ThemeStyle; /** * Alternative style for Info - * @return array */ - public function infoAlt(): array; + public function infoAlt(): ThemeStyle; + + /** + * Bold style + */ + public function bold(): ThemeStyle; + + /** + * Dim style + */ + public function dim(): ThemeStyle; + + /** + * Italic style + */ + public function italic(): ThemeStyle; + + /** + * Underline style + */ + public function underline(): ThemeStyle; + + /** + * Invert style + */ + public function invert(): ThemeStyle; } diff --git a/src/Theme/ThemeStyle.php b/src/Theme/ThemeStyle.php new file mode 100644 index 0000000..e5db925 --- /dev/null +++ b/src/Theme/ThemeStyle.php @@ -0,0 +1,23 @@ + Date: Tue, 16 May 2023 13:40:44 +0100 Subject: [PATCH 3/3] Refactor Config for using class-string for Themes instead of general strings --- src/Configuration/Config.php | 13 ++++++++++--- src/Minicli.php | 9 ++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Configuration/Config.php b/src/Configuration/Config.php index cd1e49a..8f43bb1 100644 --- a/src/Configuration/Config.php +++ b/src/Configuration/Config.php @@ -4,17 +4,24 @@ namespace Minicli\Framework\Configuration; +use Minicli\Framework\Theme\ThemeContract; + final class Config { + /** + * @param string $path + * @param class-string|null $theme + * @param bool $debug + */ public function __construct( private readonly string $path, - private readonly string $theme = '', + private readonly ?string $theme = null, private readonly bool $debug = false, ) { } /** - * @return array{path:string,theme:string,debug:bool} + * @return array{path:string,theme:class-string|null,debug:bool} */ public function toArray(): array { @@ -26,7 +33,7 @@ public function toArray(): array } /** - * @param array{path:string,theme:string,debug:bool|null} $data + * @param array{path:string,theme:class-string|null,debug:bool|null} $data * @return Config */ public static function make(array $data): Config diff --git a/src/Minicli.php b/src/Minicli.php index dbc744c..f77eeea 100644 --- a/src/Minicli.php +++ b/src/Minicli.php @@ -5,6 +5,7 @@ namespace Minicli\Framework; use Minicli\Framework\Configuration\Config; +use Minicli\Framework\Theme\ThemeContract; final class Minicli { @@ -15,9 +16,15 @@ public function __construct( ) { } + /** + * @param string $path + * @param class-string|null $theme + * @param bool $debug + * @return Minicli + */ public static function boot( string $path, - string $theme, + ?string $theme, bool $debug = false, ): Minicli { $config = new Config(