.c-message-box
.c-message-box {
background-color: use-color(base, 'white');
color: use-color('grey', dark);
display: flex;
flex-direction: column;
letter-spacing: 0.11px;
line-height: 22px;
min-height: 96%;
overflow: auto;
overflow-x: hidden;
padding: 16px 16px 0;
@include element('message') {
@extend %message-base;
}
@include element('message-whisper') {
@extend %message-base;
background-color: use-color(base, true-white);
border: dashed 1px use-color('grey', light-alt);
min-height: max-content;
min-width: 160px;
overflow-x: hidden;
padding-top: 0;
label {
color: use-color('grey', dark);
}
}
@include element('message-sended') {
@extend %message-base;
@extend %message-sended-base;
@include modifier('loading') {
&::before {
animation: loading-rotator 0.8s linear infinite, loading-colors 6s ease infinite;
border-bottom: 4px solid;
border-left: 4px solid transparent;
border-radius: 50%;
border-right: 4px solid;
border-top: 4px solid;
content: '';
height: 14px;
left: -24px;
position: absolute;
top: 8px;
width: 14px;
}
}
}
@include element('message-intervention') {
@extend %message-base;
@extend %message-sended-base;
min-height: max-content;
min-width: 160px;
overflow-x: hidden;
padding: 0 40px 5px 12px;
position: relative;
&::before {
background-color: use-color(secondary);
border-radius: 4px 0 0 4px;
content: '';
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 4px;
}
}
@include element('message-label') {
@include use-font('caption', 'light');
align-items: center;
display: inline-block;
left: 4px;
margin-left: -8px;
overflow: hidden;
padding: 4px 20px 4px 24px;
text-overflow: ellipsis;
top: 0;
white-space: nowrap;
width: calc(100% + 16px);
word-break: break-all;
&.intervention {
background-color: transparentize(use-color('base', 'true-white'), 0.6);
&::before {
@extend %chat-message-label-icon;
color: use-color('secondary');
content: '\e958';
margin-left: 4px;
}
}
&.whisper {
background-color: transparentize(use-color('grey', 'light-i'), 0.8);
left: 0;
padding-left: 28px;
&::before {
@extend %chat-message-label-icon;
content: '\e959';
left: 8px;
margin-right: 4px;
}
}
}
@include element('username-label') {
@include use-font('caption', 'semibold');
align-items: center;
color: use-color('secondary');
display: inline-block;
margin-bottom: -5px;
overflow: hidden;
text-overflow: ellipsis;
text-transform: capitalize;
white-space: nowrap;
width: 100%;
word-break: break-all;
}
@include element('message-status') {
@include use-font('caption', 'light');
color: use-color('grey', light);
display: flex;
margin: -4px 0 4px;
padding: 0 4px;
position: relative;
&.not-visible {
align-self: flex-start;
justify-content: flex-start;
&::after {
@extend %chat-status-icon;
content: '\e95b';
}
}
&.visible {
align-self: flex-end;
justify-content: flex-end;
&::after {
@extend %chat-status-icon;
content: '\e960';
}
}
&.not-sent {
align-self: flex-end;
color: use-color(event, error);
justify-content: flex-end;
&::after {
@extend %chat-status-icon;
content: '\e95c';
}
}
}
@include element('chat-state') {
@include use-font('caption', 'light');
align-items: center;
background-color: transparentize(use-color('grey', light-i), 0.6);
border-bottom: solid 1px use-color('grey', light-i);
border-top: solid 1px use-color('grey', light-i);
color: use-color('grey', light);
display: flex;
justify-content: center;
margin: 8px 0 16px -16px;
padding: 4px 0;
text-transform: lowercase;
width: calc(100% + 32px);
[class^='icon-'],
[class*=' icon-'] {
font-size: 17px;
margin-right: 8px;
}
}
@include element('message-attachment') {
@include use-font('caption', 'regular');
background: transparentize(use-color('grey'), 0.9);
border-bottom: 0;
border-radius: 4px;
color: use-color('grey');
display: flex;
margin-bottom: 4px;
max-height: 40px;
padding: 8px;
width: 100%;
img {
margin-right: 8px;
}
}
@include element('typing-indicator') {
align-items: center;
background-color: use-color(messages, received);
background-image: $message-box-received-gradient;
border-radius: 4px;
box-shadow: $box-shadow-messages;
display: flex;
height: 35px;
justify-content: space-between;
margin-bottom: 4px;
padding: 0 14px;
position: relative;
width: 40px;
span {
background-color: use-color('grey', light-i);
border-radius: 50%;
height: 10px;
opacity: 0.4;
width: 10px;
@for $i from 1 through 3 {
$delay: (
1: 0.3333s,
2: 0.6666s,
3: 0.9999s
);
&:nth-child(#{$i}) {
animation: 1s blink infinite map-get($delay, $i);
}
}
}
}
// dropup rewrite
.c-dropup {
top: -24px;
}
// time send
small {
@include use-font('caption', 'regular');
bottom: 1px;
color: use-color('grey', light);
position: absolute;
right: 8px;
span {
display: inline-block;
font-size: 12px;
position: absolute;
right: 0;
top: -8px;
}
> .read {
color: use-color(event, success);
}
.icon-message-resend,
.icon-message-sent {
font-size: 10px;
}
}
}
Classes & Estructura para el uso del Message box
de Chattigo.
Todos los mensajes deben estar contenidos dentro de la clase .c-message-box
.
Dependiendo del tipo del mensaje, debe estar contenidos dentro de la clase que corresponda:
Mensajes
- mensajes recibidos
.c-message-box__message
- mensajes enviados
.c-message-box__message-sended
- mensajes de susurros
.c-message-box__message-whisper
- mensajes de intervención del supervisor
.c-message-box__message-intervention
Username Label - Mensajes Grupos
Para los mensajes enviados en grupos, para diferenciar el usuario que envío el mensaje, se debe agregar un label con el nombre del usuario y la clase c-message-box__username-label
.
<div class="c-message-box__message">
<label class="c-message-box__username-label">
Nombre de usuario
</label>
Quiero saber como se hace
<small>10:00</small>
</div>
Labels Mensajes: Susurros e Intervención
En el caso de los susurros e intervenciones, los mensajes deben ir acompañados de un label con la descripción correspondiente y el nombre de quien envío el mensaje.
La clase para los label es .c-message-box__message-label
.
En el caso del whisper hay que agregar la clase .whisper
la cual agregara el icono correspondiente:
<div class="c-message-box__message-whisper">
<label class="c-message-box__message-label whisper">
Susurro de Oliver Hidalgo
</label>
Envíale el link de pago y registro para que no lo tenga que buscar
<small>10:03</small>
</div>
Para la intervención hay que agregar la clase .intervention
la cual agregara el icono correspondiente:
<div class="c-message-box__message-intervention">
<label class="c-message-box__message-label intervention">
Intervención de Oliver Hidalgo
</label>
Estimado Clientísimo Cliente, <br>¿Cómo le va?
<small>10:08</small>
</div>
Mensajes Estados
Los mensajes pueden tener algunos estados que quedan descritos bajo el mensaje,
para todos los estados la clase principal es .c-message-box__message-status
,
dependiendo del caso se debe agregar la clase que identificara el tipo de estado,
estas clases agregaran el icono correspondiente al mensaje.
- Visible para cliente:
.c-message-box__message-status .visible
- No visible para cliente:
.c-message-box__message-status .invisible
- Mensaje no enviado:
.c-message-box__message-status .not-sent
<span class="c-message-box__message-status visible">
Visible para cliente
</span>
<span class="c-message-box__message-status not-visible">
No visible para cliente
</span>
<span class="c-message-box__message-status not-sent">
Mensaje no enviado
</span>
Chat Estados
Cualquier el contenido del Chat puede ser afectado por estados como lo serían los de transferencia y asignación.
Estós estados quedan como un punto en el historial del chat y todos estos mantienen gráficamente el mismo comportamiento dentro del chat.
Sin embargo, cada estado varía su icono y mensaje:
- Chat Asignado: usa el icono
.icon-intervention
<div class="c-message-box__chat-state"> <span class="icon-intervention"></span> chat asignado por Supervisor </div>
- Chat Transferido: usa el icono
.icon-chat-transfer
y el mensaje puede variar entre chat transferido por… o chat transferido a…<div class="c-message-box__chat-state"> <span class="icon-chat-transfer"></span> chat transferido por nomagente </div> <div class="c-message-box__chat-state"> <span class="icon-chat-transfer"></span> chat transferido a nomagente </div>
Attachment
Para mostrar un attachment dentro de un mensaje junto a un icono descriptivo,
Usar en la etiqueta <a>
la clase .c-message-box__message-attachment
en lugar de la clase ..c-action-link
Messages Deliver Status Icons
Los mensajes enviados pueden tener iconos en los cuales se puede identificar si un mensaje fue enviado, recibido, leido o que el mensaje no fue enviado y necesita una acción para ser reenviado.
Estos iconos deben ir dentro de la etiqueta small
antes del tiempo y en el
caso de que un mensaje sea recibido y leido debe estar acompañada de la clase .read
(en la etiqueta del icono).
icons class:
- leido:
.icon-message-received .read
<div class="c-message-box__message-sended"> Tiene que pagar para poder ingresar <small> <span class="icon-message-received read"></span> 10:04 </small> </div>
- recibido:
.icon-message-received
<div class="c-message-box__message-sended"> Tiene que pagar para poder ingresar <small> <span class="icon-message-received"></span> 10:04 </small> </div>
- enviado:
.icon-message-sent
<div class="c-message-box__message-sended"> Tiene que pagar para poder ingresar <small> <span class="icon-message-sent"></span> 10:04 </small> </div>
- no enviado/reenviar:
.icon-message-resend
<div class="c-message-box__message-sended"> Tiene que pagar para poder ingresar <small> <span class="icon-message-resend"></span> 10:04 </small> </div>
Indicador ‘Escribiendo’
Se utiliza para indicar cuando se esta tipieando.
<div class="c-message-box__typing-indicator">
<span></span>
<span></span>
<span></span>
</div>
Dropup options in messages
Para opciones en el mensaje como Envio Outbound
, existe el componente .c-dropup.
Básicamente este es el código a agregar en los mensajes:
<div class="c-dropup__trigger">
<span class="icon-menu-options"></span>
</div>
<ul class="c-dropup">
<li class="c-dropup__item">
<a href="#">
<span class="icon-outbound"></span>
Enviar Outbound
</a>
</li>
</ul>
Example
<div class="c-message-box">
<div class="c-message-box__message">
<label class="c-message-box__username-label">
Nombre de usuario para los mensajes de grupos
</label>
hola
<small>10:00</small>
</div>
<div class="c-message-box__message">
<label class="c-message-box__username-label">
Nombre de usuario
</label>
Quiero saber como se hace
<small>10:00</small>
<div class="c-dropup__trigger">
<span class="icon-menu-options"></span>
</div>
<ul class="c-dropup">
<li class="c-dropup__item">
<a href="">
<span class="icon-outbound"></span>
Enviar Outbound
</a>
</li>
</ul>
</div>
<div class="c-message-box__chat-state">
<span class="icon-intervention"></span>
Chat asignado por Supervisor
</div>
<div class="c-message-box__message-sended">
Tiene que pagar para poder ingresar
<small>
<span class="icon-message-received"></span>
10:00
</small>
</div>
<div class="c-message-box__message-whisper">
<label class="c-message-box__message-label whisper">
Susurro de Oliver Hidalgo
</label>
Envíale el link de pago y registro para que no lo tenga que buscar
<small>10:03</small>
</div>
<span class="c-message-box__message-status not-visible">
No visible para cliente
</span>
<div class="c-message-box__message-sended">
Aquí le dejo el link de pago
<small>10:04</small>
</div>
<div class="c-message-box__message-sended">
<a class="c-action-link" href="#">http://pagaporfa.org</a>
<small>
<span class="icon-message-sent"></span>
10:04
</small>
</div>
<div class="c-message-box__message-intervention">
<label class="c-message-box__message-label intervention">
Intervención de Oliver Hidalgo
</label>
Estimado Clientísimo Cliente, <br>¿Cómo le va?
<small>
<span class="icon-message-received read"></span>
10:08
</small>
</div>
<span class="c-message-box__message-status visible">
Visible para cliente
</span>
<div class="c-message-box__chat-state">
<span class="icon-chat-transfer"></span>
chat transferido por nomagente
</div>
<div class="c-message-box__message-sended c-message-box__message-sended--loading">
<a class="c-message-box__message-attachment">
<img src="https://cdn.chattigo.com/assets/img/attachment/preview-tiny/PDF.svg" />
Attachment name.pdf
</a>
Adjunto PDF
<small>
<span class="icon-message-resend"></span>
10:10
</small>
</div>
<span class="c-message-box__message-status not-sent">
Mensaje no enviado
</span>
<div class="c-message-box__chat-state">
<span class="icon-chat-transfer"></span>
chat transferido a nomagente
</div>
<div class="c-message-box__typing-indicator">
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>