From b9adb8f87819351ebaafde18692cd32c03ecce9d Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sat, 3 Jan 2026 19:32:52 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/16758 --- .../assets/scss/component/_typography.scss | 4 ++ app/src/emoji/index.ts | 4 +- app/src/protyle/wysiwyg/callout.ts | 52 +++++++++++++++++-- app/src/protyle/wysiwyg/index.ts | 15 +++++- 4 files changed, 66 insertions(+), 9 deletions(-) diff --git a/app/src/assets/scss/component/_typography.scss b/app/src/assets/scss/component/_typography.scss index 2fac097f4..ba97150cd 100644 --- a/app/src/assets/scss/component/_typography.scss +++ b/app/src/assets/scss/component/_typography.scss @@ -170,6 +170,10 @@ color: var(--b3-callout-note); } + .callout-icon:empty { + display: none; + } + &[data-subtype="WARNING"] { &::before { background-color: var(--b3-callout-warning); diff --git a/app/src/emoji/index.ts b/app/src/emoji/index.ts index 15105624a..044df7a1f 100644 --- a/app/src/emoji/index.ts +++ b/app/src/emoji/index.ts @@ -560,7 +560,6 @@ export const openEmojiPanel = ( notebook: id, icon: "" }, () => { - dialog.destroy(); updateFileTreeEmoji("", id, "iconFilesRoot"); }); } else if (type === "doc") { @@ -568,7 +567,6 @@ export const openEmojiPanel = ( id: id, attrs: {"icon": ""} }, () => { - dialog.destroy(); updateFileTreeEmoji("", id); updateOutlineEmoji("", id); }); @@ -576,6 +574,7 @@ export const openEmojiPanel = ( if (callback) { callback(""); } + dialog.destroy(); break; } else if (target.classList.contains("emojis__item") || target.getAttribute("data-action") === "random" || target.classList.contains("emoji__dynamic-item")) { let unicode = ""; @@ -603,7 +602,6 @@ export const openEmojiPanel = ( }, () => { updateFileTreeEmoji(unicode, id); updateOutlineEmoji(unicode, id); - }); } if (callback) { diff --git a/app/src/protyle/wysiwyg/callout.ts b/app/src/protyle/wysiwyg/callout.ts index ab0e68ae0..b34c7e37f 100644 --- a/app/src/protyle/wysiwyg/callout.ts +++ b/app/src/protyle/wysiwyg/callout.ts @@ -5,15 +5,27 @@ import {Dialog} from "../../dialog"; import {Menu} from "../../plugin/Menu"; import {isMobile} from "../../util/functions"; import {Constants} from "../../constants"; +import {openEmojiPanel, unicode2Emoji} from "../../emoji"; export const updateCalloutType = (titleElement: HTMLElement, protyle: IProtyle) => { const blockElement = hasClosestBlock(titleElement); if (!blockElement) { return; } + const blockCalloutElement = blockElement.querySelector(".callout-icon"); const dialog = new Dialog({ title: window.siyuan.languages.callout, content: `
+ +