first commit
This commit is contained in:
67
claude-code源码-中文注释/src/ink/components/NoSelect.tsx
Normal file
67
claude-code源码-中文注释/src/ink/components/NoSelect.tsx
Normal file
@@ -0,0 +1,67 @@
|
||||
import { c as _c } from "react/compiler-runtime";
|
||||
import React, { type PropsWithChildren } from 'react';
|
||||
import Box, { type Props as BoxProps } from './Box.js';
|
||||
|
||||
type Props = Omit<BoxProps, 'noSelect'> & {
|
||||
/**
|
||||
* 将排除区域从第 0 列扩展到此盒子的右边缘,
|
||||
* 适用于此盒子占据的每一行。用于在更宽的缩进容器内
|
||||
* 呈现的边沟(例如工具消息行内的差异):
|
||||
* 没有这个,多行拖动会在前缀以下的行上
|
||||
* 拾取容器的领先缩进。
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
fromLeftEdge?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
* 在全屏文本选择中将其内容标记为不可选择。
|
||||
* 此框内的单元格会被选择高亮和复制文本跳过——
|
||||
* 用户拖动时边沟保持视觉上不变,
|
||||
* 这样可以清楚地知道什么将被复制。
|
||||
*
|
||||
* 用于隔离边沟(行号、差异 +/- 符号、列表项目符号),
|
||||
* 以便点击拖动渲染代码产生干净的可粘贴内容:
|
||||
*
|
||||
* <Box flexDirection="row">
|
||||
* <NoSelect fromLeftEdge><Text dimColor> 42 +</Text></NoSelect>
|
||||
* <Text>const x = 1</Text>
|
||||
* </Box>
|
||||
*
|
||||
* 仅影响备用屏幕文本选择(带有鼠标跟踪的 <AlternateScreen>)。
|
||||
* 在主屏幕滚动回渲染中无效——那里使用终端的本机选择。
|
||||
*/
|
||||
export function NoSelect(t0) {
|
||||
const $ = _c(8);
|
||||
let boxProps;
|
||||
let children;
|
||||
let fromLeftEdge;
|
||||
if ($[0] !== t0) {
|
||||
({
|
||||
children,
|
||||
fromLeftEdge,
|
||||
...boxProps
|
||||
} = t0);
|
||||
$[0] = t0;
|
||||
$[1] = boxProps;
|
||||
$[2] = children;
|
||||
$[3] = fromLeftEdge;
|
||||
} else {
|
||||
boxProps = $[1];
|
||||
children = $[2];
|
||||
fromLeftEdge = $[3];
|
||||
}
|
||||
const t1 = fromLeftEdge ? "from-left-edge" : true;
|
||||
let t2;
|
||||
if ($[4] !== boxProps || $[5] !== children || $[6] !== t1) {
|
||||
t2 = <Box {...boxProps} noSelect={t1}>{children}</Box>;
|
||||
$[4] = boxProps;
|
||||
$[5] = children;
|
||||
$[6] = t1;
|
||||
$[7] = t2;
|
||||
} else {
|
||||
t2 = $[7];
|
||||
}
|
||||
return t2;
|
||||
}
|
||||
Reference in New Issue
Block a user