panatgithub_AnkiHeadingSync/docs/plugin-run-scope-ui-decisions.md
Dusk 23b9b83527 fix(settings): refine plugin run scope tree UI
中文: 将范围设置统一为插件运行范围,并把文件夹选择区调整为对齐稳定的 Finder 式树形 UI。

English: Renames the scope settings to plugin run scope and refines the folder selector into a stable Finder-style tree UI.
2026-04-26 08:50:51 +08:00

89 lines
No EOL
2.2 KiB
Markdown

# Plugin Run Scope UI Decisions
## 1. 最终文案决策
范围卡最终统一为:
1. 中文卡片标题:`插件运行范围`
2. 英文卡片标题:`Plugin run scope`
3. 中文范围下拉名称:`插件运行范围`
4. 英文范围下拉名称:`Plugin run scope`
范围卡顶部旧说明不再渲染。
## 2. 文件夹树行布局决策
每个树行固定为三列:
1. 展开槽
2. checkbox
3. 文件夹名
布局固定为:
1. `display: grid`
2. `grid-template-columns: 24px 24px minmax(0, 1fr)`
3. `align-items: center`
4. 固定最小高度
缩进只由 `depth * 18px` 控制,使用行容器的左边距实现。
## 3. 展开槽与文件夹名决策
展开槽规则固定为:
1. 有子节点时用轻量按钮
2. 无子节点时仍渲染占位元素
3. 两种情况下都保留 `folderToggle` dataset
4. 展开符号继续使用 `▸ / ▾`
文件夹名规则固定为:
1. 单行显示
2. `overflow: hidden`
3. `text-overflow: ellipsis`
4. `white-space: nowrap`
## 4. 已选祖先自动展开策略
补充展开已选祖先的时机固定为:
1. 文件夹树首次成功加载后
2. 作用范围切换到 `include` / `exclude`
3. 手动刷新文件夹树后
4. 设置页关闭后再次进入时
不在以下场景强制重置:
1. 用户手动点击展开/折叠后的普通重渲染
2. 勾选/取消勾选文件夹后的普通重渲染
实现方式是一次性“待补充展开”标志位,而不是每次 render 都强行根据已选项重算展开状态。
## 5. refresh 行为决策
`refreshFolderTree()` 保持现有语义:
1. 清空旧展开状态
2. 重新加载树
3. 加载完成后再次补充展开已选祖先
## 6. 保持不变的内容
本次明确保持不变:
1. `all / include / exclude` 的业务含义
2. 设置字段名和枚举值
3. `FolderScopeTree` 的选择压缩算法
4. 作用范围对同步逻辑的影响
5. 设置页局部刷新机制
6. 不新增 CSS 构建链路
## 7. 与计划的显式偏差
没有行为偏差。
仅有一个实现级说明:
1. 当前仓库已经有安全的 built-plugin sync 脚本
2. 因此最终同步继续复用 `build:obsidian` 和现有脚本,而不是再引入新的同步实现