zhenxun_bot/zhenxun/ui/models/core/notebook.py
webjoin111 33645422ac ♻️ refactor(UI): 重构UI渲染服务为组件化分层架构
♻️ **架构重构**
- UI渲染服务重构为组件化分层架构
- 解耦主题管理、HTML生成、截图功能

 **新增功能**
- `zhenxun.ui` 统一入口,提供 `render`、`markdown`、`vstack` 等API
- `RenderableComponent` 基类和渲染协议抽象
- 新增主题管理器和截图引擎模块

⚙️ **配置优化**
- UI配置迁移至 `superuser/ui_manager.py`
- 新增"重载UI主题"管理指令

🔧 **性能改进**
- 优化渲染缓存,支持组件级透明缓存
- 所有UI组件适配新渲染流程
2025-08-18 21:45:48 +08:00

49 lines
1.2 KiB
Python

from typing import Literal
from pydantic import BaseModel
from .base import ContainerComponent, RenderableComponent
__all__ = ["NotebookData", "NotebookElement"]
class NotebookElement(BaseModel):
"""一个 Notebook 页面中的单个元素"""
type: Literal[
"heading",
"paragraph",
"image",
"blockquote",
"code",
"list",
"divider",
"component",
]
text: str | None = None
level: int | None = None
src: str | None = None
caption: str | None = None
code: str | None = None
language: str | None = None
data: list[str] | None = None
ordered: bool | None = None
component: RenderableComponent | None = None
html_content: str | None = None
class NotebookData(ContainerComponent):
"""Notebook转图片的数据模型"""
style_name: str | None = None
elements: list[NotebookElement]
@property
def template_name(self) -> str:
return "components/core/notebook"
def _get_renderable_child_items(self):
for element in self.elements:
if element.type == "component" and element.component:
yield element