iter(g282): 代码块支持长行折行

This commit is contained in:
HIsheR
2026-10-26 23:08:29 +08:00
parent cdf68b457e
commit c98f98e3f4
7 changed files with 27 additions and 5 deletions
+8 -2
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "ui-arch-registry-index/0.1", "$schema": "ui-arch-registry-index/0.1",
"generatedAt": "2026-10-26T15:06:03.807Z", "generatedAt": "2026-10-26T15:08:10.710Z",
"repoRoot": ".", "repoRoot": ".",
"packages": [ "packages": [
{ {
@@ -4284,6 +4284,11 @@
"t": "boolean", "t": "boolean",
"d": "是否显示行号列;缺省 true(单行代码自动省略)" "d": "是否显示行号列;缺省 true(单行代码自动省略)"
}, },
{
"n": "wrap",
"t": "boolean",
"d": "长行是否折行(窄屏 / 长日志场景);缺省 false(横向滚动,行号保持对齐)"
},
{ {
"n": "maxHeight", "n": "maxHeight",
"t": "number", "t": "number",
@@ -4311,7 +4316,8 @@
"头部标题用 title(文件名)或 lang(语言名),两者都给时 title 优先", "头部标题用 title(文件名)或 lang(语言名),两者都给时 title 优先",
"长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条", "长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条",
"单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false", "单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false",
"不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉" "不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉",
"窄屏或长日志要折行就传 wrap: true:长行按容器宽度换行,行号仍只占首行左侧;对齐要求高的代码别开,折行会让缩进失去参照"
] ]
}, },
{ {
+1
View File
@@ -1784,6 +1784,7 @@ const content = h(
title: 'sum.ts', title: 'sum.ts',
lang: 'ts', lang: 'ts',
maxHeight: 200, maxHeight: 200,
wrap: true, // 窄屏下长行折行,不横向滚
code: [ code: [
'export function sum(a: number, b: number): number {', 'export function sum(a: number, b: number): number {',
' if (typeof a !== \'number\') throw new TypeError(\'a 必须是数字\');', ' if (typeof a !== \'number\') throw new TypeError(\'a 必须是数字\');',
+3 -1
View File
@@ -1,6 +1,6 @@
# @ui-arch 组件库 Agent 文档(无图形版) # @ui-arch 组件库 Agent 文档(无图形版)
> 自动生成于 2026-10-26T15:06:03.807Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 > 自动生成于 2026-10-26T15:08:10.710Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。 > 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
## 快速上手 ## 快速上手
@@ -2270,6 +2270,7 @@ diffView({ before: oldText, after: newText })
- lang:string —— 语言名(如 ts / css);无 title 时作头部标题 - lang:string —— 语言名(如 ts / css);无 title 时作头部标题
- title:string —— 头部标题(如文件名);优先于 lang - title:string —— 头部标题(如文件名);优先于 lang
- lineNumbers:boolean —— 是否显示行号列;缺省 true(单行代码自动省略) - lineNumbers:boolean —— 是否显示行号列;缺省 true(单行代码自动省略)
- wrap:boolean —— 长行是否折行(窄屏 / 长日志场景);缺省 false(横向滚动,行号保持对齐)
- maxHeight:number —— 代码区最高高度(px),超出在框内滚动;缺省不限高 - maxHeight:number —— 代码区最高高度(px),超出在框内滚动;缺省不限高
- copyable:boolean —— 右上角是否出现复制按钮;缺省 true - copyable:boolean —— 右上角是否出现复制按钮;缺省 true
- onCopy:(text: string) => void —— 复制成功回调(参数为实际写入剪贴板的内容) - onCopy:(text: string) => void —— 复制成功回调(参数为实际写入剪贴板的内容)
@@ -2288,6 +2289,7 @@ codeBlock({ code: source, title: 'main.ts', lang: 'ts', maxHeight: 320 })
3. 长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条 3. 长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条
4. 单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false 4. 单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false
5. 不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉 5. 不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉
6. 窄屏或长日志要折行就传 wrap: true:长行按容器宽度换行,行号仍只占首行左侧;对齐要求高的代码别开,折行会让缩进失去参照
现场演示:apps/docs/demo.html#sec-code 现场演示:apps/docs/demo.html#sec-code
+1 -1
View File
@@ -26,5 +26,5 @@ export function codeBlock(props: CodeBlockProps): HTMLElement {
title ? h('span', { class: 'ua-code-title' }, title) : h('span', null, ''), title ? h('span', { class: 'ua-code-title' }, title) : h('span', null, ''),
props.copyable === false ? null : copyButton({ text: props.code, label: '复制', size: 'sm', variant: 'ghost', onCopied: props.onCopy }), props.copyable === false ? null : copyButton({ text: props.code, label: '复制', size: 'sm', variant: 'ghost', onCopied: props.onCopy }),
); );
return h('div', { class: 'ua-code', role: 'group', 'aria-label': props.ariaLabel ?? '代码块' }, head, body); return h('div', { class: `ua-code${props.wrap ? ' is-wrap' : ''}`, role: 'group', 'aria-label': props.ariaLabel ?? '代码块' }, head, body); // is-wrap 只改折行,行号与缩进不动
} }
+1
View File
@@ -1047,6 +1047,7 @@ export interface CodeBlockProps {
lang?: string; // 语言名(如 ts / css);无 title 时作头部标题 lang?: string; // 语言名(如 ts / css);无 title 时作头部标题
title?: string; // 头部标题(如文件名);优先于 lang title?: string; // 头部标题(如文件名);优先于 lang
lineNumbers?: boolean; // 是否显示行号列;缺省 true(单行代码自动省略) lineNumbers?: boolean; // 是否显示行号列;缺省 true(单行代码自动省略)
wrap?: boolean; // 长行是否折行(窄屏 / 长日志场景);缺省 false(横向滚动,行号保持对齐)
maxHeight?: number; // 代码区最高高度(px),超出在框内滚动;缺省不限高 maxHeight?: number; // 代码区最高高度(px),超出在框内滚动;缺省不限高
copyable?: boolean; // 右上角是否出现复制按钮;缺省 true copyable?: boolean; // 右上角是否出现复制按钮;缺省 true
onCopy?: (text: string) => void; // 复制成功回调(参数为实际写入剪贴板的内容) onCopy?: (text: string) => void; // 复制成功回调(参数为实际写入剪贴板的内容)
+7 -1
View File
@@ -4155,6 +4155,11 @@
"t": "boolean", "t": "boolean",
"d": "是否显示行号列;缺省 true(单行代码自动省略)" "d": "是否显示行号列;缺省 true(单行代码自动省略)"
}, },
{
"n": "wrap",
"t": "boolean",
"d": "长行是否折行(窄屏 / 长日志场景);缺省 false(横向滚动,行号保持对齐)"
},
{ {
"n": "maxHeight", "n": "maxHeight",
"t": "number", "t": "number",
@@ -4182,7 +4187,8 @@
"头部标题用 title(文件名)或 lang(语言名),两者都给时 title 优先", "头部标题用 title(文件名)或 lang(语言名),两者都给时 title 优先",
"长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条", "长代码给 maxHeight,超出在框内滚动;滚动条已是统一细条,暗色下不会露原生亮条",
"单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false", "单行代码自动省掉行号列;想彻底不要行号传 lineNumbers: false",
"不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉" "不需要复制按钮(例如代码本身是操作步骤)传 copyable: false;连标题都没有时头部整条省掉",
"窄屏或长日志要折行就传 wrap: true:长行按容器宽度换行,行号仍只占首行左侧;对齐要求高的代码别开,折行会让缩进失去参照"
] ]
}, },
{ {
+6
View File
@@ -5865,3 +5865,9 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
margin-left: auto; margin-left: auto;
color: var(--ua-color-text-faint); color: var(--ua-color-text-faint);
} }
/* 折行模式:长行按容器宽度换行,行号仍只占首行左侧——适合窄屏读日志,不适合对齐要求高的代码 */
.ua-code.is-wrap .ua-code-line {
white-space: pre-wrap;
word-break: break-word;
}