changes
This commit is contained in:
6
vendor/laravel/prompts/src/Key.php
vendored
6
vendor/laravel/prompts/src/Key.php
vendored
@ -6,8 +6,12 @@ class Key
|
||||
{
|
||||
const UP = "\e[A";
|
||||
|
||||
const SHIFT_UP = "\e[1;2A";
|
||||
|
||||
const DOWN = "\e[B";
|
||||
|
||||
const SHIFT_DOWN = "\e[1;2B";
|
||||
|
||||
const RIGHT = "\e[C";
|
||||
|
||||
const LEFT = "\e[D";
|
||||
@ -20,6 +24,8 @@ class Key
|
||||
|
||||
const LEFT_ARROW = "\eOD";
|
||||
|
||||
const ESCAPE = "\e";
|
||||
|
||||
const DELETE = "\e[3~";
|
||||
|
||||
const BACKSPACE = "\177";
|
||||
|
@ -113,7 +113,7 @@ class TextareaPrompt extends Prompt
|
||||
$lines = collect($this->lines());
|
||||
|
||||
// Line length + 1 for the newline character
|
||||
$lineLengths = $lines->map(fn ($line, $index) => mb_strwidth($line) + ($index === $lines->count() - 1 ? 0 : 1));
|
||||
$lineLengths = $lines->map(fn ($line, $index) => mb_strlen($line) + ($index === $lines->count() - 1 ? 0 : 1));
|
||||
|
||||
$currentLineIndex = $this->currentLineIndex();
|
||||
|
||||
@ -145,13 +145,13 @@ class TextareaPrompt extends Prompt
|
||||
$lines = collect($this->lines());
|
||||
|
||||
// Line length + 1 for the newline character
|
||||
$lineLengths = $lines->map(fn ($line, $index) => mb_strwidth($line) + ($index === $lines->count() - 1 ? 0 : 1));
|
||||
$lineLengths = $lines->map(fn ($line, $index) => mb_strlen($line) + ($index === $lines->count() - 1 ? 0 : 1));
|
||||
|
||||
$currentLineIndex = $this->currentLineIndex();
|
||||
|
||||
if ($currentLineIndex === $lines->count() - 1) {
|
||||
// They're already at the last line, jump them to the last position
|
||||
$this->cursorPosition = mb_strwidth($lines->implode(PHP_EOL));
|
||||
$this->cursorPosition = mb_strlen($lines->implode(PHP_EOL));
|
||||
|
||||
return;
|
||||
}
|
||||
@ -205,7 +205,7 @@ class TextareaPrompt extends Prompt
|
||||
$totalLineLength = 0;
|
||||
|
||||
return (int) collect($this->lines())->search(function ($line) use (&$totalLineLength) {
|
||||
$totalLineLength += mb_strwidth($line) + 1;
|
||||
$totalLineLength += mb_strlen($line) + 1;
|
||||
|
||||
return $totalLineLength > $this->cursorPosition;
|
||||
}) ?: 0;
|
||||
|
@ -6,6 +6,8 @@ use Laravel\Prompts\Prompt;
|
||||
|
||||
trait DrawsBoxes
|
||||
{
|
||||
use InteractsWithStrings;
|
||||
|
||||
protected int $minWidth = 60;
|
||||
|
||||
/**
|
||||
@ -55,44 +57,4 @@ trait DrawsBoxes
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the length of the longest line.
|
||||
*
|
||||
* @param array<string> $lines
|
||||
*/
|
||||
protected function longest(array $lines, int $padding = 0): int
|
||||
{
|
||||
return max(
|
||||
$this->minWidth,
|
||||
collect($lines)
|
||||
->map(fn ($line) => mb_strwidth($this->stripEscapeSequences($line)) + $padding)
|
||||
->max()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pad text ignoring ANSI escape sequences.
|
||||
*/
|
||||
protected function pad(string $text, int $length): string
|
||||
{
|
||||
$rightPadding = str_repeat(' ', max(0, $length - mb_strwidth($this->stripEscapeSequences($text))));
|
||||
|
||||
return "{$text}{$rightPadding}";
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip ANSI escape sequences from the given text.
|
||||
*/
|
||||
protected function stripEscapeSequences(string $text): string
|
||||
{
|
||||
// Strip ANSI escape sequences.
|
||||
$text = preg_replace("/\e[^m]*m/", '', $text);
|
||||
|
||||
// Strip Symfony named style tags.
|
||||
$text = preg_replace("/<(info|comment|question|error)>(.*?)<\/\\1>/", '$2', $text);
|
||||
|
||||
// Strip Symfony inline style tags.
|
||||
return preg_replace("/<(?:(?:[fb]g|options)=[a-z,;]+)+>(.*?)<\/>/i", '$1', $text);
|
||||
}
|
||||
}
|
||||
|
46
vendor/laravel/prompts/src/Themes/Default/Concerns/InteractsWithStrings.php
vendored
Normal file
46
vendor/laravel/prompts/src/Themes/Default/Concerns/InteractsWithStrings.php
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace Laravel\Prompts\Themes\Default\Concerns;
|
||||
|
||||
trait InteractsWithStrings
|
||||
{
|
||||
/**
|
||||
* Get the length of the longest line.
|
||||
*
|
||||
* @param array<string> $lines
|
||||
*/
|
||||
protected function longest(array $lines, int $padding = 0): int
|
||||
{
|
||||
return max(
|
||||
$this->minWidth,
|
||||
collect($lines)
|
||||
->map(fn ($line) => mb_strwidth($this->stripEscapeSequences($line)) + $padding)
|
||||
->max()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pad text ignoring ANSI escape sequences.
|
||||
*/
|
||||
protected function pad(string $text, int $length, string $char = ' '): string
|
||||
{
|
||||
$rightPadding = str_repeat($char, max(0, $length - mb_strwidth($this->stripEscapeSequences($text))));
|
||||
|
||||
return "{$text}{$rightPadding}";
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip ANSI escape sequences from the given text.
|
||||
*/
|
||||
protected function stripEscapeSequences(string $text): string
|
||||
{
|
||||
// Strip ANSI escape sequences.
|
||||
$text = preg_replace("/\e[^m]*m/", '', $text);
|
||||
|
||||
// Strip Symfony named style tags.
|
||||
$text = preg_replace("/<(info|comment|question|error)>(.*?)<\/\\1>/", '$2', $text);
|
||||
|
||||
// Strip Symfony inline style tags.
|
||||
return preg_replace("/<(?:(?:[fb]g|options)=[a-z,;]+)+>(.*?)<\/>/i", '$1', $text);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user