@ckeditor/ckeditor5-real-time-collaboration
Version:
A set of CKEditor 5 features enabling real-time collaboration within the editor using CKEditor Cloud Services.
329 lines (282 loc) • 8.17 kB
CSS
/**
* @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
*/
.ck .ck-user__marker-dot {
left: 50%;
top: calc(( var(--ck-user-dot-size) / 2 ) * -1);
width: var(--ck-user-dot-size);
height: var(--ck-user-dot-size);
cursor: default;
border-radius: 50%;
display: block;
position: absolute;
transform: translate(-50%, -50%);
}
.ck .ck-user__marker-tooltip {
font-family: var(--ck-font-face);
font-size: var(--ck-font-size-base);
line-height: 1;
font-style: initial;
font-weight: initial;
opacity: 0;
padding: var(--ck-spacing-small);
color: #fff;
white-space: nowrap;
z-index: 99999;
transition: opacity .2s linear, transform .3s ease-in-out;
display: none;
position: absolute;
top: -20px;
left: 0;
}
@media (prefers-reduced-motion: reduce) {
.ck .ck-user__marker-tooltip {
transition: none;
}
}
.ck .ck-user__marker-line {
width: 0;
height: 100%;
position: absolute;
bottom: 0;
}
.ck .ck-user__marker {
cursor: default;
display: inline;
position: relative;
}
.ck .ck-user__marker.ck-user__marker_hovered .ck-user__marker-dot {
width: 0;
}
.ck .ck-user__marker.ck-user__marker_hovered .ck-user__marker-tooltip {
opacity: 1;
animation: .3s ease-in-out userMarkersFadeInLeft;
display: block;
}
.ck .ck-placeholder .ck-user__marker {
display: none;
}
@media (prefers-reduced-motion: reduce) {
.ck .ck-user__marker, .ck .ck-user__marker *, .ck .ck-user__marker:after {
animation: none ;
}
}
@keyframes userMarkersFadeInLeft {
from {
opacity: 0;
transform: translateX(-10px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
:root {
--ck-color-presence-list-dropdown-background: #fff;
--ck-color-presence-list-dropdown-arrow-border: #ebebeb;
--ck-presence-list-dropdown-list-max-width: 250px;
--ck-presence-list-dropdown-list-min-width: 180px;
--ck-presence-list-users-tooltip-max-width: 120px;
--ck-presence-list-users-tooltip-min-width: 25px;
}
.ck.ck-presence-list {
margin-right: var(--ck-spacing-standard);
font-size: var(--ck-font-size-base);
align-items: center;
transition: margin-right .2s ease-in-out;
display: inline-flex;
}
.ck.ck-presence-list * {
box-sizing: border-box;
}
.ck.ck-presence-list__list {
flex-direction: row;
justify-content: flex-end;
display: flex;
position: relative;
}
.ck.ck-presence-list__list:after {
content: "";
background: none;
width: 100%;
height: 15px;
position: absolute;
bottom: -15px;
left: 0;
}
.ck.ck-presence-list__counter--hidden {
display: none;
}
.ck.ck-presence-list__list-item {
font: inherit;
color: inherit;
margin-left: var(--ck-spacing-medium);
background: none;
border: 1px solid #0000;
outline: none;
padding: 0;
position: relative;
}
.ck.ck-presence-list__list-item:focus {
border-radius: var(--ck-rounded-corners-radius);
border: var(--ck-focus-ring);
box-shadow: var(--ck-focus-outer-shadow), 0 0;
outline: none;
}
.ck.ck-presence-list__list-item .ck-label {
width: 0;
height: 0;
overflow: hidden;
}
.ck.ck-presence-list__list-item:first-child {
margin-left: 0;
}
.ck.ck-tooltip.ck-presence-list__list-item__tooltip > .ck-tooltip__text {
max-width: var(--ck-presence-list-users-tooltip-max-width);
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
display: inline-block;
overflow: hidden;
}
.ck.ck-presence-list__marker {
width: 100%;
height: 3px;
margin-top: 5px;
display: block;
position: relative;
}
.ck-presence-list__list button.ck-presence-list__list-item *, .ck-presence-list__balloon button.ck-presence-list__dropdown-list-item * {
cursor: pointer;
}
.ck.ck-presence-list--collapsed .ck-presence-list__list {
min-width: calc(var(--ck-user-avatar-size) * 2);
border: 1px solid #0000;
padding-left: 1px;
}
.ck.ck-presence-list--collapsed .ck-presence-list__list * {
cursor: pointer;
transition: all .4s ease-in-out;
}
.ck.ck-presence-list--collapsed .ck-presence-list__list:focus {
border-radius: var(--ck-rounded-corners-radius);
border: var(--ck-focus-ring);
box-shadow: var(--ck-focus-outer-shadow), 0 0;
outline: none;
}
.ck.ck-presence-list--collapsed .ck.ck-presence-list__list-item {
margin-left: calc(var(--ck-user-avatar-size) * -.35);
border: 0;
padding: 0;
}
.ck.ck-presence-list--collapsed .ck.ck-presence-list__list-item:first-child {
margin-left: 0;
}
.ck.ck-presence-list--collapsed .ck.ck-presence-list__list-item:last-child {
order: unset;
}
.ck.ck-presence-list--collapsed .ck.ck-presence-list__list-item .ck-user {
--ck-presence-list-avatar-border-color: var(--ck-color-base-foreground);
border: 2px solid var(--ck-presence-list-avatar-border-color);
margin-left: 0;
margin-right: 0;
}
.ck.ck-presence-list--collapsed .ck.ck-presence-list__list-item.ck-presence-list__users-counter {
margin-left: 0;
margin-right: 0;
}
.ck.ck-presence-list__balloon {
--ck-color-panel-border: var(--ck-color-presence-list-dropdown-arrow-border);
--ck-color-panel-background: var(--ck-color-presence-list-dropdown-background);
background-color: var(--ck-color-presence-list-dropdown-background);
opacity: 1;
border: 0;
animation: .3s ease-in-out fadeIn;
}
@media (prefers-reduced-motion: reduce) {
.ck.ck-presence-list__balloon {
animation: none;
}
}
.ck.ck-presence-list__balloon ul {
background-color: var(--ck-color-presence-list-dropdown-background);
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-wrapper {
min-width: var(--ck-presence-list-dropdown-list-min-width);
max-width: var(--ck-presence-list-dropdown-list-max-width);
border-radius: var(--ck-border-radius);
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-wrapper.ck-presence-list__dropdown-list-wrapper_scrollable {
max-height: 80vh;
overflow: hidden auto;
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-item {
font: inherit;
color: inherit;
padding: var(--ck-spacing-standard);
background: none;
border: 0;
outline: none;
align-items: center;
display: flex;
position: relative;
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-item:focus {
z-index: 1;
outline: var(--ck-focus-ring);
outline-offset: -1px;
box-shadow: var(--ck-focus-outer-shadow), 0 0;
position: relative;
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-item:first-of-type .ck-presence-list__marker {
border-top-left-radius: var(--ck-border-radius);
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list-item:last-of-type .ck-presence-list__marker {
border-bottom-left-radius: var(--ck-border-radius);
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list .ck-user__full-name {
white-space: nowrap;
text-overflow: ellipsis;
color: var(--ck-color-base-text);
margin-left: var(--ck-spacing-standard);
overflow: hidden;
}
.ck.ck-presence-list__balloon .ck.ck-presence-list__dropdown-list .ck.ck-presence-list__marker {
width: 3px;
height: 100%;
margin: 0;
position: absolute;
left: 0;
}
.ck.ck-presence-list__users-counter {
--ck-presence-list-counter-border-color: var(--ck-user-avatar-background);
--ck-presence-list-counter-background-color: var(--ck-user-avatar-color);
border: 2px solid var(--ck-presence-list-counter-border-color);
background-color: var(--ck-presence-list-counter-background-color);
box-sizing: border-box;
height: calc(var(--ck-user-avatar-size) - 4px);
width: calc(var(--ck-user-avatar-size) - 4px);
border-radius: 50%;
justify-content: center;
align-items: center;
margin: 4px 2px 2px;
line-height: 100%;
display: flex;
position: relative;
}
.ck.ck-presence-list__users-counter__text {
--ck-presence-list-counter-text-color: var(--ck-user-avatar-background);
color: var(--ck-presence-list-counter-text-color);
cursor: default;
-webkit-user-select: none;
user-select: none;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}