WebberUI

Queue Waitlist Section

遊戲化等候名單區塊:提交 email 後 3D 翻牌揭示你的隊列號碼與前方人潮,複製推薦連結即以插隊動畫即時前移。

載入預覽⋯

Playground

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

1284
12480
128
1
<QueueWaitlistSection />

安裝

npx shadcn@latest add https://webberui.com/r/queue-waitlist-section.json

或在 components.json 設定 registries 後,改用 @webberui/queue-waitlist-section 安裝。

安裝依賴後,從 registry JSON(/r/queue-waitlist-section.jsonfiles[0].content)複製 queue-waitlist-section.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import { QueueWaitlistSection } from "@/components/ui/queue-waitlist-section";

<QueueWaitlistSection
  title="搶先加入等候名單"
  initialPosition={1284}
  totalWaiting={12480}
  referralUrl="webber.ui/r/AH29X"
  referralBoost={128}
  onSubmit={(email) => console.log(email)}
  onReferral={(position) => console.log("新位置", position)}
/>

受控模式

submittedonSubmittedChange 讓你從外部掌控是否已翻到背面,適合搭配真實 API 回應:

const [submitted, setSubmitted] = React.useState(false);

<QueueWaitlistSection
  submitted={submitted}
  onSubmittedChange={setSubmitted}
  onSubmit={async (email) => {
    await joinWaitlist(email);
    setSubmitted(true);
  }}
/>

Props

Prop型別預設值說明
titleReact.ReactNode"搶先加入等候名單"區塊標題
descriptionReact.ReactNode區塊描述
eyebrowReact.ReactNode"搶先體驗"標題上方的徽章文字
placeholderstring"you@example.com"email 輸入框的 placeholder
submitLabelstring"加入等候名單"提交按鈕文字
initialPositionnumber1284加入後你的初始隊列位置
totalWaitingnumber12480等候總人數,顯示於表單下方
referralUrlstring"webber.ui/r/AH29X"推薦連結內容,複製到剪貼簿
referralBoostnumber128每次複製推薦連結前進的名次
minPositionnumber1插隊後能達到的最前位置(下限)
submittedboolean受控:是否已提交(顯示背面)
onSubmittedChange(submitted: boolean) => void提交狀態變更回呼(受控與非受控皆觸發)
onSubmit(email: string) => void提交合法 email 時觸發
onReferral(position: number) => void成功插隊後觸發,回傳新位置
classNamestring追加到外層區塊的 className

細節

  • 3D 翻牌:提交後外層卡片以 rotateY 翻轉,於 90° 邊緣時交換正/背面內容,因此卡片高度可自然隨內容變化,翻面瞬間看不到內容跳動。
  • 計數動畫:隊列號碼以 MotionValue 從 0 計數到你的位置;插隊時再往下計數,逐格更新不觸發 React re-render。
  • 插隊動畫:前方人潮以一排頭像呈現,左緣漸層暗示還有大量人在前方。複製連結後你的頭像透過 Motion layout 往前重排,被超越的頭像自然讓位。
  • 雙模式submitted 支援受控/非受控;不傳時由元件內部管理翻牌狀態。
  • 所有計時器(複製回饋、插隊徽章)皆在 unmount 時清除。

可及性

  • 表單 email 欄位帶隱藏 <label>,驗證失敗時以 role="alert" 提示並設定 aria-invalidaria-describedby
  • 背面含 aria-live="polite" 的螢幕閱讀器區塊,隨時朗讀「目前排在第 N 位、前方還有 M 人」,計數動畫本身對輔助科技隱藏。
  • 提交與複製按鈕皆有 aria-labelfocus-visible 外框樣式。
  • 使用者系統開啟「減少動態效果」時,不執行 3D 翻牌與計數/插隊動畫,改依狀態直接呈現對應面,數值即時落定。

On this page