.awards { display: flex; flex-wrap: wrap; .emoji-icon { width: 20px; height: 20px; } } .emoji-menu { display: none; position: absolute; top: 0; margin-top: 3px; padding: $gl-padding; z-index: $zindex-dropdown-menu; width: $award-emoji-width; font-size: 14px; background-color: $white; border: 1px solid $border-white-light; border-radius: $border-radius-base; box-shadow: 0 6px 12px $award-emoji-menu-shadow; pointer-events: none; opacity: 0; transform: scale(0.2); transform-origin: 0 -45px; transition: 0.3s cubic-bezier(0.67, 0.06, 0.19, 1.44); transition-property: transform, opacity; &.is-rendered { display: block; } &.is-aligned-right { transform-origin: 100% -45px; } &.is-visible { pointer-events: all; opacity: 1; transform: scale(1); } .emoji-menu-content { height: 300px; overflow-y: scroll; } .disabled { cursor: default; opacity: 0.5; &:hover { transform: none; } } @include media-breakpoint-down(xs) { width: $award-emoji-width-xs; } } .emoji-search { background-image: url('data:image/png;base64,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'); background-repeat: no-repeat; background-position: right 5px center; background-size: 16px; } .emoji-menu-list { margin-bottom: 0; padding-left: 0; list-style: none; } .emoji-menu-list-item { float: left; padding: 3px; margin-left: 1px; margin-right: 1px; } .emoji-menu-btn { display: block; cursor: pointer; width: 30px; height: 30px; padding: 0; background: none; border: 0; border-radius: $border-radius-base; transition: transform 0.15s cubic-bezier(0.3, 0, 0.2, 2); &:hover { background-color: transparent; outline: 0; transform: scale(1.3); } &:focus, &:active { outline: 0; } .emoji-icon { display: inline-block; position: relative; top: 3px; } > gl-emoji { line-height: 1.5; } } .award-menu-holder { display: inline-block; .tooltip { white-space: nowrap; } } .gl-button.btn.award-control { margin: 4px 8px 4px 0; &.disabled { cursor: default; &:hover, &:focus, &:active { background-color: $white; border-color: $border-color; box-shadow: none; } } &.active, &:hover, &:active, &.is-active { .award-control-icon-neutral { opacity: 0; } .award-control-icon-positive { opacity: 1; transform: scale(1.15); } } &.active, &.is-active, &:active { background-color: $blue-50; border-color: $blue-200; box-shadow: inset 0 0 2px $blue-200; } &.is-active { .award-control-icon-positive { opacity: 0; transform: scale(1); } .award-control-icon-super-positive { opacity: 1; transform: scale(1); } } &.user-authored { cursor: default; background-color: $gray-light; border-color: $gray-100; color: $gl-text-color-disabled; gl-emoji { opacity: 0.4; filter: grayscale(100%); } } &.btn { &:focus { outline: 0; } } &.is-loading { .award-control-icon-normal, .emoji-icon { display: none; } .award-control-icon-loading { display: block; } } .icon, gl-emoji, .award-control-icon { vertical-align: middle; line-height: 0.5em; } .award-control-icon-loading { display: none; } .award-control-icon { color: $border-gray-normal; svg { height: $default-icon-size; width: $default-icon-size; border-radius: 50%; fill: $gray-500; } } .award-control-icon-positive, .award-control-icon-super-positive { @include transition(opacity, transform); opacity: 0; position: absolute; path { fill: $award-emoji-positive-add-lines; } } .award-control-text { vertical-align: middle; } } // The following encompasses the "add reaction" button redesign to // align properly within GitLab UI's gl-button. The implementation // above will be deprecated once all instances of "award emoji" are // migrated to Vue. .gl-button .award-emoji-block gl-emoji { margin-top: -1px; margin-bottom: -1px; } .add-reaction-button { position: relative; // This forces the height and width of the inner content to match // other gl-buttons despite all child elements being set to // `position:absolute` &::after { content: '\a0'; display: block !important; width: 1em; color: transparent; } .reaction-control-icon { position: absolute; top: 0; left: 0; height: 100%; width: 100%; // center the icon vertically and horizontally within the button display: flex; align-items: center; justify-content: center; @include transition(opacity, transform); .gl-icon { height: $default-icon-size; width: $default-icon-size; } } .reaction-control-icon-neutral { opacity: 1; } .reaction-control-icon-positive, .reaction-control-icon-super-positive { opacity: 0; } &:hover, &.active, &:active, &.is-active { // extra specificty added to override another selector .reaction-control-icon .gl-icon { color: $blue-500; transform: scale(1.15); } .reaction-control-icon-neutral { opacity: 0; } } &:hover { .reaction-control-icon-positive { opacity: 1; } } &.active, &:active, &.is-active { .reaction-control-icon-positive { opacity: 0; } .reaction-control-icon-super-positive { opacity: 1; } } &.disabled { cursor: default; &:hover, &:focus, &:active { .reaction-control-icon .gl-icon { color: inherit; transform: scale(1); } .reaction-control-icon-neutral { opacity: 1; } .reaction-control-icon-positive, .reaction-control-icon-super-positive { opacity: 0; } } } } .awards .is-active { box-shadow: inset 0 0 0 1px $blue-200; }