アセットグリッドAssetGridExperimental

アセットカードをレスポンシブなグリッドやグループ単位で表示します。

プレビュー

Campaign_Hero.jpg
4.5
Campaign_Hero.jpg
1920 x 1080 / JPG 1.4MB / 2026-05-12
Instagram_Story.png
3.5
Instagram_Story.png
1080 x 1920 / PNG 2.1MB / 2026-05-10
Product_Square.png
Product_Square.png
1200 x 1200 / PNG 980KB / 2026-05-09

状態とバリエーション

標準グリッド

アセットカードをレスポンシブに並べ、選択中の ID を selectedIds で制御します。

Campaign_Hero.jpg
4.5
Campaign_Hero.jpg
1920 x 1080 / JPG 1.4MB / 2026-05-12
Instagram_Story.png
3.5
Instagram_Story.png
1080 x 1920 / PNG 2.1MB / 2026-05-10
Product_Square.png
Product_Square.png
1200 x 1200 / PNG 980KB / 2026-05-09

コンパクトグリッド

小さいパネルやドロワーでは、カード間隔と情報密度を抑えた表示にします。

Campaign_Hero.jpg
4.5
Campaign_Hero.jpg
1920 x 1080 / JPG 1.4MB / 2026-05-12
Instagram_Story.png
3.5
Instagram_Story.png
1080 x 1920 / PNG 2.1MB / 2026-05-10
Product_Square.png
Product_Square.png
1200 x 1200 / PNG 980KB / 2026-05-09

グループ表示

フォルダやカテゴリ単位で、見出し付きの一覧に分けて表示します。

キャンペーン素材

公開前の候補

3
Campaign_Hero.jpg
4.5
Campaign_Hero.jpg
1920 x 1080 / JPG 1.4MB / 2026-05-12
Instagram_Story.png
3.5
Instagram_Story.png
1080 x 1920 / PNG 2.1MB / 2026-05-10
Product_Square.png
Product_Square.png
1200 x 1200 / PNG 980KB / 2026-05-09

プロパティ

表は横にスクロールできます
プロパティ初期値説明
itemsAssetCardAsset[]-グループなしで表示するアセット項目です。
groupsAssetGridGroup[]-グループ化したアセット一覧です。items より優先されます。
selectedIdsIterable<string>-選択中のアセット ID です。
layout"fill" | "content""fill"カラムをコンテナ幅いっぱいに広げるか、内容幅に収めるかを指定します。
minColumnWidthnumber180自動配置されるカラムの最小幅です。
onSelect(asset) => void-アセットカード選択時に呼び出されます。
onPreview(asset) => void-各 AssetCard にプレビュー操作を渡します。
portalContainerHTMLElement | null-擬似ブラウザや入れ子のプレビュー内にカードのツールチップを閉じ込める表示先です。
renderItem(asset, state) => ReactNode-標準の AssetCard 表示を差し替えます。関数propのため Client Component からのみ渡すこと(Server Component から渡すと next build が落ちる)。JSX を返すため serializable な代替は無く、RSC からは "use client" ラッパーで包む。(#338)

使い方

import { AssetGrid, type AssetCardAsset } from "@gunjo/ui";

const assets: AssetCardAsset[] = [
  {
    id: "hero",
    title: "Campaign_Hero.jpg",
    src: "/patterns-thumbs/media-library.light.png",
    width: 1920,
    height: 1080,
    type: "JPG",
    size: "1.4MB",
    createdAt: "2026-05-12",
    isFavorite: true,
    rating: 4.5,
  },
  {
    id: "story",
    title: "Instagram_Story.png",
    src: "/patterns-thumbs/dashboard.light.png",
    width: 1080,
    height: 1920,
    type: "PNG",
    size: "2.1MB",
    createdAt: "2026-05-10",
    rating: 3.5,
  },
  {
    id: "square",
    title: "Product_Square.png",
    src: "/showcase-thumbs/blog.light.png",
    width: 1200,
    height: 1200,
    type: "PNG",
    size: "980KB",
    createdAt: "2026-05-09",
  },
];

export function MediaAssetGrid() {
  return (
    <AssetGrid
      items={assets}
      selectedIds={["hero"]}
      layout="content"
      onSelect={({ id }) => console.log(id)}
    />
  );
}

使用コンポーネント