@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 +1 -1
- package/src/atoms/AnimatedTitle.jsx +10 -2
- package/src/utilities/motion.js +11 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolkrabbi/kol-component",
|
|
3
|
-
"version": "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('.
|
|
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
|
-
|
|
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
|
))}
|
package/src/utilities/motion.js
CHANGED
|
@@ -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,
|