This PR was merged into the 2.x branch.
Discussion
----------
[Toolkit] Embrace `html_attr_type` from `twig/html-extra:^3.24` to correctly merge trigger's attributes
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Related to #3408
Commits
-------
725c1156c2 [Toolkit] Embrace `html_attr_type` from `twig/html-extra:^3.24` to correctly merge trigger's attributes
This PR was merged into the 2.x branch.
Discussion
----------
[TwigComponent] Add support for `AttributeValueInterface` from `twig/html-extra:^3.24.0` in `ComponentAttributes`
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Close https://github.com/twigphp/Twig/issues/4790, replace https://github.com/twigphp/Twig/pull/4791.
This PR update `ComponentAttributes` to support `AttributeValueInterface` from Twig 3.24 with `html_attr_type` and HTML attributes merging strategy.
This helps resolve situations where merging HTML attributes needs to be more sophisticated than a simple `array_merge`.
For example in UX Toolkit, we have an issue where it's not possible to use a single `<twig:Button>` with `Dialog` and `Tooltip` triggers, both triggers define a `trigger_attrs` with some attributes that may conflict. Here a simplified version:
```twig
{%- set dialog_trigger_attrs = {
'data-action': 'click->dialog#open',
} -%}
{%- set tooltip_trigger_attrs = {
'data-action': 'mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide',
} -%}
<twig:Button
{{ ...dialog_trigger_attrs }}
{{ ...tooltip_trigger_attrs }}
/>
```
Here, only `data-action="mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide"` will be rendered, the value from `dialog_trigger_attrs` is purely ignored.
By supporting the HTML attributes merging strategy introduced in Twig HTML Extra 3.24, we can use the new Twig filter `html_attr_type`:
```twig
{%- set dialog_trigger_attrs = {
'data-action': 'click->dialog#open'|html_attr_type('sst'),
} -%}
{%- set tooltip_trigger_attrs = {
'data-action': 'mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide'|html_attr_type('sst'),
} -%}
```
Combined to `html_attr_merge` filter (that return an array where some values are an instance of `Twig\Extra\Html\HtmlAttr\AttributeValueInterface`), the following example will correctly render `data-action="click->dialog#open mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide"`:
```twig
<twig:Button
{{ ...{}|html_attr_merge(dialog_trigger_attrs, tooltip_trigger_attrs) }}
/>
```
Commits
-------
bd2410fb79 [TwigComponent] Add support for `AttributeValueInterface` from `twig/html-extra:^3.24.0` in `ComponentAttributes`
Close https://github.com/twigphp/Twig/issues/4790, replace https://github.com/twigphp/Twig/pull/4791.
This PR update `ComponentAttributes` to support `AttributeValueInterface` from Twig 3.24 with `html_attr_type` and HTML attributes merging strategy.
This helps resolve situations where merging HTML attributes needs to be more sophisticated than a simple `array_merge`.
For example in UX Toolkit, we have an issue where it's not possible to use a single `<twig:Button>` with `Dialog` and `Tooltip` triggers, both triggers define a `trigger_attrs` with some attributes that may conflict. Here a simplified version:
```
{%- set dialog_trigger_attrs = {
'data-action': 'click->dialog#open',
} -%}
{%- set tooltip_trigger_attrs = {
'data-action': 'mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide',
} -%}
<twig:Button
{{ ...dialog_trigger_attrs }}
{{ ...tooltip_trigger_attrs }}
/>
```
Here, only `data-action="mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide"` will be rendered, the value from `dialog_trigger_attrs` is purely ignored.
By supporting the HTML attributes merging strategy introduced in Twig HTML Extra 3.24, we can use the new Twig filter `html_attr_type`:
```twig
{%- set dialog_trigger_attrs = {
'data-action': 'click->dialog#open'|html_attr_type('sst'),
} -%}
{%- set tooltip_trigger_attrs = {
'data-action': 'mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide'|html_attr_type('sst'),
} -%}
```
Combined to `html_attr_merge` (that return an array where some values are an instance of `Twig\Extra\Html\HtmlAttr\AttributeValueInterface`), the following example will correctly render `data-action="click->dialog#open mouseenter->tooltip#show mouseleave->tooltip#hide focus->tooltip#show blur->tooltip#hide"`:
```twig
<twig:Button
{{ ...{}|html_attr_merge(dialog_trigger_attrs, tooltip_trigger_attrs) }}
/>
```
This PR was squashed before being merged into the 2.x branch.
Discussion
----------
[Native] Fix invalid priority for DevServerListener
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Documentation? | no
| Issues | #3405
| License | MIT
It fixes the devServerListener for local developement
Commits
-------
1af8fa0d11 [Native] Fix invalid priority for DevServerListener
This PR was merged into the 2.x branch.
Discussion
----------
[Apps] Add Native demo
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Enhanced version of https://github.com/Kocal/sf-ux-native-lab, screenshots from https://ux.symfony.com/native will have to be modified
Commits
-------
412cecc9de [Apps] Add Native demo
This PR was merged into the 2.x branch.
Discussion
----------
[Autocomplete][Chartjs][Cropperjs][Dropzone][LazyImage][LiveComponent][Map][Notify][React][StimulusBundle][Svelte][Swup][TogglePassword][Turbo][Typed][Vue][Translator] Update package.json to `2.33.0`
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
The job that release npm packages failed https://github.com/symfony/ux/actions/runs/23216748609/job/67479440402
it should be fixed by https://github.com/symfony/ux/pull/3400
note that the packages were nicely published with 2.33.0 version, it's only the `git push` on UX that failed
Commits
-------
8bbad8d9db [Autocomplete][Chartjs][Cropperjs][Dropzone][LazyImage][LiveComponent][Map][Notify][React][StimulusBundle][Svelte][Swup][TogglePassword][Translator][Turbo][Typed][Vue] Update package.json to `2.33.0`
This PR was merged into the 2.x branch.
Discussion
----------
[Cropperjs] Add image rotation in php side
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | yes
| Deprecations? | yes
| Documentation? | no
| Issues | Fix#2930
| License | MIT
I tweaked a bit the BC layer in comparison to discussion in issue cause to be honest I didn't understand how it was supposed to be done in the described way 😅
I hope it will be fine
Commits
-------
e1b7d70860 [Cropperjs] Add image rotation in php side
This PR was merged into the 2.x branch.
Discussion
----------
[CI] Update permissions to allow pushing changes to the repository during NPM release
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
https://github.com/symfony/ux/actions/runs/23216748609/job/67479440402
Hopefully it will works 🤞
Commits
-------
c9ecdfd592 [CI] Update permissions to allow pushing changes to the repository during NPM release
This PR was squashed before being merged into the 2.x branch.
Discussion
----------
[E2E] Test over Symfony 8.0
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
<!--
Replace this notice by a description of your feature/bugfix.
This will help reviewers and should be a good start for the documentation.
Additionally (see https://symfony.com/releases):
- Always add tests and ensure they pass.
- For new features, provide some code snippets to help understand usage.
- Features and deprecations must be submitted against branch main.
- Update/add documentation as required (we can help!)
- Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry
- Never break backward compatibility (see https://symfony.com/bc).
-->
Commits
-------
34ee8dc69e [E2E] Test over Symfony 8.0
This PR was merged into the 2.x branch.
Discussion
----------
[CI] Add Dependabot
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Related to https://github.com/symfony/ux/pull/3396
Commits
-------
3c9ed7f178 [CI] Add Dependabot
This PR was merged into the 2.x branch.
Discussion
----------
[CI] Pin explicit versions of external actions
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Even though it makes maintenance a bit more complicated, pinning external action versions to commit hashes improves security by reducing the risk of supply-chain attacks.
I'll look into enabling Dependabot to open PRs that update (only) GitHub actions.
Commits
-------
a57da9a29e [CI] Pin explicit versions of external actions
Even though it makes maintenance a bit more complicated, pinning external action versions to commit hashes improves security by reducing the risk of supply-chain attacks.
I'll look into enabling Dependabot to open PRs that update (only) GitHub actions.
This PR was merged into the 2.x branch.
Discussion
----------
Update tsdown & use `@tsdown`/css
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
This update simplifies the tsdown configuration, we do not need our custom plugin to minify CSS anymore (replaced by `css.minify = true`), and same for our hooks that rename the built CSS (replaced by `css.fileName`) 😍
Commits
-------
13cb147add Update tsdown & use `@tsdown`/css
This update simplifies the tsdown configuration, we do not need our custom plugin to minify CSS anymore (replaced by `css.minify = true`), and same for our hooks that rename the built CSS (replaced by `css.fileName`) 😍
This PR was merged into the 2.x branch.
Discussion
----------
[CI] Rename JS code-quality-related jobs
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
<!--
Replace this notice by a description of your feature/bugfix.
This will help reviewers and should be a good start for the documentation.
Additionally (see https://symfony.com/releases):
- Always add tests and ensure they pass.
- For new features, provide some code snippets to help understand usage.
- Features and deprecations must be submitted against branch main.
- Update/add documentation as required (we can help!)
- Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry
- Never break backward compatibility (see https://symfony.com/bc).
-->
Commits
-------
014ed8ae83 [CI] Rename JS code-quality-related jobs
This PR was merged into the 2.x branch.
Discussion
----------
Update oxfmt and oxlint
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
<!--
Replace this notice by a description of your feature/bugfix.
This will help reviewers and should be a good start for the documentation.
Additionally (see https://symfony.com/releases):
- Always add tests and ensure they pass.
- For new features, provide some code snippets to help understand usage.
- Features and deprecations must be submitted against branch main.
- Update/add documentation as required (we can help!)
- Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry
- Never break backward compatibility (see https://symfony.com/bc).
-->
Commits
-------
0493b19a21 Update oxfmt and oxlint
This PR was merged into the 2.x branch.
Discussion
----------
[LiveComponent] Allow empty values to bypass model validation modifiers
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? |no
| Deprecations? | no
| Documentation? | no
| Issues | Fix#3153
| License | MIT
**The Problem:**
Currently, when using input validation modifiers like `min_length(3)` on a LiveComponent model (e.g., `<input type="search" data-model="min_length(3)|query" />`), the modifier acts as a strict gatekeeper. If a user types "abc", the model updates correctly. However, if the user clears the input (e.g., by clicking the native "X" clear button on a search input or deleting the text), the update is blocked because the length is `0`.
This creates a frustrating UX: the input appears empty on the screen, but the component fails to re-render or notify the server, leaving the page (and backend state) stuck with the previous search results.
**The Solution:**
This PR updates `LiveController` to bypass `min_length`, `max_length`, `min_value`, and `max_value` checks if the input value is completely empty (`''`, `null`, or `undefined`).
**Why this is the correct approach (The HTML5 Standard):**
This change aligns LiveComponent's frontend validation strictly with standard HTML5 form validation behavior. In HTML5, attributes like `minlength` and `min` do **not** apply to empty values. If a field is allowed to be empty, it passes validation. If a field *must not* be empty, developers are expected to use the `required` attribute.
By allowing empty strings to pass through these modifiers:
1. It restores the expected behavior for search/filter inputs, allowing the component to naturally reset to its initial/unfiltered state when cleared.
2. It solves complex state synchronization issues between parent/child components when passing models via `props:props`.
3. It prevents numeric inputs (`min_value`) from casting an empty string to `0` and incorrectly failing validation.
### **Demo**

Commits
-------
79205ce63d fix-input-validation-modifiers
This PR was merged into the 2.x branch.
Discussion
----------
[React] Fix internal requirement of React 19 (devDependencies)
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix#3313 <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
<!--
Replace this notice by a description of your feature/bugfix.
This will help reviewers and should be a good start for the documentation.
Additionally (see https://symfony.com/releases):
- Always add tests and ensure they pass.
- For new features, provide some code snippets to help understand usage.
- Features and deprecations must be submitted against branch main.
- Update/add documentation as required (we can help!)
- Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry
- Never break backward compatibility (see https://symfony.com/bc).
-->
Update react and react-dom devDependencies from ^18.0 to ^18.0 || ^19.0 to match the already-declared peerDependencies and prevent file: installs from forcing React 18 in user projects that require React 19.
Commits
-------
f55a2c39eb [React] Add React 19 support to devDependencies
Update react and react-dom devDependencies from ^18.0 to ^18.0 || ^19.0
to match the already-declared peerDependencies and prevent file: installs
from forcing React 18 in user projects that require React 19.
This PR was merged into the 2.x branch.
Discussion
----------
[Translator] Improve performance of dumper under certain condition
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | no
| License | MIT
This PR moves the fileAppend-Calls out of the foreach to drastically improve performance, close to 500x on my Machine and in my project (with lots of translations).
```
# current time in my project:
[INFO] "Symfony\UX\Translator\CacheWarmer\TranslationsCacheWarmer" completed in 296866.54ms.
# with the patch:
[INFO] "Symfony\UX\Translator\CacheWarmer\TranslationsCacheWarmer" completed in 624.45ms.
```
Commits
-------
38ff84d013 [Translator] Improve performance of dumper under certain condition
This PR was merged into the 2.x branch.
Discussion
----------
[Native] Init Hotwire Native
| Q | A |
| -------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Bug fix? | no |
| New feature? | yes|
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md --> |
| Documentation? | no <!-- required for new features, or documentation updates --> |
| Issues | #3339 |
| License | MIT |
This PR introduce Hotwire Native Integration to complete the set of Hotwire Libraries,
Hotwire Native make it simple and easy to Transform any Symfony application based on Symfony UX into a mobile application, make in the application have real native transition and nanvigation , and native components like Native buttons , and bottom tab etc.
in the attached video a small demonstration of transformin a Symfony UX app to mobile app.
https://github.com/user-attachments/assets/0fe22816-6312-47fd-a160-1a9df8abb3df
Commits
-------
b55b0ba30b [Native] Create the component
This PR was merged into the 2.x branch.
Discussion
----------
Update README to reflect Svelte 4 support
Very much a detail, but better to keep the readme up-to-date
Commits
-------
983feaeb7f Update README to reflect Svelte 4 support
This PR was merged into the 2.x branch.
Discussion
----------
[Toolkit][Shadcn] Add Tabs recipe
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | yes
| Deprecations? | no
| Documentation? | no
| Issues |
| License | MIT
Add the "Tabs" component from Shadcn
For test, I think i need help to make add it correctly for my first PR
Commits
-------
8b1a43f715 [Toolkit][Shadcn] Add Tabs recipe
This PR was squashed before being merged into the 2.x branch.
Discussion
----------
[LiveComponent][TwigComponent] Fix reflection issues for private properties from trait and parent class
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Documentation? | no
| Issues | <!-- none yet -->
| License | MIT
## Problem
When a component class *extends* another class that uses a trait with `#[ExposeInTemplate]` or `#[LiveProp]` attributes on **private** properties, those attributes are invisible to the metadata scanners.
PHP's `ReflectionClass::getProperties()` called on a child class does not return private properties from traits used in *ancestor* classes — they are only returned when `getProperties()` is called on the exact class that declares `use TraitName`. This is standard PHP reflection behaviour.
This affects any inheritance pattern where a base component uses `ComponentWithFormTrait` (or any custom trait with private `#[ExposeInTemplate]` properties) and app-level components extend it without re-declaring the trait.
**Symptom in `ux-twig-component`:** `Variable "form" does not exist` in the child component's Twig template.
**Symptom in `ux-live-component`:** `#[LiveProp(fieldName: 'callable()')]` declared in a trait used by a parent class is not registered with the correct `fieldName` on the child component, causing frontend model key mismatches.
## Fix
### `ux-twig-component` — `ComponentProperties::loadClassMetadata()`
Replace the single `$refClass->getProperties()` call with a loop that walks up `getParentClass()`, calling `getProperties()` at each level. Results are deduplicated by property name (child-class declaration takes priority), giving a complete view of all `#[ExposeInTemplate]` properties across the full hierarchy.
### `ux-live-component` — `LiveComponentMetadataFactory::createPropMetadatas()`
Pass `$property->getDeclaringClass()->getName()` instead of `$class->getName()` to `createLivePropMetadata()`. When a property is declared in a trait used by a parent class, the type extractor must be given the declaring class — not the leaf child class — to resolve the type correctly.
`#[LiveAction]` and `#[LiveListener]` on parent class methods are **not** affected: `getMethods()` already walks the full inheritance chain, so those are discovered correctly on child components.
## Tests
Added ``@group` trait-inheritance` tests in both packages using a minimal fixture: a trait with a private `#[ExposeInTemplate]` property / `#[LiveProp(fieldName: callable)]`, a parent component that uses the trait, and a child component that extends the parent without re-declaring the trait.
Commits
-------
799736ff76 [LiveComponent][TwigComponent] Fix reflection issues for private properties from trait and parent class
This PR was merged into the 2.x branch.
Discussion
----------
[Toolkit][Shadcn] Fix initial "open" state for AlertDialog and Dialog
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Documentation? | no
| Issues | Fix
| License | MIT
Initilal open state don't work. It is not managed anywhere.
This PR use open attribute to open modal in stimulus dialog controller on connect function if openValue is set to true
Commits
-------
60e2a76cd0 [Toolkit][Shadcn] Fix initial "open" state for AlertDialog and Dialog
This PR was squashed before being merged into the 2.x branch.
Discussion
----------
Update Vitest to ^4.1.0
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | no <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
https://vitest.dev/guide/migration.html#vitest-4
Commits
-------
9465ed0623 Remove unused `@vitest`/browser
2d7255da6e Update Vitest to ^4.1.0
This PR was merged into the 2.x branch.
Discussion
----------
[TwigComponent] Fix profiling loaded in production
| Q | A
| -------------- | ---
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Documentation? | no
| Issues | Fix#3380
| License | MIT
### Summary
Fix profiler debug services being always loaded in production when no explicit `profiler` config is provided.
The `%kernel.debug%` TreeBuilder default was never resolved (TreeBuilder defaults bypass parameter resolution), resulting in a truthy string that always enabled the profiler.
Replace `booleanNode` + `defaultValue('%kernel.debug%')` with a tri-state `scalarNode` (`null`/`true`/`false`) and resolve `kernel.debug` at runtime in the extension.
### Test
- Add `testDataCollectorNotLoadedInProductionByDefault`, verifies profiler is NOT loaded in production with default config
Commits
-------
b943eedc54 [TwigComponent] Fix profiler loaded in production due to unresolved %kernel.debug% default
This PR was merged into the 2.x branch.
Discussion
----------
[LiveComponent] Add `debug:live-component` command
| Q | A
| -------------- | ---
| Bug fix? | no
| New feature? | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- if yes, also update UPGRADE-*.md and src/**/CHANGELOG.md -->
| Documentation? | todo <!-- required for new features, or documentation updates -->
| Issues | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License | MIT
Hello,
In several applications, I am using multiple events to communicate between LiveComponents.
It sometimes take me a little time to find out mistakes concerning these events.
That's why I propose this small command for debug specific to LiveComponents.
This command is largely copied from `@StevenRenaux` TwigComponentDebugCommand.
As the previous one, it can be used for listing or to see details of one component :
1) Listing : list all registered LiveComponents. Can filter those listening to an event with `--listening` filter.
<img width="1200" height="121" alt="image" src="https://github.com/user-attachments/assets/7223cf6c-a0b2-4095-8478-f204e17423a7" />
<img width="1018" height="128" alt="image" src="https://github.com/user-attachments/assets/743fd9d3-97fe-49a5-b239-b7c41c5a8334" />
2) Details : providing a LiveComponent name, display its LiveProps and LiveListeners.
<img width="1018" height="239" alt="image" src="https://github.com/user-attachments/assets/3455b8a1-a835-4171-b549-ae03aff9595e" />
Commits
-------
50b4756bdd [LiveComponent] Add `debug:live-component` command