@dofy/native-emoji-motion 0.4.0 → 0.5.1
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/CHANGELOG.md +10 -0
- package/README.md +7 -7
- package/assets/logo.svg +2 -7
- package/package.json +1 -1
- package/src/presets.js +11 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.1 — 2026-11-13
|
|
4
|
+
|
|
5
|
+
- Fix the npm package page to show the English README by default.
|
|
6
|
+
|
|
7
|
+
## 0.5.0 — 2026-11-13
|
|
8
|
+
|
|
9
|
+
- Add reviewed motion families for fruit, animal faces, clouds, celestial bodies and writing tools.
|
|
10
|
+
- Add judges, pilots and singers with their official skin tone variants.
|
|
11
|
+
- Add five reusable motions and optional sparkles for fruit.
|
|
12
|
+
|
|
3
13
|
## 0.4.0 — 2026-11-13
|
|
4
14
|
|
|
5
15
|
- **Breaking:** Remove the component `display` prop and web component attribute. Components use normal inline layout; use a block container or CSS for placement.
|
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<
|
|
2
|
-
<img src="./assets/logo.svg" width="104" height="104" alt="Emoji Motion logo" />
|
|
3
|
-
</p>
|
|
1
|
+
<h1 align="center">👋</h1>
|
|
4
2
|
|
|
5
3
|
<h1 align="center">Emoji Motion</h1>
|
|
6
4
|
|
|
5
|
+
<p align="center"><a href="https://github.com/dofy/emoji-motion/blob/main/README.md">English</a> · <a href="https://github.com/dofy/emoji-motion/blob/main/docs/readme/README.zh-CN.md">简体中文</a> · <a href="https://github.com/dofy/emoji-motion/blob/main/docs/readme/README.zh-TW.md">繁體中文</a> · <a href="https://github.com/dofy/emoji-motion/blob/main/docs/readme/README.ja.md">日本語</a></p>
|
|
6
|
+
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>Give your emoji a little more feeling. ✨</strong><br />
|
|
9
9
|
Small, expressive animations for the native emoji you already use.
|
|
@@ -24,13 +24,13 @@ Bring 👋, ❤️, 📡 and more to life in React, Vue, Svelte or plain HTML. E
|
|
|
24
24
|
|
|
25
25
|
## 📊 Collection at a glance
|
|
26
26
|
|
|
27
|
-
| In version 0.
|
|
27
|
+
| In version 0.5.1 | Count | What it covers |
|
|
28
28
|
| --- | ---: | --- |
|
|
29
29
|
| Handcrafted presets | 177 | Individually configured base emoji |
|
|
30
|
-
| Reviewed motion families |
|
|
30
|
+
| Reviewed motion families | 16 | 123 additional base emoji sharing reviewed motions |
|
|
31
31
|
| Categories | 10 | Groups used to organize the collection |
|
|
32
|
-
| Reusable motions |
|
|
33
|
-
| Emoji with optional SVG effects |
|
|
32
|
+
| Reusable motions | 42 | Motions shared by presets and families |
|
|
33
|
+
| Emoji with optional SVG effects | 67 | Base emoji with decorative effects |
|
|
34
34
|
| Recognized Unicode sequences | 5,235 | Unicode Emoji 18.0 sequences, including skin tones and other variants |
|
|
35
35
|
|
|
36
36
|
Skin tones and other variants count as additional Unicode sequences. Similar emoji may share a motion. Recognized emoji without a preset or reviewed family receive a category-based fallback.
|
package/assets/logo.svg
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
|
2
|
-
<
|
|
3
|
-
<circle cx="43" cy="49" r="23" fill="#efe6f6"/>
|
|
4
|
-
<circle cx="35" cy="44" r="2.6" fill="#302d29"/>
|
|
5
|
-
<circle cx="51" cy="44" r="2.6" fill="#302d29"/>
|
|
6
|
-
<path d="M34 55c3.2 4.2 6.3 6 9 6s5.8-1.8 9-6" fill="none" stroke="#302d29" stroke-width="3.5" stroke-linecap="round"/>
|
|
7
|
-
<path d="M71 31c3 2.4 5 5.4 6 9M73 48c0 3.2-.5 5.7-1.5 8" fill="none" stroke="#ef956d" stroke-width="4" stroke-linecap="round"/>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
2
|
+
<text x="50" y="78" text-anchor="middle" font-size="78" font-family="Apple Color Emoji, Segoe UI Emoji, Noto Color Emoji, sans-serif">👋</text>
|
|
8
3
|
</svg>
|
package/package.json
CHANGED
package/src/presets.js
CHANGED
|
@@ -56,6 +56,11 @@ export const motions = {
|
|
|
56
56
|
pastryBounce: createSpringMotion({ height: 12, rebounds: 1, duration: 850 }),
|
|
57
57
|
railRide: { keyframes: [{ transform: 'translateY(0) rotate(0deg)' }, { transform: 'translateY(-3%) rotate(-2deg)', offset: .25 }, { transform: 'translateY(0) rotate(2deg)', offset: .55 }, { transform: 'translateY(-2%) rotate(-1deg)', offset: .75 }, { transform: 'translateY(0) rotate(0deg)' }], options: { duration: 1000, easing: curve }, origin: '50% 85%' },
|
|
58
58
|
rhythm: { keyframes: [{ transform: 'rotate(0deg)' }, { transform: 'rotate(-5deg)' }, { transform: 'rotate(5deg)' }, { transform: 'rotate(-3deg)' }, { transform: 'rotate(0deg)' }], options: { duration: 1050, easing: curve }, origin: '50% 80%' },
|
|
59
|
+
fruitBounce: createSpringMotion({ height: 10, rebounds: 1, duration: 850 }),
|
|
60
|
+
curiousTilt: { keyframes: [{ transform: 'rotate(0deg) translateY(0)' }, { transform: 'rotate(-7deg) translateY(-3%)', offset: .3 }, { transform: 'rotate(7deg) translateY(-3%)', offset: .62 }, { transform: 'rotate(0deg) translateY(0)' }], options: { duration: 1100, easing: curve }, origin: '50% 85%' },
|
|
61
|
+
cloudDrift: { keyframes: [{ transform: 'translate(0, 0)' }, { transform: 'translate(-5%, -4%)', offset: .35 }, { transform: 'translate(5%, -4%)', offset: .7 }, { transform: 'translate(0, 0)' }], options: { duration: 1400, easing: curve } },
|
|
62
|
+
orbitFloat: { keyframes: [{ transform: 'translateY(0) scale(1)' }, { transform: 'translateY(-9%) scale(1.04)', offset: .45 }, { transform: 'translateY(0) scale(1)' }], options: { duration: 1200, easing: curve } },
|
|
63
|
+
writingTilt: { keyframes: [{ transform: 'rotate(0deg)' }, { transform: 'rotate(-5deg)', offset: .3 }, { transform: 'rotate(5deg)', offset: .65 }, { transform: 'rotate(0deg)' }], options: { duration: 1000, easing: curve }, origin: '50% 65%' },
|
|
59
64
|
steps: { keyframes: [{ transform: 'translateY(0)' }, { transform: 'translateY(-7%)', offset: .25 }, { transform: 'translateY(0)', offset: .5 }, { transform: 'translateY(-5%)', offset: .75 }, { transform: 'translateY(0)' }], options: { duration: 1000, easing: curve }, origin: '50% 90%' }
|
|
60
65
|
};
|
|
61
66
|
|
|
@@ -82,7 +87,7 @@ const personSkinTones = suffix => Object.fromEntries(['light', 'medium-light', '
|
|
|
82
87
|
const familyToneAliases = glyphs => Object.fromEntries(glyphs.flatMap(glyph => Object.values(skinTones(glyph)).map(variant => [variant, glyph])));
|
|
83
88
|
// These reviewed ZWJ families use explicit suffixes; tests check every sequence against Unicode.
|
|
84
89
|
const rolePeople = ['🧑', '👨', '👩'];
|
|
85
|
-
const roleSuffixes = ['⚕️', '🎓', '🏫', '🌾', '🔧', '🔬', '🚒'];
|
|
90
|
+
const roleSuffixes = ['⚕️', '🎓', '🏫', '🌾', '🔧', '🔬', '🚒', '⚖️', '✈️', '🎤'];
|
|
86
91
|
const roleMembers = roleSuffixes.flatMap(suffix => rolePeople.map(person => `${person}${suffix}`));
|
|
87
92
|
const roleAliases = Object.fromEntries(roleSuffixes.flatMap(suffix => rolePeople.flatMap(person => Object.values(skinTones(person)).map(variant => [`${variant}${suffix}`, `${person}${suffix}`]))));
|
|
88
93
|
const walkerMembers = ['🚶', '🚶♂️', '🚶♀️', '🏃♂️', '🏃♀️'];
|
|
@@ -92,6 +97,11 @@ const walkerAliases = Object.fromEntries(walkerMembers.flatMap(glyph => {
|
|
|
92
97
|
}));
|
|
93
98
|
// Members are reviewed explicitly; no entire Unicode subgroup is assumed to move alike.
|
|
94
99
|
export const families = {
|
|
100
|
+
fruit: { label: 'Fruit', group: 'food', motion: 'fruitBounce', members: ['🍊', '🍋', '🍐', '🍑', '🍇', '🫐', '🍒', '🥝', '🍍', '🥭'], decoration: 'sparkle' },
|
|
101
|
+
animalFaces: { label: 'Animal faces', group: 'nature', motion: 'curiousTilt', members: ['🐶', '🦊', '🐹', '🦝', '🐨', '🐯', '🐭', '🐻❄️'] },
|
|
102
|
+
clouds: { label: 'Clouds', group: 'nature', motion: 'cloudDrift', members: ['🌤️', '⛅', '🌥️', '🌦️', '🌫️'], aliases: { '🌤': '🌤️', '🌥': '🌥️', '🌦': '🌦️', '🌫': '🌫️' } },
|
|
103
|
+
celestial: { label: 'Celestial bodies', group: 'nature', motion: 'orbitFloat', members: ['🌛', '🌜', '🌝', '🪐', '🌍', '🌎', '🌏', '🌚'] },
|
|
104
|
+
writingTools: { label: 'Writing tools', group: 'objects', motion: 'writingTilt', members: ['✏️', '🖊️', '🖋️', '🖌️', '🖍️'], aliases: { '✏': '✏️', '🖊': '🖊️', '🖋': '🖋️', '🖌': '🖌️', '🖍': '🖍️' } },
|
|
95
105
|
balls: { label: 'Balls', group: 'activities', motion: 'spring', members: ['⚾', '🥎', '🎱', '🎳'], animation: { duration: 900 }, decorations: ['impact', 'sparkle'] },
|
|
96
106
|
plants: { label: 'Plants', group: 'nature', motion: 'leafSway', members: ['🌷', '🌹', '🌺', '🪻', '🌴', '🌿', '🍀'] },
|
|
97
107
|
drinks: { label: 'Drinks', group: 'food', motion: 'gentleSip', members: ['🥤', '🧃', '🧋', '🍹', '🍸'] },
|