@kolkrabbi/kol-component 0.126.0 → 0.128.0

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": "@kolkrabbi/kol-component",
3
- "version": "0.126.0",
3
+ "version": "0.128.0",
4
4
  "description": "KOL design-system components — atoms through organisms, emitting canonical kol-* classes. Pairs with @kolkrabbi/kol-theme for styling.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,6 +17,11 @@ gsap.registerPlugin(ScrollTrigger)
17
17
  *
18
18
  * Typography and color are inherited from the consumer via
19
19
  * `containerClass` — the component owns only the split and the motion.
20
+ * The word's REST STATE (off-screen right, rotated in 3D) is
21
+ * `.kol-animated-word` in kol-theme's kol-animation.css — promoted there
22
+ * 2026-08-28 from kol-website, which had carried it since this component
23
+ * shipped: outside that one app the title rendered static and visible, with no
24
+ * error, because GSAP was animating from a state nothing declared.
20
25
  * When the user prefers reduced motion, no GSAP runs at all and the
21
26
  * title renders fully visible and static.
22
27
  *
@@ -46,7 +51,7 @@ export default function AnimatedTitle({
46
51
  if (reducedMotion) return undefined
47
52
 
48
53
  const ctx = gsap.context(() => {
49
- const words = containerRef.current.querySelectorAll('.animatedWord')
54
+ const words = containerRef.current.querySelectorAll('.kol-animated-word')
50
55
 
51
56
  gsap.set(words, {
52
57
  opacity: 0,
@@ -97,7 +102,10 @@ export default function AnimatedTitle({
97
102
  {line.split(' ').map((word, i) => (
98
103
  <span
99
104
  key={i}
100
- className="animatedWord"
105
+ /* both names: the prefixed one the DS styles (kol-animation.css,
106
+ * 2026-08-28) and the bare one kol-website's own sheet still selects
107
+ * until it deletes it */
108
+ className="kol-animated-word animatedWord"
101
109
  dangerouslySetInnerHTML={{ __html: word }}
102
110
  />
103
111
  ))}
@@ -61,6 +61,16 @@ export const SPRING = {
61
61
  * then lurching. The earlier "snap to something so it has
62
62
  * somewhere to stick to" is served by dwell; the grid was the
63
63
  * wrong model for it.
64
+ * range the pill's travel band, BIPOLAR FROM THE MIDDLE (user ruling
65
+ * 2026-08-28: "can we make sure the grab somehow doesn't go up
66
+ * so high? maybe we limit/choke range to bipolar from middle
67
+ * 85% of 100"). 0.85 = the middle 85 % of the edge, so it is
68
+ * held 7.5 % clear of each end — on a 900px rail, y 67 to 833.
69
+ * Unclamped it tracked the pointer to within the CSS `clamp()`'s
70
+ * 36px of the top, which put it beside the logomark and the
71
+ * first rung. The band is a fraction, not px, so it scales with
72
+ * the viewport instead of pinning a gap that reads differently
73
+ * on a laptop and a 27".
64
74
  * travel the chase. 1.1s, down from 2.8 with the grid: the throw now
65
75
  * covers a fraction of the distance, and a long tween over a
66
76
  * short throw reads as lag rather than weight
@@ -71,6 +81,7 @@ export const GRAB = {
71
81
  near: 20,
72
82
  sleep: 40,
73
83
  stick: 90,
84
+ range: 0.85,
74
85
  travel: { duration: 1.1, ease: EASE.outGsap },
75
86
  snap: { duration: 0.5, ease: EASE.outGsap },
76
87
  slop: 3,