@dialpad/dialtone-css
Version:
Dialpad's design system
468 lines (400 loc) • 14.2 kB
text/less
.d-recipe-leftbar-row {
// ============================================================================
// $ CSS CUSTOM PROPERTIES
// ----------------------------------------------------------------------------
--leftbar-row-color-foreground: var(--dt-shell-color-foreground-primary);
--leftbar-row-color-background: var(--dt-shell-color-surface-default);
--leftbar-row-radius: var(--dt-size-radius-pill);
--leftbar-row-opacity: 100%;
--leftbar-row-alpha-color-foreground: var(--dt-shell-color-foreground-primary);
--leftbar-row-alpha-width: calc(var(--dt-size-300) * 10);
--leftbar-row-alpha-height: calc(var(--dt-size-300) * 9);
--leftbar-row-omega-height: var(--leftbar-row-alpha-height);
--leftbar-row-unread-badge-display: inline-flex;
--leftbar-row-description-color-foreground: var(--dt-shell-color-foreground-primary);
--leftbar-row-description-font-weight: var(--dt-font-weight-normal);
--leftbar-row-description-font-size: var(--dt-font-size-200);
--leftbar-row-description-line-height: var(--dt-font-line-height-200);
--leftbar-row-status-color-foreground: var(--dt-shell-color-foreground-muted);
--leftbar-row-status-font-size: var(--dt-font-size-100);
--leftbar-row-status-line-height: var(--dt-font-line-height-100);
--leftbar-row-action-position-right: var(--dt-size-400);
--leftbar-row-action-position-bottom: 50%;
--leftbar-row-action-width: var(--dt-size-550);
--leftbar-row-action-height: var(--leftbar-row-action-width);
.d-presence {
// Presence colors in shell have specific tokens
--presence-color-border-offline: var(--dt-shell-presence-color-offline);
--presence-color-background-active: var(--dt-shell-presence-color-available);
--presence-color-background-busy: var(--dt-shell-presence-color-unavailable);
--presence-color-background-away: var(--dt-shell-presence-color-busy);
}
// ============================================================================
// $ BASE STYLE
// ----------------------------------------------------------------------------
position: relative;
display: flex;
background-color: var(--dt-shell-color-surface-default);
border-radius: var(--leftbar-row-radius);
cursor: pointer;
opacity: var(--leftbar-row-opacity);
transition-timing-function: var(--ttf-out-quint);
transition-duration: var(--td200);
transition-property: background-color, border, box-shadow;
// ============================================================================
// $ VARIANTS
// ----------------------------------------------------------------------------
//
// <div class="d-recipe-leftbar-row d-recipe-leftbar-row--{$VARIANT}">
// ...
// </div>
//
&:not(.d-recipe-leftbar-row--no-action):hover,
&:not(.d-recipe-leftbar-row--no-action):focus-within {
--leftbar-row-unread-badge-display: none;
.d-recipe-leftbar-row__action {
display: inline-flex;
}
.d-recipe-leftbar-row__action-button {
opacity: 1;
}
}
&:hover,
&:focus-within {
--leftbar-row-color-background: var(--dt-shell-action-color-background-primary-hover);
.d-presence {
// TODO: Remove this once @jeverhart-dialpad's DLT-2665 PR
--presence-color-border-base: var(--dt-color-black-200);
}
.d-avatar__count {
// TODO: Remove this once @jeverhart-dialpad's DLT-2665 PR
--avatar-count-color-shadow: var(--dt-shell-action-color-background-primary-selected);
}
}
// ============================================================================
// $ LABEL'S ELEMENTS
// ----------------------------------------------------------------------------
//
// <div class="d-recipe-leftbar-row__description">
// ...
// </div>
// <div class="d-recipe-leftbar-row__status">
// <span class="d-recipe-leftbar-row__meta-context ...">...</span>
// <span class="d-recipe-leftbar-row__meta-custom">...</span>
// </div>
//
&__description {
overflow: hidden;
color: var(--leftbar-row-description-color-foreground);
font-weight: var(--leftbar-row-description-font-weight);
font-size: var(--leftbar-row-description-font-size);
line-height: var(--leftbar-row-description-line-height);
white-space: nowrap;
text-overflow: ellipsis;
}
&__status {
padding-bottom: var(--dt-space-100);
overflow: hidden;
color: var(--leftbar-row-status-color-foreground);
font-size: var(--leftbar-row-status-font-size);
line-height: var(--leftbar-row-status-line-height);
white-space: nowrap;
text-overflow: ellipsis;
}
&__meta-context ~ &__meta-custom:not(:empty)::before {
color: var(--dt-shell-color-foreground-muted);
content: " • ";
}
&--has-unread {
--leftbar-row-description-font-weight: var(--dt-font-weight-bold);
--leftbar-row-description-color-foreground: var(--dt-shell-color-foreground-strong);
--leftbar-row-alpha-color-foreground: var(--dt-shell-color-foreground-strong);
}
&--muted {
--leftbar-row-opacity: 60%;
}
&--selected {
--leftbar-row-color-background: var(--dt-shell-action-color-background-primary-selected);
--leftbar-row-description-color-foreground: var(--dt-shell-action-color-foreground-primary-selected);
.d-presence {
--presence-color-border-base: var(--dt-color-black-200);
}
.d-avatar__count {
--avatar-count-color-shadow: var(--dt-shell-action-color-background-primary-selected);
}
}
&__is-typing {
--is-typing-size-shape: var(--dt-size-550);
position: absolute;
display: flex;
gap: var(--dt-space-200);
align-items: center;
justify-content: center;
width: var(--is-typing-size-shape);
height: var(--is-typing-size-shape);
border-radius: var(--dt-size-radius-pill);
opacity: 0.75;
& span {
display: inline-block;
width: var(--dt-size-300);
height: var(--dt-size-300);
padding: 0;
background: var(--dt-color-surface-strong);
border-radius: var(--dt-size-radius-pill);
opacity: 0.3;
transition: all 500ms ease;
animation: d-recipe-leftbar-row-wave 1.5s ease infinite;
&:nth-child(1) {
animation-delay: 0ms;
}
&:nth-child(2) {
animation-delay: var(--td100);
}
&:nth-child(3) {
animation-delay: var(--td200);
}
}
}
// ============================================================================
// $ ACTIONABLE ELEMENTS
// ----------------------------------------------------------------------------
//
// <el class="d-recipe-leftbar-row__primary" ...>
// ...
// </el>
// <div class="d-recipe-leftbar-row__action">
// <button class="d-recipe-leftbar-row__action-button d-btn ..." ...>...</button>
// </div>
//
// Style overrides for leftbar button icon and background, using the shell tokens for theming
.d-btn--inverted.d-btn--primary {
--button-color-text: var(--dt-shell-mention-color-surface-primary);
}
.d-btn--inverted.d-btn--primary:hover:not([disabled]) {
--button-color-background: color-mix(in srgb, var(--dt-shell-mention-color-surface-primary) 10%, var(--dt-color-surface-primary) 100%);
}
.d-btn--inverted.d-btn--primary:active:not([disabled]) {
--button-color-background: color-mix(in srgb, var(--dt-shell-mention-color-surface-primary) 30%, var(--dt-color-surface-primary) 100%);
}
.d-fc-success {
color:var(--dt-shell-color-foreground-positive);
}
&__primary {
// contains extra style properties to support both <button> and <a>
display: flex;
flex: 1;
align-items: center;
width: 100%;
margin: 0;
padding: 0;
color: var(--leftbar-row-color-foreground);
font-size: inherit;
line-height: inherit;
text-align: left;
text-decoration: none;
background-color: var(--leftbar-row-color-background);
border: 0;
border-radius: var(--leftbar-row-radius);
appearance: none;
&:active {
--leftbar-row-color-background: var(--dt-shell-action-color-background-primary-active);
}
&:focus-visible {
box-shadow: var(--dt-shadow-focus-inset);
}
}
&__action-button {
width: var(--leftbar-row-action-width);
height: var(--leftbar-row-action-height);
opacity: 0;
}
// ============================================================================
// $ PRIMARY'S MAIN ELEMENTS
// ----------------------------------------------------------------------------
//
// <div class="d-recipe-leftbar-row__alpha">...</div>
// <div class="d-recipe-leftbar-row__label">...</div>
// <div class="d-recipe-leftbar-row__omega">...</div>
&__alpha {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
width: var(--leftbar-row-alpha-width);
height: var(--leftbar-row-alpha-height);
padding-right: var(--dt-space-400);
padding-left: var(--dt-space-400);
color: var(--leftbar-row-alpha-color-foreground);
border-radius: var(--leftbar-row-radius) 0 0 var(--leftbar-row-radius);
}
&__label {
flex: 0 1;
min-width: 0;
}
&__omega {
position: absolute;
top: var(--leftbar-row-action-position-bottom);
right: var(--leftbar-row-action-position-right);
display: flex;
gap: var(--dt-space-300);
align-items: center;
justify-content: flex-end;
box-sizing: border-box;
border-radius: var(--leftbar-row-radius);
transform: translateY(calc(var(--leftbar-row-action-position-bottom) * -1));
}
&__unread-badge {
display: var(--leftbar-row-unread-badge-display);
color: var(--dt-shell-mention-color-foreground-primary);
background-color: var(--dt-shell-mention-color-surface-primary);
}
&__unread-count {
.d-recipe-leftbar-row__action {
display: none;
}
}
&__unread-count-badge {
border-top-right-radius: var(--dt-size-radius-0);
border-bottom-right-radius: var(--dt-size-radius-0);
}
&__unread-mention-count-badge {
color: var(--dt-shell-mention-color-foreground-secondary);
background-color: var(--dt-shell-mention-color-surface-secondary);
border-top-left-radius: var(--dt-size-radius-0);
border-bottom-left-radius: var(--dt-size-radius-0);
}
&__unread-mention-only-count-badge {
color: var(--dt-shell-mention-color-foreground-secondary);
background-color: var(--dt-shell-mention-color-surface-secondary);
}
&__active-voice {
display: inline-flex;
color: var(--dt-color-purple-400);
.d-recipe-leftbar-row-opacity-pulsate();
}
&__dnd {
padding-top: var(--dt-space-200);
padding-right: var(--dt-space-300);
color: var(--dt-color-foreground-tertiary);
font-weight: var(--dt-font-weight-medium);
font-size: var(--dt-font-size-100);
line-height: var(--dt-font-line-height-400);
}
&__container--off-duty {
background-color: var(--dt-color-surface-critical);
border: var(--dt-size-100) solid var(--dt-color-border-subtle);
border-radius: var(--dt-size-radius-500);
.d-recipe-leftbar-row__primary {
margin: calc(var(--dt-size-100) * -1);
}
}
&--contact-centers {
.d-recipe-leftbar-row__alpha {
padding-right: var(--dt-space-450);
padding-left: var(--dt-space-450);
}
.d-recipe-leftbar-row__action-container {
display: inline-flex;
align-items: center;
justify-content: flex-end;
min-width: var(--dt-size-600);
height: var(--dt-size-500);
}
}
&__icon-cc {
width: calc(var(--dt-size-300) * 3.5);
height: calc(var(--dt-size-300) * 3.5);
border-radius: var(--dt-size-200);
}
}
.d-recipe-leftbar-row-opacity-pulsate {
-webkit-animation-name: d-recipe-leftbar-row-opacity-pulsate;
-moz-animation-name: d-recipe-leftbar-row-opacity-pulsate;
animation-name: d-recipe-leftbar-row-opacity-pulsate;
-webkit-animation-duration: 1s;
-moz-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-iteration-count: infinite;
-moz-animation-iteration-count: infinite;
animation-iteration-count: infinite;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
animation-fill-mode: both;
}
@keyframes d-recipe-leftbar-row-opacity-pulsate {
0%,
100% {
opacity: 0.2;
}
50% {
opacity: 1;
}
}
@keyframes d-recipe-leftbar-row-wave {
0%,
50%,
100% {
transform: translate(0, 0);
}
10% {
transform: translate(0, -0.5rem);
opacity: 0.9;
}
}
// ============================================================================
// $ Contact Row
// ----------------------------------------------------------------------------
.d-recipe-contact-row--active {
color: var(--dt-shell-color-foreground-positive);
}
.d-recipe-contact-row--busy {
color: var(--dt-shell-color-foreground-critical);
}
.d-recipe-contact-row--away {
color: var(--dt-shell-color-foreground-warning);
}
// ============================================================================
// $ CSS General Row
// ----------------------------------------------------------------------------
.d-recipe-leftbar-general-row {
&__icon {
display: flex;
align-items: center;
justify-content: center;
}
&__contact-center {
&--magenta-100 {
background-color: var(--dt-color-magenta-100);
}
&--magenta-200 {
background-color: var(--dt-color-magenta-200);
}
&--magenta-300 {
background-color: var(--dt-color-magenta-300);
}
&--magenta-400 {
background-color: var(--dt-color-magenta-400);
}
&--green-200 {
background-color: var(--dt-color-green-200);
}
&--green-500 {
background-color: var(--dt-color-green-500);
}
&--gold-300 {
background-color: var(--dt-color-gold-300);
}
&--purple-100 {
background-color: var(--dt-color-purple-100);
}
&--purple-300 {
background-color: var(--dt-color-purple-300);
}
&--purple-600 {
background-color: var(--dt-color-purple-600);
}
&--black-300 {
background-color: var(--dt-color-black-300);
}
}
}