@takagaki/cortex-decisions-viewer 0.12.215 → 0.12.217

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.
Files changed (2) hide show
  1. package/dist/render.js +21 -4
  2. package/package.json +1 -1
package/dist/render.js CHANGED
@@ -10503,6 +10503,9 @@ ${story_1.splitByNameLinks.toString()}
10503
10503
  * 知らない値は 「DS_GATE」 と同じく「不明」(engine が新しい語を足したのに画面が知らない、
10504
10504
  * という事実を黙って消さない)。
10505
10505
  */
10506
+ /** 接続の状態と[接続を確認]を鍵の部品が持つ能力か(Backlog=issues・Figma=design)。行はこの 2 つを持たない(便 KU) */
10507
+ function keyCardOwnsStatus(capId) { return capId === "issues" || capId === "design"; }
10508
+
10506
10509
  function dsGateForCap(capId, status) {
10507
10510
  var byCap = DS_GATE_CAP[capId];
10508
10511
  if (byCap && byCap[status]) return byCap[status];
@@ -15973,6 +15976,8 @@ ${story_1.splitByNameLinks.toString()}
15973
15976
  * 行の組み立ての最後に 「appendReachableReason」 を呼ぶ。
15974
15977
  */
15975
15978
  function appendReachableChip(row, capId, ref, workspace) {
15979
+ // 🔴 鍵で読む能力(Backlog・Figma)の接続の状態は、鍵の部品(secretCard)の札 1 か所だけ(便 KU)。行にも出すと同じ材料の札が窓の中で 2 か所に見える
15980
+ if (keyCardOwnsStatus(capId)) return row;
15976
15981
  var r = reachableStateOf(capId, ref, workspace);
15977
15982
  if (!r) return row;
15978
15983
  var gate = dsGateForCap(capId, r.status);
@@ -16167,7 +16172,8 @@ ${story_1.splitByNameLinks.toString()}
16167
16172
  // 🔴 表の案件(組み直した案件)には起こす同期が無い(押すと「確認を開始できませんでした」になる)。2 つとも出さない。
16168
16173
  // 見分けは設定の画面と同じ 1 か所(viewMode)。今までの案件(file)はここを素通り=画面は 1 バイトも変わらない
16169
16174
  if (viewMode() === "table") return row;
16170
- var checkBtn = el("button", { class: "ds-toggle-btn", type: "button", text: "接続を確認" });
16175
+ // 鍵で読む能力の[接続を確認]は鍵の部品の[保存して接続を確認]だけ(便 KU)。行には[今すぐ同期]だけ残す
16176
+ var checkBtn = keyCardOwnsStatus(capId) ? null : el("button", { class: "ds-toggle-btn", type: "button", text: "接続を確認" });
16171
16177
  var syncBtn = el("button", { class: "ds-toggle-btn", type: "button", text: "今すぐ同期" });
16172
16178
  var note = el("p", { class: "ds-probe-wait" });
16173
16179
  var phase = probeWaitPhaseOf(capId, ref);
@@ -16176,7 +16182,7 @@ ${story_1.splitByNameLinks.toString()}
16176
16182
  else if (phase === "timeout") note.textContent = PROBE_WAIT_TIMEOUT_TEXT;
16177
16183
  else note.hidden = true;
16178
16184
 
16179
- checkBtn.addEventListener("click", async function () {
16185
+ if (checkBtn) checkBtn.addEventListener("click", async function () {
16180
16186
  // 押している間は**ボタンだけ**が「確認中…」になる。行の中身は変えない(#1328)。
16181
16187
  // 前回の返事(「同期を開始しました」等)は押した時点で消す
16182
16188
  var endBusy = beginBusy(checkBtn, "確認中…");
@@ -16243,7 +16249,7 @@ ${story_1.splitByNameLinks.toString()}
16243
16249
  endBusy();
16244
16250
  });
16245
16251
 
16246
- row.appendChild(checkBtn);
16252
+ if (checkBtn) row.appendChild(checkBtn);
16247
16253
  row.appendChild(syncBtn);
16248
16254
  row.appendChild(note);
16249
16255
  return row;
@@ -19463,6 +19469,8 @@ ${story_1.splitByNameLinks.toString()}
19463
19469
  "figma": {
19464
19470
  icon: "🎨",
19465
19471
  title: "Figma のトークン",
19472
+ // 欄の案内(placeholder)。窓の他の文言・発行のしかたと同じ語(便 KU)
19473
+ paste: "アクセストークンを貼り付け",
19466
19474
  // **必要なスコープは実装が叩くAPIから決まる。** sync-designs は
19467
19475
  // GET /v1/files/{key} → file_content:read(画面インベントリ)
19468
19476
  // GET /v1/files/{key}/comments → file_comments:read(指摘の同期)
@@ -19552,6 +19560,8 @@ ${story_1.splitByNameLinks.toString()}
19552
19560
  "backlog": {
19553
19561
  icon: "📋",
19554
19562
  title: "Backlog のAPIキー",
19563
+ // 欄の案内(placeholder)。窓の他の文言・発行のしかたと同じ語(便 KU)
19564
+ paste: "API キーを貼り付け",
19555
19565
  how: "Backlog → 個人設定 → API で発行(同期先の Backlog プロジェクトが見えるアカウントで)",
19556
19566
  // ⚠ **desc は足さない。** 「毎晩同期するために使います」の 1 行は「カードが長すぎる」で
19557
19567
  // 外した経緯があり、secret-card-guidance.test.mjs が空の段落ごと見張っている。
@@ -19786,7 +19796,7 @@ ${story_1.splitByNameLinks.toString()}
19786
19796
  // 同じ鍵の[入れる]が行の一手・「その他」・畳みの 3 か所にあった。いまは 状態の札 → 伏せ字の欄(空のまま)→ [保存して接続を確認]。
19787
19797
  // 保存した値は読み戻さない(書き込み専用)。登録済みでも欄は空で、入れ直すときだけ貼る(伏せ字を欄に入れて伏せ字ごと保存する事故を避ける)
19788
19798
  var cap = kind === "backlog" ? "issues" : "design";
19789
- var input = el("input", { class: "sec-input", type: "password", placeholder: "トークンを貼り付け", autocomplete: "off", spellcheck: "false" });
19799
+ var input = el("input", { class: "sec-input", type: "password", placeholder: meta.paste || "トークンを貼り付け", autocomplete: "off", spellcheck: "false" });
19790
19800
  var btn = el("button", { class: "ds-toggle-btn", type: "button", text: "保存" });
19791
19801
  var msg = el("div", { class: "ds-toggle-msg" });
19792
19802
  var savedNote = el("p", { class: "sec-note sec-saved" });
@@ -19871,7 +19881,9 @@ ${story_1.splitByNameLinks.toString()}
19871
19881
  }
19872
19882
  }
19873
19883
  /** 保存のあとの接続の確認。結果は行と同じ形で置く(applyProbeResult)。返すのは添える 1 文(無ければ空) */
19884
+ var ipReason = false;
19874
19885
  async function checkAfterSave() {
19886
+ ipReason = false;
19875
19887
  var type = dispatchProbeTypeOf(cap);
19876
19888
  // Figma は回数制限(1 分あたりの枠)に収まるよう先頭の 2 ファイルだけ。残りは各行の[接続を確認]
19877
19889
  var refs = refsNow().slice(0, kind === "figma" ? 2 : 20);
@@ -19887,6 +19899,10 @@ ${story_1.splitByNameLinks.toString()}
19887
19899
  applyProbeResult(cap, refs[i], "", { gate: j.gate, checkedAt: j.checkedAt, needed: "", detail: j.detail || "" });
19888
19900
  } else if (!res.ok) {
19889
19901
  return "接続の確認はできませんでした:" + ((j && j.message) || "少し待ってからもう一度お試しください。");
19902
+ } else if (j.reason === "ip-restricted") {
19903
+ // 原因が分かる応答は、固定文ではなく原因の文を出す。[切り替える]は呼び出し側が添える
19904
+ ipReason = true;
19905
+ return j.message || "この場では確認できませんでした(IP 制限の可能性)。";
19890
19906
  } else {
19891
19907
  return "接続の確認は少し後に札へ出ます。";
19892
19908
  }
@@ -19943,6 +19959,7 @@ ${story_1.splitByNameLinks.toString()}
19943
19959
  if (willCheck) {
19944
19960
  var note = await checkAfterSave();
19945
19961
  if (note) msg.appendChild(document.createTextNode(" " + note));
19962
+ if (ipReason) appendBacklogProbeSwitch(msg, cap, { reason: "ip-restricted" });
19946
19963
  }
19947
19964
  ent.checking = false;
19948
19965
  endBusy();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.12.215",
3
+ "version": "0.12.217",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,