分段编辑器

chunk 编辑器 .kb-chunks:行内直接编辑(contenteditable,blur 且内容变化才提交,meta 出「已编辑」)+ 启停开关(available=false 不删除、仅排除出检索——RAGFlow 语义,行整体降透明)+ 关键词 chips(域内自实现:× 删除 / Enter 新增)+ 全文|语义双通道搜索(全文本地过滤内容与关键词,语义模式交消费方召回后重渲染,两种模式都派事件)。删除只派事件不删行——不可逆操作由消费方确认后重渲染。事件族 icen:kb-chunk-toggle / edit / remove / add / search。

直接改写正文(失焦提交)/ 点启用开关(第 4 条已停用)/ 敲 Enter 加关键词 / 全文搜索本地过滤(试试「评分」),切「语义」模式只派事件不过滤

事件日志:等待交互

<p class="demo-label" style="margin:0 0 8px">直接改写正文(失焦提交)/ 点启用开关(第 4 条已停用)/ 敲 Enter 加关键词 / 全文搜索本地过滤(试试「评分」),切「语义」模式只派事件不过滤</p><div id="demo-kb-chunks"></div><p class="demo-label" id="demo-kb-chunks-log" style="margin-top:8px">事件日志:等待交互</p>

安装

bun add @icen.ai/ui

一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):

import { initKbChunks } from '@icen.ai/ui/kit/kb-chunks';initKbChunks();

也可以用脚手架直接打印引入行:

bunx --bun @icen.ai/ui add kb-chunks

Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/kb-ingest.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。

用法

import { renderKbChunks, initKbChunks } from '@icen.ai/ui/kit/kb-chunks';initKbChunks();   // 行内编辑 / 启停 / 关键词 / 增删 / 搜索 全部 root 级委托(幂等 + 销毁函数) renderKbChunks(el, [  { id: 'ck-2', documentId: 'doc-vendor-32', available: true, page: 3,    keywords: ['评分', '淘汰线'],    content: '准入评分 = 资质 40 + 质量 35 + 交付 25;评分低于 60 分不予通过。' },  { id: 'ck-4', documentId: 'doc-vendor-32', available: false, page: 6,    content: '(历史口径,已被 v3.2 取代)准入评分 = 资质 50 + 质量 50。' },], { documentId: 'doc-vendor-32', searchMode: 'text', query: '' });// available=false → .is-off(排除出检索不删除);edited → .is-edited + meta「已编辑」// 事件:icen:kb-chunk-toggle { chunkId, available } / icen:kb-chunk-edit { chunkId }//      icen:kb-chunk-remove { chunkId } / icen:kb-chunk-add { documentId }//      icen:kb-chunk-search { mode: 'text' | 'vector', query }(输入 200ms 防抖)