完善
This commit is contained in:
8734
package-lock.json
generated
Normal file
8734
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user