エンタープライズ向けコンポーネントシステム · 新しいリソース

Tablerデザインシステム.

実際の 1.6 テーマ変数、タイムラインカード、データグリッドのコンテキスト、モーダルの検証機能を備え、ローカルのチェックポイントを受け入れられる、ネイティブ Tabler プロジェクトジャーナル。ライト/ダークの両テーマに対応した構成です。

OpenDesign ガイド9 章リファレンス項目34件オリジナルアプリケーションガイド
01

Tablerデザインシステムのインターフェースプレビュー

デザイン上の判断や表紙の検討例を確認し、検証済みのチェックポイントを追加して、ネイティブのカラーモードを切り替えます。

Atlasプロジェクトジャーナル完全な例を開く
Tabler 1.6.1のコンパイル済みCSSと、同梱のModal JavaScript。元のプロジェクトコンテンツと表紙の検討例。· 実装リファレンス
02

Tablerデザインシステムのデザインリファレンス

Tabler 1.6.1のコンパイル済みCSS変数。このリリースでは、プリミティブにOKLCHを使用し、セマンティックな役割にはlight-dark()/color-mix()を使用します。旧版の16進数カラーを使ったTablerの例は、同じテーマとして扱わないでください。以下はインストール済みのデフォルト値です。

デフォルトのステータス色とアクション色

ソース
名前 / ルール値 / 設定用途
--tblr-primaryoklch(54.6% 0.1724 254.2deg)メインアクションの役割。
--tblr-secondaryoklch(55.55% 0 0deg)セカンダリロール。
--tblr-successoklch(67.38% 0.1885 145.43deg)成功状態の役割。
--tblr-infooklch(66.26% 0.1358 246.81deg)情報ロール。
--tblr-warningoklch(77.02% 0.1658 71.02deg)警告ロール。
--tblr-dangeroklch(58.29% 0.1941 25.59deg)危険ロール。
--tblr-purpleoklch(57.83% 0.2186 319.15deg)このアプリケーションのプロトタイプカテゴリ色。
--tblr-body-colorlight-dark(oklch(26.86% 0 0deg), oklch(92.19% 0 0deg))テキストの色は現在のカラースキームに合わせて変わります。
--tblr-body-bglight-dark(oklch(98.51% 0 0deg), oklch(20.46% 0 0deg))ページの背景色はカラースキームに合わせて変わります。
--tblr-bg-surfacelight-dark(var(--tblr-bg-surface-primary), var(--tblr-gray-800))カード/サーフェスの背景の役割。

本文のタイポグラフィと角丸のスケール

ソース
名前 / ルール値 / 設定用途
--tblr-font-sans-serifsystem-ui, -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serifインストール済みリリースのシステムサンセリフフォントスタック。
--tblr-body-font-size0.875remブラウザーのルートサイズが16pxの場合、デフォルトは14px相当。
--tblr-body-font-weight400本文の標準ウェイト。
--tblr-body-line-height1.4285714286デフォルトの本文サイズで約20px。
--tblr-border-radius6pxデフォルトの角丸は6px。
--tblr-border-radius-sm4px小さめの角丸半径4px。
--tblr-border-radius-lg8px大サイズの角丸は8px。
--tblr-border-radius-xl1rem特大サイズの角丸は1rem。
--tblr-border-radius-pill100remピル型の角丸。

スペーシングとネイティブのタイムラインの形状

ソース
名前 / ルール値 / 設定用途
--tblr-spacer-00ネイティブの名前付きスペーシング値。
--tblr-spacer-10.25remネイティブの名前付きスペーシング値。
--tblr-spacer-20.5remネイティブの名前付きスペーシング値。
--tblr-spacer-31remネイティブの名前付きスペーシング値。
--tblr-spacer-41.5remネイティブの名前付きスペーシング値。
--tblr-spacer-52remネイティブの名前付きスペーシング値。
--tblr-spacer-62.5remネイティブの名前付きスペーシング値。
--tblr-page-paddingvar(--tblr-spacer-3)ページ/タイムライン間隔の変数。レスポンシブ時の上書きで値が変わることがあります。
--tblr-card-spacer-x1.25remカード本文のデフォルトの水平方向のパディング。
--tblr-card-spacer-y1.25remカード本文のデフォルトの垂直方向のパディング。
--tblr-timeline-icon-size2.5remルートサイズがデフォルトの16pxの場合、アイコンノードは40px。

元のジャーナルの設定

ソース
名前 / ルール値 / 設定用途
Project layoutcol-lg-8 + col-lg-4ネイティブのグリッド。lgブレークポイントから2列。
Page padding32px; 24px 14px below 650px独自に設定したアプリケーションの内側余白。
Journal title32px / 1.2; 27px on mobile元のページタイトルのオーバーライド。
Cover studies155px tall; 120px on mobile元の装飾的なCSSアートワーク。
03

Tablerデザインシステム完全ガイド

実際のインターフェースで、このデザインシステムを選び、適用し、レビューするための実践ガイドです。

DESIGN-tabler.md

詳しいガイダンス、実装の出発点、ソースへのリンクをまとめています。

ガイドをダウンロード

Tablerデザインシステム:Tablerのリリースに合ったテーマを使う

Tablerのリリースに合ったテーマを使う

プロジェクトジャーナルはTabler 1.6.1で構築されています。コンパイル済みのパレットにはOKLCHカラーが使われ、セマンティック変数にはlight-darkとcolor-mixが使われています。そのため、このリファレンスでは、以前のBootstrapまたはTablerのガイドにある16進数の値を転記せず、実際に使われている式を紹介しています。主要アクション、ステータスバッジ、サーフェスの役割は、すべてインストール済みのこのリリースに基づいています。

この OpenDesign ガイドから

Tablerは、独自のレイアウトや情報表示のパターンによって、Bootstrapのコンポーネント語彙を拡張しています。このサンプルでは、見慣れたカード、フォーム、Modalに加え、ネイティブのtimeline、page-header、datagrid、avatarのクラスを使用しています。こうした要素により、単にロゴを差し替えた汎用カードグリッドではなく、Tablerならではの構成になっています。

関連する仕様を確認する

Tablerデザインシステム:カラーモードではテキストだけでなくサーフェスも変わる

カラーモードではテキストだけでなくサーフェスも変わる

テーマコントロールはhtml要素のdata-bs-themeを変更し、自身の押下状態とアクションラベルも更新します。その後、Tablerのセマンティックな式がライトまたはダークの値を選択します。この2状態のサンプルでは別のJavaScriptテーママネージャーは不要で、ページ外への設定の保存も行いません。

Decision、Prototype、Reviewには、ネイティブの青、紫、緑の色合いを持つクラスを使用しています。テキストラベルだけでも意味が伝わるため、色だけに依存しません。表紙の検討例のアートワークは、どちらのモードでも元の紙のような配色を維持します。周囲のカード、ページ、テキストには、実際のコンポーネントテーマが適用されます。

関連する仕様を確認する

Tablerデザインシステム:コンパクトな本文文字と独立したページ階層

コンパクトな本文文字と独立したページ階層

デフォルトの本文サイズは0.875remで、行の高さは約1.4286です。ルートサイズが16pxの場合、文字サイズはおよそ14pxになります。インストール済みのフォントスタックはシステムサンセリフのため、このプレビューではリモートフォントは不要です。カードタイトルとメタデータにはネイティブのクラスをそのまま使い、ページタイトルには独自の32pxサイズを適用しています。

ネイティブのスペーサー値は、0、0.25、0.5、1、1.5、2、2.5remの順に大きくなります。これらは推測したスケールではなく、インストール済みのCSSで定義された名前付き変数です。カード本文のデフォルトのパディングは、縦横ともに1.25remです。タイムラインのノードは2.5remで、コネクターにはページのパディング変数を使い、各項目間の間隔をつないでいます。

関連する仕様を確認する

Tablerデザインシステム:タイムラインは単なる縦線ではない

タイムラインは単なる縦線ではない

各チェックポイントは、timeline-event-iconとtimeline-event-cardを持つtimeline-eventリスト項目です。ネイティブのCSSがノードの位置を決め、最後以外の項目間にコネクターを描画し、ノード幅とページのパディング分だけコンテンツカードをずらします。この例では、背景画像で線をごまかしたり、各カードに個別の絶対位置指定を適用したりしていません。

カードの内容はそれぞれ異なります。1枚には構造上の決定事項、1枚には実際の表紙デザイン案3点、もう1枚には参考資料のレビューが記録されています。プロジェクトのコンテキストは、形式や現在の注力事項が日付付きのイベントではなく、継続的な属性であるため、タイムラインの外に配置しています。画面が小さい場合、サイドバーはドキュメントの順序に従ってタイムラインの後に表示されます。

関連する仕様を確認する

Tabler デザインシステム:小規模なラベルと値のグループにはdatagridを使う

小規模なラベルと値のグループにはDatagridを使う

プロジェクトのコンテキストカードでは、datagrid-item、datagrid-title、datagrid-contentの組み合わせを使っています。形式、チーム、チェックポイント、現在の注力事項は同列の属性なので、行見出しが重複する表ではなく、コンパクトなネイティブdatagridで表示します。アバターにはイニシャルのテキストを使い、外部画像アセットは必要ありません。

この例で値が変更されるコンテキスト項目は、チェックポイント数のみです。ローカル項目を追加すると、元のプロジェクト説明はそのままに、数が3から4に更新されます。表示されている項目数と直接対応するため、架空のダッシュボード指標を加える必要はありません。

関連する仕様を確認する

Tabler デザインシステム:表示とフォーカスはバンドルされたモーダルが管理する

組み込みのModalが表示状態とフォーカスを管理する

「チェックポイントを追加」を押すと、data-bs-toggleとdata-bs-targetを使ってネイティブモーダルが開きます。バンドルされたTabler JavaScriptがモーダルを実装します。shown.bs.modalイベントのリスナーは、入力欄が実際に表示されるトランジション完了後にタイトル欄へフォーカスを移します。「閉じる」と「キャンセル」にはdata-bs-dismissを使い、同じコンポーネントのライフサイクルに従わせます。

モーダルには実際のフォームが含まれています。必須入力と文字数の制約により、送信ハンドラーが実行される前に未入力の項目が検出されます。さらにハンドラーでは、空白だけの文字列は有効なタイトルや理由にならないため、空白を除いた文字数も確認します。入力内容は修正できるようそのまま保持し、項目の追加に成功した場合にのみフォームをリセットします。

  1. モーダルを開き、入力欄を空のまま送信して、最初に無効と判定される項目を確認します。
  2. タイトルを入力し、チェックポイントの種類を選び、その理由を説明します。
  3. 送信し、新しい項目とコンテキストの数が同時に更新されることを確認します。

関連する仕様を確認する

Tabler デザインシステム:テキストを安全に追加し、ローカルでの処理範囲を明示する

安全なテキストを追加し、ローカルであることを明示する

アプリケーションは既定のカード構造を作成し、タイトルと理由をtextContentで挿入します。選択欄にある3種類を固定の対応表で照合し、色合いのクラスを選ぶのはその場合のみです。ユーザーが入力したテキストをカードのHTMLに文字列として埋め込むことはありません。新しい項目には、架空のサーバータイムスタンプではなく、ローカルで追加したことがわかる「LOCAL ENTRY」ラベルを付けます。

追加後、既存のモーダルインスタンスを閉じ、新しいチェックポイントの名前を示すステータス通知を表示します。プロジェクトサービスは更新されていないことも明記します。実際の共同ジャーナルには、永続化、作成者の識別、順序を保証する仕組みが必要です。DOMへのローカルな追加だけでは、そうした機能は実現できません。

関連する仕様を確認する

Tabler デザインシステム:幅の狭いタイムラインでも情報を読みやすく保つ

幅の狭いタイムラインでも、情報量の多いコンテンツを読みやすく保つ

メイングリッドではcol-lg-8とcol-lg-4を使っています。ネイティブのlgブレークポイントを下回ると、プロジェクトのコンテキストがジャーナルの下に積み重なります。元の小画面向けスタイルシートでは、タイムラインの横の余白を縮め、タイトルとバッジのグループを折り返し可能にし、表紙デザイン案を縮小します。テキストと操作はそのまま維持します。

アイコンの列、カードのパディング、長いタイトルが同じ幅を取り合うと、タイムラインは窮屈になることがあります。モバイル向けの例では、ノードを安定した目印として残しながら、ずれを小さくしています。表紙デザイン案は、相互の関係が重要なため、元の3案を小さく並べて比較できるようにしています。キャプションは補足情報とし、隣接する説明文を主な情報源としています。

  • タイトルとチェックポイントの種類は、折り返しても読みやすく保ちます。
  • タイムラインの項目を一律に切り詰めず、理由のテキストを残します。
  • モバイルでは、メインの読み進め順の後にコンテキストカードを配置します。

関連する仕様を確認する

Tabler デザインシステム:バージョンの合ったCSSとJavaScriptを組み合わせて読み込む

対応するCSSとJavaScriptの組み合わせを読み込む

このセットアップでは@tabler/core 1.6.1を使い、そのdistアセットをローカルのpublicディレクトリにコピーします。tabler.min.cssをアプリケーションのスタイルシートより前に、tabler.min.jsをローカルのインタラクションコードより前に読み込みます。別の無関係なBootstrapバンドルを追加すると、同じデータ属性が二重に初期化される可能性があります。この例では、バージョンの合ったTablerバンドルだけを使用します。

現在のスタイルシートでは、最新のカラー関数を使っています。古いブラウザーへの対応が必要な製品で採用する場合は、Tablerのブラウザーサポートに関するガイダンスを確認してください。ローカルの例はChromiumで、ネイティブモーダルの入力検証、タイムラインへの項目追加、ダークモード、390px幅のレイアウトを確認しています。本番環境へのデプロイではなく、あらゆるブラウザーでの動作を保証するものでもありません。

関連する仕様を確認する

Tabler デザインシステムのコンポーネント例

タイムライン、コンテキストカード、項目追加モーダル

ネイティブのtimeline-event、card、datagrid、badge、modalの構造。

html
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>

コードリファレンス

  • タイムラインは、読み進める順に並んだ実際のリストです。
  • プロジェクトのコンテキストには、datagridのtitle/contentの組み合わせを使います。
  • モーダルを開くトリガーには、バンドルされたBootstrap互換のdata APIを使います。

ローカルでのチェックポイント追加を検証済み

モーダルのライフサイクル、安全なテキスト挿入、件数の同期、カラーモード。

JavaScript
const q=s=>document.querySelector(s),modalEl=q('#entry-modal');let count=3;
modalEl.addEventListener('shown.bs.modal',()=>q('#entry-name').focus());
q('#theme').onclick=e=>{let dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';e.currentTarget.setAttribute('aria-pressed',String(dark));e.currentTarget.textContent=dark?'Light mode':'Dark mode';};
q('#entry-form').onsubmit=e=>{e.preventDefault();const title=q('#entry-name'),detail=q('#entry-detail'),kind=q('#entry-type').value;if(title.value.trim().length<5){title.setCustomValidity('Use at least five non-space characters.');title.reportValidity();return;}if(detail.value.trim().length<15){detail.setCustomValidity('Use at least fifteen non-space characters.');detail.reportValidity();return;}const li=document.createElement('li');li.className='timeline-event';const color={Decision:'blue',Prototype:'purple',Review:'green'}[kind];li.innerHTML=`<div class="timeline-event-icon bg-${color}-lt" aria-hidden="true">YOU</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1"></h2><span class="badge bg-${color}-lt"></span></div><div class="text-secondary small mb-3">You · LOCAL ENTRY</div><p class="mb-0"></p></div></div>`;li.querySelector('h2').textContent=title.value.trim();li.querySelector('.badge').textContent=kind;li.querySelector('p').textContent=detail.value.trim();q('#timeline').prepend(li);q('#count').textContent=`${++count} recorded`;tabler.Modal.getInstance(modalEl).hide();q('#notice').hidden=false;q('#notice').textContent=`Local ${kind.toLowerCase()} added: ${title.value.trim()}. No project service was updated.`;e.target.reset();};['#entry-name','#entry-detail'].forEach(s=>q(s).oninput=e=>e.target.setCustomValidity(''));

コードリファレンス

  • ユーザー入力の文字列はtextContentで設定します。
  • 有効な項目を追加した場合にのみ、モーダルをリセットします。
  • プロジェクトサービスが更新されていないことを通知に明記します。

元のジャーナルレイアウトと表紙デザイン案

ネイティブのTablerコンポーネントに合わせたレスポンシブ調整。

CSS
html,body{min-height:0;height:auto}body{margin:0}.project-log{max-width:1160px;padding:32px;margin:auto}.project-log .page-header{margin:0 0 24px}.project-log .page-title{font-size:32px;line-height:1.2}.cover-strip{display:flex;gap:12px}.cover-strip>div{flex:1;min-width:0;height:155px;padding:14px;background:#d6dfd2;color:#334834;position:relative;overflow:hidden;border-radius:4px}.cover-strip>div:nth-child(2){background:#cbdbe3;color:#2d4857}.cover-strip>div:nth-child(3){background:#e9d9bc;color:#6a5439}.cover-strip b{letter-spacing:.15em;font-size:14px}.cover-strip i{position:absolute;width:120px;height:90px;border-radius:50%;background:currentColor;opacity:.2;left:20%;top:38%;transform:rotate(-25deg)}.cover-strip>div:nth-child(2) i{width:40px;height:150px;top:30%;left:50%;border-radius:40%}.cover-strip>div:nth-child(3) i{width:160px;height:60px;top:45%;left:10%;border-radius:0;transform:rotate(-12deg)}.cover-strip small{position:absolute;bottom:12px;left:14px;font-size:9px;letter-spacing:.12em}[hidden]{display:none!important}.timeline-event-card .badge{height:fit-content;white-space:nowrap}.timeline-event-card p{line-height:1.65}.timeline-event-icon{font-size:11px;font-weight:700}@media(max-width:650px){.project-log{padding:24px 14px}.project-log .page-title{font-size:27px}.page-header .col-auto{width:100%;margin-top:16px}.cover-strip{gap:6px}.cover-strip>div{height:120px;padding:8px}.cover-strip b{font-size:10px}.cover-strip small{left:8px;font-size:7px}.timeline-event-card .d-flex{flex-wrap:wrap}.timeline-event-card{margin-inline-start:calc(var(--tblr-timeline-icon-size) + 12px)}}

コードリファレンス

  • 表紙のアートワークは、架空のデザイン案3点を表しています。
  • 埋め込み時にコンテンツの高さに合わせて表示します。
04

Tabler デザインシステムのエージェント設定

実装の出発点

Tabler 1.6.1で動作確認済みです。付属のレイアウトモジュールとアプリケーションモジュールをstyle.cssとapp.jsとして保存してください。ネイティブのモーダルデータAPIを使用します。HTMLラッパーにはbody全体のマークアップが含まれます。付属のインタラクションとCSSの例は、ここで参照しているファイル名で保存してください。

html
<!-- npm install @tabler/[email protected] -->
<!-- Copy node_modules/@tabler/core/dist to public/vendor/tabler. -->
<html lang="en" data-bs-theme="light">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/vendor/tabler/css/tabler.min.css">
<link rel="stylesheet" href="style.css">
<main class="project-log"><header class="page-header d-print-none"><div class="row align-items-center"><div class="col"><div class="page-pretitle">TABLER · PROJECT JOURNAL</div><h1 class="page-title">Atlas field notes</h1><p class="text-secondary mt-2 mb-0">Decisions, prototypes and review checkpoints for a small editorial project.</p></div><div class="col-auto d-flex gap-2"><button id="theme" class="btn" aria-pressed="false">Dark mode</button><button id="add" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#entry-modal">Add checkpoint</button></div></div></header><div class="row g-4 mt-1"><section class="col-lg-8" aria-label="Project checkpoints"><ul id="timeline" class="timeline"><li class="timeline-event"><div class="timeline-event-icon bg-blue-lt" aria-hidden="true">AM</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">A clearer route through the issue</h2><span class="badge bg-blue-lt">Decision</span></div><div class="text-secondary small mb-3">Alex Morgan · 02 OCT</div><p class="mb-0">Group the field essays by landscape rather than author. Each chapter opens with a short map and a single question.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-purple-lt" aria-hidden="true">JC</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Three cover directions</h2><span class="badge bg-purple-lt">Prototype</span></div><div class="text-secondary small mb-3">Jules Chen · 01 OCT</div><div class="cover-strip" aria-label="Three original cover studies"><div><b>ATLAS</b><i></i><small>RIDGE / 01</small></div><div><b>ATLAS</b><i></i><small>RIVER / 02</small></div><div><b>ATLAS</b><i></i><small>PLAIN / 03</small></div></div><p class="mt-3 mb-0">Compare the quiet title treatment against the stronger geographic silhouette before selecting a direction.</p></div></div></li><li class="timeline-event"><div class="timeline-event-icon bg-green-lt" aria-hidden="true">SR</div><div class="card timeline-event-card"><div class="card-body"><div class="d-flex justify-content-between gap-3"><h2 class="card-title mb-1">Reference package reviewed</h2><span class="badge bg-green-lt">Review</span></div><div class="text-secondary small mb-3">Sam Rivera · 30 SEP</div><p class="mb-0">Image captions, credit lines and print dimensions are recorded alongside each selected reference.</p></div></div></li></ul></section><aside class="col-lg-4"><div class="card"><div class="card-header"><h2 class="card-title">Project context</h2></div><div class="card-body"><div class="datagrid"><div class="datagrid-item"><div class="datagrid-title">Format</div><div class="datagrid-content">Editorial field journal</div></div><div class="datagrid-item"><div class="datagrid-title">Team</div><div class="datagrid-content"><span class="avatar avatar-xs me-1">AM</span><span class="avatar avatar-xs me-1">JC</span><span class="avatar avatar-xs">SR</span></div></div><div class="datagrid-item"><div class="datagrid-title">Checkpoints</div><div id="count" class="datagrid-content">3 recorded</div></div><div class="datagrid-item"><div class="datagrid-title">Current focus</div><div class="datagrid-content">Cover selection</div></div></div></div><div class="card-footer text-secondary">Sample project. New entries stay in this page.</div></div><div class="card mt-4"><div class="card-body"><h2 class="card-title">A useful checkpoint</h2><p class="text-secondary">Record the decision and the reason together. A future reader should understand what changed without reopening the meeting.</p><p class="mb-0 small">Choose Decision, Prototype or Review when adding a local entry.</p></div></div></aside></div><div id="notice" class="alert alert-success mt-3" role="status" hidden></div></main><div id="entry-modal" class="modal modal-blur fade" tabindex="-1" aria-labelledby="entry-title" aria-hidden="true"><div class="modal-dialog modal-dialog-centered"><div class="modal-content"><form id="entry-form"><div class="modal-header"><h2 id="entry-title" class="modal-title">Add a local checkpoint</h2><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div class="mb-3"><label for="entry-name" class="form-label">Title</label><input id="entry-name" class="form-control" required minlength="5" maxlength="80" placeholder="What changed?"></div><div class="mb-3"><label for="entry-type" class="form-label">Kind</label><select id="entry-type" class="form-select"><option>Decision</option><option>Prototype</option><option>Review</option></select></div><div><label for="entry-detail" class="form-label">Reason or evidence</label><textarea id="entry-detail" class="form-control" required minlength="15" maxlength="360" rows="4" placeholder="Explain why this checkpoint matters."></textarea></div></div><div class="modal-footer"><button type="button" class="btn" data-bs-dismiss="modal">Cancel</button><button class="btn btn-primary" type="submit">Add to journal</button></div></form></div></div></div>

<script src="/vendor/tabler/js/tabler.min.js"></script>
<script src="app.js"></script>
<!-- The bundle exposes tabler.Modal; no second Bootstrap bundle is needed. -->
</html>

あなたのプロジェクト向けプロンプト

AI エージェント用プロンプト
Tabler 1.6.1を使用して、タイムライン、コンテキストカード、データグリッド、ネイティブのModalを備えたAtlasプロジェクトジャーナルを再現します。検証済みのチェックポイントフォームと確定済みのタイムラインは分けてください。キャンセルしてもジャーナルは変更されず、有効な内容を送信すると、入力したチェックポイントがローカル記録に追加されます。data-bs属性、対応するTablerバンドル、テーマのスタイルを維持してください。元のカバー案は装飾として扱い、狭い画面でもチェックポイントのテキストを読みやすくしてください。インフラの一覧や外部公開を示唆しないでください。
05

Tablerデザインシステムの参照元と適用範囲

Tabler 1.6.1。実際のテーマ変数とネイティブコンポーネントを、元のプロジェクトコンテンツやカバーアートと区別しています。新しいチェックポイントはローカルに保存されます。