From 7995a0e2993b2cfa41944988131bdb47e14d8de4 Mon Sep 17 00:00:00 2001 From: Arno Egli Date: Mon, 6 May 2024 17:58:58 +0200 Subject: [PATCH 01/28] feat: Add dropdown action block --- .../views/includes/_action.html.twig | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Resources/views/includes/_action.html.twig b/src/Resources/views/includes/_action.html.twig index 81dce91..9fed497 100644 --- a/src/Resources/views/includes/_action.html.twig +++ b/src/Resources/views/includes/_action.html.twig @@ -214,3 +214,31 @@ {% endblock %} + +{% block dropdown_action %} +
+ + + +
+{% endblock %} From 1a3058e95354281f092b4f6209fa091b45eacb0b Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 15 May 2024 11:32:44 +0200 Subject: [PATCH 02/28] feat: change link color to primary to make them more stand out --- src/Resources/assets/styles/_tailwind.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 0ef6bdd..3bfab66 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -38,7 +38,7 @@ .whatwedo-utility-link { @extend .whatwedo-utility-heading-4; - @apply text-neutral-800; + @apply text-primary-500; } .whatwedo-utility-button { From eed6710c36b45171339a0056f02c539e93a76c65 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 15 May 2024 17:41:37 +0200 Subject: [PATCH 03/28] feat: add correct format for date or datetime-local input type --- src/Resources/assets/controllers/datetime_controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Resources/assets/controllers/datetime_controller.js b/src/Resources/assets/controllers/datetime_controller.js index ea32785..a1a4227 100644 --- a/src/Resources/assets/controllers/datetime_controller.js +++ b/src/Resources/assets/controllers/datetime_controller.js @@ -22,6 +22,7 @@ export default class extends Controller { element: this.element, css: easepickStyle, lang: this.langValue || 'de-DE', + format: enableTime ? "YYYY-MM-DDTHH:mm" : "YYYY-MM-DD", readonly: false, plugins: plugins, calendars: type === 'time' ? 0 : 1, From 222cfb89cf3a5ef2ab655e6e03ed613e4a75c94a Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 15 May 2024 11:39:27 +0200 Subject: [PATCH 04/28] feat: add underline on link hover with transition https://dev.whatwedo.ch/araise/araise-meta/-/issues/99 --- src/Resources/assets/styles/_tailwind.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 3bfab66..78814fc 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -39,6 +39,14 @@ .whatwedo-utility-link { @extend .whatwedo-utility-heading-4; @apply text-primary-500; + text-decoration: underline solid transparent; + text-underline-offset: 0.2em; + text-decoration-thickness: 2px; + transition: text-decoration 1s ease; + + &:hover { + text-decoration-color: currentColor; + } } .whatwedo-utility-button { From 9ccebf956fb019674e92155c986d06a095882694 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 15 May 2024 11:03:14 +0200 Subject: [PATCH 05/28] feat: dispatch global event to close all dropdowns when a new one is opened https://dev.whatwedo.ch/araise/araise-meta/-/issues/59 --- src/Resources/assets/controllers/dropdown_controller.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Resources/assets/controllers/dropdown_controller.js b/src/Resources/assets/controllers/dropdown_controller.js index 6b0d48b..b9f9ed8 100644 --- a/src/Resources/assets/controllers/dropdown_controller.js +++ b/src/Resources/assets/controllers/dropdown_controller.js @@ -21,6 +21,7 @@ export default class extends Controller { const dropdownDiv = this.menuTarget; if (this.hasMenuTarget && dropdownDiv.classList.contains('hidden')) { + window.dispatchEvent(new Event('araise-dropdown:open')); dropdownDiv.classList.remove('hidden'); } else { dropdownDiv.classList.add('hidden'); From 4a624730b8a2e5de477089fa1e24e6fceeb16f5f Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 16 May 2024 17:19:42 +0200 Subject: [PATCH 06/28] feat: add a `format` value to the stimulus controller which is optional https://dev.whatwedo.ch/araise/araise-meta/-/issues/35 --- .../assets/controllers/datetime_controller.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Resources/assets/controllers/datetime_controller.js b/src/Resources/assets/controllers/datetime_controller.js index a1a4227..59140b1 100644 --- a/src/Resources/assets/controllers/datetime_controller.js +++ b/src/Resources/assets/controllers/datetime_controller.js @@ -4,8 +4,16 @@ import easepickStyle from '!!raw-loader!@easepick/bundle/dist/index.css' export default class extends Controller { static values = { - lang: String + /** + * The language to use within the date picker (translation of months and days) + */ + lang: String, + /** + * The format passed from the server to correctly parse the date + */ + format: String } + connect() { if (this.element.tagName !== 'INPUT') { return; @@ -14,7 +22,7 @@ export default class extends Controller { const enableTime = type === 'time' || type === 'datetime-local'; let plugins = [KbdPlugin]; - if(enableTime) { + if (enableTime) { plugins.push(TimePlugin); } @@ -22,7 +30,7 @@ export default class extends Controller { element: this.element, css: easepickStyle, lang: this.langValue || 'de-DE', - format: enableTime ? "YYYY-MM-DDTHH:mm" : "YYYY-MM-DD", + format: this.formatValue || (enableTime ? "YYYY-MM-DDTHH:mm" : "YYYY-MM-DD"), readonly: false, plugins: plugins, calendars: type === 'time' ? 0 : 1, From dcea6e5f6089c066250b44aa2647c4578e5f14b5 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 22 May 2024 16:44:45 +0200 Subject: [PATCH 07/28] feat: add utility classes for badges For comply with other utility classes we still use the `whatwedo` prefix here. Needs to be migrated with a breaking change all together. https://dev.whatwedo.ch/araise/araise-meta/-/issues/86 --- src/Resources/assets/styles/_tailwind.scss | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 78814fc..698418f 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -66,6 +66,31 @@ @apply text-neutral-500; } + // Badges + .whatwedo-utility-badge { + @apply inline-flex items-center rounded-full px-2 py-1 text-xs font-medium bg-primary-500 text-white; + + &--success { + @apply bg-success-500; + } + + &--warning { + @apply bg-warning-500; + } + + &--error { + @apply bg-error-500; + } + + &--neutral { + @apply bg-neutral-500; + } + + &--primary { + @apply bg-primary-500; + } + } + // Topbar .whatwedo-utility-topbar { @apply flex flex-grow-0 flex-auto px-4 py-2 md:py-4 md:min-h-[71px] justify-end items-center lg:justify-between; From 49627f8e5b1b7283af40731812436dd3b88f37f0 Mon Sep 17 00:00:00 2001 From: tuxes3 Date: Mon, 10 Jun 2024 20:06:07 +0200 Subject: [PATCH 08/28] chore: removed deprecations in tests --- src/DependencyInjection/araiseCoreExtension.php | 2 +- src/Manager/FormatterManager.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/DependencyInjection/araiseCoreExtension.php b/src/DependencyInjection/araiseCoreExtension.php index 13247c2..d316071 100644 --- a/src/DependencyInjection/araiseCoreExtension.php +++ b/src/DependencyInjection/araiseCoreExtension.php @@ -7,7 +7,7 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; -use Symfony\Component\HttpKernel\DependencyInjection\Extension; +use Symfony\Component\DependencyInjection\Extension\Extension; /** * This is the class that loads and manages your bundle configuration. diff --git a/src/Manager/FormatterManager.php b/src/Manager/FormatterManager.php index ec2dce2..505e4d9 100644 --- a/src/Manager/FormatterManager.php +++ b/src/Manager/FormatterManager.php @@ -30,7 +30,7 @@ namespace araise\CoreBundle\Manager; use araise\CoreBundle\Formatter\FormatterInterface; -use Symfony\Component\DependencyInjection\Attribute\TaggedIterator; +use Symfony\Component\DependencyInjection\Attribute\AutowireIterator; class FormatterManager { @@ -43,7 +43,7 @@ class FormatterManager * @param FormatterInterface[] $formatters */ public function __construct( - #[TaggedIterator('araise_core.formatter')] iterable $formatters + #[AutowireIterator('araise_core.formatter')] iterable $formatters ) { foreach ($formatters as $formatter) { $this->formatters[$formatter::class] = $formatter; From f43393de10a61a0ea5356a67d15e07fff9ec5545 Mon Sep 17 00:00:00 2001 From: tuxes3 Date: Tue, 11 Jun 2024 15:50:47 +0200 Subject: [PATCH 09/28] feature(test): added strategy matrix for php and symfony --- .github/workflows/ci.yaml | 48 +++++++++++++++---- composer.json | 26 +++++----- .../araiseCoreExtension.php | 2 +- src/Manager/FormatterManager.php | 3 +- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f33babc..ccb6546 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: CoreBundle +name: PHP Symfony CI on: push: @@ -7,18 +7,46 @@ on: branches: [ main, develop ] jobs: - phpunit: + build: runs-on: ubuntu-latest + + strategy: + matrix: + php: [8.1, 8.2, 8.3] + symfony: [6.4.*, 7.0.*, 7.1.*] + exclude: + - php: 8.1 + symfony: 7.1.* + - php: 8.1 + symfony: 7.0.* + + services: + mysql: + image: mysql:latest + env: + MYSQL_ROOT_PASSWORD: root + ports: + - 3306:3306 + options: >- + --health-cmd "mysqladmin ping --silent" + --health-interval 10s + --health-timeout 5s + --health-retries 3 + steps: - - uses: shivammathur/setup-php@2cb9b829437ee246e9b3cac53555a39208ca6d28 + - uses: actions/checkout@v4 + - name: Setup PHP ${{ matrix.php }} + uses: shivammathur/setup-php@v2 with: - php-version: '8.1' - - uses: actions/checkout@v2 - - name: Install Dependencies - run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - - name: Execute tests (Unit and Feature tests) via PHPUnit + php-version: ${{ matrix.php }} + tools: flex + - name: Download dependencies + env: + SYMFONY_REQUIRE: ${{ matrix.symfony }} + uses: ramsey/composer-install@v2 + - name: Run test suite on PHP ${{ matrix.php }} and Symfony ${{ matrix.symfony }} run: vendor/bin/simple-phpunit - - name: Check Code Styles + - name: Run ECS run: vendor/bin/ecs - - name: Check PHP Stan + - name: Run PHPStan run: vendor/bin/phpstan analyse src tests diff --git a/composer.json b/composer.json index f270e7f..ed105e4 100644 --- a/composer.json +++ b/composer.json @@ -18,26 +18,26 @@ "php": ">=8.1", "ext-bcmath": "*", "doctrine/collections": "~1.0|~2.0", - "symfony/console": "^5.4|^6.4|^7.0", - "symfony/framework-bundle": "^5.4|^6.4|^7.0", - "symfony/http-kernel": "^5.4|^6.4|^7.0", - "symfony/intl" : "^5.4|^6.4|^7.0", - "symfony/options-resolver" : "^5.4|^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl" : "^6.4|^7.0", + "symfony/options-resolver" : "^6.4|^7.0", "whatwedo/twig-bootstrap-icons": "^1.0.0", - "symfony/translation": "^5.4|^6.4|^7.0", - "symfony/form": "^5.4|^6.4|^7.0", - "symfony/stopwatch": "^5.4|^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/form": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", "symfony/test-pack": "^1.1.0", "symfony/orm-pack": "^2.4.1" }, "require-dev": { - "symfony/phpunit-bridge": "^5.4|^6.4|^7.0", - "symfony/config": "^5.4|^6.4|^7.0", - "symfony/dependency-injection": "^5.4|^6.4|^7.0", - "symfony/yaml": "^5.4|^6.4|^7.0", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0", "doctrine/doctrine-bundle": "^2.5.5", "whatwedo/php-coding-standard": "^1.0", - "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", "phpstan/phpstan": "^1.7" }, "autoload": { diff --git a/src/DependencyInjection/araiseCoreExtension.php b/src/DependencyInjection/araiseCoreExtension.php index d316071..4243d3c 100644 --- a/src/DependencyInjection/araiseCoreExtension.php +++ b/src/DependencyInjection/araiseCoreExtension.php @@ -6,8 +6,8 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\DependencyInjection\Extension\Extension; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; /** * This is the class that loads and manages your bundle configuration. diff --git a/src/Manager/FormatterManager.php b/src/Manager/FormatterManager.php index 505e4d9..986026a 100644 --- a/src/Manager/FormatterManager.php +++ b/src/Manager/FormatterManager.php @@ -43,7 +43,8 @@ class FormatterManager * @param FormatterInterface[] $formatters */ public function __construct( - #[AutowireIterator('araise_core.formatter')] iterable $formatters + #[AutowireIterator('araise_core.formatter')] + iterable $formatters ) { foreach ($formatters as $formatter) { $this->formatters[$formatter::class] = $formatter; From 111063ee955fd1e169c92443aa9b5cec29d09f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20R=C3=BCfenacht?= Date: Tue, 25 Jun 2024 15:37:47 +0200 Subject: [PATCH 10/28] feat: add flash exception --- src/Exception/FlashBagExecption.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/Exception/FlashBagExecption.php diff --git a/src/Exception/FlashBagExecption.php b/src/Exception/FlashBagExecption.php new file mode 100644 index 0000000..f5a487d --- /dev/null +++ b/src/Exception/FlashBagExecption.php @@ -0,0 +1,25 @@ +flashType = $flashType; + parent::__construct($message !== '' ? $message : $flashMessage, $code, $previous); + } + + public function getFlashType(): string + { + return $this->flashType; + } + + public function getFlashMessage(): string + { + return $this->message; + } +} From 84d9a10365a6d82f41ebd29f0f9d91575231d673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20R=C3=BCfenacht?= Date: Thu, 27 Jun 2024 16:34:54 +0200 Subject: [PATCH 11/28] docs: change theme of mermaid diagrams --- docs/index.html | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index 288fd95..dc92634 100644 --- a/docs/index.html +++ b/docs/index.html @@ -79,7 +79,19 @@ From c8c5d6fa0f83c479315bc4bb7a6350cfdd3d7134 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 17 Jul 2024 18:35:17 +0200 Subject: [PATCH 12/28] fix: close all dropdowns when other opens, don't prevent this from happening --- src/Resources/assets/controllers/dropdown_controller.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Resources/assets/controllers/dropdown_controller.js b/src/Resources/assets/controllers/dropdown_controller.js index b9f9ed8..acc224e 100644 --- a/src/Resources/assets/controllers/dropdown_controller.js +++ b/src/Resources/assets/controllers/dropdown_controller.js @@ -17,8 +17,6 @@ export default class extends Controller { } toggle (event) { - event.stopPropagation(); - const dropdownDiv = this.menuTarget; if (this.hasMenuTarget && dropdownDiv.classList.contains('hidden')) { window.dispatchEvent(new Event('araise-dropdown:open')); From 117dfbf400ff326eaab2e351155549457975657d Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 17 Jul 2024 11:57:42 +0200 Subject: [PATCH 13/28] fix(styles): enforce text underline for links inside block content Improve accessibility of links that are rendered inside of user created content blocks to make them more visible compared to static text. Those links are now always rendered with a visible underline. --- src/Resources/assets/styles/_tailwind.scss | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 698418f..0b54ebd 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -36,13 +36,26 @@ @apply text-base font-semibold text-neutral-500; } + .whatwedo-utility-content { + @extend .whatwedo-utility-paragraph; + + a { + text-decoration: underline solid currentColor; + text-underline-offset: 0.2em; + text-decoration-thickness: 1px; + + &:hover { + @apply text-neutral-900; + } + } + } + .whatwedo-utility-link { @extend .whatwedo-utility-heading-4; - @apply text-primary-500; text-decoration: underline solid transparent; text-underline-offset: 0.2em; - text-decoration-thickness: 2px; - transition: text-decoration 1s ease; + text-decoration-thickness: 1px; + transition: text-decoration 0.2s ease; &:hover { text-decoration-color: currentColor; From da554b896804f666e14a05d0fc68da24a6a3ee19 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 18 Jul 2024 21:41:21 +0200 Subject: [PATCH 14/28] feat: add utility class for checkbox with global styling --- src/Resources/assets/styles/_tailwind.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 698418f..681a01f 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -129,6 +129,10 @@ min-height: 2.2rem; } +.whatwedo_core-checkbox { + @apply text-primary-500 focus:ring-1 focus:ring-primary-500 rounded cursor-pointer; +} + .whatwedo_core-input--rounded-left { @extend .whatwedo_core-input; @apply rounded-none rounded-l-md; From d31b51ead76db11caa76f2f94858566acd2fcf39 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Sat, 20 Jul 2024 21:48:09 +0200 Subject: [PATCH 15/28] feat: add utility class for rounded button This is used for the "add" button which opens a lightbox --- src/Resources/assets/styles/_tailwind.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 698418f..ef07861 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -139,6 +139,11 @@ @apply inline-flex items-center bg-primary-500 hover:bg-primary-700; } +.whatwedo-crud-button--rounded { + @extend .whatwedo-utility-button; + @apply rounded-full p-1; +} + .whatwedo-crud-button--action-danger { @extend .whatwedo-utility-button; @apply inline-flex items-center bg-error-500 hover:bg-red-700; From af44db2a9b417dc27d38ad7f10cb46724b8099df Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Sat, 20 Jul 2024 23:05:39 +0200 Subject: [PATCH 16/28] feat(input): add a new stimulus controller for input masking --- .../controllers/input-mask_controller.js | 27 +++++++++++++++++++ src/Resources/assets/package.json | 7 +++++ src/Resources/assets/yarn.lock | 25 +++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/Resources/assets/controllers/input-mask_controller.js diff --git a/src/Resources/assets/controllers/input-mask_controller.js b/src/Resources/assets/controllers/input-mask_controller.js new file mode 100644 index 0000000..e2bcade --- /dev/null +++ b/src/Resources/assets/controllers/input-mask_controller.js @@ -0,0 +1,27 @@ +import { Controller } from "@hotwired/stimulus" +import IMask from "imask" + +const typeMapping = { + 'Number': Number, +}; +export default class extends Controller { + static values = { + mask: String, + scale: { type: Number, default: 2 }, + radix: { type: String, default: '.' }, + thousandsSeparator: { type: String, default: '\'' }, + normalizeZeros: { type: Boolean, default: false }, + }; + connect() { + this.mask = IMask(this.element, { + mask: typeMapping[this.maskValue] || this.maskValue, + scale: this.scaleValue, + radix: this.radixValue, + thousandsSeparator: this.thousandsSeparatorValue, + normalizeZeros: this.normalizeZerosValue, + }); + } + disconnect() { + this.mask?.destroy(); + } +} diff --git a/src/Resources/assets/package.json b/src/Resources/assets/package.json index f57a6f0..c54db7c 100644 --- a/src/Resources/assets/package.json +++ b/src/Resources/assets/package.json @@ -15,6 +15,12 @@ "fetch": "eager", "enabled": true }, + "input-mask": { + "main": "controllers/input-mask_controller.js", + "webpackMode": "eager", + "fetch": "eager", + "enabled": true + }, "dropdown": { "main": "controllers/dropdown_controller.js", "webpackMode": "eager", @@ -51,6 +57,7 @@ "dependencies": { "@easepick/bundle": "^1.2.1", "flatpickr": "^4.6.9", + "imask": "^7.6.1", "raw-loader": "^4.0.2", "stimulus-dropdown": "^2.0.0", "stimulus-use": "^0.51.1", diff --git a/src/Resources/assets/yarn.lock b/src/Resources/assets/yarn.lock index abbcf16..1fab689 100644 --- a/src/Resources/assets/yarn.lock +++ b/src/Resources/assets/yarn.lock @@ -2,6 +2,14 @@ # yarn lockfile v1 +"@babel/runtime-corejs3@^7.24.4": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.24.8.tgz#c0ae5a1c380f8442920866d0cc51de8024507e28" + integrity sha512-DXG/BhegtMHhnN7YPIvxWd303/9aXvYFD1TjNL3CD6tUrhI2LVsg3Lck0aql5TRH29n4sj3emcROypkZVUfSuA== + dependencies: + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" + "@easepick/amp-plugin@^1.1.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@easepick/amp-plugin/-/amp-plugin-1.2.1.tgz#6d189d0a429721da082d8e8fe8d45dd0df3b76d1" @@ -121,6 +129,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +core-js-pure@^3.30.2: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.37.1.tgz#2b4b34281f54db06c9a9a5bd60105046900553bd" + integrity sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA== + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -146,6 +159,13 @@ hotkeys-js@>=3: resolved "https://registry.yarnpkg.com/hotkeys-js/-/hotkeys-js-3.9.5.tgz#8314d0522bf2601e36003213047e9dc7d56d19fe" integrity sha512-T0G8CUZ6Q1IOgPnLK1hDXR8DqgKF/VWEsHvZgi6CM7Ub9oOAzvWuJ3Qhc/9nFQaR26MfFOZSwULHrtCnsUX7zA== +imask@^7.6.1: + version "7.6.1" + resolved "https://registry.yarnpkg.com/imask/-/imask-7.6.1.tgz#04fa4693bf47a4a71bbf7325408e0d058a74dcad" + integrity sha512-sJlIFM7eathUEMChTh9Mrfw/IgiWgJqBKq2VNbyXvBZ7ev/IlO6/KQTKlV/Fm+viQMLrFLG/zCuudrLIwgK2dg== + dependencies: + "@babel/runtime-corejs3" "^7.24.4" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -178,6 +198,11 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + schema-utils@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" From 59e27460c26c113588e2c94e2f20e92768a3cf5c Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Tue, 23 Jul 2024 16:34:01 +0200 Subject: [PATCH 17/28] fix: lazyload some stimulus controllers --- src/Resources/assets/package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Resources/assets/package.json b/src/Resources/assets/package.json index c54db7c..e31c0bd 100644 --- a/src/Resources/assets/package.json +++ b/src/Resources/assets/package.json @@ -6,19 +6,19 @@ "combobox": { "main": "controllers/combobox_controller.js", "webpackMode": "eager", - "fetch": "eager", + "fetch": "lazy", "enabled": true }, "datetime": { "main": "controllers/datetime_controller.js", "webpackMode": "eager", - "fetch": "eager", + "fetch": "lazy", "enabled": true }, "input-mask": { "main": "controllers/input-mask_controller.js", "webpackMode": "eager", - "fetch": "eager", + "fetch": "lazy", "enabled": true }, "dropdown": { @@ -30,7 +30,7 @@ "modal-form": { "main": "controllers/modal-form_controller.js", "webpackMode": "eager", - "fetch": "eager", + "fetch": "lazy", "enabled": true }, "reload-content": { @@ -42,7 +42,7 @@ "modal": { "main": "controllers/modal_controller.js", "webpackMode": "eager", - "fetch": "eager", + "fetch": "lazy", "enabled": true } } From b757138cc1113e2627b39b4c77763c67ff466922 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Tue, 23 Jul 2024 16:36:27 +0200 Subject: [PATCH 18/28] docs: add information from where this code is coming from --- src/Resources/views/includes/_action.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/views/includes/_action.html.twig b/src/Resources/views/includes/_action.html.twig index 9fed497..ac89f79 100644 --- a/src/Resources/views/includes/_action.html.twig +++ b/src/Resources/views/includes/_action.html.twig @@ -191,7 +191,7 @@ {{ stimulus_action('araise/core-bundle/modal-form', 'close', 'click') | stimulus_action('araise/core-bundle/modal-form', 'close', 'keydown.esc@window') }} > - {# This element is to trick the browser into centering the modal contents. #} + {# This element is to trick the browser into centering the modal contents. Code is coming from Tailwind UI #}
From a67202345addacc7bfac3cc1c0efbc1dc3b9f089 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Tue, 23 Jul 2024 18:19:52 +0200 Subject: [PATCH 19/28] refactor: load `imask` async when the controller is connected to the DOM --- src/Resources/assets/controllers/input-mask_controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Resources/assets/controllers/input-mask_controller.js b/src/Resources/assets/controllers/input-mask_controller.js index e2bcade..75e3c7c 100644 --- a/src/Resources/assets/controllers/input-mask_controller.js +++ b/src/Resources/assets/controllers/input-mask_controller.js @@ -1,5 +1,4 @@ import { Controller } from "@hotwired/stimulus" -import IMask from "imask" const typeMapping = { 'Number': Number, @@ -12,7 +11,8 @@ export default class extends Controller { thousandsSeparator: { type: String, default: '\'' }, normalizeZeros: { type: Boolean, default: false }, }; - connect() { + async connect() { + const { default: IMask } = await import('imask'); this.mask = IMask(this.element, { mask: typeMapping[this.maskValue] || this.maskValue, scale: this.scaleValue, From ab2547cf71724eab39360fe6748d387be750a658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20R=C3=BCfenacht?= Date: Thu, 18 Jul 2024 17:00:32 +0200 Subject: [PATCH 20/28] feat: add BadgeFormatter to generate badges --- src/Formatter/BadgeFormatter.php | 57 ++++++++++++ src/Resources/views/formatter/badge.html.twig | 18 ++++ tests/App/config/routes/annotations.yaml | 4 - tests/BadgeFormatterTest.php | 88 +++++++++++++++++++ 4 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 src/Formatter/BadgeFormatter.php create mode 100644 src/Resources/views/formatter/badge.html.twig create mode 100644 tests/BadgeFormatterTest.php diff --git a/src/Formatter/BadgeFormatter.php b/src/Formatter/BadgeFormatter.php new file mode 100644 index 0000000..1a26fa1 --- /dev/null +++ b/src/Formatter/BadgeFormatter.php @@ -0,0 +1,57 @@ +twig->render($this->options[self::OPT_TEMPLATE], [ + 'value' => $value, + 'type' => $this->options[self::OPT_TYPE], + 'background_color_class' => $this->options[self::OPT_BACKGROUND_COLOR_CLASS], + 'background_color_hex' => $this->options[self::OPT_BACKGROUND_COLOR_HEX], + 'link' => $this->options[self::OPT_LINK], + ]); + } + + protected function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefault(self::OPT_TEMPLATE, '@araiseCore/formatter/badge.html.twig'); + $resolver->setDefaults([ + self::OPT_BACKGROUND_COLOR_CLASS => null, + self::OPT_BACKGROUND_COLOR_HEX => null, + self::OPT_TYPE => '', + self::OPT_LINK => null, + ]); + + $resolver->setAllowedTypes(self::OPT_BACKGROUND_COLOR_CLASS, ['string', 'null']); + $resolver->setAllowedTypes(self::OPT_BACKGROUND_COLOR_HEX, ['string', 'null']); + $resolver->setAllowedTypes(self::OPT_TYPE, 'string'); + $resolver->setAllowedTypes(self::OPT_LINK, ['string', 'null']); + + $resolver->setAllowedValues(self::OPT_TYPE, [ + 'primary', + 'neutral', + 'error', + 'warning', + 'success', + ]); + } +} diff --git a/src/Resources/views/formatter/badge.html.twig b/src/Resources/views/formatter/badge.html.twig new file mode 100644 index 0000000..663805b --- /dev/null +++ b/src/Resources/views/formatter/badge.html.twig @@ -0,0 +1,18 @@ +{% set classes = [] %} +{% if background_color_hex|default %} + {% set classes = classes|merge(["bg-[#{background_color_hex}]"]) %} +{% endif %} + +{% if background_color_class|default %} + {% set classes = classes|merge([background_color_class]) %} +{% endif %} + +{% if link != '' %} + + {{ value }} + +{% else %} +

+ {{ value }} +

+{% endif %} diff --git a/tests/App/config/routes/annotations.yaml b/tests/App/config/routes/annotations.yaml index cad16e3..2f78f64 100644 --- a/tests/App/config/routes/annotations.yaml +++ b/tests/App/config/routes/annotations.yaml @@ -1,7 +1,3 @@ -controllers: - resource: ../../../../src/Controller/ - type: attribute - kernel: resource: ../../Kernel.php type: attribute diff --git a/tests/BadgeFormatterTest.php b/tests/BadgeFormatterTest.php new file mode 100644 index 0000000..ec6bb6b --- /dev/null +++ b/tests/BadgeFormatterTest.php @@ -0,0 +1,88 @@ +getFormatter(BadgeFormatter::class); + $badgeFormatter->processOptions([ + BadgeFormatter::OPT_TYPE => 'error', + ]); + $html = $badgeFormatter->getHtml('test'); + + $expected = '

+ test +

'; + + $this->assertSame(trim($expected), trim($html)); + } + + public function testGetHtmlWithLink(): void + { + $badgeFormatter = $this->getFormatter(BadgeFormatter::class); + $badgeFormatter->processOptions([ + BadgeFormatter::OPT_TYPE => 'error', + BadgeFormatter::OPT_LINK => 'https://www.whatwedo.ch', + ]); + $html = $badgeFormatter->getHtml('test'); + + $expected = ' + test + '; + + $this->assertSame(trim($expected), trim($html)); + } + + public function testGetHtmlWithColorClass(): void + { + $badgeFormatter = $this->getFormatter(BadgeFormatter::class); + $badgeFormatter->processOptions([ + BadgeFormatter::OPT_TYPE => 'error', + BadgeFormatter::OPT_BACKGROUND_COLOR_CLASS => 'bg-red-500', + ]); + $html = $badgeFormatter->getHtml('test'); + + $expected = '

+ test +

'; + + $this->assertSame(trim($expected), trim($html)); + } + + public function testGetHtmlWithColorHex(): void + { + $badgeFormatter = $this->getFormatter(BadgeFormatter::class); + $badgeFormatter->processOptions([ + BadgeFormatter::OPT_TYPE => 'error', + BadgeFormatter::OPT_BACKGROUND_COLOR_HEX => '#ff0000', + ]); + $html = $badgeFormatter->getHtml('test'); + + $expected = '

+ test +

'; + + $this->assertSame(trim($expected), trim($html)); + } + + public function testGetHtmlWithColorClassAndHex(): void + { + $badgeFormatter = $this->getFormatter(BadgeFormatter::class); + $badgeFormatter->processOptions([ + BadgeFormatter::OPT_TYPE => 'error', + BadgeFormatter::OPT_BACKGROUND_COLOR_CLASS => 'bg-red-500', + BadgeFormatter::OPT_BACKGROUND_COLOR_HEX => '#ff0000', + ]); + $html = $badgeFormatter->getHtml('test'); + + $expected = '

+ test +

'; + + $this->assertSame(trim($expected), trim($html)); + } +} From fb6fc183df6be3ba345be6ab40502d058fd2759e Mon Sep 17 00:00:00 2001 From: tuxes3 Date: Mon, 29 Jul 2024 17:11:34 +0200 Subject: [PATCH 21/28] fix(money-input-mask): do not set thousandsSeparator per default --- src/Resources/assets/controllers/input-mask_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/assets/controllers/input-mask_controller.js b/src/Resources/assets/controllers/input-mask_controller.js index 75e3c7c..dffaab1 100644 --- a/src/Resources/assets/controllers/input-mask_controller.js +++ b/src/Resources/assets/controllers/input-mask_controller.js @@ -8,7 +8,7 @@ export default class extends Controller { mask: String, scale: { type: Number, default: 2 }, radix: { type: String, default: '.' }, - thousandsSeparator: { type: String, default: '\'' }, + thousandsSeparator: { type: String, default: '' }, normalizeZeros: { type: Boolean, default: false }, }; async connect() { From 88d7a1c81afd5e358302b1656911796a00735706 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Wed, 18 Sep 2024 14:42:24 +0800 Subject: [PATCH 22/28] fix: set darker color to link and make it more important #99 --- src/Resources/assets/styles/_tailwind.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index e881ddc..83c92bc 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -52,6 +52,7 @@ .whatwedo-utility-link { @extend .whatwedo-utility-heading-4; + @apply text-neutral-800; text-decoration: underline solid transparent; text-underline-offset: 0.2em; text-decoration-thickness: 1px; From fab70e3ca8a6fd7a9312ab820082ef2ea802f8c3 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 19 Sep 2024 14:15:21 +0800 Subject: [PATCH 23/28] fix: set correct default value for number masking --- src/Resources/assets/controllers/input-mask_controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resources/assets/controllers/input-mask_controller.js b/src/Resources/assets/controllers/input-mask_controller.js index dffaab1..75e3c7c 100644 --- a/src/Resources/assets/controllers/input-mask_controller.js +++ b/src/Resources/assets/controllers/input-mask_controller.js @@ -8,7 +8,7 @@ export default class extends Controller { mask: String, scale: { type: Number, default: 2 }, radix: { type: String, default: '.' }, - thousandsSeparator: { type: String, default: '' }, + thousandsSeparator: { type: String, default: '\'' }, normalizeZeros: { type: Boolean, default: false }, }; async connect() { From 2d09e9d08b16c64fbc512d05fe677eb28cf960c4 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 19 Sep 2024 16:03:05 +0800 Subject: [PATCH 24/28] feat: add min/max value to pass into imask.js --- src/Resources/assets/controllers/input-mask_controller.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Resources/assets/controllers/input-mask_controller.js b/src/Resources/assets/controllers/input-mask_controller.js index 75e3c7c..0641ddc 100644 --- a/src/Resources/assets/controllers/input-mask_controller.js +++ b/src/Resources/assets/controllers/input-mask_controller.js @@ -10,6 +10,8 @@ export default class extends Controller { radix: { type: String, default: '.' }, thousandsSeparator: { type: String, default: '\'' }, normalizeZeros: { type: Boolean, default: false }, + min: Number, + max: Number, }; async connect() { const { default: IMask } = await import('imask'); @@ -19,6 +21,8 @@ export default class extends Controller { radix: this.radixValue, thousandsSeparator: this.thousandsSeparatorValue, normalizeZeros: this.normalizeZerosValue, + min: this.hasMinValue ? this.minValue : null, + max: this.hasMaxValue ? this.maxValue : null, }); } disconnect() { From be65de3cc66e612b19f54b1886985adb6b727743 Mon Sep 17 00:00:00 2001 From: tuxes3 Date: Mon, 7 Oct 2024 11:42:03 +0200 Subject: [PATCH 25/28] feat(badge-formatter): added configuration option which allows changing options for each value --- src/Formatter/BadgeFormatter.php | 11 +++++++---- src/Resources/views/formatter/badge.html.twig | 4 ++-- tests/BadgeFormatterTest.php | 10 +++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Formatter/BadgeFormatter.php b/src/Formatter/BadgeFormatter.php index 1a26fa1..0a187ca 100644 --- a/src/Formatter/BadgeFormatter.php +++ b/src/Formatter/BadgeFormatter.php @@ -15,6 +15,8 @@ class BadgeFormatter extends TwigFormatter public const OPT_LINK = 'link'; + public const OPT_CONFIGURATION = 'configuration'; + public function getString(mixed $value): string { return StringConverter::toString($value); @@ -22,8 +24,9 @@ public function getString(mixed $value): string public function getHtml(mixed $value): string { + $this->processOptions(($this->options[self::OPT_CONFIGURATION])($value, $this->options)); return $this->twig->render($this->options[self::OPT_TEMPLATE], [ - 'value' => $value, + 'value' => $this->getString($value), 'type' => $this->options[self::OPT_TYPE], 'background_color_class' => $this->options[self::OPT_BACKGROUND_COLOR_CLASS], 'background_color_hex' => $this->options[self::OPT_BACKGROUND_COLOR_HEX], @@ -37,15 +40,15 @@ protected function configureOptions(OptionsResolver $resolver): void $resolver->setDefaults([ self::OPT_BACKGROUND_COLOR_CLASS => null, self::OPT_BACKGROUND_COLOR_HEX => null, - self::OPT_TYPE => '', + self::OPT_TYPE => 'neutral', self::OPT_LINK => null, + self::OPT_CONFIGURATION => static fn (mixed $value, array $options): array => $options, ]); - $resolver->setAllowedTypes(self::OPT_BACKGROUND_COLOR_CLASS, ['string', 'null']); $resolver->setAllowedTypes(self::OPT_BACKGROUND_COLOR_HEX, ['string', 'null']); $resolver->setAllowedTypes(self::OPT_TYPE, 'string'); $resolver->setAllowedTypes(self::OPT_LINK, ['string', 'null']); - + $resolver->setAllowedTypes(self::OPT_CONFIGURATION, 'callable'); $resolver->setAllowedValues(self::OPT_TYPE, [ 'primary', 'neutral', diff --git a/src/Resources/views/formatter/badge.html.twig b/src/Resources/views/formatter/badge.html.twig index 663805b..48e4ef8 100644 --- a/src/Resources/views/formatter/badge.html.twig +++ b/src/Resources/views/formatter/badge.html.twig @@ -8,11 +8,11 @@ {% endif %} {% if link != '' %} - + {{ value }} {% else %} -

+

{{ value }}

{% endif %} diff --git a/tests/BadgeFormatterTest.php b/tests/BadgeFormatterTest.php index ec6bb6b..278894d 100644 --- a/tests/BadgeFormatterTest.php +++ b/tests/BadgeFormatterTest.php @@ -14,7 +14,7 @@ public function testGetHtml(): void ]); $html = $badgeFormatter->getHtml('test'); - $expected = '

+ $expected = '

test

'; @@ -30,7 +30,7 @@ public function testGetHtmlWithLink(): void ]); $html = $badgeFormatter->getHtml('test'); - $expected = ' + $expected = ' test '; @@ -46,7 +46,7 @@ public function testGetHtmlWithColorClass(): void ]); $html = $badgeFormatter->getHtml('test'); - $expected = '

+ $expected = '

test

'; @@ -62,7 +62,7 @@ public function testGetHtmlWithColorHex(): void ]); $html = $badgeFormatter->getHtml('test'); - $expected = '

+ $expected = '

test

'; @@ -79,7 +79,7 @@ public function testGetHtmlWithColorClassAndHex(): void ]); $html = $badgeFormatter->getHtml('test'); - $expected = '

+ $expected = '

test

'; From 1bcb71376f7489b0eb6589adf15618e9897b85e6 Mon Sep 17 00:00:00 2001 From: tuxes3 Date: Tue, 8 Oct 2024 13:14:06 +0200 Subject: [PATCH 26/28] chore: added Changelog for v1.2.0 --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8060a63..cb7a670 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # CHANGELOG +## v1.2.0 + - Removed symfony ^5.4 support + - Introduced `FlashBagExecption` to handle flash messages in a more flexible way + - Introduced `BadgeFormatter` to display badges in a standardized way + - Improved `datetime_controller.js` to handle more date formats + - Introduced `input-mask_controller.js` to handle input masks like Money or Security-Numbers + ## v1.0.6 - More documentation and better styling of the documentation - Deprecated methods `getContainer` and `get` of `BaseCommand` From cb2863c6105aab1d1a34ca4f7234388624ee870a Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 5 Dec 2024 13:42:42 +0700 Subject: [PATCH 27/28] feat(badge): add a badge for action button and include utility classes for more straightforward reference --- src/Resources/assets/styles/_tailwind.scss | 16 ++++++++++++++++ src/Resources/views/includes/_action.html.twig | 7 ++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index 83c92bc..a0201a0 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -105,6 +105,18 @@ } } + .whatwedo-utility-button-badge { + @apply inline-flex items-center rounded-full px-2 py-0.5 ml-2 text-xs font-medium bg-primary-500 text-white; + + &--primary { + @apply bg-primary-500 text-white; + } + + &--white { + @apply bg-white text-primary-500; + } + } + // Topbar .whatwedo-utility-topbar { @apply flex flex-grow-0 flex-auto px-4 py-2 md:py-4 md:min-h-[71px] justify-end items-center lg:justify-between; @@ -212,6 +224,10 @@ @apply text-neutral-700 bg-transparent hover:bg-neutral-200 font-semibold; } } + + .whatwedo-utility-button-badge--white { + @extend .whatwedo-utility-button-badge--primary; + } } /* TomSelect */ diff --git a/src/Resources/views/includes/_action.html.twig b/src/Resources/views/includes/_action.html.twig index ac89f79..462f7c1 100644 --- a/src/Resources/views/includes/_action.html.twig +++ b/src/Resources/views/includes/_action.html.twig @@ -65,7 +65,12 @@ class: 'inline h-4 w-4'~(not actionLabel is empty ? ' mr-2' : '') }) }} {% endif %} - {{ actionLabel }} + + {{ actionLabel }} + {% if action.option('attr')['count'] is defined %} + {{ action.option('attr')['count'] }} + {% endif %} + {% endif %} {% endblock %} From a1ba49caf6a749c7ee4a757fe2acedc0e3122283 Mon Sep 17 00:00:00 2001 From: Marc Wieland Date: Thu, 5 Dec 2024 14:12:47 +0700 Subject: [PATCH 28/28] fix(badge): improve styling for badge --- src/Resources/assets/styles/_tailwind.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Resources/assets/styles/_tailwind.scss b/src/Resources/assets/styles/_tailwind.scss index a0201a0..07f6915 100644 --- a/src/Resources/assets/styles/_tailwind.scss +++ b/src/Resources/assets/styles/_tailwind.scss @@ -83,6 +83,7 @@ // Badges .whatwedo-utility-badge { @apply inline-flex items-center rounded-full px-2 py-1 text-xs font-medium bg-primary-500 text-white; + text-wrap: nowrap; &--success { @apply bg-success-500; @@ -107,6 +108,7 @@ .whatwedo-utility-button-badge { @apply inline-flex items-center rounded-full px-2 py-0.5 ml-2 text-xs font-medium bg-primary-500 text-white; + text-wrap: nowrap; &--primary { @apply bg-primary-500 text-white;