From 4f735050eb051e7fcbb4e6813ede212ccdcb8266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Andr=C3=A9?= Date: Mon, 7 Oct 2024 23:14:14 +0200 Subject: [PATCH 1/3] [Site] Add Stimulus Bundle missing page --- .../images/ux_packages/stimulus-1200x675.png | Bin 0 -> 76021 bytes .../assets/images/ux_packages/stimulus.svg | 5 + ux.symfony.com/assets/styles/app.scss | 1 + .../assets/styles/components/_FeatureBox.scss | 49 +++++++ .../assets/styles/sections/_hero.scss | 9 +- ux.symfony.com/config/packages/ux_icons.yaml | 7 + .../UxPackage/StimulusController.php | 35 +++++ ux.symfony.com/src/Model/UxPackage.php | 18 ++- .../src/Service/UxPackageRepository.php | 28 ++-- .../src/Twig/HomepageTerminalSwapper.php | 4 +- .../templates/components/FeatureBox.html.twig | 6 + .../Package/PackageHeader.html.twig | 26 ++-- .../templates/ux_packages/stimulus.html.twig | 130 ++++++++++++++++++ 13 files changed, 292 insertions(+), 26 deletions(-) create mode 100644 ux.symfony.com/assets/images/ux_packages/stimulus-1200x675.png create mode 100644 ux.symfony.com/assets/images/ux_packages/stimulus.svg create mode 100644 ux.symfony.com/assets/styles/components/_FeatureBox.scss create mode 100644 ux.symfony.com/src/Controller/UxPackage/StimulusController.php create mode 100644 ux.symfony.com/templates/components/FeatureBox.html.twig create mode 100644 ux.symfony.com/templates/ux_packages/stimulus.html.twig diff --git a/ux.symfony.com/assets/images/ux_packages/stimulus-1200x675.png b/ux.symfony.com/assets/images/ux_packages/stimulus-1200x675.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7f5a688b49afc7ab0b77ec0bb6bc7a5646ddb3 GIT binary patch literal 76021 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 + + + + diff --git a/ux.symfony.com/assets/styles/app.scss b/ux.symfony.com/assets/styles/app.scss index c38c96d208d..0b17c833edf 100644 --- a/ux.symfony.com/assets/styles/app.scss +++ b/ux.symfony.com/assets/styles/app.scss @@ -132,6 +132,7 @@ $utilities: map-remove( @import "components/DemoContainer"; @import "components/DemoCard"; @import "components/DocsLink"; +@import "components/FeatureBox"; @import "components/FileTree"; @import "components/Icon"; @import "components/IconGrid"; diff --git a/ux.symfony.com/assets/styles/components/_FeatureBox.scss b/ux.symfony.com/assets/styles/components/_FeatureBox.scss new file mode 100644 index 00000000000..82cf3b632aa --- /dev/null +++ b/ux.symfony.com/assets/styles/components/_FeatureBox.scss @@ -0,0 +1,49 @@ +.FeatureBox { + + --bg-color: var(--bs-body-bg); + [data-bs-theme="dark"] { + --bg-color: #1b1e21; + } + + background: var(--bg-color); + border: 1px solid var(--bs-secondary-bg-subtle); + border-radius: var(--border-radius); + display: grid; + padding: 1rem; + place-content: center; + gap: .75rem; +} + +.FeatureBox_icon { + height: 2.4rem; + display: grid; + place-content: center; + svg { + height: 100%; + width: 100%; + } + path, circle { + fill: var(--bs-body-bg); + fill-opacity: .1; + stroke: currentColor; + stroke-width: 1; + transition: 400ms; + } +} +.FeatureBox:hover { + path, circle { + fill-opacity: .15; + stroke-width: 1.25; + } +} + +.FeatureBox_title { + opacity: .85; + font-weight: 400; + font-size: 1rem; + font-family: var(--font-family-text); + color: var(--bs-body-color); + text-decoration: none; + line-height: 1; + text-align: center; +} diff --git a/ux.symfony.com/assets/styles/sections/_hero.scss b/ux.symfony.com/assets/styles/sections/_hero.scss index fbf30e7a289..30434b17bc8 100644 --- a/ux.symfony.com/assets/styles/sections/_hero.scss +++ b/ux.symfony.com/assets/styles/sections/_hero.scss @@ -7,9 +7,16 @@ } .hero-sub-text { - width: 40%; + width: 50%; text-wrap: balance; } +.hero-sub-text a { + border-bottom: 1.5px solid #ffff; + text-decoration: none; +} +.hero-sub-text a:hover { + color: inherit; +} @media (max-width: 1114px) { .hero-sub-text { diff --git a/ux.symfony.com/config/packages/ux_icons.yaml b/ux.symfony.com/config/packages/ux_icons.yaml index 61326164e87..43ecf5c476d 100644 --- a/ux.symfony.com/config/packages/ux_icons.yaml +++ b/ux.symfony.com/config/packages/ux_icons.yaml @@ -1,3 +1,10 @@ ux_icons: default_icon_attributes: class: 'Icon' + + icon_sets: + + # FeatureBox icons + feature: + alias: 'lucide' + # icon_attributes: diff --git a/ux.symfony.com/src/Controller/UxPackage/StimulusController.php b/ux.symfony.com/src/Controller/UxPackage/StimulusController.php new file mode 100644 index 00000000000..6719020f49c --- /dev/null +++ b/ux.symfony.com/src/Controller/UxPackage/StimulusController.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace App\Controller\UxPackage; + +use App\Service\UxPackageRepository; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; + +class StimulusController extends AbstractController +{ + public function __construct( + private readonly UxPackageRepository $packageRepository, + ) { + } + + #[Route('/stimulus', name: 'app_stimulus')] + public function __invoke(): Response + { + $package = $this->packageRepository->find('stimulus'); + + return $this->render('ux_packages/stimulus.html.twig', [ + 'package' => $package, + ]); + } +} diff --git a/ux.symfony.com/src/Model/UxPackage.php b/ux.symfony.com/src/Model/UxPackage.php index 824983b45bd..bba81f52e5c 100644 --- a/ux.symfony.com/src/Model/UxPackage.php +++ b/ux.symfony.com/src/Model/UxPackage.php @@ -26,8 +26,9 @@ public function __construct( private string $gradient, private string $tagLine, private string $description, - private string $createString, + private ?string $createString = null, private ?string $imageFileName = null, + private ?string $composerName = null, ) { } @@ -73,7 +74,7 @@ public function getDescription(): string public function getComposerName(): string { - return 'symfony/ux-'.$this->getName(); + return $this->composerName ?? 'symfony/ux-'.$this->getName(); } public function getComposerRequireCommand(): string @@ -117,12 +118,21 @@ public function getScreencastLinkText(): ?string return $this->screencastLinkText; } + public function setOfficialDocsUrl(string $officialDocsUrl): self + { + $this->officialDocsUrl = $officialDocsUrl; + + return $this; + } + + private string $officialDocsUrl; + public function getOfficialDocsUrl(): string { - return \sprintf('https://symfony.com/bundles/ux-%s/current/index.html', $this->name); + return $this->officialDocsUrl ??= \sprintf('https://symfony.com/bundles/ux-%s/current/index.html', $this->name); } - public function getCreateString(): string + public function getCreateString(): ?string { return $this->createString; } diff --git a/ux.symfony.com/src/Service/UxPackageRepository.php b/ux.symfony.com/src/Service/UxPackageRepository.php index a0a2eb251a9..0810e0e8def 100644 --- a/ux.symfony.com/src/Service/UxPackageRepository.php +++ b/ux.symfony.com/src/Service/UxPackageRepository.php @@ -80,6 +80,21 @@ public function findAll(?string $query = null): array ->setDocsLink('https://turbo.hotwired.dev/handbook/introduction', 'Documentation specifically for the Turbo JavaScript library.') ->setScreencastLink('https://symfonycasts.com/screencast/turbo', 'Go deep into all 3 parts of Turbo.'), + (new UxPackage( + 'stimulus', + 'Stimulus', + 'app_stimulus', + '#2EB17B', + 'linear-gradient(to bottom right, #3D9A89 5%, #2EB17B 80%)', + 'Central Bridge of Symfony UX', + 'Integration with Stimulus for HTML-powered controllers', + null, + 'stimulus.svg', + 'symfony/stimulus-bundle', + )) + ->setOfficialDocsUrl('https://symfony.com/bundles/StimulusBundle') + ->setScreencastLink('https://symfonycasts.com/screencast/stimulus', 'More than 40 videos to master Stimulus.'), + new UxPackage( 'autocomplete', 'Autocomplete', @@ -100,7 +115,7 @@ public function findAll(?string $query = null): array 'Symfony Translations in JavaScript', "Use Symfony's translations in JavaScript", 'I need to translate strings in JavaScript', - 'translator.svg' + 'translator.svg', ), (new UxPackage( @@ -135,7 +150,7 @@ public function findAll(?string $query = null): array 'linear-gradient(95deg, #35B67C -5%, #8CE3BC 105%)', 'Render Vue components from Twig', 'Quickly render `` components & pass them props.', - 'I need to render Vue.js components from Twig' + null, )) ->setDocsLink('https://vuejs.org/', 'Go deeper with the Vue.js docs.'), @@ -147,7 +162,7 @@ public function findAll(?string $query = null): array 'linear-gradient(115deg, #BE3030, #FF3E00)', 'Render Svelte components from Twig', 'Quickly render `` components & pass them props.', - 'I need to render Svelte components from Twig', + null, 'svelte.svg', )) ->setDocsLink('https://svelte.dev/', 'Go deeper with the Svelte docs.'), @@ -160,7 +175,7 @@ public function findAll(?string $query = null): array 'linear-gradient(136deg, #1E8FA8 -7%, #3FC0DC 105%)', 'Form Tools for cropping images', 'Form Type and tools for cropping images', - 'I need to add a JavaScript image cropper' + null, )) ->setDocsLink('https://github.com/fengyuanchen/cropperjs', 'Cropper.js documentation.'), @@ -172,7 +187,6 @@ public function findAll(?string $query = null): array 'linear-gradient(136deg, #AC2777 -8%, #F246AD 105%)', 'Delay Loading with Blurhash', 'Optimize Image Loading with BlurHash', - 'I need to delay large image loading' ), new UxPackage( @@ -194,7 +208,6 @@ public function findAll(?string $query = null): array 'linear-gradient(95deg, #D87036 -5%, #EA9633 105%)', 'Stylized Page Transitions', 'Integration with the page transition library Swup', - 'I need stylized page transitions' )) ->setDocsLink('https://swup.js.org/', 'Swup documentation'), @@ -206,7 +219,6 @@ public function findAll(?string $query = null): array 'linear-gradient(95deg, #204CA0 -6%, #3D82EA 105%)', 'Native Browser Notifications', 'Trigger native browser notifications from inside PHP', - 'I need to send browser notifications', ), new UxPackage( @@ -217,7 +229,6 @@ public function findAll(?string $query = null): array 'linear-gradient(142deg, #FD963C -15%, #BE0404 95%)', 'Password Visibility Switch', 'Switch the visibility of a password field', - 'I need to toggle the visibility of a password field', ), (new UxPackage( @@ -228,7 +239,6 @@ public function findAll(?string $query = null): array 'linear-gradient(95deg, #20A091 -5%, #4EC9B3 105%)', 'Animated Typing with Typed.js', 'Animated typing with Typed.js', - 'I need to type onto the screen... like this' )) ->setDocsLink('https://github.com/mattboldt/typed.js/', 'Typed.js documentation'), ]; diff --git a/ux.symfony.com/src/Twig/HomepageTerminalSwapper.php b/ux.symfony.com/src/Twig/HomepageTerminalSwapper.php index c3eb925d2f6..dca67b402af 100644 --- a/ux.symfony.com/src/Twig/HomepageTerminalSwapper.php +++ b/ux.symfony.com/src/Twig/HomepageTerminalSwapper.php @@ -11,6 +11,7 @@ namespace App\Twig; +use App\Model\UxPackage; use App\Service\UxPackageRepository; use App\Util\SourceCleaner; use Symfony\UX\TwigComponent\Attribute\AsTwigComponent; @@ -27,7 +28,8 @@ public function __construct(private UxPackageRepository $packageRepository) public function getTypedStrings(): array { $strings = []; - $packages = $this->packageRepository->findAll(); + $packages = array_filter($this->packageRepository->findAll(), fn (UxPackage $p): bool => null !== $p->getCreateString()); + shuffle($packages); foreach ($packages as $package) { diff --git a/ux.symfony.com/templates/components/FeatureBox.html.twig b/ux.symfony.com/templates/components/FeatureBox.html.twig new file mode 100644 index 00000000000..946b6c6eded --- /dev/null +++ b/ux.symfony.com/templates/components/FeatureBox.html.twig @@ -0,0 +1,6 @@ +
+
+ +
+

{{ title }}

+
diff --git a/ux.symfony.com/templates/components/Package/PackageHeader.html.twig b/ux.symfony.com/templates/components/Package/PackageHeader.html.twig index 73d3f0eac5a..d3cf28ec734 100644 --- a/ux.symfony.com/templates/components/Package/PackageHeader.html.twig +++ b/ux.symfony.com/templates/components/Package/PackageHeader.html.twig @@ -1,22 +1,26 @@ -
+
-

{{ eyebrowText|raw }}

+

{{ eyebrowText|raw }}

-

{% block title_header %}{% endblock %}

+

{% block title_header %}{{ title|default }}{% endblock %}

- {% block sub_content %}{% endblock %} + {% block sub_content %}{{ subtitle|default }}{% endblock %}

-
- -
+ {% if command is not defined or command %} +
+ +
+ {% endif %} +
diff --git a/ux.symfony.com/templates/ux_packages/stimulus.html.twig b/ux.symfony.com/templates/ux_packages/stimulus.html.twig new file mode 100644 index 00000000000..7b11dc69cd8 --- /dev/null +++ b/ux.symfony.com/templates/ux_packages/stimulus.html.twig @@ -0,0 +1,130 @@ +{% extends 'ux_packages/package.html.twig' %} + +{% block package_header %} + + + Connects Stimulus, + UX packages, Asset Mapper, Webpack Encore... + Making it easy to add JavaScript interactivity to your Symfony apps! + + +{% endblock %} + +{% block package_content %} + +
+
+
+ + + + + +
+
+
+ +
+
+ +
+

Stimulus Twig Helpers

+
+ + + {% block stimulus_controller %} +
+ Welcome to your profile! +
+ + {# would render as #} + +
+ Welcome to your profile! +
+ {% endblock %} + +

stimulus_controller

+ + This function attaches a Stimulus controller to an HTML element and allows passing values (via + __data-attributes__) that can be accessed within the controller. + + These values are useful for providing dynamic data or configuration to your controller’s logic. +
+ + + {% block stimulus_target %} +
+ John Doe + + John's Avatar + +
+ + {# would render as #} + +
+ John Doe + + John's Avatar + +
+ {% endblock %} + +

stimulus_target

+ + This function defines one or more targets within a Stimulus controller. These targets allow you + to interact with specific DOM elements directly from your controller’s logic. +
+ + + {% block stimulus_action %} + + + {# would render as #} + + + {% endblock %} + +

stimulus_action

+ + This function attaches an event listener to an HTML element, defining actions that trigger specific + methods in the controller. + + This simplifies event handling by mapping DOM events (like `click`, `input`, etc.) directly to + controller methods, improving the clarity and maintainability of your code. +
+ +
+
+{% endblock %} From 88a3c73afb4f7d205528f72c76bcbb878bffcb1a Mon Sep 17 00:00:00 2001 From: Hugo Alliaume Date: Sat, 12 Oct 2024 08:22:44 +0200 Subject: [PATCH 2/3] Remove yarn commands in documentations --- src/Autocomplete/doc/index.rst | 4 ---- src/Chartjs/doc/index.rst | 7 ------- src/Cropperjs/doc/index.rst | 4 ---- src/Dropzone/doc/index.rst | 4 ---- src/LazyImage/doc/index.rst | 4 ---- src/LiveComponent/doc/index.rst | 4 ---- src/Notify/doc/index.rst | 4 ---- src/React/doc/index.rst | 4 ---- src/Svelte/doc/index.rst | 7 ------- src/Swup/doc/index.rst | 4 ---- src/TogglePassword/doc/index.rst | 4 ---- src/Translator/doc/index.rst | 4 ---- src/Turbo/CONTRIBUTING.md | 2 -- src/Turbo/README.md | 2 -- src/Turbo/doc/index.rst | 4 ---- src/Typed/doc/index.rst | 4 ---- src/Vue/doc/index.rst | 4 ---- 17 files changed, 70 deletions(-) diff --git a/src/Autocomplete/doc/index.rst b/src/Autocomplete/doc/index.rst index 2ba45d7691d..69ade32aaf8 100644 --- a/src/Autocomplete/doc/index.rst +++ b/src/Autocomplete/doc/index.rst @@ -30,10 +30,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage in a Form (without Ajax) ------------------------------ diff --git a/src/Chartjs/doc/index.rst b/src/Chartjs/doc/index.rst index e54ef1bd35e..8c9c1424943 100644 --- a/src/Chartjs/doc/index.rst +++ b/src/Chartjs/doc/index.rst @@ -26,10 +26,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- @@ -99,9 +95,6 @@ First, install the plugin: $ npm install chartjs-plugin-zoom -D - # or use yarn - $ yarn add chartjs-plugin-zoom --dev - Then register the plugin globally. This can be done in your ``app.js`` file: .. code-block:: javascript diff --git a/src/Cropperjs/doc/index.rst b/src/Cropperjs/doc/index.rst index df4ef6eef35..663948d8a01 100644 --- a/src/Cropperjs/doc/index.rst +++ b/src/Cropperjs/doc/index.rst @@ -26,10 +26,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/Dropzone/doc/index.rst b/src/Dropzone/doc/index.rst index cff26ffbda6..c5af43dce0f 100644 --- a/src/Dropzone/doc/index.rst +++ b/src/Dropzone/doc/index.rst @@ -28,10 +28,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/LazyImage/doc/index.rst b/src/LazyImage/doc/index.rst index 272384a0cc1..b8369e0ff5e 100644 --- a/src/LazyImage/doc/index.rst +++ b/src/LazyImage/doc/index.rst @@ -30,10 +30,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/LiveComponent/doc/index.rst b/src/LiveComponent/doc/index.rst index e24b87a6bed..7b7e7ca1c41 100644 --- a/src/LiveComponent/doc/index.rst +++ b/src/LiveComponent/doc/index.rst @@ -87,10 +87,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - If your project is localized in different languages (either via the `locale route parameter`_ or by `setting the locale in the request`_) add the ``{_locale}`` attribute to the UX Live Components route definition to keep the locale between re-renders: diff --git a/src/Notify/doc/index.rst b/src/Notify/doc/index.rst index 32611d7a6c4..f6c75eaf40c 100644 --- a/src/Notify/doc/index.rst +++ b/src/Notify/doc/index.rst @@ -25,10 +25,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/React/doc/index.rst b/src/React/doc/index.rst index 954061c8308..08a99031444 100644 --- a/src/React/doc/index.rst +++ b/src/React/doc/index.rst @@ -39,10 +39,6 @@ Next, install a package to help React: $ npm install -D @babel/preset-react --force $ npm run watch - # or use yarn - $ yarn add @babel/preset-react --dev --force - $ yarn watch - That's it! Any files inside ``assets/react/controllers/`` can now be rendered as React components. diff --git a/src/Svelte/doc/index.rst b/src/Svelte/doc/index.rst index 3dc0a92f405..b37ee8fa3d1 100644 --- a/src/Svelte/doc/index.rst +++ b/src/Svelte/doc/index.rst @@ -31,10 +31,6 @@ Install the bundle using Composer and Symfony Flex: $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - The Flex recipe will automatically set things up for you, like adding ``.enableSvelte()`` to your ``webpack.config.js`` file and adding code to load your Svelte components inside ``assets/app.js``. @@ -45,9 +41,6 @@ Next, install a package to help Svelte: $ npm install svelte-loader --save-dev - # or use yarn - $ yarn add svelte-loader --dev - That's it! Any files inside ``assets/svelte/controllers/`` can now be rendered as Svelte components. diff --git a/src/Swup/doc/index.rst b/src/Swup/doc/index.rst index 1b2ed8cc438..d97ffa8bf86 100644 --- a/src/Swup/doc/index.rst +++ b/src/Swup/doc/index.rst @@ -30,10 +30,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/TogglePassword/doc/index.rst b/src/TogglePassword/doc/index.rst index c9ea6cf0b4f..ee4e4ed1065 100644 --- a/src/TogglePassword/doc/index.rst +++ b/src/TogglePassword/doc/index.rst @@ -32,10 +32,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage with Symfony Forms ------------------------ diff --git a/src/Translator/doc/index.rst b/src/Translator/doc/index.rst index 6d194ce4a53..bb965b002a9 100644 --- a/src/Translator/doc/index.rst +++ b/src/Translator/doc/index.rst @@ -35,10 +35,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - After installing the bundle, the following file should be created, thanks to the Symfony Flex recipe: .. code-block:: javascript diff --git a/src/Turbo/CONTRIBUTING.md b/src/Turbo/CONTRIBUTING.md index 3eb5e018b6d..bc4c29ac10c 100644 --- a/src/Turbo/CONTRIBUTING.md +++ b/src/Turbo/CONTRIBUTING.md @@ -13,8 +13,6 @@ Install the test app: $ composer install $ cd tests/app - $ yarn install - $ yarn build $ php public/index.php doctrine:schema:create Start the test app: diff --git a/src/Turbo/README.md b/src/Turbo/README.md index aa855d717d7..538794fc22b 100644 --- a/src/Turbo/README.md +++ b/src/Turbo/README.md @@ -37,8 +37,6 @@ Configure test environment (working directory: `src/Turbo`): composer update docker compose up -d cd tests/app -yarn install -yarn build php public/index.php doctrine:schema:create ``` diff --git a/src/Turbo/doc/index.rst b/src/Turbo/doc/index.rst index 336145ca68c..53ac4c6a73b 100644 --- a/src/Turbo/doc/index.rst +++ b/src/Turbo/doc/index.rst @@ -37,10 +37,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/Typed/doc/index.rst b/src/Typed/doc/index.rst index 1a84eacaf95..f6423bbd699 100644 --- a/src/Typed/doc/index.rst +++ b/src/Typed/doc/index.rst @@ -31,10 +31,6 @@ needed if you're using AssetMapper): $ npm install --force $ npm run watch - # or use yarn - $ yarn install --force - $ yarn watch - Usage ----- diff --git a/src/Vue/doc/index.rst b/src/Vue/doc/index.rst index 3f19e3afa9b..0f4f8d0ccc2 100644 --- a/src/Vue/doc/index.rst +++ b/src/Vue/doc/index.rst @@ -39,10 +39,6 @@ Next, install a package to help Vue: $ npm install -D vue-loader --force $ npm run watch - # or with yarn - $ yarn add vue-loader --dev --force - $ yarn watch - That's it! Any files inside ``assets/vue/controllers/`` can now be rendered as Vue components. From 7a626efb65dbd6addcbdcb4a387a23b3a28be444 Mon Sep 17 00:00:00 2001 From: Hugo Alliaume Date: Sat, 12 Oct 2024 08:31:12 +0200 Subject: [PATCH 3/3] chore: rm commit notes --- .commit | 23 ----------------------- .notes | 47 ----------------------------------------------- 2 files changed, 70 deletions(-) delete mode 100644 .commit delete mode 100644 .notes diff --git a/.commit b/.commit deleted file mode 100644 index 08e4f981fb6..00000000000 --- a/.commit +++ /dev/null @@ -1,23 +0,0 @@ -bug #2154 [Dropzone] Enable file replacement via "drag-and-drop" (rrr63) - -This PR was merged into the 2.x branch. - -Discussion ----------- - -[Dropzone] Enable file replacement via "drag-and-drop" - -| Q | A -| ------------- | --- -| Bug fix? | yes -| New feature? | no -| Issues | Fix #1480 -| License | MIT - -Adding `dragenter` event to allow file replacement - -Commits -------- - - - diff --git a/.notes b/.notes deleted file mode 100644 index 0ab36e49f19..00000000000 --- a/.notes +++ /dev/null @@ -1,47 +0,0 @@ ---------------------------------------------------------------------------- - -by smnandre at 2024-09-11T21:39:36Z - -Hi @rrr63 ! Thank you for this PR - -Could you add just a screenshot or two, for other to understand what you're adding ? - -I'm wondering, you add on dragEnter, but you don't revert if the drag is canceled ? - -Also, it would be great to add a test or two :) - - - ---------------------------------------------------------------------------- - -by rrr63 at 2024-09-12T06:34:12Z - -Hi @smnandre , - -You're right, i canceled when the drag leaves, and added a test for both, enter and leave. -Both, enter and leave are in the same test to get the right drag area from enter event. - -Demo : -![dropzone](https://github.com/user-attachments/assets/76143fdd-1dbc-4129-92f2-43e9780eed4b) - - - - ---------------------------------------------------------------------------- - -by smnandre at 2024-09-12T17:27:47Z - -Wow, thank you very much! I'll try tonight but this will probably more be this week-end :) - ---------------------------------------------------------------------------- - -by smnandre at 2024-09-12T17:31:45Z - -Could you add a entry in the CHANGELOG (inside the Dropzone folder) ? Next version will be 2.20 - ---------------------------------------------------------------------------- - -by rrr63 at 2024-09-12T18:36:43Z - -Sure i can, just copied the title :) -