8pt

Code Diff Card

代码改动卡片•数据展示
介绍

审阅风格的改动卡片:文件名、增删统计、逐行淡入的 diff,悬停行高亮,一键复制新代码。

纯 HTML、CSS 与少量原生 JS,没有框架依赖。复制提示词交给 Claude Code、Cursor、Trae 或 Codex,模型会把 Code Diff Card 加进你的项目并换成你的配色。

适用场景

仪表盘、数据表格、图表卡片、对比表和状态面板。

安装

订阅 Builder 后,用 8pt CLI 装进项目,或在已接入 8pt MCP 的编辑器里直接调用。

$ npm i -g @8pt-dev/cli && 8pt add code-diff-card
mcp › 使用 8pt MCP 调用 get_component("code-diff-card")

代码

Code Diff Card 的源码,动效只用 transform 与 opacity,并尊重减少动态效果设置。

<figure class="x-diff">
  <figcaption><span class="x-diff__file">button.css</span><span class="x-diff__stat"><b>+4</b> <s>−2</s></span><button type="button" aria-label="复制新代码">复制</button></figcaption>
  <pre><code><span class="ctx"><i>12</i> .btn {</span><span class="del"><i>13</i>-  padding: 10px 15px;</span><span class="del"><i>14</i>-  border-radius: 5px;</span><span class="add"><i>13</i>+  padding: 12px 16px;</span><span class="add"><i>14</i>+  border-radius: 8px;</span><span class="add"><i>15</i>+  transition: transform .2s;</span><span class="add"><i>16</i>+  will-change: transform;</span><span class="ctx"><i>17</i> }</span></code></pre>
</figure>
.x-diff{width:min(330px,100%);margin:0;border-radius:14px;overflow:hidden;background:var(--d-card,#14141c);border:1px solid var(--d-line,rgba(255,255,255,.12));color:var(--d-fg,#fff);box-shadow:0 20px 40px -28px rgba(0,0,0,.7)}
.x-diff figcaption{display:flex;align-items:center;gap:10px;height:38px;padding:0 10px 0 12px;border-bottom:1px solid var(--d-line,rgba(255,255,255,.1));font:600 12px/1 ui-monospace,monospace}
.x-diff__stat{margin-right:auto}
.x-diff__stat b{color:#3dd68c}.x-diff__stat s{color:#ff6b6b;text-decoration:none}
.x-diff figcaption button{height:24px;padding:0 9px;border-radius:6px;border:1px solid var(--d-line,rgba(255,255,255,.14));background:transparent;color:var(--d-muted,#9b9ba8);font:600 11px/1 var(--d-font,system-ui,sans-serif);cursor:pointer}
.x-diff pre{margin:0;padding:6px 0;font:11.5px/1.75 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden}
.x-diff code{display:grid}
.x-diff code span{display:block;padding:0 12px;white-space:pre;opacity:0;transform:translateX(-6px);transition:opacity .3s,transform .3s cubic-bezier(.2,.8,.2,1)}
.x-diff.in code span{opacity:1;transform:none}
.x-diff code span:hover{background:color-mix(in srgb,var(--d-fg,#fff) 6%,transparent)}
.x-diff code i{display:inline-block;width:22px;margin-right:6px;font-style:normal;color:var(--d-muted,#9b9ba8);opacity:.6;text-align:right}
.x-diff .add{background:rgba(61,214,140,.1);color:#86efb4}
…
const init = (root) => {
  const fig = root.querySelector('.x-diff'), lines = [...fig.querySelectorAll('code span')], btn = fig.querySelector('button');
  lines.forEach((l, i) => l.style.transitionDelay = (i * 70) + 'ms');
  const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) { fig.classList.add('in'); io.disconnect(); } });
  io.observe(fig);
  let t;
  btn.addEventListener('click', async () => {
    const code = lines.filter(l => !l.classList.contains('del')).map(l => l.textContent.replace(/^\s*\d+[+ ]?/, '')).join('\n');
    try { await navigator.clipboard.writeText(code); } catch (e) {}
    btn.textContent = '已复制'; clearTimeout(t); t = setTimeout(() => btn.textContent = '复制', 1400);
  });
  return () => { io.disconnect(); clearTimeout(t); };
…
订阅 Builder 查看完整源码。查看价格

更多数据展示组件

查看全部

Agent Chat Window

Mac File Window

Disk Cleanup Panel

Shortcut Keycaps

Compare Table

Orbit Timeline

Avatar Stack

Kanban Column

更多组件

查看全部

AI Prompt Composer

Film Strip Carousel

Auto Tab Showcase

Media Bento Grid

Model Pill Marquee

Director Art Cards

Glass Folder

File Preview Cards

继续探索