| name | component-agentic-layout |
| description | Develop AgenticLayout (left-center-right layout with header) in @ant-design/agentic-ui. Use when building app shell, sidebar layout, or three-column layout. Triggers on AgenticLayout, layout, left center right, header, sidebar. |
AgenticLayout 组件开发
智能体应用主布局:左-中-右三栏 + 头部,用于应用外壳与侧栏布局。修改布局或头部时,按本技能内的 API 与规范直接实现,无需再查源码。
组件 API(自包含)
AgenticLayoutProps
| 属性 | 说明 | 类型 | 默认 |
|---|
left | 左侧内容 | ReactNode | - |
center | 中间内容(必填) | ReactNode | - |
right | 右侧内容 | ReactNode | - |
header | 头部配置,见下 | LayoutHeaderConfig | - |
style | 自定义样式,会透传到根节点(可含 minHeight 等) | React.CSSProperties | - |
className | 自定义类名,与根节点 prefixCls、hashId 一起拼接 | string | - |
leftWidth | 左侧宽度(px) | number | 256 |
rightWidth | 右侧宽度(px),可被用户拖拽改变,会受最小/最大限制 | number | 540 |
minHeight | 最小高度(类型已声明,实现上可用 style.minHeight 覆盖样式默认值) | string | number | - |
children | 子元素(兼容用,内容建议用 center) | ReactNode | - |
说明:根节点最小高度由样式固定为 600px;需自定义时传 style={{ minHeight: '...' }}。当前未从 props 的 minHeight 读到根节点,与类型保持一致即可。
LayoutHeaderConfig(头部配置)
| 属性 | 说明 | 类型 | 默认 |
|---|
title | 标题,支持文本或 React 节点 | ReactNode | 'AI 助手' |
showShare | 是否显示分享按钮 | boolean | false |
leftCollapsible | 左侧是否可折叠(未传时由 AgenticLayout 按是否有 left 推断) | boolean | - |
rightCollapsible | 右侧是否可折叠(未传时由 AgenticLayout 按是否有 right 推断) | boolean | - |
leftCollapsed | 左侧折叠状态(受控) | boolean | - |
rightCollapsed | 右侧折叠状态(受控) | boolean | - |
leftDefaultCollapsed | 左侧默认折叠(非受控) | boolean | false |
rightDefaultCollapsed | 右侧默认折叠(非受控) | boolean | false |
onLeftCollapse | 左侧折叠回调 | (collapsed: boolean) => void | - |
onRightCollapse | 右侧折叠回调 | (collapsed: boolean) => void | - |
onShare | 分享点击 | () => void | - |
leftExtra | 头部左侧额外内容,渲染在标题同侧 | ReactNode | - |
rightExtra | 头部右侧额外内容,渲染在分享/折叠按钮同侧 | ReactNode | - |
className | 头部根节点自定义类名 | string | - |
折叠状态:有 leftCollapsed/rightCollapsed 时为受控;否则用 leftDefaultCollapsed/rightDefaultCollapsed 作初始值,由内部 useMergedState + onLeftCollapse/onRightCollapse 更新。LayoutHeader 内部用 I18n 的 locale['chatFlow.collapseLeft']、locale['chatFlow.collapseRight']、locale['chatFlow.share'] 等做文案与 aria-label。
导出(库入口)
- AgenticLayout:
export { AgenticLayout },类型 export interface AgenticLayoutProps
- LayoutHeader:
export { LayoutHeader },类型 export type { LayoutHeaderConfig, LayoutHeaderProps }(LayoutHeaderProps 与 LayoutHeaderConfig 相同)
从 @ant-design/agentic-ui 可解构:AgenticLayout、AgenticLayoutProps、LayoutHeader、LayoutHeaderConfig、LayoutHeaderProps。
DOM 与类名结构(BEM)
AgenticLayout
- 根:
prefixCls(默认 ant-agentic-layout)
- 主体:
${prefixCls}-body(flex 容器)
- 左侧栏:
${prefixCls}-sidebar、${prefixCls}-sidebar-left,折叠时加 ${prefixCls}-sidebar-left-collapsed
- 中间区:
${prefixCls}-main,内容包裹在 ${prefixCls}-main-content;头部渲染在 main 内、content 前;main-content 高度为 calc(100% - 48px) 以预留头部
- 右侧栏容器:
${prefixCls}-sidebar-wrapper-right,内为拖拽手柄 + 右侧栏
- 拖拽手柄:
${prefixCls}-resize-handle、${prefixCls}-resize-handle-right(宽度 6px,hover 时高亮)
- 右侧栏:
${prefixCls}-sidebar、${prefixCls}-sidebar-right,折叠时加 ${prefixCls}-sidebar-right-collapsed
- 侧栏内容区:
${prefixCls}-sidebar-content
样式通过 useAgenticLayoutStyle(prefixCls) 注册,使用项目内 genStyleHooks 与 token(如 componentCls)。根节点在样式中设 minHeight: 600px。
LayoutHeader(头部子组件)
- 根:
prefixCls(默认 ant-layout-header)
- 左侧区域:
${prefixCls}-left(含折叠按钮、分隔线、标题、leftExtra)
- 标题:
${prefixCls}-left-title
- 左侧分隔线:
${prefixCls}-left-separator(在折叠按钮与标题之间)
- 右侧区域:
${prefixCls}-right(含分享按钮、折叠按钮、rightExtra)
- 分享按钮:
${prefixCls}-right-share-btn
样式通过 useLayoutHeaderStyle(prefixCls) 注册;头部高度 48px(minHeight),与 main-content 的 48px 对应。
行为与常量
- 右侧栏:可拖拽调整宽度。最小宽度
MIN_RIGHT_WIDTH = 400(px),最大宽度 window.innerWidth * 0.7;rightWidth 变化会同步到内部 state;折叠时宽度为 0。
- 左侧栏:宽度由
leftWidth 控制,默认 DEFAULT_LEFT_WIDTH = 256(px),无拖拽;折叠时宽度为 0。
- 右侧默认宽度:
DEFAULT_RIGHT_WIDTH = 540(px)。
- 头部:使用
LayoutHeader(来自 Components/LayoutHeader),传入 header 并补充 leftCollapsible/rightCollapsible(未传时由是否有 left/right 决定)。头部高度 48px;拖拽手柄宽度 6px。
- 根节点:样式里
minHeight: 600px,无 prefixCls/classNames/styles 等 Semantic 透传,仅 style、className。
开发规范(与 AGENTS 一致)
- 使用 Ant Design Token 与
useAgenticLayoutStyle,支持主题与响应式;样式用 createStyles/token,避免硬编码颜色与尺寸。
- 类名用
clsx 拼接;支持 classNames/styles 时按项目 Semantic 规范命名。
- Props/事件命名:配置用
Config 后缀,事件用 on 前缀;布尔用 showXxx、xxxCollapsible、xxxCollapsed。
- 组件为函数式 + Hooks;用
React.memo 包装导出组件;保持向下兼容,不破坏已有 props。
- 与 ChatLayout、Workspace 等组合时保持结构清晰,避免嵌套过深。
按上述 API、DOM 结构和规范修改布局或头部即可,无需依赖源码路径。