|
2348 | 2348 | </script> |
2349 | 2349 |
|
2350 | 2350 | <main class="workspace"> |
| 2351 | + <div class="toolbar-shell"> |
2351 | 2352 | <section class="toolbar" aria-label="글 편집 도구"> |
2352 | 2353 | <div class="tool-group command-group"> |
2353 | 2354 | <button |
|
2970 | 2971 | {/if} |
2971 | 2972 | </section> |
2972 | 2973 |
|
2973 | | - {#if isMarkdownPanelOpen} |
2974 | | - <section class="markdown-panel" aria-label="Markdown import"> |
2975 | | - <textarea |
2976 | | - class="markdown-input" |
2977 | | - bind:value={markdownDraft} |
2978 | | - aria-label="Markdown 원문" |
2979 | | - spellcheck="false" |
2980 | | - placeholder={`# 제목\n\n본문과 [링크](https://example.com)\n\n\`\`\`cpp\nint main() {}\n\`\`\``} |
2981 | | - oninput={() => (markdownImportState = "idle")} |
2982 | | - ></textarea> |
2983 | | - <div class="markdown-actions"> |
2984 | | - <button |
2985 | | - class="markdown-import-button" |
2986 | | - type="button" |
2987 | | - aria-label="Markdown 적용하기" |
2988 | | - onclick={importMarkdownDraft} |
2989 | | - > |
2990 | | - <FileText size={16} /> |
2991 | | - <span>적용하기</span> |
2992 | | - </button> |
2993 | | - <button |
2994 | | - class="markdown-clear-button" |
2995 | | - type="button" |
2996 | | - aria-label="Markdown 비우기" |
2997 | | - onclick={clearMarkdownDraft} |
2998 | | - > |
2999 | | - <Trash2 size={15} /> |
3000 | | - <span>비우기</span> |
3001 | | - </button> |
3002 | | - <span |
3003 | | - class:error={markdownImportState === "error"} |
3004 | | - class="markdown-status">{markdownImportStateLabel}</span |
3005 | | - > |
3006 | | - </div> |
3007 | | - </section> |
3008 | | - {/if} |
3009 | | - |
3010 | 2974 | {#if isStoragePanelOpen} |
3011 | 2975 | <div id="storage-panel" class="storage-panel"> |
3012 | 2976 | <section class="preset-panel" aria-label="프리셋"> |
|
3199 | 3163 | </section> |
3200 | 3164 | </div> |
3201 | 3165 | {/if} |
| 3166 | + </div> |
| 3167 | + |
| 3168 | + {#if isMarkdownPanelOpen} |
| 3169 | + <section class="markdown-panel" aria-label="Markdown import"> |
| 3170 | + <textarea |
| 3171 | + class="markdown-input" |
| 3172 | + bind:value={markdownDraft} |
| 3173 | + aria-label="Markdown 원문" |
| 3174 | + spellcheck="false" |
| 3175 | + placeholder={`# 제목\n\n본문과 [링크](https://example.com)\n\n\`\`\`cpp\nint main() {}\n\`\`\``} |
| 3176 | + oninput={() => (markdownImportState = "idle")} |
| 3177 | + ></textarea> |
| 3178 | + <div class="markdown-actions"> |
| 3179 | + <button |
| 3180 | + class="markdown-import-button" |
| 3181 | + type="button" |
| 3182 | + aria-label="Markdown 적용하기" |
| 3183 | + onclick={importMarkdownDraft} |
| 3184 | + > |
| 3185 | + <FileText size={16} /> |
| 3186 | + <span>적용하기</span> |
| 3187 | + </button> |
| 3188 | + <button |
| 3189 | + class="markdown-clear-button" |
| 3190 | + type="button" |
| 3191 | + aria-label="Markdown 비우기" |
| 3192 | + onclick={clearMarkdownDraft} |
| 3193 | + > |
| 3194 | + <Trash2 size={15} /> |
| 3195 | + <span>비우기</span> |
| 3196 | + </button> |
| 3197 | + <span |
| 3198 | + class:error={markdownImportState === "error"} |
| 3199 | + class="markdown-status">{markdownImportStateLabel}</span |
| 3200 | + > |
| 3201 | + </div> |
| 3202 | + </section> |
| 3203 | + {/if} |
3202 | 3204 |
|
3203 | 3205 | <section class="workbench"> |
3204 | 3206 | <div class="editor-panel"> |
|
3337 | 3339 | padding: 10px 0 34px; |
3338 | 3340 | } |
3339 | 3341 |
|
3340 | | - .toolbar { |
| 3342 | + .toolbar-shell { |
3341 | 3343 | position: sticky; |
3342 | 3344 | top: 8px; |
3343 | 3345 | z-index: 20; |
3344 | 3346 | display: grid; |
3345 | | - grid-template-columns: auto minmax(0, 1fr) auto; |
3346 | | - gap: 9px 10px; |
3347 | | - align-items: stretch; |
| 3347 | + gap: 10px; |
3348 | 3348 | max-height: calc(100vh - 16px); |
3349 | 3349 | margin-bottom: 12px; |
3350 | 3350 | overflow: auto; |
3351 | 3351 | overscroll-behavior: contain; |
| 3352 | + scrollbar-gutter: stable; |
| 3353 | + } |
| 3354 | +
|
| 3355 | + .toolbar { |
| 3356 | + display: grid; |
| 3357 | + grid-template-columns: auto minmax(0, 1fr) auto; |
| 3358 | + gap: 9px 10px; |
| 3359 | + align-items: stretch; |
3352 | 3360 | padding: 10px; |
3353 | 3361 | border: 1px solid var(--line); |
3354 | 3362 | border-radius: 8px; |
3355 | 3363 | background: color-mix(in oklch, var(--panel) 98%, oklch(0% 0 0 / 0)); |
3356 | 3364 | box-shadow: 0 18px 44px oklch(0% 0 0 / 0.18); |
3357 | | - scrollbar-gutter: stable; |
3358 | 3365 | } |
3359 | 3366 |
|
3360 | 3367 | .tool-group { |
|
3708 | 3715 | } |
3709 | 3716 |
|
3710 | 3717 | .storage-panel { |
| 3718 | + grid-column: 1 / -1; |
3711 | 3719 | display: grid; |
3712 | 3720 | gap: 10px; |
3713 | | - margin-bottom: 12px; |
| 3721 | + margin: 0; |
3714 | 3722 | } |
3715 | 3723 |
|
3716 | 3724 | .preset-panel, |
|
0 commit comments