指标卡

stat-grid 自适应网格 + stat-card;支持趋势 delta、图标、交互 hover。增强:横向布局(dashboard 顶栏)、迷你 sparkline 槽、SVG 进度环、加载骨架态。

用户总数
1,280
+12.4% 比上周
可用性
96.2%
+2.1%
待处理告警
12
-3 比昨日
请求/秒
8,452
稳定
<div class="stat-grid">  <div class="stat-card stat-card--interactive">    <div class="stat-head">      <span class="stat-label">用户总数</span>      <span class="stat-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg></span>    </div>    <div class="stat-body">      <div class="stat-num">1,280</div>      <div class="stat-delta up">        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="m6 15 6-6 6 6"/></svg>        +12.4% <span class="stat-period">比上周</span>      </div>    </div>  </div>  <div class="stat-card stat-card--interactive">    <div class="stat-head">      <span class="stat-label">可用性</span>      <span class="stat-icon icon--ok"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/></svg></span>    </div>    <div class="stat-body">      <div class="stat-num accent">96.2%</div>      <div class="stat-delta up"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="m6 15 6-6 6 6"/></svg> +2.1%</div>    </div>    <div class="stat-progress">      <svg class="stat-ring" viewBox="0 0 36 36">        <circle class="stat-ring-track" cx="18" cy="18" r="15.5" fill="none" />        <circle class="stat-ring-fill" cx="18" cy="18" r="15.5" fill="none" style="stroke-dasharray:93.6,97.4" />      </svg>    </div>  </div>  <div class="stat-card stat-card--interactive">    <div class="stat-head">      <span class="stat-label">待处理告警</span>      <span class="stat-icon icon--bad"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg></span>    </div>    <div class="stat-body">      <div class="stat-num warn">12</div>      <div class="stat-delta down"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="m18 9-6 6-6-6"/></svg> -3 <span class="stat-period">比昨日</span></div>    </div>  </div>  <div class="stat-card stat-card--horizontal">    <div class="stat-head">      <span class="stat-label">请求/秒</span>      <span class="stat-icon icon--info"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg></span>    </div>    <div class="stat-body">      <div class="stat-num">8,452</div>      <div class="stat-delta flat"><span class="stat-period">稳定</span></div>    </div>  </div></div>

安装

bun add @icen.ai/ui

一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):

import '@icen.ai/ui/kit/stat';

也可以用脚手架直接打印引入行:

bunx --bun @icen.ai/ui add stat

Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/stat.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。

用法

<div class="stat-grid [--2|--3|--4]">  <div class="stat-card [--interactive] [--horizontal] [--sm] [.is-loading]">    <div class="stat-head">      <span class="stat-label">标签</span>      <span class="stat-icon [.icon--ok|.icon--warn|.icon--bad|.icon--info]">…svg…</span>    </div>    <div class="stat-body">      <div class="stat-num [.accent|.warn|.bad|.info]">数字</div>      <div class="stat-delta [.up|.down|.flat]">趋势</div>    </div>    <div class="stat-progress">…SVG ring…</div>  </div></div>