feat: show the way to publish, and what is blocking it, in the editor
Publishing was reachable only by walking the whole chain blind. The editor offered one link — "저장본 검증" — and the word "게시" appeared nowhere until three screens later, so an author with a finished draft could not tell how to publish it. The working-copy list already named the next step, but the name was plain text with nowhere to go. The editor now shows the whole path: 검증 → 미리보기 → 게시, each a link. The list's next step is a link to that step. Neither weakens the gates — an unvalidated document is still refused at preview, an unpreviewed one at publish. What changes is that the order stops being a secret. What is blocking publication now appears where it gets fixed. The validation report lived on its own screen, so an author read the list, navigated back, and had to remember which field each item meant. The editor shows the same issues above the fields, in red, and says plainly when they describe an older saved version rather than the current one. The clock is read during render, not captured as an effect dependency. It is a new function on every render of the provider, so depending on it refetched the document endlessly — the editor never settled, and a tab click did not even register. A value you are asking about now does not belong in a dependency array.
This commit is contained in:
@@ -119,3 +119,21 @@
|
||||
.studio-app .studio-item-actions { display: grid; grid-template-columns: minmax(0, 1fr); }
|
||||
.studio-app .studio-instant-preview .public-record-embedded { padding: 22px 16px; }
|
||||
}
|
||||
|
||||
/* 게시까지의 단계. 순서가 있는 길이라 번호를 붙인다 — 장식이 아니라 밟아야 하는 차례다. */
|
||||
.studio-app .studio-editor-flow ol { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 14px 0 0; padding: 0; list-style: none; }
|
||||
.studio-app .studio-editor-flow li { display: flex; align-items: center; gap: 6px; font-size: 13px; }
|
||||
.studio-app .studio-editor-flow li + li::before { content: "→"; margin-right: 4px; color: var(--faint); }
|
||||
.studio-app .studio-editor-flow span { display: inline-flex; min-width: 18px; height: 18px; align-items: center; justify-content: center; border-radius: 999px; background: var(--line); color: var(--muted); font-size: 11px; font-weight: 650; }
|
||||
|
||||
/* 게시를 막는 항목. 고치는 자리에서 보이지 않으면 작성자는 별도 화면과 편집기를 오가며
|
||||
어느 칸이었는지 기억해야 한다. */
|
||||
.studio-app .studio-editor-validation { margin: 0 0 20px; padding: 14px 16px; border: 1px solid var(--danger, #b4232a); border-radius: 6px; background: var(--paper); }
|
||||
.studio-app .studio-editor-validation--stale { border-color: var(--line-strong); opacity: 0.72; }
|
||||
.studio-app .studio-editor-validation-title { margin: 0 0 10px; color: var(--danger, #b4232a); font-size: 13px; font-weight: 700; }
|
||||
.studio-app .studio-editor-validation--stale .studio-editor-validation-title { color: var(--muted); }
|
||||
.studio-app .studio-editor-validation ul { display: grid; gap: 7px; margin: 0; padding: 0; list-style: none; }
|
||||
.studio-app .studio-editor-validation li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; font-size: 13px; color: var(--ink); }
|
||||
.studio-app .studio-editor-validation li span { min-width: 30px; color: var(--danger, #b4232a); font-size: 11px; font-weight: 700; }
|
||||
.studio-app .studio-editor-validation li[data-severity="WARNING"] span { color: var(--muted); }
|
||||
.studio-app .studio-editor-validation code { color: var(--faint); font-size: 11px; }
|
||||
|
||||
Reference in New Issue
Block a user