@linkdesk/ui 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/combobox/Combobox.d.ts +1 -1
- package/dist/hooks/useClickPreview.d.ts +33 -0
- package/dist/hooks/useClipboardKeys.d.ts +33 -0
- package/dist/hooks/useDebouncedInput.d.ts +18 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +605 -564
- package/dist/select-box/SelectBox.d.ts +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* 选择下拉项 / Enter / 失焦(文本有变更)→ onChange(新值);文本无变更 → 不触发。
|
|
10
10
|
*
|
|
11
11
|
* 归一化:壳组件库范畴(components/shared/)——壳视图 + 插件共用。
|
|
12
|
-
*
|
|
12
|
+
* 壳内部引用 @src 源码;插件作者(含内置插件 E6#54c)→ `import { Combobox } from "@linkdesk/ui"`。
|
|
13
13
|
* 下拉面板视觉复用 SelectBox(.selectbox-dropdown/list/item/empty 类)——一个视觉语言
|
|
14
14
|
* 一处写,jscpd 0 克隆门禁:Combobox.css 只定义 field/input/arrow,下拉视觉零重写。
|
|
15
15
|
*/
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useClickPreview — 单击预览 / 双击锁定归一化 hook。
|
|
3
|
+
* E4V#28e:从 FileTreeNode 提取——任何树/列表组件复用同一交互。
|
|
4
|
+
* E6#15h 归位:@linkdesk/ui 零件(本文件 = 壳单一源码副本;任何插件含第三方 `import { useClickPreview } from "@linkdesk/ui"`)。
|
|
5
|
+
* 详见 08-共享hook归位.md。
|
|
6
|
+
*
|
|
7
|
+
* 对标 VS Code explorer 的文件点击行为:
|
|
8
|
+
* - 单击(mousedown 启动 250ms 定时器)→ 预览标签页(斜体,可替换)
|
|
9
|
+
* - 双击(e.detail === 2)→ 锁定标签页(正体,不再替换)
|
|
10
|
+
* - disabled = 目录节点——不启动定时器,不响应双击锁定
|
|
11
|
+
*
|
|
12
|
+
* @param onPreview 预览回调——定时器到期后触发
|
|
13
|
+
* @param onPin 锁定回调——双击时触发
|
|
14
|
+
* @param disabled 禁用预览/锁定(如目录节点),默认 false
|
|
15
|
+
* @param delay 双击检测窗口(ms),默认 250
|
|
16
|
+
* @returns { handleMouseDown, handleClick }——展开到行级事件处理器
|
|
17
|
+
*/
|
|
18
|
+
interface UseClickPreviewOptions {
|
|
19
|
+
onPreview: () => void;
|
|
20
|
+
onPin: () => void;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
delay?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function useClickPreview({ onPreview, onPin, disabled, delay }: UseClickPreviewOptions): {
|
|
25
|
+
handleMouseDown: (e: {
|
|
26
|
+
button?: number;
|
|
27
|
+
}) => void;
|
|
28
|
+
handleClick: (e: {
|
|
29
|
+
detail: number;
|
|
30
|
+
button?: number;
|
|
31
|
+
}) => void;
|
|
32
|
+
};
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useClipboardKeys — 池侧 Ctrl/Cmd+C / X / V 剪贴板键归一化 hook。
|
|
3
|
+
* E5.8#24.8.3 定案(用户拍板路径 2):共享 hook 消除每插件重复的剪贴板键处理。
|
|
4
|
+
* E6#15h 归位:@linkdesk/ui 零件(本文件 = 壳单一源码副本;任何插件含第三方 `import { useClipboardKeys } from "@linkdesk/ui"`)。
|
|
5
|
+
* 详见 08-共享hook归位.md。
|
|
6
|
+
*
|
|
7
|
+
* 背景(教训链——看 memory keyboard-router-before-input-event):
|
|
8
|
+
* 壳级剪贴板键已删(E5.8#24.8.1)——主进程 keyCache 命中 = 无条件 preventDefault,
|
|
9
|
+
* 在池 WCV 收到键之前吞掉,且不认 when/可编辑状态 → 池内 Monaco 原生复制粘贴全死。
|
|
10
|
+
* 正解 = 池侧自处理:插件在自己 React keydown 里处理文本键。DOM 焦点天然分区——
|
|
11
|
+
* 文件树聚焦才收键,Monaco 聚焦收不到,多插件各干各的 ctrl+c 互不打扰,
|
|
12
|
+
* 不需要 when、不需要冲突检测。
|
|
13
|
+
*
|
|
14
|
+
* 机制与语义分离:
|
|
15
|
+
* 机制(ctrl/meta 检测 + preventDefault + 键映射)归一在此 hook——一处实现一处修。
|
|
16
|
+
* 语义(复制/剪切/粘贴各自做什么)由插件声明式交出——AI 只填回调,零追踪影响面。
|
|
17
|
+
*
|
|
18
|
+
* 焦点守卫天然成立:本 hook 返回的 handler 挂在插件容器 onKeyDown 上——
|
|
19
|
+
* 只有插件聚焦才收到事件;可编辑子元素(如重命名 InlineInput)须自行 stopPropagation,
|
|
20
|
+
* 否则打字时 Ctrl+C/V/X 冒泡到容器(文件树已如此处理)。
|
|
21
|
+
*
|
|
22
|
+
* @param onCopy 复制回调(Ctrl+C / Cmd+C)
|
|
23
|
+
* @param onCut 剪切回调(Ctrl+X / Cmd+X)
|
|
24
|
+
* @param onPaste 粘贴回调(Ctrl+V / Cmd+V)
|
|
25
|
+
* @returns `(e) => boolean`——在消费方 onKeyDown 中组合:返回 true 表示该键已被消费
|
|
26
|
+
* (调用方应 return,勿继续走其他逻辑);false 表示未命中剪贴板键。
|
|
27
|
+
*/
|
|
28
|
+
export interface UseClipboardKeysCallbacks {
|
|
29
|
+
onCopy?: () => void;
|
|
30
|
+
onCut?: () => void;
|
|
31
|
+
onPaste?: () => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function useClipboardKeys(callbacks: UseClipboardKeysCallbacks): (e: React.KeyboardEvent) => boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useDebouncedInput — 防抖输入归一化 hook。
|
|
3
|
+
* E3.6 E36#7.3c 提取:本地 state 即时响应 + 模块级/外部 state 防抖同步。
|
|
4
|
+
* E6#15h 归位:@linkdesk/ui 零件(本文件 = 壳单一源码副本;任何插件含第三方 `import { useDebouncedInput } from "@linkdesk/ui"`)。
|
|
5
|
+
* 详见 08-共享hook归位.md。
|
|
6
|
+
*
|
|
7
|
+
* 使用场景:输入框值需要即时反馈(不卡打字),但下游过滤/搜索走防抖(不每键重渲染)。
|
|
8
|
+
* 命令面板流畅就是因为输入是本地 state——这个 hook 把同样的模式归一化。
|
|
9
|
+
*
|
|
10
|
+
* @param setExternal 防抖后同步到的外部 setter(如模块级 setSearch)
|
|
11
|
+
* @param debounceMs 防抖毫秒数,默认 150
|
|
12
|
+
* @returns { value, onChange, onClear }——直接展开到 <input> 上
|
|
13
|
+
*/
|
|
14
|
+
export declare function useDebouncedInput(setExternal: (value: string) => void, debounceMs?: number): {
|
|
15
|
+
value: string;
|
|
16
|
+
onChange: (next: string) => void;
|
|
17
|
+
onClear: () => void;
|
|
18
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,9 @@ export { default as ThemePicker } from "./theme-picker/ThemePicker";
|
|
|
15
15
|
export { default as Toggle } from "./toggle/Toggle";
|
|
16
16
|
export { InlineInput } from "./inline-input/InlineInput";
|
|
17
17
|
export { PluginIcon } from "./plugin-icon/PluginIcon";
|
|
18
|
+
export { useClickPreview } from "./hooks/useClickPreview";
|
|
19
|
+
export { useClipboardKeys } from "./hooks/useClipboardKeys";
|
|
20
|
+
export { useDebouncedInput } from "./hooks/useDebouncedInput";
|
|
18
21
|
export { inferSliderStep } from "./slider/sliderStep";
|
|
19
22
|
export type { InlineInputHandle } from "./inline-input/InlineInput";
|
|
20
23
|
export type { ContextMenuProps } from "./context-menu/ContextMenu";
|