@takagaki/cortex-decisions-viewer 0.12.197 → 0.12.199

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/render.js CHANGED
@@ -6248,6 +6248,14 @@ const CLIENT_JS = `
6248
6248
  // 注: ここは埋め込みJSのテンプレートリテラル内。コメントでもバッククォートを使わない
6249
6249
  var GC_PAGE = ${JSON.stringify(google_confirm_page_1.GOOGLE_CONFIRM_PAGE_FILE)};
6250
6250
  var GC_MSG = ${JSON.stringify(google_confirm_page_1.GOOGLE_CONFIRM_POST_TYPES)};
6251
+ var GC_CHANNEL = ${JSON.stringify(google_confirm_page_1.GOOGLE_CONFIRM_CHANNEL_PREFIX)};
6252
+ var GC_FEATURES = ${JSON.stringify(google_confirm_page_1.GOOGLE_CONFIRM_WINDOW_FEATURES)};
6253
+ var GC_CLOSED_GRACE_MS = 6000;
6254
+ var GC_LEFT_GRACE_MS = 15000;
6255
+ var GC_TIMEOUT_MS = 600000;
6256
+ var GC_START_MAX = 5;
6257
+ // 進行中の確認は 1 つだけ(全ボタン共通)
6258
+ var gcPending = null;
6251
6259
  var GC_UNFINISHED = "Google での確認が終わっていません。もう一度押してください";
6252
6260
  var GC_UNAVAILABLE = "今は確認できません。しばらくしてからもう一度";
6253
6261
  // サーバの op=state が返す googleConfirm(栓が切なら無い=null=今の追加欄のまま)。取れていない間も null
@@ -6273,45 +6281,122 @@ const CLIENT_JS = `
6273
6281
  return !!c && Array.isArray(c[kind]) && c[kind].indexOf(id) >= 0;
6274
6282
  }
6275
6283
  /**
6276
- * 確認ページをポップアップで開き、結果を待つ。**ここで受け取るのは結果だけ**(トークンは来ない)。
6277
- * 🔴 メッセージは同じオリジンの、いま開いたウィンドウからのものだけを受ける。閉じられたら、最後の失敗の理由(無ければ「終わっていません」)
6284
+ * 確認ページを小さな窓で開き、結果を待つ。**ここで受け取るのは結果だけ**(トークンは来ない)。
6285
+ * 窓は Google へ移って戻ってくる間に opener が切れることがあるので、戻りは BroadcastChannel(flow 入りの名前)で受ける。
6286
+ * 🔴 flow は本体と確認ページしか知らない乱数。flow の合わないメッセージ・型の違うメッセージは捨てる。読むのは type・flow・ok・message・changed だけ。
6287
+ * 窓が閉じても、Google へ移ったあと(leaving を受けたあと)は失敗にしない。終わりは result・10 分の期限・次のクリックでの置き換え。
6278
6288
  */
6289
+ function gcRandomFlow() {
6290
+ var a = new Uint8Array(16);
6291
+ crypto.getRandomValues(a);
6292
+ var out = "";
6293
+ for (var i = 0; i < a.length; i++) out += (a[i] < 16 ? "0" : "") + a[i].toString(16);
6294
+ return out;
6295
+ }
6296
+ function gcWindowFeatures() {
6297
+ var w = 520, h = 680;
6298
+ var left = Math.max(0, Math.round((window.screenX || 0) + ((window.outerWidth || w) - w) / 2));
6299
+ var top = Math.max(0, Math.round((window.screenY || 0) + ((window.outerHeight || h) - h) / 3));
6300
+ return GC_FEATURES + ",left=" + left + ",top=" + top;
6301
+ }
6279
6302
  function openGoogleConfirm(opts) {
6280
6303
  return new Promise(function (resolve) {
6304
+ // 前の確認が残っていれば、窓が生きている間は前面に出すだけ。閉じていれば捨てて新しく始める
6305
+ if (gcPending) {
6306
+ try { if (gcPending.win && !gcPending.win.closed) { gcPending.win.focus(); resolve({ ok: false, message: "開いている Google の窓で続けてください" }); return; } } catch (e) { /* 捨てて続ける */ }
6307
+ gcPending.discard();
6308
+ }
6281
6309
  var intake = SITE.intake;
6282
- var win = window.open(new URL(GC_PAGE, location.href).href, "cortex-google-confirm", "popup,width=520,height=640");
6310
+ var flow = gcRandomFlow();
6311
+ var win = window.open(new URL(GC_PAGE, location.href).href, "cortex-google-confirm", gcWindowFeatures());
6283
6312
  if (!win) { resolve({ ok: false, message: "ポップアップが開けませんでした。ブラウザのポップアップを許可して、もう一度押してください" }); return; }
6284
- var done = false;
6313
+ var done = false; // 後始末まで済んだ
6314
+ var resolved = false; // 呼び手へ結果を返した(Google にいる間に失敗として返しても、flow は期限まで生かす)
6315
+ var left = false;
6316
+ var resumes = 0;
6317
+ var readySent = false;
6285
6318
  var last = null;
6319
+ var closedAt = 0;
6320
+ var channel = null;
6286
6321
  var timer = null;
6287
- function end(r) {
6322
+ var startedAt = Date.now();
6323
+ function settle(r) {
6324
+ if (resolved) return;
6325
+ resolved = true;
6326
+ resolve(r);
6327
+ }
6328
+ function finish() {
6288
6329
  if (done) return;
6289
6330
  done = true;
6290
- window.removeEventListener("message", onMsg);
6331
+ window.removeEventListener("message", onOpenerMsg);
6332
+ try { if (channel) channel.close(); } catch (e) { /* 閉じ済み */ }
6291
6333
  clearInterval(timer);
6292
- resolve(r);
6334
+ if (gcPending && gcPending.flow === flow) gcPending = null;
6293
6335
  }
6294
- function onMsg(ev) {
6295
- if (ev.origin !== location.origin || ev.source !== win || !ev.data) return;
6296
- if (ev.data.type === GC_MSG.ready) {
6297
- win.postMessage({
6298
- type: GC_MSG.start,
6299
- intake: { url: intake.url, token: intake.token },
6300
- ticket: actorTicket(),
6301
- kind: opts.kind,
6302
- mode: opts.mode,
6303
- url: opts.url || "",
6304
- id: opts.id || "",
6305
- }, location.origin);
6306
- } else if (ev.data.type === GC_MSG.result) {
6307
- if (ev.data.ok) end({ ok: true, message: ev.data.message, changed: ev.data.changed });
6308
- else last = ev.data;
6336
+ function end(r) {
6337
+ settle(r);
6338
+ finish();
6339
+ }
6340
+ function sendStart(target) {
6341
+ // 名乗り券は、Google で時間がかかっても切れないよう、払い出すたびに作り直す
6342
+ target({
6343
+ type: GC_MSG.start,
6344
+ flow: flow,
6345
+ intake: { url: intake.url, token: intake.token },
6346
+ ticket: actorTicket(),
6347
+ kind: opts.kind,
6348
+ mode: opts.mode,
6349
+ url: opts.url || "",
6350
+ id: opts.id || "",
6351
+ });
6352
+ }
6353
+ function handle(data, replyTo) {
6354
+ if (done || !data || typeof data !== "object" || data.flow !== flow) return;
6355
+ closedAt = 0;
6356
+ if (data.type === GC_MSG.resume) {
6357
+ // 戻ってきた窓が指示をもらい直す(Google から戻るたび。上限つき)
6358
+ if (resumes < GC_START_MAX) { resumes += 1; sendStart(replyTo); }
6359
+ } else if (data.type === GC_MSG.leaving) left = true;
6360
+ else if (data.type === GC_MSG.result) {
6361
+ if (data.ok) {
6362
+ // 失敗として返したあとに成功が届いたら、一覧だけ取り直す
6363
+ if (resolved) afterGoogleConfirm();
6364
+ end({ ok: true, message: data.message, changed: data.changed });
6365
+ } else if (!resolved) last = { message: typeof data.message === "string" ? data.message : null };
6309
6366
  }
6310
6367
  }
6311
- window.addEventListener("message", onMsg);
6368
+ function viaChannel(msg) { try { if (channel) channel.postMessage(msg); } catch (e) { /* 閉じている */ } }
6369
+ function viaWindow(msg) { try { win.postMessage(msg, location.origin); } catch (e) { /* 閉じている */ } }
6370
+ function onOpenerMsg(ev) {
6371
+ if (ev.origin !== location.origin || ev.source !== win || !ev.data) return;
6372
+ // 最初の ready だけは flow を持たない(開いたばかり)。1 回だけ指示を返す
6373
+ if (ev.data.type === GC_MSG.ready) { closedAt = 0; if (!readySent) { readySent = true; sendStart(viaWindow); } return; }
6374
+ // resume はチャンネルで受けるので、opener 経由の複製は捨てる(払い出しの二重消費を避ける)
6375
+ if (ev.data.type === GC_MSG.resume) return;
6376
+ handle(ev.data, viaWindow);
6377
+ }
6378
+ try {
6379
+ channel = new BroadcastChannel(GC_CHANNEL + flow);
6380
+ channel.onmessage = function (ev) { handle(ev.data, viaChannel); };
6381
+ } catch (e) { channel = null; }
6382
+ window.addEventListener("message", onOpenerMsg);
6312
6383
  timer = setInterval(function () {
6313
- if (win.closed) end({ ok: false, message: last && last.message ? last.message : GC_UNFINISHED });
6384
+ var now = Date.now();
6385
+ var failure = last && last.message ? last.message : GC_UNFINISHED;
6386
+ if (now - startedAt >= GC_TIMEOUT_MS) { end({ ok: false, message: failure }); return; }
6387
+ var closed = false;
6388
+ try { closed = win.closed; } catch (e) { closed = true; }
6389
+ if (!closed) { closedAt = 0; return; }
6390
+ if (!closedAt) closedAt = now;
6391
+ if (left) {
6392
+ // Google へ移ったあと: 窓の所属が切り替わって closed に見えることがある。呼び手には押し直せる形で返すが、
6393
+ // flow は期限まで生かす(窓が実は生きていて、戻って resume してくる場合に備える)
6394
+ if (now - closedAt >= GC_LEFT_GRACE_MS) settle({ ok: false, message: failure });
6395
+ } else if (now - closedAt >= GC_CLOSED_GRACE_MS) {
6396
+ end({ ok: false, message: failure });
6397
+ }
6314
6398
  }, 500);
6399
+ gcPending = { flow: flow, win: win, discard: function () { end({ ok: false, message: GC_UNFINISHED }); } };
6315
6400
  });
6316
6401
  }
6317
6402
  /** 確認が済んだあとの後始末: 登録の一覧と確認済みの一覧(どちらも op=state)を取り直し、開いている一覧を描き直す */
@@ -6840,10 +6925,19 @@ ${story_1.splitByNameLinks.toString()}
6840
6925
  var MEET_SHOT_STEP11 = "${meet_guide_images_1.MEET_GUIDE_STEP11}";
6841
6926
  var MEET_SHOT_STEP12 = "${meet_guide_images_1.MEET_GUIDE_STEP12}";
6842
6927
  var MEET_SHOT_STEP13 = "${meet_guide_images_1.MEET_GUIDE_STEP13}";
6843
- // Figma の「発行のしかた」に載せる手順の画像(#547)。理由は src/figma-guide-images.ts
6928
+ // Figma の手順動画のポスターと手順画像11枚(#1353)。理由は src/figma-guide-images.ts
6929
+ var FIGMA_SHOT_POSTER = "${figma_guide_images_1.FIGMA_GUIDE_POSTER}";
6844
6930
  var FIGMA_SHOT_STEP1 = "${figma_guide_images_1.FIGMA_GUIDE_STEP1}";
6845
6931
  var FIGMA_SHOT_STEP2 = "${figma_guide_images_1.FIGMA_GUIDE_STEP2}";
6846
6932
  var FIGMA_SHOT_STEP3 = "${figma_guide_images_1.FIGMA_GUIDE_STEP3}";
6933
+ var FIGMA_SHOT_STEP4 = "${figma_guide_images_1.FIGMA_GUIDE_STEP4}";
6934
+ var FIGMA_SHOT_STEP5 = "${figma_guide_images_1.FIGMA_GUIDE_STEP5}";
6935
+ var FIGMA_SHOT_STEP6 = "${figma_guide_images_1.FIGMA_GUIDE_STEP6}";
6936
+ var FIGMA_SHOT_STEP7 = "${figma_guide_images_1.FIGMA_GUIDE_STEP7}";
6937
+ var FIGMA_SHOT_STEP8 = "${figma_guide_images_1.FIGMA_GUIDE_STEP8}";
6938
+ var FIGMA_SHOT_STEP9 = "${figma_guide_images_1.FIGMA_GUIDE_STEP9}";
6939
+ var FIGMA_SHOT_STEP10 = "${figma_guide_images_1.FIGMA_GUIDE_STEP10}";
6940
+ var FIGMA_SHOT_STEP11 = "${figma_guide_images_1.FIGMA_GUIDE_STEP11}";
6847
6941
  // Backlog の手順動画のポスターと手順画像10枚(#1353)。理由は src/backlog-guide-images.ts
6848
6942
  var BACKLOG_SHOT_POSTER = "${backlog_guide_images_1.BACKLOG_GUIDE_POSTER}";
6849
6943
  var BACKLOG_SHOT_STEP1 = "${backlog_guide_images_1.BACKLOG_GUIDE_STEP1}";
@@ -12593,7 +12687,19 @@ ${story_1.splitByNameLinks.toString()}
12593
12687
  // 🔴 **Figma の説明文(c-07・新設)。** 追加の欄の手順 4(何が同期されるか)と手順 1 の前提
12594
12688
  // (トークンの登録)を、ここに 1 回だけ置く。鍵の欄は 0 件のあいだ畳まれているので、入れる欄が
12595
12689
  // 出ること(ファイルを足すと出る)も 1 句で言う。発行の手順そのものは鍵の欄(正本)が持つ
12596
- m.modal.appendChild(el("p", { class: "modal-desc", text: "ここに並んでいる Figma ファイルの画面名とコメントを、Figma へのリンクつきで毎晩同期します(画像は取り込まれません)。あらかじめ Figma のトークンの登録が要ります(ファイルを足すと入れる欄が出ます)。やめるには「このファイルを外す」を押してください。" }));
12690
+ var figmaDesc = el("p", { class: "modal-desc", text: "ここに並んでいる Figma ファイルの画面名とコメントを、Figma へのリンクつきで毎晩同期します(画像は取り込まれません)。あらかじめ Figma のトークンの登録が要ります(ファイルを足すと入れる欄が出ます)。やめるには「このファイルを外す」を押してください。" });
12691
+ m.modal.appendChild(figmaDesc);
12692
+ // 🔴 **Figma のつなぎ方の動画+画像(#1353)は Backlog と同じ配置**(見出しのすぐ下・説明文より前・折りたたまない・中央・幅 480px 上限)。
12693
+ // 投入の口が無い(つなげない)配信先には出さない
12694
+ var figmaForm = SECRET_FORMS["figma"];
12695
+ if (SITE.intake && figmaForm && figmaForm.guideInModal) {
12696
+ var figmaCarousel = buildGuideCarousel("figma", figmaForm.guide);
12697
+ if (figmaCarousel) {
12698
+ figmaCarousel.classList.add("mt-carousel-center");
12699
+ figmaCarousel.setAttribute("data-guide-kind", "figma");
12700
+ m.modal.insertBefore(figmaCarousel, figmaDesc);
12701
+ }
12702
+ }
12597
12703
  } else if (cap === "共有資料" && (!adapter || adapter === "google-drive")) {
12598
12704
  // 🔴 **Google Drive 専用の説明文(c-07・新設)。** SharePoint 等の別のアダプタの窓には出さない
12599
12705
  // (Markdown 化の約束は Drive の取り込みの話)。追加の欄の手順 3 が持っていた文
@@ -18655,36 +18761,81 @@ ${story_1.splitByNameLinks.toString()}
18655
18761
  // 特に file_comments:read の欠落は「同期は緑なのに指摘だけ増えない」という
18656
18762
  // 気づきにくい壊れ方をする(コメント同期は後から足した機能で、この案内が追随していなかった)。
18657
18763
  // 書き込み権限は1つも要らない。files:read(非推奨・広範)は選ばせないこと。
18658
- // **画像内の番号(①〜⑧・下の shots)と、この文の言い回しの向きを揃える。**
18659
- // 文の側には数字を振らない——振ると画像の丸数字と二重に採番することになり、
18660
- // 「文の1番」と「画像の①」がずれたときに矛盾して見える(#547)
18661
- how: "Figma の左上の名前 → Settings → Security タブ → Personal access tokens の Generate new token で発行します。名前は任意(例: cortex token)、期限は90日などにし、スコープは file_content:read と file_comments:read の2つだけにチェックを入れてください(どちらも読み取りのみ・書き込み権限は要りません)。",
18764
+ // **動画の読み上げ・画像の札(下の shots)と、この文の言い回しの向きを揃える。**
18765
+ // 文の側には数字を振らない——振ると画像の手順番号と二重に採番することになり、
18766
+ // 「文の1番」と「画像の1」がずれたときに矛盾して見える
18767
+ how: "Figma でファイルを開き、左上のメニュー → Help and account → Account settings → Security タブ → Personal access tokens の Generate new token で発行します。名前は任意(例: cortex token)、期限は90日などにし、スコープは file_content:read と file_comments:read の2つだけにチェックを入れてください(どちらも読み取りのみ・書き込み権限は要りません)。",
18662
18768
  // **スコープが正しくても、招待が無いと読めない。** トークンは「そのアカウントが
18663
18769
  // 見られるファイル」しか読めないので、招待漏れは 404 になる。権限の問題に見えないため
18664
18770
  // 現場で切り分けに時間がかかる(実際に踏んだ)。入力欄の隣に書いておく。
18665
18771
  note: "発行したアカウントを、対象の Figma ファイルに閲覧者として招待しておいてください(招待が無いとトークンが正しくても読めません)。"
18666
18772
  + "発行するのは、対象ファイルのあるチームで Dev または Full の席を持つ方にしてください。閲覧席(View/Collab)のトークンは取得回数が月 20 回までで、夜間同期が数日で止まります。",
18667
- // **手順の画像3枚(#547)。** buildGuideCarousel(#1353)を通す1枚ずつ送りの枠に乗せる。
18668
- // 見出しは画像の並び順(1〜3枚目)、画像の中の丸数字(①〜⑧)は1枚の中の細かい手順
18669
- // ——役割が別なので、見出し側に丸数字を混ぜない。
18670
- // 動画は無し(guide.video を省略)。将来動画を足すときは、この guide にそのまま
18671
- // video: { alt } を足すだけで済む(SITE.guideAssets.figma.video が注入された日から配信開始)
18773
+ // **手順の動画+画像(#1353)。** Backlog と同じ形(動画の実 URL は SITE.guideAssets.figma.video・build.ts の
18774
+ // GUIDE_VIDEO_SOURCES が注入する)。画像の並びは手順の順(01→11: Figma の行 → リンクをコピー → トークンを発行 → 貼る → つながる)。
18775
+ // 動画+画像は鍵の欄ではなく、モーダルの上(見出しの下・説明文の前)に出す(openCapabilityModal の Figma の項)
18776
+ guideInModal: true,
18672
18777
  guide: {
18778
+ // 画像の説明文(カルーセルの下)は「手順 N / 11」だけを出す(画像の中に文言が入っているため)
18779
+ counter: true,
18780
+ video: {
18781
+ alt: "Figma を Cortex につなぐ手順の動画(約1分30秒)。Figma のファイルのリンクのコピー、読み取り用のトークンの発行、操作タブへの貼り付け、接続OK の確認までを画面で見せます。",
18782
+ poster: FIGMA_SHOT_POSTER,
18783
+ },
18673
18784
  shots: [
18674
18785
  {
18675
- src: FIGMA_SHOT_STEP1, width: "1000", height: "1114",
18676
- heading: "1. 左上の名前 → Settings",
18677
- alt: "Figma左上の自分の名前を押すとメニューが開き、その中のSettingsが赤枠で示されている。",
18786
+ src: FIGMA_SHOT_STEP1, width: "960", height: "540",
18787
+ heading: "1. 操作タブで Figma の行を押す",
18788
+ alt: "手順 1。Cortex の操作タブのデザインの Figma の行が赤枠で示されている。",
18789
+ },
18790
+ {
18791
+ src: FIGMA_SHOT_STEP2, width: "960", height: "540",
18792
+ heading: "2. Figma でファイルを開き Share →[Copy link]",
18793
+ alt: "手順 2。Figma の Share の窓で[Copy link]が赤枠で示されている。",
18794
+ },
18795
+ {
18796
+ src: FIGMA_SHOT_STEP3, width: "960", height: "540",
18797
+ heading: "3. リンクを貼って[追加]",
18798
+ alt: "手順 3。Cortex の Figma のモーダルの「Figma ファイルを追加」の欄と[追加]が赤枠で示されている。",
18799
+ },
18800
+ {
18801
+ src: FIGMA_SHOT_STEP4, width: "960", height: "540",
18802
+ heading: "4. ファイルが並んだら、次はトークン",
18803
+ alt: "手順 4。ファイルの行と[登録する]が赤枠で示されている。",
18804
+ },
18805
+ {
18806
+ src: FIGMA_SHOT_STEP5, width: "960", height: "540",
18807
+ heading: "5. 左上のメニュー → Help and account → Account settings",
18808
+ alt: "手順 5。Figma の左上のメニューで Help and account と Account settings が赤枠で示されている。",
18809
+ },
18810
+ {
18811
+ src: FIGMA_SHOT_STEP6, width: "960", height: "540",
18812
+ heading: "6. Security タブ →[Generate new token]",
18813
+ alt: "手順 6。Account settings の Security タブと Generate new token が赤枠で示されている。",
18814
+ },
18815
+ {
18816
+ src: FIGMA_SHOT_STEP7, width: "960", height: "540",
18817
+ heading: "7. 名前は自由・期限は 90 days",
18818
+ alt: "手順 7。トークンの名前の欄と期限(90 days)が赤枠で示されている。",
18819
+ },
18820
+ {
18821
+ src: FIGMA_SHOT_STEP8, width: "960", height: "540",
18822
+ heading: "8. file_content:read と file_comments:read の 2 つだけにチェック →[Generate token]",
18823
+ alt: "手順 8。権限の一覧で file_content:read と file_comments:read の 2 つのチェックが赤枠で示されている。",
18824
+ },
18825
+ {
18826
+ src: FIGMA_SHOT_STEP9, width: "960", height: "540",
18827
+ heading: "9. トークンをコピー(見られるのはこの画面だけ)",
18828
+ alt: "手順 9。発行されたトークンの欄が赤枠で示されている(値は伏せ字)。",
18678
18829
  },
18679
18830
  {
18680
- src: FIGMA_SHOT_STEP2, width: "1200", height: "1145",
18681
- heading: "2. Security タブ → Generate new token を押す",
18682
- alt: "Settings画面のSecurityタブが赤枠で示され、下のPersonal access tokensにあるGenerate new tokenのリンクも赤枠で示されている。",
18831
+ src: FIGMA_SHOT_STEP10, width: "960", height: "540",
18832
+ heading: "10.[登録する]→ トークンを貼って[保存]",
18833
+ alt: "手順 10。Cortex のトークンの欄と[保存]が赤枠で示されている。",
18683
18834
  },
18684
18835
  {
18685
- src: FIGMA_SHOT_STEP3, width: "1100", height: "1428",
18686
- heading: "3. 名前・期限・スコープを決めて発行する",
18687
- alt: "Generate new tokenダイアログ。Token name欄・Expiration(90日)・file_comments:readとfile_content:readのチェックボックス・Generate tokenボタンが、それぞれ赤枠で示されている。",
18836
+ src: FIGMA_SHOT_STEP11, width: "960", height: "540",
18837
+ heading: "11. 「接続OK」と「登録済み」が出れば完了",
18838
+ alt: "手順 11。ファイルの行の「接続OK」とトークンの「登録済み」が赤枠で示されている。",
18688
18839
  },
18689
18840
  ],
18690
18841
  },
@@ -18998,7 +19149,7 @@ ${story_1.splitByNameLinks.toString()}
18998
19149
  // meta.guide を持つ種別(Figma)はカルーセル1つに乗せる。meta.guide も meta.shots も
18999
19150
  // 持たない種別(Backlog)ではこの節は素通りする
19000
19151
  if (meta.guide && meta.guideInModal) {
19001
- // モーダルの上に出している種別(Backlog)は、ここには重ねない
19152
+ // モーダルの上に出している種別(Backlog・Figma)は、ここには重ねない
19002
19153
  } else if (meta.guide) {
19003
19154
  var carousel = buildGuideCarousel(kind, meta.guide);
19004
19155
  if (carousel) guidanceBox.appendChild(carousel);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.12.197",
3
+ "version": "0.12.199",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -21,7 +21,9 @@
21
21
  "!assets/guides/github-poster.jpg",
22
22
  "!assets/guides/github-annotated",
23
23
  "!assets/guides/meet-poster.jpg",
24
- "!assets/guides/meet-annotated"
24
+ "!assets/guides/meet-annotated",
25
+ "!assets/guides/figma-poster.jpg",
26
+ "!assets/guides/figma-annotated"
25
27
  ],
26
28
  "engines": {
27
29
  "node": ">=18"