feat(mira): P0 河道完善 3 task — Mira 頭像 / @mira 選擇性回覆 / 編輯器 popup
對應 tasks.md backlog #5a / #5b / #5c(leo 2026-05-16 P0),design.md §3.6.5。
#5a Mira 發文獨立頭像
- 新 MiraAvatar 元件(紫色漸層圓 + 🤖 emoji)
- isMiraSource() 判斷 post 來源是 leo(km-writer-direct/logseq/mobile/web/tg/rss)
還是 mira(ai-* / mira-* / 其他 test sources)
- PostCard header:showMira ? Mira 頭像 + 名「Mira」 : leo 頭像 + leo 名
#5b @mira 選擇性回覆(撤回每篇 auto-reply)
- 新 hasMiraMention() regex:偵測文字含 @mira(前後可有標點)
- PostComposer / BlockEditor / ReplyLine 三處 submit:只有 @mira 時 triggerAiReply
- triggerAiReply prompt 加 topic 抽取(@mira 後第一段到標點)+ scope hint
- wiki_synthesis trigger 跟 @mira 無關,每篇都跑(KB 副本同步)
- 不擋手動筆記(leo 隨手寫不需要 mira 每篇都回)
#5c 編輯器 popup 放大
- composer 加 ⇱ 放大按鈕 → 切到 fullscreen overlay popup
- popup 含大 textarea + 同 markdown toolbar + 同 submit 邏輯
- ⌘+Enter 發布、Esc 收起、外點 backdrop 收起
- 對應 leo「寫長文 textarea 太小」需求
CSS 加 .mira-avatar-mira / .mira-composer-popup-* 系列。
TS check pass。
This commit is contained in:
@@ -139,6 +139,18 @@
|
||||
font-family: var(--mira-font-en);
|
||||
}
|
||||
|
||||
/* Mira 自有頭像 — 跟 leo 區分(紫色漸層 + 機器人 emoji) */
|
||||
.mira-app .mira-avatar-mira {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
background: linear-gradient(135deg, oklch(0.45 0.15 280), oklch(0.55 0.18 300));
|
||||
color: #fff;
|
||||
border-radius: 50%;
|
||||
flex-shrink: 0;
|
||||
/* emoji 本身有色彩,背景僅當邊框襯托 */
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/* ── post 貼文 ── */
|
||||
.mira-app .mira-post {
|
||||
display: flex;
|
||||
@@ -775,3 +787,75 @@
|
||||
border-bottom: 1px solid var(--mira-line-soft);
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
/* ── Composer popup (P0 #5c 編輯器放大) ── */
|
||||
.mira-app .mira-composer-expand {
|
||||
font-size: 18px;
|
||||
padding: 0 8px;
|
||||
cursor: pointer;
|
||||
color: var(--mira-text-3);
|
||||
}
|
||||
.mira-app .mira-composer-expand:hover {
|
||||
color: var(--mira-text-1);
|
||||
}
|
||||
|
||||
/* backdrop 蓋全頁 + 居中 */
|
||||
.mira-composer-popup-backdrop {
|
||||
position: fixed;
|
||||
inset: 0;
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
z-index: 1000;
|
||||
display: grid;
|
||||
place-items: center;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
/* popup card 大編輯區 */
|
||||
.mira-composer-popup {
|
||||
background: var(--mira-bg-1);
|
||||
border: 1px solid var(--mira-line);
|
||||
border-radius: var(--mira-radius-lg);
|
||||
width: min(800px, 100%);
|
||||
max-height: 90vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
font-family: var(--mira-font-zh);
|
||||
color: var(--mira-text-1);
|
||||
}
|
||||
|
||||
.mira-composer-popup-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 14px 16px;
|
||||
border-bottom: 1px solid var(--mira-line);
|
||||
}
|
||||
|
||||
.mira-composer-popup-title {
|
||||
font-weight: 600;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.mira-composer-popup-textarea {
|
||||
flex: 1;
|
||||
min-height: 320px;
|
||||
padding: 16px;
|
||||
background: transparent;
|
||||
color: var(--mira-text-1);
|
||||
border: none;
|
||||
outline: none;
|
||||
resize: none;
|
||||
font-family: inherit;
|
||||
font-size: 15px;
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
.mira-composer-popup-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 12px 16px;
|
||||
border-top: 1px solid var(--mira-line);
|
||||
background: var(--mira-bg-0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user