286 lines
6.0 KiB
SCSS
286 lines
6.0 KiB
SCSS
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
@use '../../mixins';
|
|
@use '../../variables';
|
|
@use './FunConstants.scss';
|
|
|
|
$scroller-mask: FunConstants.$Fun__BgColor;
|
|
$button-size: 32px;
|
|
$button-radius: 10px;
|
|
$icon-size: 20px;
|
|
$image-size: 26px;
|
|
$image-margin: calc(($button-size - $image-size) / 2);
|
|
$image-radius: $button-radius - $image-margin;
|
|
|
|
.FunSubNav__Container {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.FunSubNav__Scroller {
|
|
position: relative;
|
|
flex: 1;
|
|
min-width: 0;
|
|
|
|
&::before,
|
|
&::after {
|
|
content: '';
|
|
z-index: 1;
|
|
display: block;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
top: 0;
|
|
width: 6px;
|
|
height: 100%;
|
|
}
|
|
|
|
&::before {
|
|
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
left: 0;
|
|
background: linear-gradient(to right, $scroller-mask 20%, transparent);
|
|
}
|
|
|
|
&::after {
|
|
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
right: 0;
|
|
background: linear-gradient(to left, $scroller-mask 20%, transparent);
|
|
}
|
|
}
|
|
|
|
.FunSubNav__ScrollerMask {
|
|
content: '';
|
|
z-index: 1;
|
|
display: block;
|
|
pointer-events: none;
|
|
position: absolute;
|
|
top: 0;
|
|
width: 40px;
|
|
height: 100%;
|
|
}
|
|
|
|
.FunSubNav__ScrollerMask--Left {
|
|
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
left: 0;
|
|
background: linear-gradient(to right, $scroller-mask 20%, transparent);
|
|
}
|
|
|
|
.FunSubNav__ScrollerMask--Right {
|
|
/* stylelint-disable-next-line liberty/use-logical-spec */
|
|
right: 0;
|
|
background: linear-gradient(to left, $scroller-mask 20%, transparent);
|
|
}
|
|
|
|
.FunSubNav__ScrollerViewport {
|
|
position: relative;
|
|
z-index: 0;
|
|
overflow-x: auto;
|
|
overflow-y: clip;
|
|
scroll-behavior: smooth;
|
|
scrollbar-width: none;
|
|
scroll-padding: 100px;
|
|
// Handled by .FunPicker__SubNavScroller
|
|
outline: none;
|
|
}
|
|
|
|
.FunSubNav__ScrollerViewportInner {
|
|
position: relative;
|
|
display: inline flow-root;
|
|
}
|
|
|
|
.FunSubNav__Buttons {
|
|
display: flex;
|
|
padding-block: 6px;
|
|
z-index: 1;
|
|
|
|
&:first-of-type {
|
|
padding-inline-start: 6px;
|
|
}
|
|
|
|
&:last-of-type {
|
|
padding-inline-end: 6px;
|
|
}
|
|
}
|
|
|
|
.FunSubNav__Button {
|
|
@include mixins.button-reset();
|
|
& {
|
|
position: relative;
|
|
display: flex;
|
|
flex-shrink: 0;
|
|
width: $button-size;
|
|
height: $button-size;
|
|
background: transparent;
|
|
border-radius: $button-radius;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
&:hover {
|
|
background: light-dark(variables.$color-gray-02, variables.$color-gray-78);
|
|
}
|
|
|
|
&:focus {
|
|
outline: none;
|
|
@include mixins.keyboard-mode {
|
|
outline: 2px solid variables.$color-ultramarine;
|
|
}
|
|
}
|
|
}
|
|
|
|
.FunSubNav__ListBox {
|
|
display: flex;
|
|
padding-block: 6px;
|
|
flex: 1;
|
|
}
|
|
|
|
.FunSubNav__ListBoxItem {
|
|
position: relative;
|
|
flex: 1;
|
|
padding: 1px;
|
|
cursor: pointer;
|
|
|
|
&:focus {
|
|
// Handled by .FunSubNav__ListBoxItem__ButtonIndicator
|
|
outline: none;
|
|
}
|
|
|
|
&:first-of-type {
|
|
padding-inline-start: 6px;
|
|
}
|
|
|
|
&:last-of-type {
|
|
padding-inline-end: 6px;
|
|
}
|
|
}
|
|
|
|
.FunSubNav__ListBoxItem__TooltipTarget {
|
|
display: block;
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: 2;
|
|
}
|
|
|
|
.FunSubNav__ListBoxItem__Button {
|
|
position: relative;
|
|
display: flex;
|
|
width: $button-size;
|
|
height: $button-size;
|
|
background: transparent;
|
|
border-radius: $button-radius;
|
|
align-items: center;
|
|
justify-content: center;
|
|
|
|
.FunSubNav__ListBoxItem:hover & {
|
|
background: light-dark(variables.$color-gray-02, variables.$color-gray-78);
|
|
}
|
|
}
|
|
|
|
.FunSubNav__ListBoxItem__ButtonIndicator {
|
|
z-index: 0;
|
|
position: absolute;
|
|
border-radius: $button-radius;
|
|
top: 0;
|
|
inset-inline-start: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
background: light-dark(variables.$color-gray-05, variables.$color-gray-60);
|
|
|
|
.FunSubNav__ListBoxItem[data-focused='true'] & {
|
|
outline: none;
|
|
@include mixins.keyboard-mode {
|
|
outline: 2px solid variables.$color-ultramarine;
|
|
}
|
|
}
|
|
}
|
|
|
|
.FunSubNav__ListBoxItem__ButtonIcon {
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.FunSubNav__Icon {
|
|
width: $icon-size;
|
|
height: $icon-size;
|
|
}
|
|
|
|
@mixin icon($svg) {
|
|
@include mixins.color-svg(
|
|
$svg,
|
|
light-dark(variables.$color-black-alpha-50, variables.$color-white-alpha-50)
|
|
);
|
|
}
|
|
|
|
/* Shared */
|
|
.FunSubNav__Icon--Recents {
|
|
@include icon('../images/icons/v3/recent/recent.svg');
|
|
}
|
|
|
|
/* Emoji */
|
|
.FunSubNav__Icon--SmileysAndPeople {
|
|
@include icon('../images/icons/v3/emoji/emoji.svg');
|
|
}
|
|
.FunSubNav__Icon--AnimalsAndNature {
|
|
@include icon('../images/icons/v3/emoji/emoji-animal.svg');
|
|
}
|
|
.FunSubNav__Icon--FoodAndDrink {
|
|
@include icon('../images/icons/v3/emoji/emoji-food.svg');
|
|
}
|
|
.FunSubNav__Icon--Activities {
|
|
@include icon('../images/icons/v3/emoji/emoji-activity.svg');
|
|
}
|
|
.FunSubNav__Icon--TravelAndPlaces {
|
|
@include icon('../images/icons/v3/emoji/emoji-travel.svg');
|
|
}
|
|
.FunSubNav__Icon--Objects {
|
|
@include icon('../images/icons/v3/emoji/emoji-object.svg');
|
|
}
|
|
.FunSubNav__Icon--Symbols {
|
|
@include icon('../images/icons/v3/emoji/emoji-symbol.svg');
|
|
}
|
|
.FunSubNav__Icon--Flags {
|
|
@include icon('../images/icons/v3/emoji/emoji-flag.svg');
|
|
}
|
|
/* Stickers */
|
|
.FunSubNav__Icon--Plus {
|
|
@include icon('../images/icons/v3/plus/plus-circle.svg');
|
|
}
|
|
/* GIFs */
|
|
.FunSubNav__Icon--Trending {
|
|
@include icon('../images/icons/v3/trending/trending.svg');
|
|
}
|
|
.FunSubNav__Icon--Celebrate {
|
|
@include icon('../images/icons/v3/emoji/emoji-celebrate.svg');
|
|
}
|
|
.FunSubNav__Icon--Love {
|
|
@include icon('../images/icons/v3/heart/heart.svg');
|
|
}
|
|
.FunSubNav__Icon--ThumbsUp {
|
|
@include icon('../images/icons/v3/emoji/emoji-thumbs_up.svg');
|
|
}
|
|
.FunSubNav__Icon--Surprised {
|
|
@include icon('../images/icons/v3/emoji/emoji-surprised.svg');
|
|
}
|
|
.FunSubNav__Icon--Excited {
|
|
@include icon('../images/icons/v3/emoji/emoji-excited.svg');
|
|
}
|
|
.FunSubNav__Icon--Sad {
|
|
@include icon('../images/icons/v3/emoji/emoji-sad.svg');
|
|
}
|
|
.FunSubNav__Icon--Angry {
|
|
@include icon('../images/icons/v3/emoji/emoji-angry.svg');
|
|
}
|
|
|
|
.FunSubNav__Image {
|
|
width: $image-size;
|
|
height: $image-size;
|
|
border-radius: $image-radius;
|
|
transform: scale(100%);
|
|
transition: transform 200ms ease;
|
|
|
|
.FunSubNav__ListBoxItem[data-selected='true'] & {
|
|
transform: scale(90%);
|
|
}
|
|
}
|