skill-forge-hub 1.3.9 → 1.3.10

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.en.md CHANGED
@@ -4,6 +4,14 @@
4
4
 
5
5
  Version history of the SkillForge npm package `skill-forge-hub` (command name `skill-forge`).
6
6
 
7
+ ## 1.3.10 (2026-11-13)
8
+
9
+ **one-pager theme panel stays open on color pick, closes via a new × button (@12)**
10
+
11
+ - Picking a color from the 25-swatch panel no longer auto-folds it — keep trying themes side by side; a floating circular × button sits on the panel's top-right corner to close it, and the bottom 主题 bar reopens it anytime
12
+ - Template dock keeps its original behavior (auto-close on pick, no ×): theme picking is exploratory, template picking is decisive
13
+ - Template stamp one-pager@11 → @12 (panel interaction change)
14
+
7
15
  ## 1.3.9 (2026-11-13)
8
16
 
9
17
  **Theme-switch fade across twelve templates: 0.45s color transition instead of a hard flip**
package/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@
4
4
 
5
5
  SkillForge(技能锻造坊)npm 包 `skill-forge-hub`(命令名 `skill-forge`)版本变更记录。
6
6
 
7
+ ## 1.3.10(2026-11-13)
8
+
9
+ **one-pager 主题面板点色不关闭,改由 × 按钮收起(@12)**
10
+
11
+ - 25 色面板点选主题后不再自动折叠,可连续试色对比效果;面板右上角新增 × 圆钮(悬浮于色板角上,随主题换色),点 × 收起,底部「主题」标签随时可重新展开
12
+ - 模板坞保持原交互(选中即收起,无 ×):主题是反复试色的场合,模板是选中即定的场合
13
+ - 版本戳 one-pager@11 → @12(面板交互变化)
14
+
7
15
  ## 1.3.9(2026-11-13)
8
16
 
9
17
  **十二模板主题切换渐变:换肤不再生硬闪切,全页颜色 0.45s 平滑过渡**
@@ -62,7 +62,7 @@ disable-model-invocation: false
62
62
 
63
63
  ## 产物升级(回炉)
64
64
 
65
- 生成 HTML 时头部写版本戳 `<meta name="sf-template" content="one-pager@11">`(模板升级时递增 @N 并同步 reference.html 与本文档)。用户说「升级旧海报/回炉」时:顺扫海报库根目录(DIR 值)下两种形态——新子目录形态 `<slug>/poster.html` 与旧平铺形态 `poster-*.html`,读版本戳筛旧版(无版本戳或缺少 `<meta name="poster-id">` 稳定 ID 的产物视为 v0 最旧版,一并进清单)→ 列清单(文件/旧版本)→ AskUserQuestion 选全部或部分 → 逐份升级:浅升级(仅 CSS/JS 变化)对旧页替换 `<style>` 块与交互脚本、正文原样保留;深升级(DOM 结构变化)从同目录 md 底稿按当前 reference.html 重建,先备份旧版 `.bak-时间戳`,重建必须沿用原页 poster-id meta 值(换 ID = 模板/主题记忆失联)→ 报告三段式:✅ 已升级清单 / ⚠️ 手改保留说明 / 🟡 失败项原因。模板改动分级:业务改动、数据格式改动、页面改动任一发生即模板升级,版本戳 +1 并同步 reference.html 与本文档;纯措辞润色不 bump。每次生成 HTML 时顺扫落盘目录读版本戳:发现旧版产物主动告知用户「说『把我旧海报都升级成新样式』即可一键升级」。
65
+ 生成 HTML 时头部写版本戳 `<meta name="sf-template" content="one-pager@12">`(模板升级时递增 @N 并同步 reference.html 与本文档)。用户说「升级旧海报/回炉」时:顺扫海报库根目录(DIR 值)下两种形态——新子目录形态 `<slug>/poster.html` 与旧平铺形态 `poster-*.html`,读版本戳筛旧版(无版本戳或缺少 `<meta name="poster-id">` 稳定 ID 的产物视为 v0 最旧版,一并进清单)→ 列清单(文件/旧版本)→ AskUserQuestion 选全部或部分 → 逐份升级:浅升级(仅 CSS/JS 变化)对旧页替换 `<style>` 块与交互脚本、正文原样保留;深升级(DOM 结构变化)从同目录 md 底稿按当前 reference.html 重建,先备份旧版 `.bak-时间戳`,重建必须沿用原页 poster-id meta 值(换 ID = 模板/主题记忆失联)→ 报告三段式:✅ 已升级清单 / ⚠️ 手改保留说明 / 🟡 失败项原因。模板改动分级:业务改动、数据格式改动、页面改动任一发生即模板升级,版本戳 +1 并同步 reference.html 与本文档;纯措辞润色不 bump。每次生成 HTML 时顺扫落盘目录读版本戳:发现旧版产物主动告知用户「说『把我旧海报都升级成新样式』即可一键升级」。
66
66
 
67
67
  ## 规则速览
68
68
 
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <meta name="sf-template" content="one-pager@11">
6
+ <meta name="sf-template" content="one-pager@12">
7
7
  <meta name="poster-id" content="REF-POSTER-0000">
8
8
  <title>AI 改变工作 · 一页纸海报</title>
9
9
  <style>
@@ -644,7 +644,9 @@ body{background:linear-gradient(180deg,var(--bg) 12%,var(--bg2) 135%);color:var(
644
644
  .dock-theme.fold .bar-arrow{transform:rotate(-90deg)}
645
645
  .dock-theme .bar-arrow{transform:rotate(180deg)}
646
646
  .dock-body{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px;background:var(--panel-solid);border:1px solid var(--border);border-radius:14px;padding:8px 10px;max-width:min(720px,calc(100vw - 36px));box-shadow:0 4px 18px rgba(0,0,0,.3)}
647
- .dock-theme .dock-body{display:grid;grid-template-columns:repeat(5,18px);gap:11px 10px;border-radius:14px;padding:12px 13px;max-width:none}
647
+ .dock-theme .dock-body{display:grid;grid-template-columns:repeat(5,18px);gap:11px 10px;border-radius:14px;padding:12px 13px;max-width:none;position:relative}
648
+ .th-close{position:absolute;top:-10px;right:-10px;width:22px;height:22px;border-radius:50%;border:1px solid var(--border);background:var(--panel-solid);color:var(--muted);font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 8px rgba(0,0,0,.28);padding:0}
649
+ .th-close:hover{color:var(--text);border-color:var(--accent)}
648
650
  .tp-sep{flex-basis:100%;font-size:10px;letter-spacing:2px;color:var(--muted);margin:5px 4px 1px;text-align:right}
649
651
  .tp-sep::before{content:'— ';color:var(--accent)}
650
652
  .bar-cur{width:17px;height:17px;pointer-events:none}
@@ -777,6 +779,7 @@ html.theming, html.theming *, html.theming *::before, html.theming *::after{ tra
777
779
  <span class="th-dot" data-t="cyber" title="赛博霓虹"></span>
778
780
  <span class="th-dot" data-t="cream" title="奶油纸"></span>
779
781
  <span class="th-dot" data-t="academic" title="学术蓝"></span>
782
+ <button class="th-close" id="thClose" type="button" title="关闭(点底部「主题」标签可重新打开)" aria-label="关闭主题面板">×</button>
780
783
  </div>
781
784
  <button class="dock-bar" id="thBar" type="button" title="主题切换(点击展开/收起)"><span class="th-dot bar-cur" data-t="tech"></span><span class="bar-tpl-name" id="thName">主题</span><span class="bar-arrow">▾</span></button>
782
785
  </div>
@@ -1217,7 +1220,6 @@ html.theming, html.theming *, html.theming *::before, html.theming *::after{ tra
1217
1220
  try { localStorage.setItem(THEME_KEY, t); } catch(e) {}
1218
1221
  TH_DOTS.forEach(function(x){ x.classList.toggle('on', x === d); });
1219
1222
  updateThBar();
1220
- document.getElementById('themeDock').classList.add('fold');
1221
1223
  });
1222
1224
  d.addEventListener('mouseenter', function(){
1223
1225
  var name = TH_LABELS[d.getAttribute('data-t')];
@@ -1278,6 +1280,8 @@ html.theming, html.theming *, html.theming *::before, html.theming *::after{ tra
1278
1280
  }
1279
1281
  bindBar('tplDock');
1280
1282
  bindBar('themeDock');
1283
+ var thClose = document.getElementById('thClose');
1284
+ if (thClose) thClose.addEventListener('click', function(){ document.getElementById('themeDock').classList.add('fold'); });
1281
1285
  var initTplBtn = document.querySelector('#tplDock .tp-btn[data-tpl="' + curP + '"]');
1282
1286
  var btEl = document.querySelector('#tplBar .bar-tpl-name');
1283
1287
  if (btEl) btEl.textContent = '模板 · ' + (initTplBtn ? initTplBtn.textContent : '自定义');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-forge-hub",
3
- "version": "1.3.9",
3
+ "version": "1.3.10",
4
4
  "description": "SkillForge (技能锻造坊) — a curated collection of AI craft skills. Install once, then pick skills interactively: daily/weekly/monthly/quarterly/annual reports, meeting minutes, article-to-HTML, magic-deck slides, deck-stage PPTX, prompt-pouch manager, Pandoc doc converters, meta-forge.",
5
5
  "bin": {
6
6
  "skill-forge": "cli.js"