From b4e5136b1be33454536cdcd4559e01b779622e38 Mon Sep 17 00:00:00 2001 From: Hugo Alliaume Date: Mon, 17 Nov 2025 00:08:23 +0100 Subject: [PATCH] [Svelte] Add support for Svelte 5 --- UPGRADE-3.0.md | 7 + pnpm-lock.yaml | 286 +++++++----------- src/Svelte/CHANGELOG.md | 1 + src/Svelte/assets/dist/loader.d.ts | 2 +- src/Svelte/assets/dist/render_controller.d.ts | 4 +- src/Svelte/assets/dist/render_controller.js | 11 +- src/Svelte/assets/package.json | 10 +- src/Svelte/assets/src/render_controller.ts | 13 +- 8 files changed, 145 insertions(+), 189 deletions(-) diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md index 10f50a8a0a4..e054c25ac85 100644 --- a/UPGRADE-3.0.md +++ b/UPGRADE-3.0.md @@ -69,6 +69,13 @@ class MyLiveComponent { - The Twig function `ux_controller_link_tags()` has been removed, which requires Symfony AssetMapper >=6.4, run `composer require symfony/asset-mapper:>=6.4` if you don't have it installed yet. +## Svelte + +- The support for Svelte 3 has been dropped, only Svelte 5 is supported now. + Make sure to upgrade your Svelte components accordingly. + + TODO: to complete... + ## Swup - The package has been removed, see the [previous README](https://raw.githubusercontent.com/symfony/ux/refs/heads/2.x/src/Turbo/README.md) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2de84d731ff..8d15d637085 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -244,7 +244,7 @@ importers: devDependencies: '@googlemaps/js-api-loader': specifier: ^2.0.0 - version: 2.0.0 + version: 2.0.2 '@hotwired/stimulus': specifier: ^3.0.0 version: 3.2.2 @@ -413,8 +413,8 @@ importers: specifier: ^3.0.0 version: 3.2.2 '@sveltejs/vite-plugin-svelte': - specifier: ^2.4.6 - version: 2.5.3(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) + specifier: ^6.2.1 + version: 6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -431,8 +431,8 @@ importers: specifier: ^26.1.0 version: 26.1.0 svelte: - specifier: ^3.0 || ^4.0 - version: 4.2.20 + specifier: ^5.0 + version: 5.54.1 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -441,7 +441,7 @@ importers: version: 5.8.3 vitest: specifier: ^4.1.0 - version: 4.1.0(@types/node@25.3.0)(jsdom@26.1.0)(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) + version: 4.1.0(@types/node@25.3.0)(jsdom@26.1.0)(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) src/Translator/assets: devDependencies: @@ -1043,8 +1043,8 @@ packages: '@formatjs/intl-localematcher@0.6.1': resolution: {integrity: sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==} - '@googlemaps/js-api-loader@2.0.0': - resolution: {integrity: sha512-KRE1QA5awHXr+odGOMkoKKYok5vMnpr7s+jU+1Y/v7+M7/2db5InfsfrhOGxnJRRig4L9ga7RuPf7P9fLxg1TA==} + '@googlemaps/js-api-loader@2.0.2': + resolution: {integrity: sha512-bKVuTqatS8Jven5aFqVB7rCHF1VFEzpzyi0ruzO0GUR+A7m9oMqMgtnmpANj7kMYEvvhty8Fk7TnJ1MKjWHu+Q==} '@hotwired/stimulus-webpack-helpers@1.0.1': resolution: {integrity: sha512-wa/zupVG0eWxRYJjC1IiPBdt3Lruv0RqGN+/DTMmUWUyMAEB27KXmVY6a8YpUVTM7QwVuaLNGW4EqDgrS2upXQ==} @@ -1099,6 +1099,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -1645,20 +1648,25 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/vite-plugin-svelte-inspector@1.0.4': - resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} - engines: {node: ^14.18.0 || >= 16} + '@sveltejs/acorn-typescript@1.0.9': + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^2.2.0 - svelte: ^3.54.0 || ^4.0.0 - vite: ^4.0.0 + acorn: ^8.9.0 - '@sveltejs/vite-plugin-svelte@2.5.3': - resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} - engines: {node: ^14.18.0 || >= 16} + '@sveltejs/vite-plugin-svelte-inspector@5.0.2': + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} + engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: - svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 - vite: ^4.0.0 + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@sveltejs/vite-plugin-svelte@6.2.4': + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 '@symfony/stimulus-bridge@4.0.1': resolution: {integrity: sha512-+/kSQ4qFXMbZS+HjkhzOxwdN+60pMev7kzzDpQV/Tdm/iIWoxx5GDsVcdLaBb2783BVQHyrBP72JerF2SXTbTg==} @@ -1793,12 +1801,19 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1870,11 +1885,6 @@ packages: '@vue/shared@3.5.17': resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==} - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} @@ -1919,6 +1929,10 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.1: + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} + engines: {node: '>= 0.4'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} @@ -2036,8 +2050,9 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -2069,10 +2084,6 @@ packages: cross-fetch@3.2.0: resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -2094,15 +2105,6 @@ packages: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -2138,6 +2140,9 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + devalue@5.6.4: + resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -2216,11 +2221,17 @@ packages: engines: {node: '>=6.0'} hasBin: true + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true + esrap@2.2.4: + resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2420,10 +2431,6 @@ packages: engines: {node: '>=6'} hasBin: true - kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} @@ -2530,9 +2537,6 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -2540,9 +2544,6 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -2643,9 +2644,6 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2873,15 +2871,9 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - svelte-hmr@0.15.3: - resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - - svelte@4.2.20: - resolution: {integrity: sha512-eeEgGc2DtiUil5ANdtd8vPwt9AgaMdnuUFnPft9F5oMvU/FHu5IHFic+p1dR/UOB7XU2mX2yHW+NcTch4DCh5Q==} - engines: {node: '>=16'} + svelte@5.54.1: + resolution: {integrity: sha512-ow8tncN097Ty8U1H+C3bM1xNlsCbnO2UZeN0lWBnv8f3jKho7QTTQ2LWbMXrPQDodLjH91n4kpNnLolyRhVE6A==} + engines: {node: '>=18'} symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -3072,10 +3064,10 @@ packages: yaml: optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + vitefu@1.1.2: + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -3218,6 +3210,9 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + snapshots: '@adobe/css-tools@4.4.3': {} @@ -3615,7 +3610,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@googlemaps/js-api-loader@2.0.0': + '@googlemaps/js-api-loader@2.0.2': dependencies: '@types/google.maps': 3.58.1 @@ -3697,6 +3692,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -4023,28 +4023,26 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)))(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': + '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': dependencies: - '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) - debug: 4.4.1 - svelte: 4.2.20 - vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) - transitivePeerDependencies: - - supports-color + acorn: 8.16.0 - '@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)))(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)))(svelte@4.2.20)(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) - debug: 4.4.1 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) + obug: 2.1.1 + svelte: 5.54.1 + vite: 7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) + + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)))(svelte@5.54.1)(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) deepmerge: 4.3.1 - kleur: 4.1.5 - magic-string: 0.30.17 - svelte: 4.2.20 - svelte-hmr: 0.15.3(svelte@4.2.20) - vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) - vitefu: 0.2.5(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) - transitivePeerDependencies: - - supports-color + magic-string: 0.30.21 + obug: 2.1.1 + svelte: 5.54.1 + vite: 7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) + vitefu: 1.1.2(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) '@symfony/stimulus-bridge@4.0.1(@hotwired/stimulus@3.2.2)': dependencies: @@ -4202,6 +4200,8 @@ snapshots: '@types/tough-cookie@4.0.5': optional: true + '@types/trusted-types@2.0.7': {} + '@types/webpack-env@1.18.8': {} '@types/yauzl@2.10.3': @@ -4209,6 +4209,8 @@ snapshots: '@types/node': 22.19.11 optional: true + '@typescript-eslint/types@8.57.1': {} + '@vitejs/plugin-react@4.7.0(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': dependencies: '@babel/core': 7.28.0 @@ -4245,15 +4247,6 @@ snapshots: msw: 2.10.4(@types/node@22.19.11)(typescript@5.8.3) vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) - '@vitest/mocker@4.1.0(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': - dependencies: - '@vitest/spy': 4.1.0 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.10.4(@types/node@25.3.0)(typescript@5.8.3) - vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) - '@vitest/mocker@4.1.0(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))': dependencies: '@vitest/spy': 4.1.0 @@ -4341,10 +4334,7 @@ snapshots: '@vue/shared@3.5.17': {} - acorn@8.15.0: {} - - acorn@8.16.0: - optional: true + acorn@8.16.0: {} agent-base@7.1.4: {} @@ -4378,6 +4368,8 @@ snapshots: dependencies: dequal: 2.0.3 + aria-query@5.3.1: {} + aria-query@5.3.2: {} assertion-error@2.0.1: {} @@ -4479,13 +4471,7 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - code-red@1.0.4: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@types/estree': 1.0.8 - acorn: 8.15.0 - estree-walker: 3.0.3 - periscopic: 3.1.0 + clsx@2.1.1: {} color-convert@2.0.1: dependencies: @@ -4515,11 +4501,6 @@ snapshots: transitivePeerDependencies: - encoding - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.1 - css.escape@1.5.1: {} cssfontparser@1.2.1: {} @@ -4538,10 +4519,6 @@ snapshots: whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - debug@4.4.1: - dependencies: - ms: 2.1.3 - debug@4.4.3: dependencies: ms: 2.1.3 @@ -4564,6 +4541,8 @@ snapshots: detect-libc@2.1.2: {} + devalue@5.6.4: {} + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -4676,8 +4655,15 @@ snapshots: optionalDependencies: source-map: 0.6.1 + esm-env@1.2.2: {} + esprima@4.0.1: {} + esrap@2.2.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@typescript-eslint/types': 8.57.1 + estraverse@5.3.0: {} estree-walker@2.0.2: {} @@ -4886,8 +4872,6 @@ snapshots: json5@2.2.3: {} - kleur@4.1.5: {} - leaflet@1.9.4: {} lightningcss-android-arm64@1.32.0: @@ -4959,18 +4943,12 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 math-intrinsics@1.1.0: {} - mdn-data@2.0.30: {} - mime-db@1.52.0: {} mime-types@2.1.35: @@ -5136,12 +5114,6 @@ snapshots: pend@1.2.0: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.8 - estree-walker: 3.0.3 - is-reference: 3.0.3 - picocolors@1.1.1: {} picomatch@4.0.3: {} @@ -5403,26 +5375,24 @@ snapshots: dependencies: has-flag: 4.0.0 - svelte-hmr@0.15.3(svelte@4.2.20): - dependencies: - svelte: 4.2.20 - - svelte@4.2.20: + svelte@5.54.1: dependencies: - '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) '@types/estree': 1.0.8 - acorn: 8.15.0 - aria-query: 5.3.2 + '@types/trusted-types': 2.0.7 + acorn: 8.16.0 + aria-query: 5.3.1 axobject-query: 4.1.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 + clsx: 2.1.1 + devalue: 5.6.4 + esm-env: 1.2.2 + esrap: 2.2.4 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.17 - periscopic: 3.1.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 symbol-tree@3.2.4: {} @@ -5616,9 +5586,9 @@ snapshots: terser: 5.43.1 tsx: 4.20.3 - vitefu@0.2.5(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)): + vitefu@1.1.2(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)): optionalDependencies: - vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) + vite: 7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) vitest-canvas-mock@0.3.3(vitest@4.1.0(@types/node@25.3.0)(jsdom@26.1.0)(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3))): dependencies: @@ -5660,34 +5630,6 @@ snapshots: transitivePeerDependencies: - msw - vitest@4.1.0(@types/node@25.3.0)(jsdom@26.1.0)(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)): - dependencies: - '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)) - '@vitest/pretty-format': 4.1.0 - '@vitest/runner': 4.1.0 - '@vitest/snapshot': 4.1.0 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 - es-module-lexer: 2.0.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 4.0.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@22.19.11)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 25.3.0 - jsdom: 26.1.0 - transitivePeerDependencies: - - msw - vitest@4.1.0(@types/node@25.3.0)(jsdom@26.1.0)(msw@2.10.4(@types/node@25.3.0)(typescript@5.8.3))(vite@7.3.1(@types/node@25.3.0)(lightningcss@1.32.0)(terser@5.43.1)(tsx@4.20.3)): dependencies: '@vitest/expect': 4.1.0 @@ -5799,3 +5741,5 @@ snapshots: yoctocolors-cjs@2.1.3: optional: true + + zimmerframe@1.1.4: {} diff --git a/src/Svelte/CHANGELOG.md b/src/Svelte/CHANGELOG.md index dbeb451a0db..3a9f26f00fb 100644 --- a/src/Svelte/CHANGELOG.md +++ b/src/Svelte/CHANGELOG.md @@ -5,6 +5,7 @@ - Minimum required Symfony version is now 6.4 - Minimum required PHP version is now 8.2 - Remove old compatibility layer with deprecated `StimulusTwigExtension` from WebpackEncoreBundle ^1.0, use StimulusBundle instead +- Drop support of Svelte 3, only Svelte 5 is supported now ## 2.30 diff --git a/src/Svelte/assets/dist/loader.d.ts b/src/Svelte/assets/dist/loader.d.ts index fbbf2ea897c..e6ab1236209 100644 --- a/src/Svelte/assets/dist/loader.d.ts +++ b/src/Svelte/assets/dist/loader.d.ts @@ -1,5 +1,5 @@ -import { ComponentCollection } from "./components.js"; import { SvelteComponent } from "svelte"; +import { ComponentCollection } from "./components.js"; declare global { function resolveSvelteComponent(name: string): typeof SvelteComponent; interface Window { diff --git a/src/Svelte/assets/dist/render_controller.d.ts b/src/Svelte/assets/dist/render_controller.d.ts index b421a27d494..3896f34b596 100644 --- a/src/Svelte/assets/dist/render_controller.d.ts +++ b/src/Svelte/assets/dist/render_controller.d.ts @@ -15,8 +15,8 @@ declare class export_default extends Controller; + _destroyIfExists(): Promise; private dispatchEvent; } export { export_default as default }; \ No newline at end of file diff --git a/src/Svelte/assets/dist/render_controller.js b/src/Svelte/assets/dist/render_controller.js index a9744fb6f21..7b2fe5b34fa 100644 --- a/src/Svelte/assets/dist/render_controller.js +++ b/src/Svelte/assets/dist/render_controller.js @@ -1,4 +1,5 @@ import { Controller } from "@hotwired/stimulus"; +import { mount, unmount } from "svelte"; var _Class = class extends Controller { connect() { this.element.innerHTML = ""; @@ -7,7 +8,7 @@ var _Class = class extends Controller { this.dispatchEvent("connect"); const Component = window.resolveSvelteComponent(this.componentValue); this._destroyIfExists(); - this.app = new Component({ + this.app = mount(Component, { target: this.element, props: this.props, intro: this.intro @@ -15,13 +16,13 @@ var _Class = class extends Controller { this.element.root = this.app; this.dispatchEvent("mount", { component: Component }); } - disconnect() { - this._destroyIfExists(); + async disconnect() { + await this._destroyIfExists(); this.dispatchEvent("unmount"); } - _destroyIfExists() { + async _destroyIfExists() { if (this.element.root !== void 0) { - this.element.root.$destroy(); + await unmount(this.element.root); delete this.element.root; } } diff --git a/src/Svelte/assets/package.json b/src/Svelte/assets/package.json index 69a013c6f64..fc31bf6e8b8 100644 --- a/src/Svelte/assets/package.json +++ b/src/Svelte/assets/package.json @@ -31,23 +31,25 @@ }, "importmap": { "@hotwired/stimulus": "^3.0.0", - "svelte/internal": "^3.0", + "svelte": "^5.0", + "svelte/internal/client": "^5.0", + "svelte/internal/disclose-version": "^5.0", "@symfony/ux-svelte": "path:%PACKAGE%/dist/loader.js" } }, "peerDependencies": { "@hotwired/stimulus": "^3.0.0", - "svelte": "^3.0 || ^4.0" + "svelte": "^5.0" }, "devDependencies": { "@hotwired/stimulus": "^3.0.0", - "@sveltejs/vite-plugin-svelte": "^2.4.6", + "@sveltejs/vite-plugin-svelte": "^6.2.1", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", "@testing-library/user-event": "^14.6.1", "@types/webpack-env": "^1.16", "jsdom": "^26.1.0", - "svelte": "^3.0 || ^4.0", + "svelte": "^5.0", "tslib": "^2.8.1", "typescript": "^5.8.3", "vitest": "^4.1.0" diff --git a/src/Svelte/assets/src/render_controller.ts b/src/Svelte/assets/src/render_controller.ts index 70852eb982f..8170cce016d 100644 --- a/src/Svelte/assets/src/render_controller.ts +++ b/src/Svelte/assets/src/render_controller.ts @@ -1,4 +1,5 @@ import { Controller } from '@hotwired/stimulus'; +import { mount, unmount } from 'svelte'; import type { SvelteComponent } from 'svelte'; export default class extends Controller { @@ -29,8 +30,8 @@ export default class extends Controller { this._destroyIfExists(); - // @see https://svelte.dev/docs#run-time-client-side-component-api-creating-a-component - this.app = new Component({ + // @see https://svelte.dev/docs/svelte/svelte#mount + this.app = mount(Component, { target: this.element, props: this.props, intro: this.intro, @@ -43,14 +44,14 @@ export default class extends Controller { }); } - disconnect() { - this._destroyIfExists(); + async disconnect() { + await this._destroyIfExists(); this.dispatchEvent('unmount'); } - _destroyIfExists() { + async _destroyIfExists() { if (this.element.root !== undefined) { - this.element.root.$destroy(); + await unmount(this.element.root); delete this.element.root; } }