Commit Graph

6748 Commits

Author SHA1 Message Date
Fabien Potencier d9f52db503 Merge branch '3.x' into 4.x
* 3.x:
  Fix typos in CHANGELOG
2024-08-18 17:54:12 +02:00
Fabien Potencier fe36e084b4 feature #4209 Accept colons instead of equals for named arguments (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Accept colons instead of equals for named arguments

Refs #3475
Refs #3635

Commits
-------

84116e5f Fix typos in CHANGELOG
2024-08-18 17:53:41 +02:00
Fabien Potencier 84116e5ff7 Fix typos in CHANGELOG 2024-08-18 17:52:16 +02:00
Fabien Potencier 3f99f250d7 Remove versionadded in docs 2024-08-18 09:41:01 +02:00
Fabien Potencier 9e48502555 Merge branch '3.x' into 4.x
* 3.x:
  Fix html_cva docs
  Fix html_cva docs
  Introduce CVA to html-extra
  Move some methods to static calls
2024-08-18 09:40:33 +02:00
Fabien Potencier 1d5a8dc98b Fix html_cva docs 2024-08-18 09:38:48 +02:00
Fabien Potencier e85519fcd9 Fix html_cva docs 2024-08-18 09:38:02 +02:00
Fabien Potencier 0bfef5b300 feature #4006 Introduce CVA to html-extra (WebMamba)
This PR was squashed before being merged into the 3.x branch.

Discussion
----------

Introduce CVA to html-extra

Hey! This PR introduces CVA to Twig. All of this has already been merged into SymfonyUX (https://github.com/symfony/ux/pull/1416), but `@kbond` suggested that this repo can be a better place for this feature.

Here is a description from the PR merged in to SymfonyUX:

------------------------------

This PR introduces a new concept CVA (Class Variance Authority), by adding a1 twig function, to help you manage your class in your component.

Let's take an example an Alert component. In your app, an alert can have a lot of different styles one for success, one for alert, one for warning, and different sizes, with icons or not... You need something that lets you completely change the style of your component without creating a new component, and without creating too much complexity in your template.

Here is the reason came CVA.

Your Alert component can now look like this:

```twig
{% props color = 'blue', size = 'md' %}

{% set alert =  html_cva(
      'alert rounded-lg',
     {
        color: {
            blue: 'text-blue-800 bg-blue-50 dark:bg-gray-800 dark:text-blue-400',
            red: 'text-red-800 bg-red-50 dark:bg-gray-800 dark:text-red-400',
            green: 'text-green-800 bg-green-50 dark:bg-gray-800 dark:text-green-400',
            yellow: 'text-yellow-800 bg-yellow-50 dark:bg-gray-800 dark:text-yellow-400',
        },
        size: {
            sm: 'px-4 py-3 text-sm',
            md: 'px-6 py-4 text-base',
            lg: 'px-8 py-5 text-lg',
        }
    },
    [{
           color: ['red'],
           size: ['lg'],
          class: 'font-semibold'
    }],
   {
           rounded: 'md'
    }
}) %}

<div class="{{ cva.apply({color, size}, attribute.render('class'), 'flex p-4') }}">
    ...
</div>
```

So here you have a `cva` function that lets you define different variants of your component.

You can now use your component like this:
```twig
<twig:Alert color="red" size="md"/>

<twig:Alert color="green" size="sm"/>

<twig:Alert color="yellow" size="lg"/>

<twig:Alert color="red" size="md" class="dark:bg-gray-800"/>
```

And then you get the following result:

<img width="1269" alt="Capture d’écran 2024-01-24 à 00 52 33" src="https://github.com/symfony/ux/assets/32077734/6a5e25be-5b81-4ae7-8385-0fa5422d0396">

If you want to know more about the concept I implement here you can look at:
- CVA (js version): https://cva.style/docs
- tailwind merge: https://github.com/gehrisandro/tailwind-merge-php, https://github.com/dcastil/tailwind-merge
- this implementation by using tailwind-merge and cva is inspired a lot by: https://ui.shadcn.com/ (shadcn is the most starred library on github in 2023)
- a really good article that explains the philosophy behind https://manupa.dev/blog/anatomy-of-shadcn-ui
- this PR works great in a LASTstack: https://symfonycasts.com/screencast/last-stack/last-stack

Tell me what you think about it! Thanks for your time! Cheers 🧡

------------

Commits
-------

e3ac14e1 Introduce CVA to html-extra
2024-08-18 09:36:20 +02:00
Matheo Daninos e3ac14e1c8 Introduce CVA to html-extra 2024-08-18 09:36:16 +02:00
Fabien Potencier 8c090c3427 feature #4213 Add return types missed in #4211 (smnandre)
This PR was squashed before being merged into the 4.x branch.

Discussion
----------

Add return types missed in #4211

Complete #4211 (sorry)

I forgot to update the docs, and found some others in RuntimeLoader(s)

Commits
-------

21f08dcf Add return types missed in #4211
2024-08-17 23:34:48 +02:00
Simon André 21f08dcfe2 Add return types missed in #4211 2024-08-17 23:34:44 +02:00
Fabien Potencier 15a58aaffb Modernize code 2024-08-17 23:16:46 +02:00
Fabien Potencier 8370e8a9a7 Move some methods to static calls 2024-08-17 23:15:53 +02:00
Fabien Potencier 88cabcc433 feature #4211 Add missing return types in 4.0 (smnandre)
This PR was squashed before being merged into the 4.x branch.

Discussion
----------

Add missing return types in 4.0

Revert the removal of return types done in #3156

Should i propagate to `extra` packages in the same PR ?

Commits
-------

470965fc Add missing return types in 4.0
2024-08-17 23:10:10 +02:00
Simon André 470965fcc2 Add missing return types in 4.0 2024-08-17 23:10:07 +02:00
Fabien Potencier 96bc312f5d Modernize code 2024-08-17 23:09:21 +02:00
Fabien Potencier aab6d74ce1 Move loop function implementation to CoreExtension 2024-08-17 23:08:38 +02:00
Fabien Potencier 93206a7d4a Merge branch '3.x' into 4.x
* 3.x:
  Add an extension point for parsing special functions
2024-08-17 23:06:33 +02:00
Fabien Potencier 003b171ea6 feature #4210 Special functions extension point (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Special functions extension point

The `parent`, `attribute`, `block` (and `loop` in 4.0) functions are handled directly in ExpressionParser as they are converted to specific Nodes.

It means that recursive loops can only be implemented in core. By adding a new extension point, we are removing the hardcoded handling of such functions and we open up the possibility for user-land functions to do the same.

*Review is easier when hiding whitespace.*

Commits
-------

44280790 Add an extension point for parsing special functions
2024-08-17 23:05:16 +02:00
Fabien Potencier 4428079003 Add an extension point for parsing special functions 2024-08-17 18:06:14 +02:00
Fabien Potencier fb06196948 Update loop function parsing 2024-08-17 18:04:49 +02:00
Fabien Potencier 22ff3f4f22 Merge branch '3.x' into 4.x
* 3.x:
  Fix typos in CHANGELOG
  Fix typo
  Fix some minor issues
  Add support for named arguments on special functions
2024-08-17 18:03:35 +02:00
Fabien Potencier ff55738f19 Fix typos in CHANGELOG 2024-08-17 17:59:11 +02:00
Fabien Potencier dbc934ba78 Fix typo 2024-08-17 11:28:14 +02:00
Fabien Potencier 2e43eaa4ad Fix some minor issues 2024-08-16 22:51:19 +02:00
Fabien Potencier 5a66385a3f feature #4173 Add support for named arguments on special functions (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Add support for named arguments on special functions

Commits
-------

0c30e78b Add support for named arguments on special functions
2024-08-16 22:50:11 +02:00
Fabien Potencier 0c30e78b1c Add support for named arguments on special functions 2024-08-16 08:37:24 +02:00
Fabien Potencier 5be29d0dd1 Merge branch '3.x' into 4.x
* 3.x:
  Fix missing code
2024-08-16 08:13:29 +02:00
Fabien Potencier 26bcadeaeb Fix missing code 2024-08-16 08:13:22 +02:00
Fabien Potencier d051ccde20 Merge branch '3.x' into 4.x
* 3.x:
  Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments
2024-08-16 08:12:37 +02:00
Fabien Potencier 5c52e2d361 feature #4207 Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments

When using named arguments, a compilation error is thrown when some required arguments are missing.
But when not using arguments, the error was thrown at runtime. This PR fixed this.

Commits
-------

0823d234 Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments
2024-08-16 08:07:54 +02:00
Fabien Potencier 0823d23488 Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments 2024-08-15 23:00:02 +02:00
Fabien Potencier 4acc8b6556 Fix CS 2024-08-15 20:59:57 +02:00
Fabien Potencier a30d07eeb4 Remove obsolete code 2024-08-15 20:59:30 +02:00
Fabien Potencier 4bade436a4 Merge branch '3.x' into 4.x
* 3.x:
  Extract a new CallableArgumentsExtractor class
  Make Node::__toString() more readable
2024-08-15 20:57:57 +02:00
Fabien Potencier 55733a2da1 feature #4206 Extract a new CallableArgumentsExtractor class (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Extract a new CallableArgumentsExtractor class

Commits
-------

e1705f88 Extract a new CallableArgumentsExtractor class
2024-08-15 20:55:15 +02:00
Fabien Potencier e1705f8831 Extract a new CallableArgumentsExtractor class 2024-08-15 20:37:59 +02:00
Fabien Potencier fa1220951f minor #4205 Make Node::__toString() more readable (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Make Node::__toString() more readable

Commits
-------

b431ecad Make Node::__toString() more readable
2024-08-15 20:27:24 +02:00
Fabien Potencier 525461feb1 Fix CS 2024-08-15 20:26:39 +02:00
Fabien Potencier 62cc16f548 Merge branch '3.x' into 4.x
* 3.x:
  Remove remaining const optimizations
2024-08-15 20:26:12 +02:00
Fabien Potencier 3c7469ec09 minor #4204 Remove remaining const optimizations (smnandre)
This PR was merged into the 3.x branch.

Discussion
----------

Remove remaining const optimizations

After #4198, some Token:: constant optimizations remained.

This PR removes them.. **in case** this was not intended

Commits
-------

c662e0ce Remove remaining const optimizations
2024-08-15 20:22:54 +02:00
Fabien Potencier b431ecad3a Make Node::__toString() more readable 2024-08-15 20:18:30 +02:00
Simon André c662e0ce27 Remove remaining const optimizations
After #4198 some `Token::` const optimization remains.

This PR remove them.. **in case** it was not intended
2024-08-15 19:11:55 +02:00
Fabien Potencier 3b38f7c587 Simplify code 2024-08-14 23:45:21 +02:00
Fabien Potencier 7f45529f52 Merge branch '3.x' into 4.x
* 3.x:
  Fix RawFilter
2024-08-14 23:43:34 +02:00
Fabien Potencier 72d6d9c9c5 bug #4203 Fix RawFilter (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Fix RawFilter

Commits
-------

397b7c47 Fix RawFilter
2024-08-14 23:43:27 +02:00
Fabien Potencier 397b7c4782 Fix RawFilter 2024-08-14 23:42:25 +02:00
Fabien Potencier eaf04e53f0 Remove deprecated code 2024-08-14 23:34:13 +02:00
Fabien Potencier abee6fc583 Merge branch '3.x' into 4.x
* 3.x:
  Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
  Cleanup the implementation of the defined test for constants
2024-08-14 23:07:43 +02:00
Fabien Potencier fb96eed2c6 feature #4184 Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time (fabpot)
This PR was merged into the 3.x branch.

Discussion
----------

Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time

Closes #3895

Opened early to gather feedback.

Commits
-------

3156d809 Move FunctionExpression/FilterExpression/TestExpression attributes from compilation time to parsing time
2024-08-14 22:55:12 +02:00