refactor: Cleanup git state - commit all staged changes

Major refactoring cleanup:
- Add new controller architecture (class-controller-*.php)
- Add new settings-v2 UI (views/settings-v2/)
- Add new CSS architecture (agentic-sidebar.css, tokens)
- Add esbuild build pipeline (scripts/build.js, package.json)
- Add composer dependencies (vendor/)
- Add frontend src directory (assets/js/src/index.jsx)
- Add documentation files
- Remove old/obsolete files (class-settings.php, old CSS)

This commits all pending changes from previous refactoring efforts.
This commit is contained in:
Dwindi Ramadhana
2026-06-17 05:27:58 +07:00
parent d3f142222c
commit 690991c526
7963 changed files with 941566 additions and 67372 deletions

View File

@@ -0,0 +1,86 @@
<?php declare(strict_types=1);
/*
* This file is part of the Parsica library.
*
* Copyright (c) 2020 Mathias Verraes <mathias@verraes.net>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Parsica\Parsica\Expression;
use Parsica\Parsica\Parser;
use function Parsica\Parsica\Curry\curry;
use function Parsica\Parsica\choice;
use function Parsica\Parsica\collect;
use function Parsica\Parsica\Internal\FP\foldr;
use function Parsica\Parsica\keepFirst;
use function Parsica\Parsica\many;
use function Parsica\Parsica\map;
use function Parsica\Parsica\pure;
/**
* @internal
* @template TSymbol
* @template TExpressionAST
* @psalm-immutable
*/
final class RightAssoc implements ExpressionType
{
/** @var non-empty-list<BinaryOperator<TSymbol, TExpressionAST>> */
private array $operators;
/**
* @internal
* @psalm-param non-empty-list<BinaryOperator<TSymbol, TExpressionAST>> $operators
* @psalm-pure
* @psalm-suppress ImpureVariable
*/
function __construct(array $operators)
{
$this->operators = $operators;
}
/**
* @psalm-param Parser<TExpressionAST> $previousPrecedenceLevel
* @psalm-return Parser<TExpressionAST>
*/
public function buildPrecedenceLevel(Parser $previousPrecedenceLevel): Parser
{
/**
* @psalm-var list<Parser<pure-callable(Parser<TExpressionAST>):Parser<TExpressionAST>>> $operatorParsers
*/
$operatorParsers = [];
foreach ($this->operators as $operator) {
$operatorParsers[] =
pure(curry($operator->transform()))
->apply(keepFirst($previousPrecedenceLevel, $operator->symbol()))
->label($operator->label());
}
return map(
collect(
many(choice(...$operatorParsers)),
$previousPrecedenceLevel
),
/**
* @psalm-param array{0: list<pure-callable(TExpressionAST):TExpressionAST>, 1: TExpressionAST} $o
* @psalm-return TExpressionAST
*/
fn(array $o) => foldr(
$o[0],
/**
* @psalm-param pure-callable(TExpressionAST):TExpressionAST $appl
* @psalm-param TExpressionAST $acc
* @psalm-return TExpressionAST
*/
fn(callable $appl, $acc) => $appl($acc),
$o[1]
)
);
}
}