.
All checks were successful
Deploy blog-frontend / build-and-deploy (push) Successful in 2m12s

This commit is contained in:
박원엽
2026-05-29 12:30:28 +09:00
parent 3ecccbe28f
commit d264a7a139
3 changed files with 31 additions and 3 deletions

1
LOG.md
View File

@@ -10,6 +10,7 @@
- Tuned the follow-up layout: main content now centers inside the area remaining after the desktop sidebar, sidebar GitHub/email shortcuts were removed, top-bar GitHub/email links now sit as plain left-side menu items, and the home labels were simplified to 홈/WYPark. - Tuned the follow-up layout: main content now centers inside the area remaining after the desktop sidebar, sidebar GitHub/email shortcuts were removed, top-bar GitHub/email links now sit as plain left-side menu items, and the home labels were simplified to 홈/WYPark.
- Softened the home dashboard inner popular/latest sections so they no longer render as nested macOS windows with traffic-light controls; they now read as embedded dashboard panels inside the WYPark window. - Softened the home dashboard inner popular/latest sections so they no longer render as nested macOS windows with traffic-light controls; they now read as embedded dashboard panels inside the WYPark window.
- Rebuilt the admin post writing screen as a glassy Markdown Studio with a larger writing area, publish controls, category/tag/image/draft panels, and fixed MDEditor foreground colors so typed text remains readable in both light and dark themes. - Rebuilt the admin post writing screen as a glassy Markdown Studio with a larger writing area, publish controls, category/tag/image/draft panels, and fixed MDEditor foreground colors so typed text remains readable in both light and dark themes.
- Hardened the Markdown editor text visibility fix by binding the editor color mode to the app's resolved theme and forcing the real textarea layer to use `--color-text` while hiding the syntax overlay text layer that could inherit the wrong contrast.
- Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully. - Validation: `npm run lint` passed, `npm run build` passed. The build logged a sitemap fetch warning because the backend API at the local default was not reachable, but the command completed successfully.
- Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed. - Browser verification: previously started this app on `http://localhost:3100` because ports 3000 and 3001 were already occupied; confirmed desktop background gradients, menu bar, Dock, and window surfaces on `/`, `/archive`, and `/login`. For this follow-up, the dev/standalone server started successfully in foreground but exited when launched as a background non-interactive process, so browser verification was skipped after lint/build passed.
- Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign. - Recommended next task: review the remaining older Korean strings in admin/editor flows and normalize any mojibake that predates this redesign.

View File

@@ -432,9 +432,27 @@ html[data-theme="dark"] .w-md-editor-toolbar {
color: var(--color-text) !important; color: var(--color-text) !important;
} }
.wy-editor-shell .w-md-editor-text {
color: var(--color-text) !important;
}
.wy-editor-shell .w-md-editor-text-pre,
.wy-editor-shell .w-md-editor-text-pre *,
.wy-editor-shell .w-md-editor-text-pre > code,
.wy-editor-shell .w-md-editor-text-pre code,
.wy-editor-shell .w-md-editor-text-pre .token,
.wy-editor-shell .w-md-editor-text-pre .punctuation {
color: transparent !important;
-webkit-text-fill-color: transparent !important;
}
.wy-editor-shell .w-md-editor-text-input { .wy-editor-shell .w-md-editor-text-input {
opacity: 1 !important;
background: transparent !important;
color: var(--color-text) !important;
-webkit-text-fill-color: var(--color-text) !important; -webkit-text-fill-color: var(--color-text) !important;
caret-color: var(--color-accent); caret-color: var(--color-accent);
text-shadow: none !important;
} }
.wy-editor-shell .w-md-editor-text-input::placeholder { .wy-editor-shell .w-md-editor-text-input::placeholder {
@@ -442,8 +460,6 @@ html[data-theme="dark"] .w-md-editor-toolbar {
-webkit-text-fill-color: var(--color-text-subtle) !important; -webkit-text-fill-color: var(--color-text-subtle) !important;
} }
.wy-editor-shell .w-md-editor-text-pre > code,
.wy-editor-shell .w-md-editor-text-pre code,
.wy-editor-shell .wmde-markdown, .wy-editor-shell .wmde-markdown,
.wy-editor-shell .wmde-markdown p, .wy-editor-shell .wmde-markdown p,
.wy-editor-shell .wmde-markdown li, .wy-editor-shell .wmde-markdown li,

View File

@@ -22,6 +22,7 @@ import {
import { getCategories } from '@/api/category'; import { getCategories } from '@/api/category';
import { uploadImage } from '@/api/image'; import { uploadImage } from '@/api/image';
import { createPost, getPost, updatePost } from '@/api/posts'; import { createPost, getPost, updatePost } from '@/api/posts';
import { useTheme } from '@/components/theme/ThemeProvider';
import Surface from '@/components/ui/Surface'; import Surface from '@/components/ui/Surface';
import WindowSurface from '@/components/ui/WindowSurface'; import WindowSurface from '@/components/ui/WindowSurface';
import { useAuthStore } from '@/store/authStore'; import { useAuthStore } from '@/store/authStore';
@@ -187,6 +188,7 @@ export default function AdminPostEditor({ editSlug }: AdminPostEditorProps) {
const router = useRouter(); const router = useRouter();
const pathname = usePathname(); const pathname = usePathname();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const { resolvedTheme } = useTheme();
const { isLoggedIn, role, _hasHydrated, accessToken, refreshToken, login } = useAuthStore(); const { isLoggedIn, role, _hasHydrated, accessToken, refreshToken, login } = useAuthStore();
const isAdmin = _hasHydrated && role?.includes('ADMIN'); const isAdmin = _hasHydrated && role?.includes('ADMIN');
const isEditMode = Boolean(editSlug); const isEditMode = Boolean(editSlug);
@@ -528,12 +530,21 @@ export default function AdminPostEditor({ editSlug }: AdminPostEditorProps) {
className="mb-5 w-full rounded-lg border border-[var(--color-line)] bg-[var(--color-control)] px-4 py-3 text-2xl font-bold tracking-normal text-[var(--color-text)] outline-none transition placeholder:text-[var(--color-text-subtle)] focus:border-[var(--color-accent)] md:text-3xl" className="mb-5 w-full rounded-lg border border-[var(--color-line)] bg-[var(--color-control)] px-4 py-3 text-2xl font-bold tracking-normal text-[var(--color-text)] outline-none transition placeholder:text-[var(--color-text-subtle)] focus:border-[var(--color-accent)] md:text-3xl"
/> />
<div className="wy-editor-shell" data-color-mode="auto"> <div className="wy-editor-shell" data-color-mode={resolvedTheme}>
<MDEditor <MDEditor
value={content} value={content}
onChange={(value) => setContent(value || '')} onChange={(value) => setContent(value || '')}
height={680} height={680}
preview="edit" preview="edit"
data-color-mode={resolvedTheme}
textareaProps={{
style: {
color: 'var(--color-text)',
WebkitTextFillColor: 'var(--color-text)',
caretColor: 'var(--color-accent)',
background: 'transparent',
},
}}
className="wy-markdown-editor" className="wy-markdown-editor"
/> />
</div> </div>