REAL SHOWCASE SOURCEmarkdown-viewer-guide

1 个文件 · 89 行 · TypeScript

// ===== showcase/src/examples/components/markdown_viewer.ts ===== import {  RenderButton,  RenderMarkdownViewer,  RenderPageHeader,  RenderStackPanel,  RenderText,  RenderWrapPanel,} from 'ds-ui' const markdown = `# 患者过敏史核对指南 本文用于演示 Canvas 内的 **MarkdownViewer** 阅读、目录、搜索和代码块能力。 ## 核对步骤 1. 核对患者身份与腕带信息。2. 询问药物、食物与造影剂过敏史。3. 将结果写入结构化字段并保存。 > 重要:过敏史属于必须展示的业务信息,不能只放在 Tooltip 中。 ## 状态表 | 状态 | 含义 | 后续动作 || --- | --- | --- || 已确认 | 患者完成核对 | 可以进入处方审核 || 待确认 | 信息尚不完整 | 阻止高风险用药 || 不详 | 患者无法提供 | 标记并安排复核 | ## 接入代码 \`\`\`tsconst viewer = new RenderMarkdownViewer({  markdown: guide,  onLinkClick: event => openExternal(event.href),})\`\`\` ## 相关说明 - 支持 GFM 表格、任务列表和删除线。- 支持标题目录、全文搜索和选区复制。- HTML 只按文本展示,不执行脚本。` export function createMarkdownViewerExample(): RenderStackPanel {  const viewer = new RenderMarkdownViewer({ markdown, padding: 18, minHeight: 420 })  viewer.height = 500  const status = new RenderText('文档已加载:4 个二级标题。', { role: 'secondary' })  const actions = new RenderWrapPanel({ spacing: 8, runSpacing: 8 })  actions.addChild(new RenderButton({    label: '搜索“过敏”',    onClick: () => {      viewer.searchQuery = '过敏'      const results = viewer.getSearchResults()      if (results.length) viewer.scrollToSearchResult(0)      status.text = `找到 ${results.length} 个“过敏”匹配项。`    },  }))  actions.addChild(new RenderButton({    label: '跳到状态表',    variant: 'primary',    onClick: () => {      viewer.scrollToHeading('状态表')      status.text = '已跳转到“状态表”。'    },  }))  actions.addChild(new RenderButton({    label: '返回顶部',    onClick: () => {      viewer.scrollToTop()      viewer.searchQuery = ''      status.text = '已返回文档顶部并清除搜索。'    },  }))   const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 10, crossAxisAlignment: 'stretch' })  panel.addChild(new RenderPageHeader({    title: 'MarkdownViewer 开发与业务文档',    description: '在 Canvas 内完成 Markdown 排版、滚动、目录跳转、全文搜索、表格、代码块和复制。',  }))  panel.addChild(actions)  panel.addChild(status)  panel.addChild(viewer, 1)  panel.padding = 14  return panel}