Skip to content

バッジ

バッジ はノードの四隅のいずれかに付けられる小さなマーカーです。 メインのアイコンを変えずに、ステータス(緑のチェック、赤の警告)や ドメイン的な意味(プライベートリソースを示す鍵)を重ねたいときに 使います。

プリセット

icon-badge (SVG, frame 1)

Gridgram には 8 種類のセマンティック・プリセットが同梱されています。 いずれも「白い円板 + 色付きの Tabler アイコン」という 2 層構造です (Tabler の塗りつぶしアイコンはグリフを 塗りを抜く ことで表現する ため、白板がないとカットアウト部分に背景色が透けてしまいます):

プリセットTabler グリフ既定色
checkcircle-check緑 (#16a34a)
starstar琥珀 (#f59e0b)
alertalert-circle赤 (#dc2626)
infoinfo-circle青 (#0ea5e9)
helphelp-circle青 (#0ea5e9)
locklock石板色 (#475569)
flagflag赤 (#dc2626)
heartheartバラ (#e11d48)

バッジの付け方

バッジは icon ステートメント末尾の { … } JSON5 ボディに書いて 付けます。上の例はこの形式:

gg
icon :ok   @A1 tabler/server "ok"   { badges: ['check'] }
icon :warn @B1 tabler/server "warn" { badges: ['alert'] }

もっと込み入ったバッジ構成なら、ノード全体を doc { nodes: … } に置く書き方も使えます:

gg
doc {
  nodes: [
    {
      id: 'ok', pos: [1, 1], src: 'tabler/server', label: 'ok',
      badges: [{ preset: 'check', position: 'bottom-left' }],
    },
  ],
}

TypeScript では NodeDef の 1 フィールドとしてそのまま書けます:

ts
{ id: 'ok', pos: [1, 1], src: t('server'), label: 'ok', badges: ['check'] }

3 つの記法すべて同じ出力になります。1〜2 個のシンプルなバッジは インライン { … }、属性が多い要素は doc { nodes: … }、という 使い分けが目安です。

位置とサイズ

既定位置は top-right。オブジェクト形式で上書きできます:

ts
badges: [
  { preset: 'check', position: 'bottom-right' },
  { preset: 'alert', position: 'top-left', size: 0.35 },
]

位置の有効値: top-right / top-left / bottom-right / bottom-leftsize はノード直径に対するバッジ直径の比(既定 0.3)。

複数バッジの重ね順

同じ隅に複数のバッジを指定すると、宣言順 に描画され、先に書いた ほうが下になります。違う隅のバッジ同士は独立です:

ts
badges: ['check', 'lock']                             // 両方 top-right、check が上
badges: [{ preset: 'check', position: 'top-right' },
         { preset: 'lock',  position: 'bottom-left' }]

完全カスタムのバッジ

プリセットにない表現は NodeBadge を直接渡します:

ts
badges: [
  {
    icon: yourSvgVNode,           // Preact VNode または生 SVG 文字列
    position: 'top-right',
    size: 0.3,
    color: '#8b5cf6',
    iconTheme: 'theme',           // 'theme' | 'native'(既定 'native')
  },
]

iconTheme: 'theme'colorcurrentColor 経由で適用します。 モノクロアイコンに使ってください。'native' は元の塗り属性を 保持するので、多色グリフはこちら。

このページを編集Last updated: