nx-sk 0.30.0 → 0.31.0
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/CHANGELOG.md +28 -0
- package/dist/core/store.js +23 -1
- package/dist/web/public/assets/{files-DMmY-Twb.js → files-NCGYp_FO.js} +1 -1
- package/dist/web/public/assets/{index-CQF6tWPx.js → index-Ct1xynLM.js} +2 -2
- package/dist/web/public/assets/{index-CZvP6ZJh.css → index-DMR7QnPd.css} +1 -1
- package/dist/web/public/assets/{view-DZ6xhQJ9.js → view-BQBQ4mZT.js} +1 -1
- package/dist/web/public/assets/{view-ECWWy6u6.js → view-BRdHuWd_.js} +1 -1
- package/dist/web/public/assets/{view--2PtAmB0.js → view-CJRE1eTX.js} +1 -1
- package/dist/web/public/assets/view-D192CYVA.js +252 -0
- package/dist/web/public/assets/view-DzKffmk0.css +1 -0
- package/dist/web/public/assets/{view-Clbm3fx1.js → view-kO60FHv8.js} +1 -1
- package/dist/web/public/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/public/assets/view-CgLZr6WS.css +0 -1
- package/dist/web/public/assets/view-CrpwXVZI.js +0 -46
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
本文件格式参考 [Keep a Changelog](https://keepachangelog.com/),中文正文。
|
|
4
4
|
|
|
5
|
+
## 0.31.0 (2026-11-10)
|
|
6
|
+
|
|
7
|
+
**`shortcut` 字段详情面板按参考实现 `shortcut-library` 一比一复刻(分组目录 / 表格 / ANSI 104 键 / 热力全屏 / 组合键录入同构),补齐 TOML 导入;并修复 store 首次读取不落盘导致的保存 404。**
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **详情面板**:侧栏分组增删改与条数、组合键/条件/说明表格与冲突标记、行悬浮联动键盘高亮与 tooltip、
|
|
12
|
+
键位悬浮/长按/双击弹层、可拖拽侧栏宽度与键盘预览高度、全屏热力键盘(缩放/平移/图例)。
|
|
13
|
+
`side/center/fullpage` 三态沿用 `peek` 外壳,默认 fullpage。
|
|
14
|
+
- **组合键录入弹层**:修饰键累积、Backspace 撤销、Esc 取消、Enter 确认,支持可选激活条件。
|
|
15
|
+
- **TOML 导入**:顶栏「导入」提供粘贴/文件两页,解析预览、格式说明与错误汇总;同名分组追加、新分组创建。
|
|
16
|
+
- **回归测试**:store 文件不存在时首次读取即落盘、重复读取 id 稳定。
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- `shortcut` 字段折叠条只报组数/条数(`N 组 · M 条`),详细内容进面板。
|
|
21
|
+
- 键盘预览默认高度 200px、键单位 44px,与参考实现一致;空间不足时按参考设计滚动。
|
|
22
|
+
- 删除旧本地键盘图 `shortcutKeys.ts` 与 `styles.css` 中对应的面板样式。
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- store 文件不存在时只在内存播种,每次请求重新生成随机 id,前端保存 PATCH 旧 id 返回 404。
|
|
27
|
+
|
|
28
|
+
### 说明
|
|
29
|
+
|
|
30
|
+
- 参考实现中由宿主注入的登录与保存模式设置未移植:nx-sk 没有账号体系与服务端保存模式,面板其余部分
|
|
31
|
+
与参考逐行对齐。三态窄宽下的取舍与验证边界已写入 `docs/behavior-parity.md`。
|
|
32
|
+
|
|
5
33
|
## 0.30.0 (2026-11-10)
|
|
6
34
|
|
|
7
35
|
**`peek` 头部换成 Notion「打开方式」菜单(像素对照、键盘可达),补 `#/<栏目>?entry=<id>` 深链与默认视图;补齐 `#5` 遗留的列表计数与全屏空白。**
|
package/dist/core/store.js
CHANGED
|
@@ -207,6 +207,8 @@ export function corruptNote() {
|
|
|
207
207
|
export function migrationNote() {
|
|
208
208
|
return cacheMigrationNote;
|
|
209
209
|
}
|
|
210
|
+
// 首次读取时播种的并发门闩:两个请求同时发现文件不存在时,只播一次、写一次。
|
|
211
|
+
let seedPromise = null;
|
|
210
212
|
export async function loadStore(explicitPath) {
|
|
211
213
|
const p = explicitPath || storeFile();
|
|
212
214
|
try {
|
|
@@ -258,7 +260,27 @@ export async function loadStore(explicitPath) {
|
|
|
258
260
|
cacheMtime = corrupt ? -1 : st.mtimeMs;
|
|
259
261
|
return cache;
|
|
260
262
|
}
|
|
261
|
-
catch {
|
|
263
|
+
catch (e) {
|
|
264
|
+
// 文件不存在:播种后**立即落盘一次**。只在内存里播种会让每个请求都重新生成
|
|
265
|
+
// 一套随机 id(`e_...`),前端拿着上一次的 id 保存就会 404(真实走查事故)。
|
|
266
|
+
if (e?.code === 'ENOENT') {
|
|
267
|
+
if (seedPromise)
|
|
268
|
+
return seedPromise;
|
|
269
|
+
seedPromise = (async () => {
|
|
270
|
+
const seeded = emptyStore(true);
|
|
271
|
+
cache = seeded;
|
|
272
|
+
cachePath = p;
|
|
273
|
+
cacheMtime = -1;
|
|
274
|
+
try {
|
|
275
|
+
await saveStore(seeded, p);
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
// 只读目录等写失败:保留内存态,至少本次进程内 id 稳定。
|
|
279
|
+
}
|
|
280
|
+
return cache ?? seeded;
|
|
281
|
+
})().finally(() => { seedPromise = null; });
|
|
282
|
+
return seedPromise;
|
|
283
|
+
}
|
|
262
284
|
cache = emptyStore(true);
|
|
263
285
|
cachePath = p;
|
|
264
286
|
cacheMtime = -1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as l}from"./index-
|
|
1
|
+
import{a as l}from"./index-Ct1xynLM.js";let n=null,o=0;const u=1500;function c(t=!1){return!t&&n&&Date.now()-o<u||(o=Date.now(),n=l("/api/files").then(e=>e).catch(e=>{throw n=null,e})),n}function d(){return n=null,c(!0)}function h(t,e){const a=Array.isArray(t)?t:[],r=(Array.isArray(e)?e:[]).filter(Boolean);if(!r.length)return a;const s=new Set(r.map(i=>i.id));return[...r,...a.filter(i=>!s.has(i.id))]}function m(t){return new Promise((e,a)=>{const r=new FileReader;r.onload=()=>e(r.result),r.onerror=()=>a(new Error("读取文件失败")),r.readAsDataURL(t)})}export{m as f,c as l,h as m,d as r};
|