forked from github/plane
0c63f21718
* better variable names and comments * drag drop migrated * custom horizontal rule created * init transaction hijack * fixed code block with better contrast, keyboard tripple enter press disabled and syntax highlighting * fixed link selector closing on open behaviour * added better keymaps and syntax highlights * made drag and drop working for code blocks * fixed drag drop for code blocks * moved drag drop only to rich text editor * fixed drag and drop only for description * enabled drag handles for peek overview and main issues * got images to old state * fixed task lists to be smaller * removed validate image functions and uncessary imports * table icons svg attributes fixed * custom list keymap extension added * more uncessary imports of validate image removed * removed console logs * fixed drag-handle styles * space styles updated for the editor * removed showing quotes from blockquotes * removed validateImage for now * added better comments and improved redundant renders * removed uncessary console logs * created util for creating the drag handle element * fixed file names
323 lines
6.1 KiB
CSS
323 lines
6.1 KiB
CSS
.ProseMirror p.is-editor-empty:first-child::before {
|
||
content: attr(data-placeholder);
|
||
float: left;
|
||
color: rgb(var(--color-text-400));
|
||
pointer-events: none;
|
||
height: 0;
|
||
}
|
||
|
||
.ProseMirror .is-empty::before {
|
||
content: attr(data-placeholder);
|
||
float: left;
|
||
color: rgb(var(--color-text-400));
|
||
pointer-events: none;
|
||
height: 0;
|
||
}
|
||
|
||
/* Custom image styles */
|
||
|
||
.ProseMirror img {
|
||
transition: filter 0.1s ease-in-out;
|
||
|
||
&:hover {
|
||
cursor: pointer;
|
||
filter: brightness(90%);
|
||
}
|
||
|
||
&.ProseMirror-selectednode {
|
||
outline: 3px solid #5abbf7;
|
||
filter: brightness(90%);
|
||
}
|
||
}
|
||
|
||
.ProseMirror-gapcursor:after {
|
||
border-top: 1px solid rgb(var(--color-text-100)) !important;
|
||
}
|
||
|
||
/* Custom TODO list checkboxes – shoutout to this awesome tutorial: https://moderncss.dev/pure-css-custom-checkbox-style/ */
|
||
|
||
ul[data-type="taskList"] li > label {
|
||
margin-right: 0.2rem;
|
||
user-select: none;
|
||
}
|
||
|
||
@media screen and (max-width: 768px) {
|
||
ul[data-type="taskList"] li > label {
|
||
margin-right: 0.5rem;
|
||
}
|
||
}
|
||
|
||
ul[data-type="taskList"] li > label input[type="checkbox"] {
|
||
-webkit-appearance: none;
|
||
appearance: none;
|
||
background-color: rgb(var(--color-background-100));
|
||
margin: 0;
|
||
cursor: pointer;
|
||
width: 0.8rem;
|
||
height: 0.8rem;
|
||
position: relative;
|
||
border: 1.5px solid rgb(var(--color-text-100));
|
||
margin-right: 0.2rem;
|
||
margin-top: 0.15rem;
|
||
display: grid;
|
||
place-content: center;
|
||
|
||
&:hover {
|
||
background-color: rgb(var(--color-background-80));
|
||
}
|
||
|
||
&:active {
|
||
background-color: rgb(var(--color-background-90));
|
||
}
|
||
|
||
&::before {
|
||
content: "";
|
||
width: 0.5em;
|
||
height: 0.5em;
|
||
transform: scale(0);
|
||
transition: 120ms transform ease-in-out;
|
||
box-shadow: inset 1em 1em;
|
||
transform-origin: center;
|
||
clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
|
||
}
|
||
|
||
&:checked::before {
|
||
transform: scale(1);
|
||
}
|
||
}
|
||
|
||
ul[data-type="taskList"] li[data-checked="true"] > div > p {
|
||
color: rgb(var(--color-text-200));
|
||
text-decoration: line-through;
|
||
text-decoration-thickness: 2px;
|
||
}
|
||
|
||
/* Overwrite tippy-box original max-width */
|
||
|
||
.tippy-box {
|
||
max-width: 400px !important;
|
||
}
|
||
|
||
.ProseMirror {
|
||
position: relative;
|
||
word-wrap: break-word;
|
||
white-space: pre-wrap;
|
||
-moz-tab-size: 4;
|
||
tab-size: 4;
|
||
-webkit-user-select: text;
|
||
-moz-user-select: text;
|
||
-ms-user-select: text;
|
||
user-select: text;
|
||
outline: none;
|
||
cursor: text;
|
||
line-height: 1.2;
|
||
font-family: inherit;
|
||
font-size: 14px;
|
||
color: inherit;
|
||
-moz-box-sizing: border-box;
|
||
box-sizing: border-box;
|
||
appearance: textfield;
|
||
-webkit-appearance: textfield;
|
||
-moz-appearance: textfield;
|
||
}
|
||
|
||
.fadeIn {
|
||
opacity: 1;
|
||
transition: opacity 0.3s ease-in;
|
||
}
|
||
|
||
.fadeOut {
|
||
opacity: 0;
|
||
transition: opacity 0.2s ease-out;
|
||
}
|
||
|
||
.img-placeholder {
|
||
position: relative;
|
||
width: 35%;
|
||
|
||
&:before {
|
||
content: "";
|
||
box-sizing: border-box;
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 45%;
|
||
width: 20px;
|
||
height: 20px;
|
||
border-radius: 50%;
|
||
border: 3px solid rgba(var(--color-text-200));
|
||
border-top-color: rgba(var(--color-text-800));
|
||
animation: spinning 0.6s linear infinite;
|
||
}
|
||
}
|
||
|
||
@keyframes spinning {
|
||
to {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
#editor-container {
|
||
table {
|
||
border-collapse: collapse;
|
||
table-layout: fixed;
|
||
margin: 0;
|
||
border: 1px solid rgb(var(--color-border-200));
|
||
width: 100%;
|
||
|
||
td,
|
||
th {
|
||
min-width: 1em;
|
||
border: 1px solid rgb(var(--color-border-200));
|
||
padding: 10px 15px;
|
||
vertical-align: top;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
transition: background-color 0.3s ease;
|
||
|
||
> * {
|
||
margin-bottom: 0;
|
||
}
|
||
}
|
||
|
||
th {
|
||
font-weight: bold;
|
||
text-align: left;
|
||
background-color: rgb(var(--color-primary-100));
|
||
}
|
||
|
||
td:hover {
|
||
background-color: rgba(var(--color-primary-300), 0.1);
|
||
}
|
||
|
||
.selectedCell:after {
|
||
z-index: 2;
|
||
position: absolute;
|
||
content: "";
|
||
left: 0;
|
||
right: 0;
|
||
top: 0;
|
||
bottom: 0;
|
||
background-color: rgba(var(--color-primary-300), 0.1);
|
||
pointer-events: none;
|
||
}
|
||
|
||
.column-resize-handle {
|
||
position: absolute;
|
||
right: -2px;
|
||
top: 0;
|
||
bottom: -2px;
|
||
width: 2px;
|
||
background-color: rgb(var(--color-primary-400));
|
||
pointer-events: none;
|
||
}
|
||
}
|
||
}
|
||
|
||
.tableWrapper {
|
||
overflow-x: auto;
|
||
}
|
||
|
||
.resize-cursor {
|
||
cursor: ew-resize;
|
||
cursor: col-resize;
|
||
}
|
||
|
||
.ProseMirror table * p {
|
||
padding: 0px 1px;
|
||
margin: 6px 2px;
|
||
}
|
||
|
||
.ProseMirror table * .is-empty::before {
|
||
opacity: 0;
|
||
}
|
||
|
||
.ProseMirror pre {
|
||
background: rgba(var(--color-background-80));
|
||
border-radius: 0.5rem;
|
||
color: rgba(var(--color-text-100));
|
||
font-family: "JetBrainsMono", monospace;
|
||
padding: 0.75rem 1rem;
|
||
}
|
||
|
||
.ProseMirror pre code {
|
||
background: none;
|
||
color: inherit;
|
||
font-size: 0.8rem;
|
||
padding: 0;
|
||
}
|
||
|
||
.ProseMirror:not(.dragging) .ProseMirror-selectednode:not(img):not(pre) {
|
||
outline: none !important;
|
||
border-radius: 0.2rem;
|
||
background-color: rgb(var(--color-background-90));
|
||
border: 1px solid #5abbf7;
|
||
padding: 4px 2px 4px 2px;
|
||
transition: background-color 0.2s;
|
||
box-shadow: none;
|
||
}
|
||
|
||
.drag-handle {
|
||
position: fixed;
|
||
opacity: 1;
|
||
transition: opacity ease-in 0.2s;
|
||
height: 18px;
|
||
width: 15px;
|
||
display: grid;
|
||
place-items: center;
|
||
z-index: 10;
|
||
cursor: grab;
|
||
border-radius: 2px;
|
||
background-color: rgb(var(--color-background-90));
|
||
}
|
||
|
||
.drag-handle:hover {
|
||
background-color: rgb(var(--color-background-80));
|
||
transition: background-color 0.2s;
|
||
}
|
||
|
||
.drag-handle.hidden {
|
||
opacity: 0;
|
||
pointer-events: none;
|
||
}
|
||
|
||
@media screen and (max-width: 600px) {
|
||
.drag-handle {
|
||
display: none;
|
||
pointer-events: none;
|
||
}
|
||
}
|
||
|
||
.drag-handle-container {
|
||
height: 15px;
|
||
width: 15px;
|
||
cursor: grab;
|
||
display: grid;
|
||
place-items: center;
|
||
}
|
||
|
||
.drag-handle-dots {
|
||
height: 100%;
|
||
width: 12px;
|
||
display: grid;
|
||
grid-template-columns: repeat(2, 1fr);
|
||
place-items: center;
|
||
}
|
||
|
||
.drag-handle-dot {
|
||
height: 2.75px;
|
||
width: 3px;
|
||
background-color: rgba(var(--color-text-200));
|
||
border-radius: 50%;
|
||
}
|
||
|
||
div[data-type="horizontalRule"] {
|
||
line-height: 0;
|
||
padding: 0.25rem 0;
|
||
margin-top: 0;
|
||
margin-bottom: 0;
|
||
|
||
& > div {
|
||
border-bottom: 1px solid rgb(var(--color-text-100));
|
||
}
|
||
}
|