@ckeditor/ckeditor5-comments
Version:
Collaborative comments feature for CKEditor 5.
790 lines (644 loc) • 18.2 kB
CSS
/**
* @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
*/
:root{
--ck-color-comment-background:hsl(210, 52%, 97%);
--ck-color-comment-separator:hsl(210, 52%, 87%);
--ck-color-comment-remove-background:var(--ck-color-light-red);
--ck-color-comment-input-background:var(--ck-color-comment-background);
--ck-comment-content-font-family:var(--ck-font-face);
--ck-comment-content-font-size:var(--ck-font-size-base);
--ck-comment-content-font-color:var(--ck-color-base-text);
}
.ck .ck-comment__wrapper{
font-size:var(--ck-font-size-base);
position:relative;
outline:0;
transition:all 300ms linear;
}
@media (prefers-reduced-motion: reduce){
.ck .ck-comment__wrapper{
transition:none;
}
}
.ck .ck-comment__wrapper:first-of-type{
border-top-right-radius:var(--ck-border-radius);
border-top-left-radius:var(--ck-border-radius);
}
.ck .ck-comment__wrapper:focus{
background:var(--ck-color-button-default-hover-background);
}
.ck .ck-comment::after{
content:'';
display:block;
position:absolute;
opacity:1;
top:calc( var(--ck-user-avatar-size) + var(--ck-spacing-small));
left:calc(
var(--ck-spacing-standard) + ( var(--ck-user-avatar-size) / 2)
- 2px);
width:4px;
height:100%;
background-color:var(--ck-color-comment-separator);
}
.ck .ck-comment--edit{
background-color:var(--ck-color-comment-input-background);
}
.ck .ck-comment--edit::after{
opacity:0;
}
.ck .ck-comment--edit .ck-comment__input-actions{
margin-top:var(--ck-spacing-standard);
}
.ck .ck-comment__content{
word-break:normal;
overflow-wrap:anywhere;
font-family:var(--ck-comment-content-font-family);
color:var(--ck-comment-content-font-color);
}
.ck .ck-comment--info .ck-comment__content{
font-style:italic;
font-family:var(--ck-comment-content-font-family);
font-size:var(--ck-comment-content-font-size);
color:var(--ck-comment-content-font-color);
}
.ck .ck-comment p, .ck .ck-comment__input p{
margin:0;
}
.ck .ck-comment ul,
.ck .ck-comment__input ul,
.ck .ck-comment ol,
.ck .ck-comment__input ol{
padding-left:10px;
margin-left:10px;
}
.ck .ck-comment ul, .ck .ck-comment__input ul{
list-style:disc;
margin-bottom:5px;
margin-top:0;
}
.ck .ck-comment ul ul, .ck .ck-comment__input ul ul{
list-style:circle;
}
.ck .ck-comment ul ul ul, .ck .ck-comment__input ul ul ul{
list-style:square;
}
.ck .ck-comment__main .ck-comment__input-wrapper{
display:flex;
flex-direction:column;
position:relative;
transition:all 300ms linear;
}
.ck .ck-comment__main .ck-comment__input-wrapper .ck-comment__input{
padding:0;
}
.ck .ck-comment__user{
z-index:var(--ck-z-default);
}
.ck-comment__input-actions .ck.ck-button.ck-comment__input-actions--submit{
background:var(--ck-color-base-action);
color:hsl(0, 0%, 100%);
}
.ck-comment__input-actions .ck.ck-button.ck-comment__input-actions--submit:hover{
background:var(--ck-color-button-save);
}
.ck-comment__input-actions .ck.ck-button.ck-comment__input-actions--cancel{
color:var(--ck-color-text);
}
.ck .ck-comment__external{
font-style:italic;
color:var(--ck-color-annotation-info);
font-size:var(--ck-font-size-tiny);
margin-top:var(--ck-spacing-standard);
}
.ck .ck-comment .ck-dropdown .ck-dropdown__arrow{
display:none;
}
.ck .ck-comment .ck-dropdown .ck-list{
margin:0;
padding:var(--ck-spacing-small) 0;
}
.ck .ck-comment .ck-dropdown .ck-list .ck-list__item{
font-size:1.2em;
color:var(--ck-color-base-text);
min-width:auto;
}
.ck .ck-comment .ck-dropdown .ck-list .ck-list__item .ck-button{
color:var(--ck-color-text);
}
:root{
--ck-color-thread-remove-background:var(--ck-color-comment-remove-background);
--ck-color-comment-count:hsl(210, 52%, 57%);
--ck-color-thread-header-background:hsl(54, 88%, 93%);
--ck-color-thread-header-active-background:hsl(52, 100%, 83%);
--ck-color-unlinked-background:hsl(0, 0%, 96%);
--ck-color-unlinked-active-background:hsl(0, 0%, 92%);
}
.ck .ck-thread{
border-radius:0;
width:100%;
color:var(--ck-color-base-text);
outline:0;
background-color:var(--ck-color-base-background);
overflow:hidden;
transition-property:color, background-color, width, outline;
transition-duration:300ms;
transition-timing-function:ease;
}
.ck-rounded-corners .ck .ck-thread,
.ck .ck-thread.ck-rounded-corners{
border-radius:var(--ck-border-radius);
}
@media (prefers-reduced-motion: reduce){
.ck .ck-thread{
transition:none;
}
}
.ck .ck-thread:focus{
outline:var(--ck-focus-ring);
box-shadow:0 0 0 4px var(--ck-color-focus-outer-shadow);
}
.ck-balloon-panel:has( .ck-thread:focus){
outline:none;
border:var(--ck-focus-ring);
box-shadow:var(--ck-drop-shadow), var(--ck-focus-outer-shadow);
}
.ck .ck-thread__header{
display:flex;
justify-content:space-between;
line-height:1.57;
padding:var(--ck-spacing-standard);
background-color:var(--ck-color-thread-header-background);
font-size:var(--ck-font-size-base);
}
.ck .ck-thread__header .ck-button{
font-size:var(--ck-annotation-button-size);
}
.ck .ck-thread__header .ck-context-wrapper{
display:inline-flex;
width:100%;
min-width:0;
height:25px;
position:relative;
padding-right:var(--ck-spacing-large);
}
.ck .ck-thread__header .ck-context{
display:flex;
white-space:nowrap;
overflow:hidden;
width:100%;
padding:var(--ck-spacing-small) var(--ck-spacing-medium);
}
.ck .ck-thread__header .ck-context.ck-context--quotes::after, .ck .ck-thread__header .ck-context.ck-context--quotes::before{
display:inline-block;
content:'"';
}
.ck .ck-thread__header .ck-context .ck-context__type{
font-weight:bold;
padding-right:var(--ck-spacing-standard);
}
.ck .ck-thread__header .ck-context .ck-context__value{
overflow:hidden;
text-overflow:ellipsis;
border:1px solid transparent;
}
.ck .ck-thread__header .ck-context .ck-context__value:focus{
outline:none;
border:var(--ck-focus-ring);
box-shadow:var(--ck-focus-outer-shadow), 0 0;
}
.ck .ck-thread__header .ck-context.overlay{
display:inline-block;
position:absolute;
top:0;
z-index:2;
background:var(--ck-color-base-background);
box-shadow:0 2px 3px hsla(0, 0%, 100%, 0.2);
border-radius:2px;
white-space:normal;
box-sizing:border-box;
}
.ck .ck-thread__comment-count{
--ck-user-avatar-size:28px;
padding-left:calc( var(--ck-user-avatar-size) + var(--ck-spacing-standard) * 2);
color:var(--ck-color-comment-count);
font-size:var(--ck-font-size-base);
font-weight:bold;
cursor:pointer;
transition:background-color 300ms ease;
}
.ck .ck-thread__comment-count::before{
content:'\25BC';
margin-right:var(--ck-spacing-small);
}
.ck .ck-thread--remove .ck-comment{
background-color:var(--ck-color-comment-remove-background);
}
.ck .ck-thread--remove .ck-thread__input--active{
background-color:var(--ck-color-base-background);
}
.ck .ck-thread--remove .ck-thread__input--active.ck-thread__input{
background-color:var(--ck-color-comment-remove-background);
}
.ck .ck-thread--remove .ck-thread__comment-count{
background-color:var(--ck-color-comment-remove-background);
}
.ck .ck-thread--remove .ck-comment__wrapper .ck-comment::after{
opacity:0;
}
.ck .ck-thread__comments .ck-comment__wrapper:last-of-type .ck-comment::after{
opacity:0;
}
.ck .ck-thread__container{
transition:transform 300ms ease;
}
@media (prefers-reduced-motion: reduce){
.ck .ck-thread__container{
transition:none;
}
}
.ck .ck-thread__comments{
position:relative;
z-index:var(--ck-z-default);
list-style:none;
margin:0;
padding:0;
border-radius:var(--ck-border-radius);
}
.ck .ck-thread__user{
font-size:0.85em;
}
.ck .ck-thread__input{
width:calc( 100% - var(--ck-user-avatar-size));
white-space:normal;
transition:background-color 200ms ease-in-out;
border-radius:var(--ck-border-radius);
min-height:38px;
}
.ck .ck-thread--active .ck-comment__options.ck-dropdown{
display:block;
}
.ck .ck-thread--active .ck-thread__input{
display:block;
background-color:var(--ck-color-comment-background);
}
.ck .ck-thread--active .ck-thread__header{
background-color:var(--ck-color-thread-header-active-background);
}
.ck .ck-thread--unlinked{
--ck-color-comment-box-border:var(--ck-color-base-border);
--ck-color-thread-header-background:var(--ck-color-unlinked-background);
--ck-color-thread-header-active-background:var(--ck-color-unlinked-active-background);
}
.ck.ck-button.ck-confirm-view-submit{
color:var(--ck-color-button-save);
}
.ck.ck-button.ck-confirm-view-cancel{
color:var(--ck-color-button-cancel);
}
.ck .ck-comment__input-container{
--ck-user-avatar-size:28px;
font-size:var(--ck-font-size-base);
display:none;
padding:var(--ck-spacing-standard);
background:var(--ck-color-comment-background);
}
.ck .ck-comment__input-container--active{
display:flex;
}
.ck .ck-comment__input{
padding:var(--ck-spacing-standard);
padding-top:var(--ck-spacing-medium);
color:var(--ck-color-base-text);
border-width:0;
resize:none;
background-color:transparent;
transition:color 300ms ease-in-out;
}
@media (prefers-reduced-motion: reduce){
.ck .ck-comment__input{
transition:none;
}
}
.ck .ck-comment__input:focus{
outline:none;
}
.ck .ck-comment__input .ck-editor__editable_inline{
--ck-focus-ring:none;
--ck-inner-shadow:none;
font-family:var(--ck-comment-content-font-family);
font-size:var(--ck-comment-content-font-size);
color:var(--ck-comment-content-font-color);
padding:0;
overflow:visible;
border:0;
background-color:transparent;
word-break:normal;
overflow-wrap:anywhere;
}
.ck-comment__input-wrapper .ck.ck-editor__editable_inline *:first-child{
margin-top:0;
}
.ck-comment__input-wrapper .ck.ck-editor__editable_inline *:last-child{
margin-bottom:0;
}
.ck .ck-comment__input-actions{
width:100%;
text-align:right;
display:none;
}
.ck .ck-comment__input-actions.ck-comment__input-actions--active{
display:block;
}
.ck .ck-comment__input-actions .ck.ck-button{
display:inline-flex;
justify-content:center;
align-items:center;
cursor:pointer;
min-height:var(--ck-ui-component-min-height);
min-width:60px;
font-size:var(--ck-annotation-button-size);
margin-left:var(--ck-spacing-large);
padding:0 var(--ck-spacing-medium);
}
.ck .ck-comment__input-actions .ck-button.ck-disabled{
opacity:.3;
}
.ck .ck-comment__input-textarea{
display:block;
}
:root{
--ck-inline-annotation-container-width:300px;
--ck-inline-annotation-container-max-height:400px;
}
.ck.ck-balloon-panel .ck-annotation-wrapper{
position:static;
width:var(--ck-inline-annotation-container-width);
max-height:var(--ck-inline-annotation-container-max-height);
overflow-y:auto;
overscroll-behavior-y:contain;
overflow-x:hidden;
}
.ck.ck-balloon-panel .ck-annotation{
animation:none;
}
.ck.ck-balloon-panel .ck-annotation-wrapper *{
white-space:normal;
}
.ck.ck-balloon-panel .ck-annotation-wrapper strong{
font-weight:bold;
}
.ck.ck-balloon-panel .ck-annotation-wrapper i{
font-style:italic;
}
:root{
--ck-annotation-counter-icon-size:16px;
--ck-annotation-counter-number-size:10px;
--ck-color-annotation-counter-comment:hsl(55, 98%, 48%);
--ck-color-annotation-counter-suggestion-insertion:hsl(128, 62%, 60%);
--ck-color-annotation-counter-suggestion-deletion:hsl(345, 62%, 60%);
--ck-color-annotation-counter-suggestion-format:hsl(191, 62%, 60%);
}
.ck.ck-sidebar--narrow .ck-sidebar-item{
display:flex;
justify-content:center;
}
.ck.ck-sidebar--narrow .ck-annotation-counter{
font-size:var(--ck-annotation-counter-icon-size);
min-height:unset;
padding:0;
cursor:pointer;
color:hsl(0, 0%, 50%);
}
.ck.ck-sidebar--narrow .ck-annotation-counter:hover,
.ck.ck-sidebar--narrow .ck-annotation-counter:focus{
background:transparent;
box-shadow:none;
color:hsl(0, 0%, 30%);
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge{
border-radius:50%;
position:absolute;
width:16px;
height:16px;
background:hsl(0, 0%, 20%);
font-weight:bold;
color:hsl(0, 0%, 100%);
font-size:var(--ck-annotation-counter-number-size);
font-family:var(--ck-font-face);
right:0;
top:-6px;
text-shadow:-1px 0 2px hsl(0, 0%, 27%), 1px 0 2px hsl(0, 0%, 27%);
display:flex;
justify-content:center;
line-height:16px;
z-index:1;
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--edit-mode{
line-height:1;
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--suggestion-insertion,
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--suggestion-replace{
background:var(--ck-color-annotation-counter-suggestion-insertion);
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--suggestion-deletion{
background:var(--ck-color-annotation-counter-suggestion-deletion);
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--suggestion-format{
background:var(--ck-color-annotation-counter-suggestion-format);
}
.ck.ck-sidebar--narrow .ck-annotation-counter__badge--comment{
background:var(--ck-color-annotation-counter-comment);
}
:root{
--ck-color-annotation-icon:hsl(0, 0%, 50%);
--ck-color-annotation-info:hsl(0, 0%, 46%);
--ck-annotation-button-size:0.85em;
}
.ck .ck-annotation{
--ck-user-avatar-size:28px;
font-size:var(--ck-font-size-base);
display:flex;
position:relative;
animation:fadeInLeft 300ms;
transition:background-color 300ms ease;
padding:var(--ck-spacing-standard);
white-space:normal;
}
@media (prefers-reduced-motion: reduce){
.ck .ck-annotation{
animation:none;
transition:none;
}
}
.ck .ck-annotation .ck-button{
background-color:transparent;
min-width:unset;
min-height:unset;
cursor:pointer;
color:var(--ck-color-annotation-icon);
border-radius:var(--ck-border-radius);
font-size:var(--ck-annotation-button-size);
}
.ck .ck-annotation .ck-user{
font-size:0.85em;
}
.ck .ck-annotation__main{
display:grid;
grid-template-areas:"info actions" "content content";
grid-template-columns:minmax(0, 1fr) auto;
width:calc( 100% - var(--ck-user-avatar-size));
transition:all 200ms ease;
border-radius:var(--ck-border-radius);
padding-left:var(--ck-spacing-standard);
}
@media (prefers-reduced-motion: reduce){
.ck .ck-annotation__main{
transition:none;
}
}
.ck .ck-annotation__main p{
margin:0;
white-space:normal;
font-size:var(--ck-comment-content-font-size);
line-height:1.5em;
}
.ck .ck-annotation__user{
margin-top:var(--ck-spacing-small);
}
.ck .ck-annotation__info{
grid-area:info;
display:flex;
align-items:center;
color:var(--ck-color-annotation-info);
min-height:2.4em;
}
.ck .ck-annotation__info-name,
.ck .ck-annotation__info-time{
font-weight:bold;
white-space:nowrap;
overflow:hidden;
color:var(--ck-color-annotation-info);
font-size:var(--ck-font-size-small);
}
.ck .ck-annotation__info-name{
text-overflow:ellipsis;
}
.ck .ck-annotation__info-time{
flex:0 0 auto;
margin:0 var(--ck-spacing-large);
}
.ck.ck-balloon-panel .ck-annotation-wrapper .ck-annotation__info-name,
.ck.ck-balloon-panel .ck-annotation-wrapper .ck-annotation__info-time{
white-space:nowrap;
}
.ck .ck-annotation__actions{
grid-area:actions;
transition:opacity 200ms ease;
opacity:0.5;
}
@media (prefers-reduced-motion: reduce){
.ck .ck-annotation__actions{
transition:none;
}
}
.ck .ck-annotation__content-wrapper{
grid-area:content;
width:100%;
}
@keyframes fadeInLeft{
from{
transform:translate3d( -5%, 0, 0);
opacity:0;
}
to{
transform:translate3d( 0, 0, 0);
opacity:1;
}
}
:root{
--ck-color-annotation-wrapper-background:hsl(0, 0%, 100%);
--ck-color-annotation-wrapper-drop-shadow:0 1px 1px 1px hsl(0, 0%, 90%);
}
.ck.ck-sidebar{
position:relative;
transition:min-height 250ms ease;
outline:0;
}
@media (prefers-reduced-motion: reduce){
.ck.ck-sidebar{
transition:none;
}
}
.ck-sidebar-item{
position:absolute;
width:100%;
transition:top 300ms ease, box-shadow 300ms ease;
}
@media (prefers-reduced-motion: reduce){
.ck-sidebar-item{
transition:none;
}
}
.ck-sidebar-item--no-animation{
transition:top 0s ease ;
}
.ck.ck-annotation-wrapper{
outline:0;
border-radius:var(--ck-border-radius);
background:var(--ck-color-annotation-wrapper-background);
box-shadow:var(--ck-color-annotation-wrapper-drop-shadow);
}
.ck.ck-annotation-wrapper--active .ck-annotation__actions, .ck.ck-annotation-wrapper:hover .ck-annotation__actions{
opacity:1;
}
.ck.ck-annotation-wrapper--active .ck-annotation__actions .ck-comment--resolve, .ck.ck-annotation-wrapper:hover .ck-annotation__actions .ck-comment--resolve{
color:var(--ck-color-button-save);
}
.ck.ck-annotation-wrapper--active .ck-suggestion--accept, .ck.ck-annotation-wrapper:hover .ck-suggestion--accept{
color:var(--ck-color-button-save)
}
.ck.ck-annotation-wrapper--active .ck-suggestion--discard, .ck.ck-annotation-wrapper:hover .ck-suggestion--discard{
color:var(--ck-color-button-cancel)
}
.ck.ck-annotation-wrapper:not(.ck-annotation-wrapper--active):hover{
box-shadow:var(--ck-drop-shadow);
}
.ck.ck-annotation-wrapper--active{
box-shadow:var(--ck-drop-shadow-active);
}
.ck .ck-comments-archive-dropdown.ck-dropdown__panel{
z-index:var(--ck-z-panel);
}
.ck .ck-comments-archive{
width:400px;
max-height:450px;
box-sizing:content-box;
}
.ck .ck-comments-archive .ck-annotation{
animation:none;
}
.ck .ck-comments-archive .ck-comments-archive__header, .ck .ck-comments-archive .ck-comments-archive__content{
overflow:auto;
max-height:410px;
padding:var(--ck-spacing-large);
}
.ck .ck-comments-archive .ck-comments-archive__header{
max-height:40px;
line-height:var(--ck-font-size-base);
font-weight:bold;
border-bottom:1px solid var(--ck-color-toolbar-border);
}
.ck .ck-comments-archive .ck-comments-archive__content .ck-annotation-wrapper:not(:last-child){
margin-bottom:var(--ck-spacing-large);
}
.ck .ck-comments-archive .ck-comments-archive__info{
text-align:center;
font-style:italic;
color:var(--ck-color-annotation-info);
}
:root{
--ck-color-comment-marker:hsl(55, 98%, 83%);
--ck-color-comment-marker-active:hsl(55, 98%, 68%);
}