元素
自定义
CustomElement
类允许您渲染自定义 .jsx
代码片段。.jsx
文件应放置在 public/elements/ELEMENT_NAME.jsx
中。
属性
自定义元素的名称。应与您的 JSX 文件名匹配(不包含 .jsx
扩展名)。
要传递给 JSX 的属性(props)。
确定文本元素在 UI 中的显示方式。选项包括“侧边”、“内联”或“页面”。
如何编写 JSX 文件
如果您不熟悉 UI 开发,可以将这些说明传递给 LLM,让它为您生成
.jsx
文件!要为您的 Chainlit 自定义元素实现 jsx
文件,请按照以下说明进行。
组件定义
只写 JSX 代码,不写 TSX。每个 .jsx
文件应默认导出一个组件,例如
组件的 props
是全局注入的(而不是作为函数参数)。切勿 将它们作为函数参数传递。
使用 Tailwind 进行样式设置
在底层,代码将在 shadcn + tailwind 环境中渲染。主题依赖于 CSS 变量。
这是一个渲染具有主色背景和圆角边框的 div
的示例
仅使用允许的导入
仅使用可用的包进行导入。以下是完整列表
react
sonner
zod
recoil
react-hook-form
lucide-react
@/components/ui/accordion
@/components/ui/aspect-ratio
@/components/ui/avatar
@/components/ui/badge
@/components/ui/button
@/components/ui/card
@/components/ui/carousel
@/components/ui/checkbox
@/components/ui/command
@/components/ui/dialog
@/components/ui/dropdown-menu
@/components/ui/form
@/components/ui/hover-card
@/components/ui/input
@/components/ui/label
@/components/ui/pagination
@/components/ui/popover
@/components/ui/progress
@/components/ui/scroll-area
@/components/ui/separator
@/components/ui/select
@/components/ui/sheet
@/components/ui/skeleton
@/components/ui/switch
@/components/ui/table
@/components/ui/textarea
@/components/ui/tooltip
@/components/ui
的导入来自 Shadcn。可用 API
Chainlit 全局公开以下 API,以使自定义元素具有交互性。
计数器元素示例
完整示例
让我们构建一个自定义元素来渲染 Linear 票据的状态。
首先,我们编写一个小型 Chainlit 应用程序,模拟从 linear 获取数据
app.py
其次,我们实现 Python 代码中引用的自定义元素
public/elements/LinearTicket.jsx
最后,我们使用 chainlit run app.py
启动应用程序并在 UI 中发送第一条消息。
已渲染 LinearTicket 自定义元素。
高级
从 Python 更新 Props
要从 Python 代码更新自定义元素的属性(props),您可以将元素实例存储在用户会话中并调用其上的 .update()
方法。
从 Python 调用函数
如果您需要直接从 Python 代码调用函数,可以使用 cl.CopilotFunction
。
call_func.py
CallFn.jsx