From 3343ba5d157fbf1467fa6e921dac0f4000292ac8 Mon Sep 17 00:00:00 2001 From: Thomas Choquet Date: Sun, 16 Apr 2023 19:04:54 +0200 Subject: [PATCH] [Svelte] Example page for ux.symfony.com --- ux.symfony.com/assets/app.js | 2 + ux.symfony.com/assets/controllers.json | 6 ++ ux.symfony.com/assets/images/svelte.png | Bin 0 -> 2836 bytes .../svelte/components/PackageList.svelte | 39 +++++++++ .../svelte/controllers/PackageSearch.svelte | 22 +++++ ux.symfony.com/composer.json | 1 + ux.symfony.com/composer.lock | 81 +++++++++++++++++- ux.symfony.com/config/bundles.php | 1 + ux.symfony.com/package.json | 3 + .../src/Controller/UxPackagesController.php | 10 +++ .../src/Service/PackageRepository.php | 10 +++ ux.symfony.com/symfony.lock | 3 + .../templates/ux_packages/svelte.html.twig | 39 +++++++++ ux.symfony.com/webpack.config.js | 2 + ux.symfony.com/yarn.lock | 29 ++++++- 15 files changed, 246 insertions(+), 2 deletions(-) create mode 100644 ux.symfony.com/assets/images/svelte.png create mode 100644 ux.symfony.com/assets/svelte/components/PackageList.svelte create mode 100644 ux.symfony.com/assets/svelte/controllers/PackageSearch.svelte create mode 100644 ux.symfony.com/templates/ux_packages/svelte.html.twig diff --git a/ux.symfony.com/assets/app.js b/ux.symfony.com/assets/app.js index daa003f2594..8678fade0dc 100644 --- a/ux.symfony.com/assets/app.js +++ b/ux.symfony.com/assets/app.js @@ -1,5 +1,6 @@ import { registerReactControllerComponents } from '@symfony/ux-react'; import {registerVueControllerComponents} from "@symfony/ux-vue"; +import { registerSvelteControllerComponents } from "@symfony/ux-svelte"; // any CSS you import will output into a single css file (app.css in this case) import './styles/app.scss'; @@ -15,3 +16,4 @@ import Tab from 'bootstrap/js/dist/tab'; // initialize symfony/ux-react registerReactControllerComponents(require.context('./react/controllers', true, /\.(j|t)sx?$/)); registerVueControllerComponents(require.context('./vue/controllers', true, /\.vue?$/, 'lazy')); +registerSvelteControllerComponents(require.context('./svelte/controllers', true, /\.svelte$/)); diff --git a/ux.symfony.com/assets/controllers.json b/ux.symfony.com/assets/controllers.json index 14252166d16..19f6dc6780d 100644 --- a/ux.symfony.com/assets/controllers.json +++ b/ux.symfony.com/assets/controllers.json @@ -62,6 +62,12 @@ "fetch": "eager" } }, + "@symfony/ux-svelte": { + "svelte": { + "enabled": true, + "fetch": "eager" + } + }, "@symfony/ux-swup": { "swup": { "enabled": true, diff --git a/ux.symfony.com/assets/images/svelte.png b/ux.symfony.com/assets/images/svelte.png new file mode 100644 index 0000000000000000000000000000000000000000..66f9fda4535777afc23819bf0eaaf79395731edb GIT binary patch literal 2836 zcmaJ@c|6qlA0FeH9}UWVk15B*m>JAqav#HB%ot}v#>`-rIm}EMsTP|fHBm%`4LL%W zNMea?U2TpIa<-CMvB{CvwY8(I_V>rH-}m+Xem}?Sd7k(C^L{^ne2$a6-M}&$G5`Po zjCXe-i$?s`2a*!~<9M>;qCuVS8pQWyNAlw-Tspv!#*Uyv@Jvb+olK|D65@L3HUNM) zl;Ib|479IP{!PT{k;er$H^mnxE?*?cxHn$3YY z`(hwQfeaRn9nXV(!V?HsJd4Mtu&8vri!D^7V9H?7u;$JPa~TKeG#r=BgnT+OmhsJ8 zkgng<`^=?%GZ!T8n_Pq_8N^m&|EtkownXmPntrvdXz|tfbe72NT#>C827B!Q0O<_8 zi=&@lbUZ{h*56g(2y<=sK)tJvqa8e`#;6puN{THf+-k_wJqD6-*{(LqWCfYf6qJG5FB|pyZEHKWAHj-_HLr-}0wz;q4Jb4SH30Z)OUNevErij_H9R&B$wvEr?gt;)7Gb{T%Q5Uzz%7@geoy=^^hHKw72tO5H>7@xv1{mZx?OK9h2!Y|oZ4L2lb! z03eFTSpT&sm#ts8(Gc!Myq(fBD8(k~XS3D}XyW#1d%w>>-ni=1ZGBJpCLp}HxGL{H zUP1-5x(hV49$eeG(J&_LbN59zbYks%3H4UX;Hk}iWc%=(1XT`p&2Y5BBkXbG9U!Dz znyferFcE(yx#Jjb*Na)Drv+ofW%C+i#$((>A;4ShQ14nBQ!WM(cx5qFNI3Ij2iGJw zN9sx(?D}7}$Qdo02BTMSbAPgDae&}EOaB3htW3a52jZ)TAq#1(>fSj2(%st82FMJe z+OSTh=QBW4V(uT!$7KQXakCAz5r+>n%I?-*Q5d?-&k(eNycS^o`%JWM5BlM&GUqCj zoWRL-t8eh9Zl1v=v~qp*%VF2pz@sWMPWQDa0!72~@-J`0V7l@l2E$I|;0G}=##NH} zNrf}gB?{#Z`w8u^y&q9so|;yS{dd2M`wz!fy6BDu>g{tY?->o#7{hcNKjMC&KsXGZo8J=T$*oM0Bci(nzv- zZ*b4J=A^Q=l#b#_P5PLuf|7+wZk)JN{i8_7)+*1ol6d@zfzMLx#fWWar}5{H!BGnZ ziMKkndTL(>jHMmNrv$yo?ixImn5+#JT$8u}dPOF-`=oC2Vm&=nWt-70n6iB3VGGv}DrztgUi-ML_imzn5c*?CiSU^JO@ZEQLPf3aa!;F{WBQIWQ1%q+Dj zOBj(YUjlwg1e)Dxh;7eH6cOiauZaGM>p{)7W`XP&*v30P926&hDf$C?Qne>XlkQG1BGA-2c1`eF;v0=*4q zC_7}oy|XFpR?6YSZ`e-=FZODHXXd!QF%djby2~U8-W$+k|@t zpI@fCRZftm`4MmyiEB3oQL8&9e=b$!8C$D)vDxC)1C_u4t*|<4)0f$uY3KKY-`yS$ zJ|fYu98&L-p7po`1&rM5gcHAmpEWYQuiZ2t>YV;p-=_v}=qgs>l+VAjuM@uP|S7pR%jsfXSSBim-fhSf1PqSb!g7XdO5QW{{ zgp!JP{w-_c zf#>4=y4g)rKzW!kcxkk}@JXrC>$hzTZ*cr%UcphZ^ZatMp&2Ft--BC@21F>rm z!x8j)eLZvsv9p5a*Qb0oLFc|(Ph)N2$(oEO9}dn1ve%b#`VRPDulpS6NkRvx~Jk@y + import { fade } from 'svelte/transition'; + import { flip } from 'svelte/animate'; + + export let packages = []; + let transitionDuration = 200; + + +{#if packages.length === 0} +
Sad trombone... we haven't built any components that + match this search yet! +
+{:else} +
+ {#each packages as uxPackage(uxPackage.name)} + +
+
+
+ `Image for the {uxPackage.humanName} UX package` +
+

+ { uxPackage.humanName } +

+
+
+
+ {/each} +
+{/if} diff --git a/ux.symfony.com/assets/svelte/controllers/PackageSearch.svelte b/ux.symfony.com/assets/svelte/controllers/PackageSearch.svelte new file mode 100644 index 00000000000..4ab7dbe2464 --- /dev/null +++ b/ux.symfony.com/assets/svelte/controllers/PackageSearch.svelte @@ -0,0 +1,22 @@ + + +
+ +
+ +
+
diff --git a/ux.symfony.com/composer.json b/ux.symfony.com/composer.json index 0b0f2a32d4f..42a2bf7c9a2 100644 --- a/ux.symfony.com/composer.json +++ b/ux.symfony.com/composer.json @@ -35,6 +35,7 @@ "symfony/ux-live-component": "2.x-dev", "symfony/ux-notify": "2.x-dev", "symfony/ux-react": "2.x-dev", + "symfony/ux-svelte": "2.x-dev", "symfony/ux-swup": "2.x-dev", "symfony/ux-turbo": "2.x-dev", "symfony/ux-twig-component": "2.x-dev", diff --git a/ux.symfony.com/composer.lock b/ux.symfony.com/composer.lock index 5deb295cfcd..7c132b12452 100644 --- a/ux.symfony.com/composer.lock +++ b/ux.symfony.com/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "1147ea6841cb30b649de7d9d8b1c5734", + "content-hash": "3e742c195db23e735ec6e345329ebb24", "packages": [ { "name": "babdev/pagerfanta-bundle", @@ -7450,6 +7450,84 @@ ], "time": "2023-04-16T16:35:15+00:00" }, + { + "name": "symfony/ux-svelte", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-svelte.git", + "reference": "111274910c49c4001143c968ce6b64a1e655703d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-svelte/zipball/111274910c49c4001143c968ce6b64a1e655703d", + "reference": "111274910c49c4001143c968ce6b64a1e655703d", + "shasum": "" + }, + "require": { + "symfony/webpack-encore-bundle": "^1.15" + }, + "require-dev": { + "symfony/framework-bundle": "^5.4|^6.2", + "symfony/phpunit-bridge": "^5.4|^6.2", + "symfony/twig-bundle": "^5.4|^6.2", + "symfony/var-dumper": "^5.4|^6.2" + }, + "default-branch": true, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/ux", + "url": "https://github.com/symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\Svelte\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Thomas Choquet", + "email": "thomas.choquet.pro@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration of Svelte in Symfony", + "homepage": "https://symfony.com", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/ux-svelte/tree/2.x" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-14T13:38:54+00:00" + }, { "name": "symfony/ux-swup", "version": "2.x-dev", @@ -11244,6 +11322,7 @@ "symfony/ux-live-component": 20, "symfony/ux-notify": 20, "symfony/ux-react": 20, + "symfony/ux-svelte": 20, "symfony/ux-swup": 20, "symfony/ux-turbo": 20, "symfony/ux-twig-component": 20, diff --git a/ux.symfony.com/config/bundles.php b/ux.symfony.com/config/bundles.php index 668f6d726b4..5b1be05485c 100644 --- a/ux.symfony.com/config/bundles.php +++ b/ux.symfony.com/config/bundles.php @@ -24,4 +24,5 @@ Symfony\UX\Notify\NotifyBundle::class => ['all' => true], Symfony\UX\React\ReactBundle::class => ['all' => true], Symfony\UX\Vue\VueBundle::class => ['all' => true], + Symfony\UX\Svelte\SvelteBundle::class => ['all' => true], ]; diff --git a/ux.symfony.com/package.json b/ux.symfony.com/package.json index 55235b22bd4..173afc12049 100644 --- a/ux.symfony.com/package.json +++ b/ux.symfony.com/package.json @@ -24,6 +24,7 @@ "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "@symfony/ux-notify": "file:vendor/symfony/ux-notify/assets", "@symfony/ux-react": "file:vendor/symfony/ux-react/assets", + "@symfony/ux-svelte": "file:vendor/symfony/ux-svelte/assets", "@symfony/ux-swup": "file:vendor/symfony/ux-swup/assets", "@symfony/ux-turbo": "file:vendor/symfony/ux-turbo/assets", "@symfony/ux-typed": "file:vendor/symfony/ux-typed/assets", @@ -41,6 +42,8 @@ "sass-loader": "^13.0.0", "snarkdown": "^2.0.0", "stimulus-clipboard": "^3.1.0", + "svelte": "^3.0", + "svelte-loader": "^3.0.0", "swup": "^2.0", "tom-select": "^2.2.2", "typed.js": "^2.0", diff --git a/ux.symfony.com/src/Controller/UxPackagesController.php b/ux.symfony.com/src/Controller/UxPackagesController.php index f950e572d55..46f57dc0e8a 100644 --- a/ux.symfony.com/src/Controller/UxPackagesController.php +++ b/ux.symfony.com/src/Controller/UxPackagesController.php @@ -56,6 +56,16 @@ public function vue(PackageRepository $packageRepository): Response ]); } + #[Route('/svelte', name: 'app_svelte')] + public function svelte(PackageRepository $packageRepository): Response + { + $packagesData = $this->getNormalizedPackages($packageRepository); + + return $this->render('ux_packages/svelte.html.twig', [ + 'packagesData' => $packagesData, + ]); + } + #[Route('/typed', name: 'app_typed')] public function typed(): Response { diff --git a/ux.symfony.com/src/Service/PackageRepository.php b/ux.symfony.com/src/Service/PackageRepository.php index bce34f5776b..f5af08c1910 100644 --- a/ux.symfony.com/src/Service/PackageRepository.php +++ b/ux.symfony.com/src/Service/PackageRepository.php @@ -70,6 +70,16 @@ public function findAll(string $query = null): array )) ->setDocsLink('https://vuejs.org/', 'Go deeper with the Vue.js docs.'), + (new Package( + 'svelte', + 'Svelte', + 'app_svelte', + 'linear-gradient(95.22deg, #f73c00 -4.7%, #f08e6e 105.43%)', + 'Quickly render `` components & pass them props.', + 'I need to render Svelte components from Twig' + )) + ->setDocsLink('https://svelte.dev/', 'Go deeper with the Svelte docs.'), + (new Package( 'cropperjs', 'Image Cropper', diff --git a/ux.symfony.com/symfony.lock b/ux.symfony.com/symfony.lock index b6678e67125..5653c01b89b 100644 --- a/ux.symfony.com/symfony.lock +++ b/ux.symfony.com/symfony.lock @@ -544,6 +544,9 @@ "symfony/ux-react": { "version": "2.x-dev" }, + "symfony/ux-svelte": { + "version": "2.x-dev" + }, "symfony/ux-swup": { "version": "v2.1.1" }, diff --git a/ux.symfony.com/templates/ux_packages/svelte.html.twig b/ux.symfony.com/templates/ux_packages/svelte.html.twig new file mode 100644 index 00000000000..f6886ac6287 --- /dev/null +++ b/ux.symfony.com/templates/ux_packages/svelte.html.twig @@ -0,0 +1,39 @@ +{% extends 'packageBase.html.twig' %} + +{% block component_header %} + {% component PackageHeader with { + package: 'svelte', + eyebrowText: 'Svelte Component Rendering' + } %} + {% block title_header %} + Render Svelte from + inside Twig + {% endblock %} + + {% block sub_content %} + Built a Svelte component? Render it quickly & easily in Twig and pass in dynamic props. + {% endblock %} + {% endcomponent %} +{% endblock %} + +{% block code_block_left %} + +{% endblock %} + +{% block code_block_right %} + +{% endblock %} + +{% block demo_title %}UX Svelte{% endblock %} + +{% block demo_content %} +
+ Loading... +
+{% endblock %} diff --git a/ux.symfony.com/webpack.config.js b/ux.symfony.com/webpack.config.js index a79a36beb7a..7e3e591b03d 100644 --- a/ux.symfony.com/webpack.config.js +++ b/ux.symfony.com/webpack.config.js @@ -67,6 +67,8 @@ Encore .enableVueLoader(() => {}, { runtimeCompilerBuild: false }) + .enableSvelte() + // uncomment to get integrity="..." attributes on your script & link tags // requires WebpackEncoreBundle 1.4 or higher //.enableIntegrityHashes(Encore.isProduction()) diff --git a/ux.symfony.com/yarn.lock b/ux.symfony.com/yarn.lock index 69e2731b81c..ce645c9a1d9 100644 --- a/ux.symfony.com/yarn.lock +++ b/ux.symfony.com/yarn.lock @@ -1185,6 +1185,9 @@ "@symfony/ux-react@file:vendor/symfony/ux-react/assets": version "1.0.0" +"@symfony/ux-svelte@file:vendor/symfony/ux-svelte/assets": + version "1.0.0" + "@symfony/ux-swup@file:vendor/symfony/ux-swup/assets": version "1.1.0" @@ -3111,7 +3114,7 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^2.0.0: +loader-utils@^2.0.0, loader-utils@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== @@ -4365,6 +4368,30 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svelte-dev-helper@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/svelte-dev-helper/-/svelte-dev-helper-1.1.9.tgz#7d187db5c6cdbbd64d75a32f91b8998bde3273c3" + integrity sha512-oU+Xv7Dl4kRU2kdFjsoPLfJfnt5hUhsFUZtuzI3Ku/f2iAFZqBoEuXOqK3N9ngD4dxQOmN4OKWPHVi3NeAeAfQ== + +svelte-hmr@^0.14.2: + version "0.14.12" + resolved "https://registry.yarnpkg.com/svelte-hmr/-/svelte-hmr-0.14.12.tgz#a127aec02f1896500b10148b2d4d21ddde39973f" + integrity sha512-4QSW/VvXuqVcFZ+RhxiR8/newmwOCTlbYIezvkeN6302YFRE8cXy0naamHcjz8Y9Ce3ITTZtrHrIL0AGfyo61w== + +svelte-loader@^3.0.0: + version "3.1.7" + resolved "https://registry.yarnpkg.com/svelte-loader/-/svelte-loader-3.1.7.tgz#b6acc02380b3cfe08340a08fe6831474fe4d56cb" + integrity sha512-YVg5gQaUdV26uaA5SEGj1VOUX0YQicD9PezKvVlkQ2JI644silWtJZ3hkxHtXSfjnlFr0OTNoyOgeINIODdT+A== + dependencies: + loader-utils "^2.0.4" + svelte-dev-helper "^1.1.9" + svelte-hmr "^0.14.2" + +svelte@^3.0: + version "3.58.0" + resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.58.0.tgz#d3e6f103efd6129e51c7d709225ad3b4c052b64e" + integrity sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A== + svgo@^2.7.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24"