// AGENTS.md §7 / §37 message list. // // Phase 7 C4: 重写。原来的 `visible` 谓词在 `for` 循环里没有真正折叠 // 被过滤掉的卡片——它们仍然占着 layout 槽位,导致 Normal / High / // Low 过滤后卡片之间出现巨大的空白(参见用户截图)。 // // 修法:把过滤移到 Rust 侧(lib.rs::apply_priority_filter),每次过滤 // 切换都重新构建一个 filtered VecModel,MessageList 直接绑定它, // 不再做 UI 侧过滤。这样还顺手解决了 AGENTS.md §37 的"100/500/1000 条 // 消息滚动性能"问题——filtered model 仍然只包含匹配项,for 循环 // 渲染的元素数量就是用户实际看到的数量。 import { MessageItem, MessageCard } from "./message-card.slint"; export component MessageList inherits Rectangle { in property <[MessageItem]> messages; in-out property selected-index: -1; in property card-border: #3a3b40; callback message-clicked(int); background: transparent; VerticalLayout { spacing: 8px; for item[idx] in messages: MessageCard { item: item; selected: idx == root.selected-index; card-border: card-border; clicked => { root.selected-index = idx; root.message-clicked(idx); } } } }