資料展示

議題瀑布看板

暗色環境光暈上的議題列表:議題卡依序瀑布滑入,狀態膠囊切換時以版面動畫重排,hover 時卡片邊緣微光,適合產品發表區塊。

這是 WebberUI Pro 元件

下方的安裝指令需要授權才能執行,未授權時會回 401。

怎麼安裝 Pro 元件 →查看方案 →

把一份議題清單做成產品發表區塊裡的「工作正在流動」畫面:暗底上漂著兩三顆模糊光暈,議題列捲進視窗時由上而下瀑布滑入;點狀態膠囊會在待辦、進行中、審查中、完成之間循環,膠囊改寬、文字交叉淡接,狀態圖示重新描繪。開啟分組後,列會從原群組飛到新群組;開啟自動播放則每隔幾秒把下一張卡往前推一格。所有圖示與子結構都在元件內自行實作。

把這個效果裝進你的專案

在專案資料夾執行指令,CLI 會加入原始碼與依賴套件,再依下方使用範例引用元件。

npx webberui@latest add "https://webberui.com/r/issue-cascade-board.json?t=<安裝 token>"

還沒有專案,或安裝遇到問題?看快速開始 →

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

2200
編輯中的呼叫預設屬性
<IssueCascadeBoard/>

完整範例包含預覽的排版與資料。先安裝元件,再把範例檔貼入你的專案。

安裝

npx webberui@latest add "https://webberui.com/r/issue-cascade-board.json?t=<安裝 token>"

或在 components.json 設定 registries 後,改用 @webberui/issue-cascade-board 安裝。

使用

import * as React from "react";
import {
  IssueCascadeBoard,
  type IssueItem,
} from "@/components/ui/issue-cascade-board";

const initial: IssueItem[] = [
  { id: "1", key: "HX-142", title: "結帳頁金額四捨五入錯誤", status: "doing", labels: ["錯誤"], assignee: "林以晴", priority: 3 },
  { id: "2", key: "HX-138", title: "新增繁中排序選項", status: "review", labels: ["功能"], assignee: "陳柏宇", priority: 2 },
  { id: "3", key: "HX-151", title: "行程卡片在窄螢幕換行跑版", status: "todo", assignee: "張書豪", priority: 1 },
];

export function LaunchBoard() {
  const [items, setItems] = React.useState(initial);
  return (
    <IssueCascadeBoard
      items={items}
      onStatusChange={(id, status) =>
        setItems((prev) => prev.map((it) => (it.id === id ? { ...it, status } : it)))
      }
      groupBy="status"
      autoPlay
    />
  );
}

Props

Prop型別預設值說明
itemsIssueItem[]—受控議題列表;提供時狀態變更只透過 onStatusChange 通知,由外部更新
defaultItemsIssueItem[][]非受控模式的初始議題列表
onStatusChange(id: string, status: IssueStatus) => void—點狀態膠囊或自動播放推進時回呼
groupBy"none" | "status""none"status 依狀態分成四組,列在群組間以版面動畫飛到新位置
autoPlaybooleanfalse每隔 interval 把下一張未完成的卡往前推一個狀態
intervalnumber2200自動播放間隔(毫秒,最小 400)
glowbooleantrue是否顯示背景的模糊光暈球
theme"dark" | "auto""dark"dark 永遠暗底;auto 跟隨頁面亮暗模式
accentstring"#6366f1"進行中狀態與光暈主色;未提供時讀 --wb-issue-cascade-accent
statusLabelsPartial<Record<IssueStatus, string>>待辦/進行中/審查中/完成覆寫狀態顯示文字
classNamestring—併入最外層容器

IssueItem

欄位型別預設值說明
idstring—唯一識別值
keystring—顯示用識別碼,例如 HX-142,以等寬字型呈現
titlestring—議題標題,過長時截斷
status"todo" | "doing" | "review" | "done"—目前狀態
labelsstring[]—標籤 chip(寬度 768px 以上才顯示)
assigneestring—負責人名稱,顯示為縮寫頭像(中文名取最後一字)
priority0 | 1 | 2 | 30優先度條:無/低/中/高

另外具名匯出 IssueItem、IssueStatus 與 IssueCascadeBoardProps 型別。

細節

  • CSS 變數:--wb-issue-cascade-stagger(預設 70ms,進場時每列的延遲)、--wb-issue-cascade-accent(預設 #6366f1)、--wb-issue-cascade-glow-duration(預設 1.6s,hover 邊框光暈轉一圈的時間)。可在主題層覆寫
  • 進場:IntersectionObserver 偵測元件進入視窗後才觸發一次,每列 y: 16 → 0、透明度與 blur(6px) 淡出,位移用彈簧(stiffness 260、damping 26)
  • 狀態圖示:待辦是空心圓、進行中是圓環加半填、審查中是六段虛線弧、完成是實心圓加打勾,切換時都以 pathLength 重新描繪
  • 自動播放:依序挑下一張未完成的卡推進一格;全部完成後從游標處循環回待辦。元件離開視窗時暫停,光暈漂移也一併停止
  • 受控模式:傳入 items 時元件不會自行改狀態,請在 onStatusChange 裡更新陣列;自動播放同樣透過這個回呼推進

可及性

  • 議題列表為 role="list",分組模式下每組是以標題命名的 section
  • 狀態膠囊是 button,aria-label 例如「HX-142 狀態:進行中,點擊切換」,可用 Tab 聚焦、Enter/空白鍵切換,並有 focus-visible 外框
  • 狀態變更(點擊、自動播放或外部受控更新)會透過 aria-live="polite" 區域宣告
  • 自動播放時提供「暫停自動播放」按鈕(WCAG 2.2.2),aria-pressed 反映暫停狀態
  • 優先度條與負責人頭像都有 role="img" 與文字標籤
  • 使用者系統開啟「減少動態效果」時,取消瀑布進場與版面動畫、光暈球不漂移、hover 邊框不旋轉,狀態直接切換