This commit is contained in:
2026-07-16 15:14:28 +08:00
parent 6a66c7867a
commit 87e594be52
2 changed files with 8756 additions and 11 deletions

8734
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -29,6 +29,7 @@ const VIDEO_MIME_TYPES: Record<string, string> = {
}; };
interface MarkdownAstNode { interface MarkdownAstNode {
type?: string;
position?: { position?: {
start?: { offset?: number }; start?: { offset?: number };
end?: { offset?: number }; end?: { offset?: number };
@@ -51,6 +52,7 @@ interface MarkdownTree {
interface MarkdownBlock { interface MarkdownBlock {
id: string; id: string;
type: string;
source: string; source: string;
html: string; html: string;
startOffset: number; startOffset: number;
@@ -367,6 +369,7 @@ function parseBlocks(md: string) {
const source = md.slice(startOffset, endOffset); const source = md.slice(startOffset, endOffset);
return { return {
id: `${index}-${startOffset}-${endOffset}`, id: `${index}-${startOffset}-${endOffset}`,
type: node.type || "unknown",
source, source,
html: renderBlockHtml(source), html: renderBlockHtml(source),
startOffset, startOffset,
@@ -381,6 +384,7 @@ function parseBlocks(md: string) {
markdownBlocks.value = [ markdownBlocks.value = [
{ {
id: "fallback-0", id: "fallback-0",
type: "unknown",
source: md, source: md,
html: renderBlockHtml(md), html: renderBlockHtml(md),
startOffset: 0, startOffset: 0,
@@ -1072,7 +1076,7 @@ defineExpose({
<div v-if="renderError" class="text-red-500 text-sm"> <div v-if="renderError" class="text-red-500 text-sm">
Markdown 解析错误 Markdown 解析错误
</div> </div>
<div v-else class="markdown-preview py-2" v-html="renderedHtml" /> <div v-else class="markdown-preview" v-html="renderedHtml" />
</div> </div>
<!-- Mixed mode --> <!-- Mixed mode -->
@@ -1116,6 +1120,9 @@ defineExpose({
:value="editingSource" :value="editingSource"
rows="1" rows="1"
class="markdown-block-editor" class="markdown-block-editor"
:class="{
'markdown-block-editor-soft-wrap': block.type === 'paragraph',
}"
@input="onBlockInput" @input="onBlockInput"
@keydown="onBlockKeydown" @keydown="onBlockKeydown"
@blur="finalizeBlockEdit" @blur="finalizeBlockEdit"
@@ -1315,20 +1322,24 @@ defineExpose({
.markdown-block-editor { .markdown-block-editor {
display: block; display: block;
width: 100%; width: 100%;
min-height: calc((1em * 1.6) + 1.5rem + 2px); min-height: 1.625em;
resize: none; resize: none;
overflow: hidden; overflow: hidden;
border: 1px solid var(--app-accent-muted); border: 0;
border-radius: 0.375rem; border-radius: 0;
background-color: var(--app-surface); background: transparent;
color: var(--app-text); color: var(--app-text);
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font: inherit;
font-size: 0.92em; line-height: inherit;
line-height: 1.6; margin: 0;
margin: 0.375rem 0; padding: 0;
padding: 0.75rem 0.875rem;
outline: none; outline: none;
box-shadow: 0 0 0 3px color-mix(in srgb, var(--app-accent) 12%, transparent); box-shadow: none;
caret-color: var(--app-accent);
}
.markdown-block-editor-soft-wrap {
white-space: normal;
} }
.markdown-block-editor::placeholder, .markdown-block-editor::placeholder,