claude-rpc 0.11.1 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-rpc",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "description": "Discord Rich Presence for Claude Code — live model, project, tokens, and lifetime stats driven by Claude Code's hook system.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -24,14 +24,15 @@
24
24
  const perDay = d.prompts / Math.max(1, d.daysSinceFirst);
25
25
  const pad2 = (h) => String(h).padStart(2, '0');
26
26
 
27
- const S = (cls, body, dur) => { _i = 0; out.push({ cls, html: body, dur: dur || 5200 }); };
27
+ const year = new Date(d.generatedAt).getFullYear();
28
+ const S = (cls, body, dur, wm) => { _i = 0; out.push({ cls, html: (wm != null && wm !== '' ? `<div class="wm">${esc(wm)}</div>` : '') + body, dur: dur || 5200 }); };
28
29
 
29
30
  // 1. intro
30
31
  S('ink', `
31
32
  <img class="gif anim" ${A()} src="${GIF}clawd-working-building.gif" alt="" />
32
33
  <div class="kicker anim" ${A()}>claude-rpc presents</div>
33
34
  <div class="big anim" ${A()}>Your Year<br/>on Claude Code</div>
34
- <div class="sub anim" ${A()}>${esc(d.daysSinceFirst)} days in the making · tap →</div>`, 4200);
35
+ <div class="sub anim" ${A()}>${esc(d.daysSinceFirst)} days in the making · tap →</div>`, 4200, year);
35
36
 
36
37
  // 2. hours
37
38
  S('rust', `
@@ -151,6 +152,22 @@
151
152
  const els = [...story.querySelectorAll('.slide')];
152
153
  let idx = -1, timer = null, paused = false;
153
154
 
155
+ // Giant faded background number/word per slide — derived from its headline
156
+ // stat. Slides that already carry a .wm (e.g. the intro's year) are skipped.
157
+ els.forEach((s) => {
158
+ if (s.querySelector('.wm')) return;
159
+ const cnt = s.querySelector('[data-count]');
160
+ const big = s.querySelector('.big, .tapebadge');
161
+ let wm = '';
162
+ if (cnt) {
163
+ const t = parseFloat(cnt.dataset.count) || 0;
164
+ wm = (cnt.dataset.fmt === 'num') ? fmtNum(t) : String(Math.round(t));
165
+ } else if (big) {
166
+ wm = (big.textContent || '').trim().split('\n')[0].split(/\s+/)[0];
167
+ }
168
+ if (wm) { const w = document.createElement('div'); w.className = 'wm'; w.textContent = wm; s.prepend(w); }
169
+ });
170
+
154
171
  function runCountups(slide) {
155
172
  slide.querySelectorAll('[data-count]').forEach((node) => {
156
173
  const target = parseFloat(node.dataset.count) || 0, fmt = node.dataset.fmt || 'int';
@@ -49,25 +49,47 @@ body {
49
49
  opacity: 0; visibility: hidden; transition: opacity 0.45s ease;
50
50
  }
51
51
  .slide.active { opacity: 1; visibility: visible; }
52
- .slide.ink { background: var(--ink); color: var(--paper); }
53
- .slide.rust { background: var(--rust); color: var(--paper); }
54
- .slide.gold { background: var(--tape); color: var(--ink); }
55
- .slide.grass { background: var(--grass); color: var(--paper); }
56
- .slide.blurple{ background: var(--blurple);color: var(--paper); }
57
- .slide.plum { background: var(--plum); color: var(--paper); }
58
- .slide.paper { background: var(--paper); color: var(--ink); }
59
- .slide::after { /* subtle dot grid */
60
- content: ''; position: absolute; inset: 0; pointer-events: none; opacity: 0.10;
52
+ .slide.ink { background: radial-gradient(125% 125% at 50% 0%, #2c241b 0%, #1a1611 55%, #0e0b07 100%); color: var(--paper); }
53
+ .slide.rust { background: linear-gradient(155deg, #d6551e 0%, #b03c14 58%, #8d2f11 100%); color: var(--paper); }
54
+ .slide.gold { background: linear-gradient(155deg, #f7e294 0%, #f0cd54 55%, #e3b133 100%); color: var(--ink); }
55
+ .slide.grass { background: linear-gradient(155deg, #59ab76 0%, #418456 58%, #316843 100%); color: var(--paper); }
56
+ .slide.blurple{ background: linear-gradient(155deg, #717bff 0%, #5158d6 52%, #6b3f86 100%); color: var(--paper); }
57
+ .slide.plum { background: linear-gradient(155deg, #9c5085 0%, #6e3760 55%, #4b2643 100%); color: var(--paper); }
58
+ .slide.paper { background: linear-gradient(155deg, #f9f3e8 0%, #f1e7d6 55%, #e5d9c0 100%); color: var(--ink); }
59
+
60
+ /* content sits above the watermark + glow */
61
+ .slide > * { position: relative; z-index: 1; }
62
+
63
+ /* soft floating glow blob behind everything */
64
+ .slide::before {
65
+ content: ''; position: absolute; z-index: 0; width: 80vmin; height: 80vmin; border-radius: 50%;
66
+ left: 50%; top: 15%; transform: translate(-50%, -50%);
67
+ background: radial-gradient(closest-side, rgba(255,255,255,0.17), transparent 72%);
68
+ pointer-events: none; filter: blur(10px); animation: float 9s ease-in-out infinite;
69
+ }
70
+ .slide.gold::before, .slide.paper::before { background: radial-gradient(closest-side, rgba(194,73,30,0.14), transparent 72%); }
71
+ @keyframes float { 0%, 100% { transform: translate(-50%, -50%) scale(1); } 50% { transform: translate(-45%, -57%) scale(1.15); } }
72
+
73
+ /* giant faded background number / glyph */
74
+ .wm {
75
+ position: absolute; inset: 0; z-index: 0; display: grid; place-items: center; pointer-events: none;
76
+ font-weight: 800; font-size: 46vmin; line-height: 1; letter-spacing: -6px;
77
+ opacity: 0.075; transform: rotate(-9deg); white-space: nowrap;
78
+ }
79
+
80
+ /* subtle dot grid texture */
81
+ .slide::after {
82
+ content: ''; position: absolute; z-index: 0; inset: 0; pointer-events: none; opacity: 0.09;
61
83
  background-image: radial-gradient(currentColor 1px, transparent 1.4px);
62
84
  background-size: 26px 26px;
63
85
  }
64
86
 
65
- /* entrance animation — children with .anim rise + fade in, staggered */
66
- .slide .anim { opacity: 0; transform: translateY(26px); }
67
- .slide.active .anim { animation: rise 0.7s cubic-bezier(.2,.7,.2,1) forwards; animation-delay: calc(var(--i, 0) * 0.13s + 0.1s); }
68
- @keyframes rise { to { opacity: 1; transform: none; } }
69
- .slide.active .pop { animation: pop 0.6s cubic-bezier(.2,1.4,.4,1) forwards; animation-delay: calc(var(--i, 0) * 0.13s + 0.15s); }
70
- @keyframes pop { 0% { opacity: 0; transform: scale(0.6); } 100% { opacity: 1; transform: scale(1); } }
87
+ /* entrance — children with .anim blur + rise in, staggered */
88
+ .slide .anim { opacity: 0; transform: translateY(30px) scale(0.97); filter: blur(7px); }
89
+ .slide.active .anim { animation: rise 0.75s cubic-bezier(.2,.7,.2,1) forwards; animation-delay: calc(var(--i, 0) * 0.13s + 0.12s); }
90
+ @keyframes rise { to { opacity: 1; transform: none; filter: blur(0); } }
91
+ .slide.active .pop { animation: pop 0.65s cubic-bezier(.2,1.4,.4,1) forwards; animation-delay: calc(var(--i, 0) * 0.13s + 0.16s); }
92
+ @keyframes pop { 0% { opacity: 0; transform: scale(0.55); } 100% { opacity: 1; transform: scale(1); } }
71
93
 
72
94
  .kicker { font-family: 'JetBrains Mono', monospace; font-size: clamp(13px, 3.6vw, 17px); letter-spacing: 1px; opacity: 0.85; max-width: 16ch; line-height: 1.5; }
73
95
  .huge { font-weight: 800; font-size: clamp(64px, 22vw, 168px); line-height: 0.92; letter-spacing: -4px; }
package/src/version.js CHANGED
@@ -11,7 +11,7 @@ import { readFileSync } from 'node:fs';
11
11
  import { join } from 'node:path';
12
12
  import { ROOT } from './paths.js';
13
13
 
14
- const BAKED = '0.11.1';
14
+ const BAKED = '0.11.2';
15
15
 
16
16
  function readPkgVersion() {
17
17
  try {