style: new style of markdown editor

pull/1/head
Antonio De Lucreziis 2 years ago
parent 8a911f5ddb
commit 9d8689da36

@ -29,7 +29,7 @@ export const MarkdownEditor = ({ placeholder, source, setSource }: Props) => {
return ( return (
<div class="markdown-editor"> <div class="markdown-editor">
<div class="editor"> <div class="editor">
<h1>Editor</h1> <div class="label">Editor</div>
<textarea <textarea
onInput={e => setSource(e.target instanceof HTMLTextAreaElement ? e.target.value : '')} onInput={e => setSource(e.target instanceof HTMLTextAreaElement ? e.target.value : '')}
value={source} value={source}
@ -39,7 +39,7 @@ export const MarkdownEditor = ({ placeholder, source, setSource }: Props) => {
></textarea> ></textarea>
</div> </div>
<div class="preview"> <div class="preview">
<h1>Preview</h1> <div class="label">Preview</div>
<div class="preview-content"> <div class="preview-content">
{source.trim().length ? <Markdown source={source} /> : <div class="placeholder">{placeholder}</div>} {source.trim().length ? <Markdown source={source} /> : <div class="placeholder">{placeholder}</div>}
</div> </div>

@ -36,19 +36,23 @@ const CreateProblem = ({}) => {
} }
return ( return (
<> <div class="create-problem-form">
<div class="problem-title"> <div class="col">
<label>Titolo</label> <label for="create-problem-title">Titolo</label>
<input <input
type="text" type="text"
id="create-problem-title"
value={title} value={title}
onInput={e => setTitle(e.target instanceof HTMLInputElement ? e.target.value : '')} onInput={e => setTitle(e.target instanceof HTMLInputElement ? e.target.value : '')}
placeholder="Problema..." placeholder="Problema..."
/> />
</div> </div>
<div class="col">
<label>Testo</label>
<MarkdownEditor placeholder="Scrivi un nuovo problema..." {...{ source, setSource }} /> <MarkdownEditor placeholder="Scrivi un nuovo problema..." {...{ source, setSource }} />
</div>
<button onClick={handleCreateProblem}>Aggiungi Problema</button> <button onClick={handleCreateProblem}>Aggiungi Problema</button>
</> </div>
) )
} }

@ -1,4 +1,4 @@
$device-s-width: 640px; $device-s-width: 925px;
$device-m-width: 1200px; $device-m-width: 1200px;
:root { :root {
@ -285,10 +285,19 @@ $heading-scale: 1.25;
display: flex; display: flex;
gap: 0.5rem; gap: 0.5rem;
align-items: center; align-items: center;
}
@media screen and (max-width: $device-s-width), (pointer: coarse) { .col {
flex-direction: column;
width: 100%; width: 100%;
display: flex;
gap: 0.5rem;
align-items: center;
label {
align-self: start;
display: grid;
place-content: center;
} }
} }
@ -336,10 +345,18 @@ main {
.title { .title {
font-size: 32px; font-size: 32px;
@media screen and (max-width: $device-s-width), (pointer: coarse) {
text-align: center;
}
} }
.subtitle { .subtitle {
font-size: 28px; font-size: 28px;
@media screen and (max-width: $device-s-width), (pointer: coarse) {
text-align: center;
}
} }
.info { .info {
@ -759,27 +776,45 @@ header {
} }
.markdown-editor { .markdown-editor {
display: grid; display: flex;
width: 100%; flex-direction: row;
grid-template-columns: repeat(2, 1fr);
gap: 1rem; box-shadow: -2px 4px 6px 1px #00000018, 0 0 4px 0px #00000010;
border-radius: 0.25rem;
background: #ffffff;
// gap: 1rem;
.editor, .editor,
.preview { .preview {
width: 100%; width: 100%;
max-width: 70ch; max-width: 60ch;
min-width: 25ch;
flex: 0 1 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: 1rem; .label {
display: flex;
align-self: start;
font-size: 16px;
font-weight: 400;
padding: 0.5rem;
}
} }
.editor { .editor {
justify-self: end; justify-self: end;
.label {
right: 0;
}
textarea { textarea {
font-family: 'DM Mono', monospace; font-family: 'DM Mono', monospace;
font-size: 16px; font-size: 16px;
@ -787,13 +822,23 @@ header {
resize: none; resize: none;
overflow-y: hidden; overflow-y: hidden;
min-height: 8rem; min-height: 12rem;
box-shadow: none;
border-radius: unset;
background: none;
} }
} }
.preview { .preview {
justify-self: start; justify-self: start;
border-left: 1px solid #ddd;
.label {
left: 0;
}
.placeholder { .placeholder {
color: #666; color: #666;
} }
@ -805,9 +850,31 @@ header {
padding: 1rem; padding: 1rem;
box-shadow: -2px 4px 6px 1px #00000018, 0 0 4px 0px #00000010; word-break: break-word;
border-radius: 0.25rem; }
background: #ffffff; }
@media screen and (max-width: $device-m-width), (pointer: coarse) {
flex-direction: column;
.editor textarea,
.preview .preview-content {
padding: 0.75rem;
}
.editor {
textarea {
min-height: 3rem;
}
}
.preview {
border-left: none;
border-top: 1px solid #ddd;
.preview-content {
min-height: 4rem;
}
} }
} }
} }
@ -817,8 +884,13 @@ header {
// //
main.page-admin { main.page-admin {
.problem-title { .create-problem-form {
@extend .row; display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
} }
.users-table { .users-table {
@ -888,11 +960,6 @@ main.page-admin {
padding: 0.75rem; padding: 0.75rem;
} }
.markdown-editor {
grid-template-columns: auto;
grid-template-rows: auto auto;
}
.form { .form {
width: 100%; width: 100%;
padding: 1rem; padding: 1rem;
@ -907,10 +974,10 @@ main.page-admin {
} }
} }
textarea, // textarea,
.markdown-editor .preview .preview-content { // .markdown-editor .preview .preview-content {
padding: 0.75rem; // padding: 0.75rem;
} // }
.solution { .solution {
.solution-content { .solution-content {
@ -923,13 +990,13 @@ main.page-admin {
} }
@media screen and (max-width: $device-m-width), (pointer: coarse) { @media screen and (max-width: $device-m-width), (pointer: coarse) {
.markdown-editor { // .markdown-editor {
grid-template-columns: auto; // grid-template-columns: auto;
grid-template-rows: auto auto; // grid-template-rows: auto auto;
.preview, // .preview,
.editor { // .editor {
justify-self: center; // justify-self: center;
} // }
} // }
} }

Loading…
Cancel
Save