diff --git a/src/bundle/Resources/public/scss/_extra-actions.scss b/src/bundle/Resources/public/scss/_extra-actions.scss index 580579105..92e5642ad 100644 --- a/src/bundle/Resources/public/scss/_extra-actions.scss +++ b/src/bundle/Resources/public/scss/_extra-actions.scss @@ -12,9 +12,9 @@ background-color: $ibexa-color-white; padding: calculateRem(16px) 0; width: calculateRem(700px); - height: calc(100vh - #{calculateRem(73px)}); + height: calc(100vh - #{calculateRem(64px)}); position: fixed; - top: calculateRem(73px); + top: calculateRem(64px); right: 0; z-index: 200; transform: translate(0, 0) scaleX(1); diff --git a/src/bundle/Resources/public/scss/_global-search.scss b/src/bundle/Resources/public/scss/_global-search.scss index b2091628a..515437071 100644 --- a/src/bundle/Resources/public/scss/_global-search.scss +++ b/src/bundle/Resources/public/scss/_global-search.scss @@ -1,31 +1,26 @@ @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/custom.scss' as *; @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/functions/calculate.rem' as *; +@use '@ibexa-admin-ui-assets/src/bundle/Resources/public/vendors/ids-assets/dist/scss/variables/colors' as *; @use 'sass:color'; .ibexa-global-search { width: 100%; - max-width: calculateRem(600px); + max-width: calculateRem(500px); position: relative; + --ids-mode: dark; --ibexa-input-text-color: #{$ibexa-color-white}; --ibexa-text-color: #{$ibexa-color-white}; .ids-input-text { - --ids-input-default-bg-color: #{color.change($ibexa-color-white, $alpha: 0.1)}; - --ids-input-default-border-color: transparent; - --ids-input-default-text-color: #{$ibexa-color-white}; - --ids-input-hover-border-color: #{$ibexa-color-info-600}; - --ids-input-active-border-color: #{$ibexa-color-info-600}; - --ids-input-focus-border-color: #{$ibexa-color-info-600}; - - &:hover { - .ids-input { - border-color: $ibexa-color-info-600; - } + .ids-input { + --ids-input-hover-border-color: #{$color-primary-50}; + --ids-input-active-border-color: #{$color-primary-50}; + --ids-input-focus-border-color: #{$color-primary-50}; } &:focus-within { .ids-input-text__search-btn { - background: $ibexa-color-info-600; + background: $color-primary-50; .ids-icon { fill: $ibexa-color-white; @@ -35,7 +30,7 @@ &:has(.ibexa-global-search__input:not(:placeholder-shown)) { .ids-input-text__search-btn { - background: $ibexa-color-info-600; + background: $color-primary-50; .ids-icon { fill: $ibexa-color-white; @@ -57,7 +52,7 @@ &:hover { .ids-icon { - fill: $ibexa-color-info; + fill: $color-primary-30; } } @@ -77,56 +72,30 @@ transform: none; .ids-icon { + fill: $ibexa-color-dark-300; + } + + &:hover .ids-icon, + &:focus .ids-icon { fill: $ibexa-color-white; } &:hover { - background: $ibexa-color-info-600; - box-shadow: 0 calculateRem(22px) calculateRem(24px) 0 color.change($ibexa-color-info, $alpha: 0.2); + background: $color-primary-50; + box-shadow: 0 calculateRem(22px) calculateRem(24px) 0 color.change($color-primary-50, $alpha: 0.2); } &:focus { color: $ibexa-color-white; - background: $ibexa-color-info-600; - border-color: $ibexa-color-info-600; + background: $color-primary-50; + border-color: $color-primary-50; box-shadow: 0 0 0 calculateRem(4px) color.change($ibexa-color-white, $alpha: 0.2); } } &__input { height: calculateRem(40px); - padding: calculateRem(4px) calculateRem(56px) calculateRem(4px) calculateRem(16px); - color: $ibexa-color-white; - background: color.change($ibexa-color-white, $alpha: 0.1); - border-color: transparent; - - &:not(:disabled) { - &:hover { - box-shadow: none; - border-color: $ibexa-color-info-600; - } - - &:focus { - color: $ibexa-color-white; - border-color: $ibexa-color-info-600; - background: color.change($ibexa-color-white, $alpha: 0.1); - box-shadow: 0 0 0 calculateRem(4px) color.change($ibexa-color-white, $alpha: 0.2); - } - - &:active, - &:not(:placeholder-shown) { - box-shadow: none; - border-color: $ibexa-color-info-600; - } - } - - &.form-control:focus { - color: $ibexa-color-light; - } - - &::placeholder { - color: $ibexa-color-light; - } + padding: calculateRem(4px) calculateRem(56px) calculateRem(4px) calculateRem(12px); } &__autocomplete-no-results { @@ -169,7 +138,7 @@ &::before { content: ''; - background-color: $ibexa-color-info-200; + background-color: $color-primary-10; width: calc(100% + #{calculateRem(4px)}); height: 100%; display: block; @@ -268,6 +237,7 @@ &__autocomplete { position: absolute; + --ids-mode: light; background-color: $ibexa-color-white; padding: calculateRem(8px); width: 100%; diff --git a/src/bundle/Resources/public/scss/_header-user-menu.scss b/src/bundle/Resources/public/scss/_header-user-menu.scss index c5d6680dc..648a4a714 100644 --- a/src/bundle/Resources/public/scss/_header-user-menu.scss +++ b/src/bundle/Resources/public/scss/_header-user-menu.scss @@ -1,112 +1,268 @@ @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/custom.scss' as *; @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/functions/calculate.rem' as *; +@use '@ibexa-admin-ui-assets/src/bundle/Resources/public/vendors/ids-assets/dist/scss/variables/colors' as *; @use 'sass:color'; .ibexa-header-user-menu { display: flex; justify-content: flex-end; align-items: center; - padding-left: calculateRem(16px); - border-left: calculateRem(1px) solid $ibexa-color-light; + gap: calculateRem(4px); + height: calculateRem(32px); + margin-left: calculateRem(16px); + padding-left: calculateRem(8px); + border-left: calculateRem(1px) solid $color-neutral-200; &__popup-menu { z-index: 1060; - top: calculateRem(53px); - right: calculateRem(20px); - min-width: calculateRem(200px); + top: calculateRem(45px); + right: calculateRem(16px); + width: calculateRem(243px); padding: 0; + gap: 0; + border-color: $color-neutral-70; + border-radius: calculateRem(12px); + box-shadow: calculateRem(4px) calculateRem(32px) calculateRem(47px) 0 color.change($ibexa-color-info, $alpha: 0.1); ul { + display: flex; + flex-direction: column; + gap: calculateRem(8px); margin-bottom: 0; padding: calculateRem(8px); } + + .ibexa-popup-menu__item { + padding: 0; + + &--with-border { + margin-top: calculateRem(8px); + padding-top: calculateRem(8px); + border-top: 0; + position: relative; + + &::before { + content: ''; + position: absolute; + top: 0; + left: calculateRem(8px); + right: calculateRem(8px); + border-top: calculateRem(1px) solid $color-neutral-70; + } + } + } + + .ibexa-popup-menu__item-content { + align-items: center; + gap: calculateRem(8px); + padding: calculateRem(8px) calculateRem(4px) calculateRem(8px) calculateRem(12px); + border-radius: calculateRem(8px); + color: $ibexa-color-black; + + &:hover { + background-color: transparent; + color: $ibexa-color-primary; + + .ibexa-icon { + fill: $ibexa-color-primary; + } + } + + &:active { + color: $color-primary-90; + + .ibexa-icon { + fill: $color-primary-90; + } + } + + &:focus-visible { + outline: none; + box-shadow: 0 0 0 calculateRem(4px) color.change($ibexa-color-primary, $alpha: 0.25); + } + } + } + + &__item-icon { + flex-shrink: 0; + fill: $ibexa-color-black; } &__popup-menu-title { - padding: calculateRem(16px) calculateRem(24px); - border-bottom: calculateRem(1px) solid $ibexa-color-light; - color: $ibexa-color-dark-400; + padding: calculateRem(16px); + border-bottom: calculateRem(1px) solid $color-neutral-70; + } + + &__user { + display: flex; + align-items: center; + gap: calculateRem(5px); + } + + &__user-thumbnail { + display: flex; + flex-shrink: 0; + + .ibexa-user-thumbnail { + width: calculateRem(40px); + height: calculateRem(40px); + } + } + + &__user-details { + display: flex; + flex-direction: column; + min-width: 0; + } + + &__user-name, + &__user-email { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + &__user-name { + color: $ibexa-color-primary; + font-size: $ibexa-text-font-size-medium; + } + + &__user-email { + color: $color-neutral-150; font-size: $ibexa-text-font-size-small; } .ibexa-focus-mode-form { color: $ibexa-color-dark; - margin-top: calculateRem(12px); + padding: calculateRem(8px) calculateRem(12px); + margin: calculateRem(8px) calculateRem(8px) 0; } &__toggler { display: flex; align-items: center; + justify-content: center; position: relative; - margin-left: calculateRem(16px); - padding: calculateRem(2px); - border-radius: calculateRem(12px); + width: calculateRem(32px); + height: calculateRem(32px); + padding: 0; + border-radius: 50%; border: 0; - background: color.change($ibexa-color-white, $alpha: 0.1); + background: transparent; .ibexa-icon { + display: none; fill: $ibexa-color-white; - margin-left: calculateRem(5px); - margin-right: calculateRem(4px); transform: rotate(0deg); transition: all $ibexa-admin-transition-duration $ibexa-admin-transition; } &--expanded { + .ibexa-header-user-menu__thumbnail-wrapper { + background: $ibexa-color-dark-500; + } + .ibexa-icon { transform: rotate(-180deg); } } &:hover { + .ibexa-user-thumbnail { + filter: brightness(0.85); + } + .ibexa-icon { - fill: $ibexa-color-info; + fill: $color-primary-30; + } + } + + &:active { + .ibexa-header-user-menu__thumbnail-wrapper { + background: $ibexa-color-dark-500; + } + } + + &:focus-visible { + outline: none; + + .ibexa-header-user-menu__thumbnail-wrapper { + border-color: $color-neutral-80; + box-shadow: 0 0 0 calculateRem(4px) color.change($ibexa-color-white, $alpha: 0.25); } } } &__thumbnail-wrapper { display: flex; + padding: calculateRem(2px); + border: calculateRem(1px) solid transparent; border-radius: 50%; .ibexa-user-thumbnail { - width: calculateRem(22px); - height: calculateRem(22px); + width: calculateRem(20px); + height: calculateRem(20px); } } &__notifications-toggler { display: flex; - align-items: flex-end; + align-items: center; + justify-content: center; position: relative; - height: calculateRem(24px); - padding-bottom: calculateRem(4px); + width: calculateRem(32px); + height: calculateRem(32px); cursor: pointer; &:hover { .ibexa-icon { - fill: $ibexa-color-info; + fill: $color-primary-30; + } + } + + &:active { + .ibexa-icon { + fill: $color-primary-50; + } + } + + &:focus-visible { + outline: none; + + &::after { + content: ''; + position: absolute; + inset: calculateRem(4px); + border: calculateRem(1px) solid $color-neutral-80; + border-radius: calculateRem(8px); + box-shadow: 0 0 0 calculateRem(4px) color.change($ibexa-color-white, $alpha: 0.25); + pointer-events: none; } } } &__notice-dot { - width: calculateRem(12px); - height: calculateRem(12px); + width: calculateRem(16px); + height: calculateRem(16px); border-radius: 50%; background: $ibexa-color-danger; opacity: 1; cursor: pointer; position: absolute; - left: calculateRem(8px); - top: 0; + // Keeps the count above the toggler's focus-ring overlay, which paints after it + z-index: 1; + left: calculateRem(18px); + top: calculateRem(2px); color: $ibexa-color-white; &::after { display: flex; justify-content: center; + align-items: center; + height: 100%; content: attr(data-count); - font-size: $ibexa-text-font-size-extra-small; + font-size: calculateRem(10px); + line-height: calculateRem(15px); } &--no-notice { diff --git a/src/bundle/Resources/public/scss/_main-container.scss b/src/bundle/Resources/public/scss/_main-container.scss index 013be5c92..8fe305f8b 100644 --- a/src/bundle/Resources/public/scss/_main-container.scss +++ b/src/bundle/Resources/public/scss/_main-container.scss @@ -7,7 +7,7 @@ display: flex; flex-wrap: nowrap; overflow: hidden; - height: calc(100vh - #{calculateRem(72px)}); + height: calc(100vh - #{calculateRem(64px)}); &__content-column { display: flex; diff --git a/src/bundle/Resources/public/scss/_main-header.scss b/src/bundle/Resources/public/scss/_main-header.scss index fb8ec7c2c..77b27c2b4 100644 --- a/src/bundle/Resources/public/scss/_main-header.scss +++ b/src/bundle/Resources/public/scss/_main-header.scss @@ -8,9 +8,8 @@ display: flex; justify-content: space-between; gap: calculateRem(16px); - padding: calculateRem(16px) calculateRem(20px) calculateRem(15px); - background: $ibexa-color-dark; - border-bottom: calculateRem(1px) solid $ibexa-color-dark-500; + padding: calculateRem(12px) calculateRem(16px); + background: $ibexa-color-black; &:has(.modal.show) { z-index: auto; @@ -22,7 +21,7 @@ align-items: center; justify-content: center; flex: 0 0 calculateRem(64px); - margin: calculateRem(-16px) 0 calculateRem(-16px) calculateRem(-20px); + margin: calculateRem(-12px) 0 calculateRem(-12px) calculateRem(-16px); &::before { content: ''; @@ -66,7 +65,7 @@ &__brand-image { max-width: calculateRem(120px); - max-height: calculateRem(32px); + max-height: calculateRem(28px); } &__search-column { diff --git a/src/bundle/Resources/public/scss/_main-menu.scss b/src/bundle/Resources/public/scss/_main-menu.scss index 59e0a3d61..7e6c2d692 100644 --- a/src/bundle/Resources/public/scss/_main-menu.scss +++ b/src/bundle/Resources/public/scss/_main-menu.scss @@ -14,7 +14,7 @@ overflow: hidden; } - @mixin thin-scrollbar($track: $color-neutral-230, $thumb: $color-neutral-200) { + @mixin thin-scrollbar($track: $color-neutral-240, $thumb: $color-neutral-200) { &::-webkit-scrollbar { width: calculateRem(16px); background-color: $track; @@ -37,13 +37,14 @@ } display: flex; - height: calc(100vh - #{calculateRem(72px)}); + height: calc(100vh - #{calculateRem(64px)}); &__navbar { display: flex; flex-direction: column; width: calculateRem(264px); - background-color: $ibexa-color-dark; + background-color: $ibexa-color-black; + border-top: calculateRem(1px) solid $color-neutral-210; overflow-y: hidden; overflow-x: hidden; transition: width $ibexa-admin-transition-duration $ibexa-admin-transition; @@ -101,7 +102,7 @@ align-items: stretch; &--secondary { - border-top: calculateRem(1px) solid $ibexa-color-dark-500; + border-top: calculateRem(1px) solid $color-neutral-210; } } @@ -209,7 +210,7 @@ &--second-level-group { margin: 0; - border-top: calculateRem(1px) solid $ibexa-color-dark-500; + border-top: calculateRem(1px) solid $color-neutral-210; margin-top: calculateRem(8px); margin-left: calculateRem(10px); padding: calculateRem(1px) 0; diff --git a/src/bundle/Resources/public/scss/_preview.scss b/src/bundle/Resources/public/scss/_preview.scss index 5f59ad008..12ef351a9 100644 --- a/src/bundle/Resources/public/scss/_preview.scss +++ b/src/bundle/Resources/public/scss/_preview.scss @@ -7,7 +7,7 @@ &__iframe { iframe { width: 100%; - height: calc(100vh - calculateRem(72px)); + height: calc(100vh - calculateRem(64px)); display: block; margin: 0 auto; transition: all $ibexa-admin-transition-duration $ibexa-admin-transition; diff --git a/src/bundle/Resources/public/scss/_side-panel.scss b/src/bundle/Resources/public/scss/_side-panel.scss index 130cb273c..fae88bac5 100644 --- a/src/bundle/Resources/public/scss/_side-panel.scss +++ b/src/bundle/Resources/public/scss/_side-panel.scss @@ -6,9 +6,9 @@ background-color: $ibexa-color-white; padding: calculateRem(8px) 0; width: calculateRem(516px); - height: calc(100vh - calculateRem(73px)); + height: calc(100vh - calculateRem(64px)); position: fixed; - top: calculateRem(73px); + top: calculateRem(64px); right: 0; z-index: 200; diff --git a/src/bundle/Resources/public/scss/_user-mode-badge.scss b/src/bundle/Resources/public/scss/_user-mode-badge.scss index a8776f9b0..f044a584a 100644 --- a/src/bundle/Resources/public/scss/_user-mode-badge.scss +++ b/src/bundle/Resources/public/scss/_user-mode-badge.scss @@ -1,17 +1,18 @@ @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/custom.scss' as *; @use '@ibexa-admin-ui/src/bundle/Resources/public/scss/functions/calculate.rem' as *; +@use '@ibexa-admin-ui-assets/src/bundle/Resources/public/vendors/ids-assets/dist/scss/variables/colors' as *; .ibexa-user-mode-badge { display: flex; - height: calculateRem(24px); - padding: calculateRem(4px) calculateRem(8px); - margin: 0 calculateRem(24px); + height: calculateRem(20px); + padding: 0 calculateRem(8px); + margin: 0 calculateRem(16px); align-items: center; - border-radius: calculateRem(16px); - border: calculateRem(0.5px) solid $ibexa-color-light-600; - background: $ibexa-color-dark; - color: $ibexa-color-light-600; - font-size: calculateRem(12px); - line-height: calculateRem(18px); + border-radius: calculateRem(12px); + border: calculateRem(1px) solid $color-neutral-210; + background: transparent; + color: $ibexa-color-dark-300; + font-size: calculateRem(10px); + line-height: calculateRem(15px); width: max-content; } diff --git a/src/bundle/Resources/translations/messages.en.xliff b/src/bundle/Resources/translations/messages.en.xliff index 9db925d9e..1aa3dbb19 100644 --- a/src/bundle/Resources/translations/messages.en.xliff +++ b/src/bundle/Resources/translations/messages.en.xliff @@ -671,11 +671,6 @@ Are you sure you want to delete selected URL wildcard(s)? key: url_wildcard.modal.message - - Logged as %userName% - Logged as %userName% - key: user_menu.popup_menu.title - diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig index 782b4094b..d06827aad 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/user.html.twig @@ -8,6 +8,8 @@
@@ -31,16 +33,26 @@
{% block current_user %} - {{ 'user_menu.popup_menu.title'|trans({'%userName%': user.name})|desc('Logged as %userName%') }} - {% endblock %} - - {% block focus_mode_toggle %} - {{ render(controller('Ibexa\\Bundle\\AdminUi\\Controller\\User\\FocusModeController::changeAction', { - returnPath: app.request.attributes.get('semanticPathinfo') - })) }} +
+
+ {% include '@ibexadesign/ui/component/user_thumbnail/user_thumbnail.html.twig' with { + user: user, + } %} +
+
+ {{ user.name }} + {{ user.email }} +
+
{% endblock %}
+ {% block focus_mode_toggle %} + {{ render(controller('Ibexa\\Bundle\\AdminUi\\Controller\\User\\FocusModeController::changeAction', { + returnPath: app.request.attributes.get('semanticPathinfo') + })) }} + {% endblock %} + {{ parent() }}
@@ -65,5 +77,12 @@ {% block linkElement %} {% import _self as knp_menu %} - {{ block('label') }} + + {% if item.getExtra('icon') is not null %} + + + + {% endif %} + {{ block('label') }} + {% endblock %} diff --git a/src/lib/Menu/UserMenuBuilder.php b/src/lib/Menu/UserMenuBuilder.php index dbddb0b11..1ea979d5c 100644 --- a/src/lib/Menu/UserMenuBuilder.php +++ b/src/lib/Menu/UserMenuBuilder.php @@ -70,6 +70,7 @@ public function createStructure(array $options): ItemInterface ], 'extras' => [ 'orderNumber' => 40, + 'icon' => 'user-profile', ], ] ) @@ -81,6 +82,7 @@ public function createStructure(array $options): ItemInterface 'route' => 'ibexa.user_settings.list', 'extras' => [ 'orderNumber' => 50, + 'icon' => 'settings', ], ]) ); @@ -93,6 +95,7 @@ public function createStructure(array $options): ItemInterface ], 'extras' => [ 'orderNumber' => 60, + 'icon' => 'log-out', ], ]) );