@dofy/native-emoji-motion 0.4.0 → 0.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 — 2026-11-13
4
+
5
+ - Add reviewed motion families for fruit, animal faces, clouds, celestial bodies and writing tools.
6
+ - Add judges, pilots and singers with their official skin tone variants.
7
+ - Add five reusable motions and optional sparkles for fruit.
8
+
3
9
  ## 0.4.0 — 2026-11-13
4
10
 
5
11
  - **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.ja.md ADDED
@@ -0,0 +1,44 @@
1
+ <h1 align="center">👋</h1>
2
+
3
+ <h1 align="center">Emoji Motion</h1>
4
+
5
+ <p align="center"><a href="./README.md">English</a> · <a href="./README.zh-CN.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./README.ja.md">日本語</a></p>
6
+
7
+ <p align="center"><strong>いつもの絵文字に、もう少し気持ちを。 ✨</strong></p>
8
+
9
+ <p align="center"><a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/npm/v/%40dofy%2Fnative-emoji-motion?label=npm" alt="npm version" /></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" /></a> <a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/node/v/%40dofy%2Fnative-emoji-motion" alt="Node.js version" /></a></p>
10
+
11
+ 端末のネイティブ絵文字に小さく表情豊かなアニメーションを追加します。React、Vue、Svelte、Web Component に対応し、肌の色、任意の SVG エフェクト、カスタムモーション、Unicode による自動分類を利用できます。[ライブデモ](https://emoji-motion.phpz.org/)でお試しください。
12
+
13
+ ## 📊 コレクションの概要
14
+
15
+ | バージョン 0.5.0 | 数 | 内容 |
16
+ | --- | ---: | --- |
17
+ | 個別のプリセット | 177 | 個別に設定された基本絵文字 |
18
+ | 確認済みモーションファミリー | 16 | さらに 123 種類の基本絵文字に対応 |
19
+ | カテゴリ | 10 | コレクションの分類 |
20
+ | 再利用可能なモーション | 42 | プリセットとファミリーで共有 |
21
+ | SVG エフェクト付き絵文字 | 67 | 基本絵文字の数 |
22
+ | 認識できる Unicode シーケンス | 5,235 | 肌の色などのバリエーションを含む Unicode Emoji 18.0 |
23
+
24
+ 肌の色などのバリエーションは追加の Unicode シーケンスとして数えます。プリセットや確認済みファミリーに一致しない絵文字には、分類に基づくフォールバックを適用します。
25
+
26
+ ## 📦 はじめに
27
+
28
+ ```sh
29
+ npm install @dofy/native-emoji-motion
30
+ ```
31
+
32
+ ```jsx
33
+ import { EmojiMotion } from '@dofy/native-emoji-motion/react';
34
+
35
+ <p>Hello <EmojiMotion emoji="👋" skinTone="medium" /></p>
36
+ ```
37
+
38
+ React、Vue、Svelte コンポーネントまたは Web Component を使用できます。`enhance()` で既存のテキストにもモーションを追加できます。設定、パラメーター、肌の色、カスタマイズの詳細は[ドキュメント](https://emoji-motion.phpz.org/docs/)をご覧ください。
39
+
40
+ > 0.3.0 からアップグレードする場合:0.4.0 では `display` プロパティを削除しました。ブロック要素または CSS でレイアウトを調整してください。
41
+
42
+ ## 📄 ライセンス
43
+
44
+ [MIT](./LICENSE)。Unicode データには [Unicode License](./UNICODE-LICENSE.txt) が適用されます。
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- <p align="center">
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="./README.md">English</a> · <a href="./README.zh-CN.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./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.4.0 | Count | What it covers |
27
+ | In version 0.5.0 | Count | What it covers |
28
28
  | --- | ---: | --- |
29
29
  | Handcrafted presets | 177 | Individually configured base emoji |
30
- | Reviewed motion families | 11 | 78 additional base emoji sharing reviewed motions |
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 | 37 | Motions shared by presets and families |
33
- | Emoji with optional SVG effects | 57 | Base emoji with decorative 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.
@@ -0,0 +1,44 @@
1
+ <h1 align="center">👋</h1>
2
+
3
+ <h1 align="center">Emoji Motion</h1>
4
+
5
+ <p align="center"><a href="./README.md">English</a> · <a href="./README.zh-CN.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./README.ja.md">日本語</a></p>
6
+
7
+ <p align="center"><strong>让你的 emoji 多一点情绪。 ✨</strong></p>
8
+
9
+ <p align="center"><a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/npm/v/%40dofy%2Fnative-emoji-motion?label=npm" alt="npm version" /></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" /></a> <a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/node/v/%40dofy%2Fnative-emoji-motion" alt="Node.js version" /></a></p>
10
+
11
+ 为设备上的原生 emoji 添加小巧、富有表现力的动画,支持 React、Vue、Svelte 和 Web Component。支持肤色、可选 SVG 装饰、自定义动作与 Unicode 自动分类。前往 [在线演示](https://emoji-motion.phpz.org/) 体验。
12
+
13
+ ## 📊 项目概览
14
+
15
+ | 0.5.0 版本 | 数量 | 说明 |
16
+ | --- | ---: | --- |
17
+ | 单独定制预设 | 177 | 逐个配置的基础 emoji |
18
+ | 已审核动作家族 | 16 | 另外覆盖 123 个基础 emoji |
19
+ | 类别 | 10 | 用于组织内容的分组 |
20
+ | 可复用动作 | 42 | 预设和家族共享 |
21
+ | 带可选 SVG 效果的 emoji | 67 | 基础 emoji 数量 |
22
+ | 可识别 Unicode 序列 | 5,235 | Unicode Emoji 18.0,包含肤色等变体 |
23
+
24
+ 肤色及其他变体按额外 Unicode 序列计数;没有预设或已审核家族匹配的已识别 emoji 使用分类兜底动作。
25
+
26
+ ## 📦 快速开始
27
+
28
+ ```sh
29
+ npm install @dofy/native-emoji-motion
30
+ ```
31
+
32
+ ```jsx
33
+ import { EmojiMotion } from '@dofy/native-emoji-motion/react';
34
+
35
+ <p>Hello <EmojiMotion emoji="👋" skinTone="medium" /></p>
36
+ ```
37
+
38
+ 可使用 React、Vue、Svelte 组件或 Web Component,也可通过 `enhance()` 为现有文本添加动效。完整接入、参数、肤色与自定义说明请参阅[帮助文档](https://emoji-motion.phpz.org/docs/)。
39
+
40
+ > 从 0.3.0 升级?0.4.0 移除了 `display` 参数,请使用块级容器或 CSS 控制布局。
41
+
42
+ ## 📄 许可证
43
+
44
+ [MIT](./LICENSE)。Unicode 数据适用 [Unicode License](./UNICODE-LICENSE.txt)。
@@ -0,0 +1,44 @@
1
+ <h1 align="center">👋</h1>
2
+
3
+ <h1 align="center">Emoji Motion</h1>
4
+
5
+ <p align="center"><a href="./README.md">English</a> · <a href="./README.zh-CN.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./README.ja.md">日本語</a></p>
6
+
7
+ <p align="center"><strong>讓你的 emoji 多一點情緒。 ✨</strong></p>
8
+
9
+ <p align="center"><a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/npm/v/%40dofy%2Fnative-emoji-motion?label=npm" alt="npm version" /></a> <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" /></a> <a href="https://www.npmjs.com/package/@dofy/native-emoji-motion"><img src="https://img.shields.io/node/v/%40dofy%2Fnative-emoji-motion" alt="Node.js version" /></a></p>
10
+
11
+ 為裝置上的原生 emoji 加入小巧、富有表現力的動畫,支援 React、Vue、Svelte 和 Web Component。支援膚色、可選 SVG 裝飾、自訂動作與 Unicode 自動分類。前往[線上展示](https://emoji-motion.phpz.org/)體驗。
12
+
13
+ ## 📊 專案概覽
14
+
15
+ | 0.5.0 版本 | 數量 | 說明 |
16
+ | --- | ---: | --- |
17
+ | 個別訂製預設 | 177 | 逐一設定的基礎 emoji |
18
+ | 已審核動作家族 | 16 | 另外涵蓋 123 個基礎 emoji |
19
+ | 類別 | 10 | 用來組織內容的分組 |
20
+ | 可重複使用動作 | 42 | 預設和家族共用 |
21
+ | 帶可選 SVG 效果的 emoji | 67 | 基礎 emoji 數量 |
22
+ | 可辨識 Unicode 序列 | 5,235 | Unicode Emoji 18.0,包含膚色等變體 |
23
+
24
+ 膚色和其他變體按額外 Unicode 序列計數;沒有預設或已審核家族匹配的已辨識 emoji 使用分類備援動作。
25
+
26
+ ## 📦 快速開始
27
+
28
+ ```sh
29
+ npm install @dofy/native-emoji-motion
30
+ ```
31
+
32
+ ```jsx
33
+ import { EmojiMotion } from '@dofy/native-emoji-motion/react';
34
+
35
+ <p>Hello <EmojiMotion emoji="👋" skinTone="medium" /></p>
36
+ ```
37
+
38
+ 可使用 React、Vue、Svelte 元件或 Web Component,也可透過 `enhance()` 為現有文字加入動效。完整接入、參數、膚色與自訂說明請參閱[說明文件](https://emoji-motion.phpz.org/docs/)。
39
+
40
+ > 從 0.3.0 升級?0.4.0 移除了 `display` 參數,請使用區塊容器或 CSS 控制版面配置。
41
+
42
+ ## 📄 授權
43
+
44
+ [MIT](./LICENSE)。Unicode 資料適用 [Unicode License](./UNICODE-LICENSE.txt)。
package/assets/logo.svg CHANGED
@@ -1,8 +1,3 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" role="img" aria-label="Emoji Motion logo">
2
- <circle cx="48" cy="48" r="46" fill="#302d29"/>
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dofy/native-emoji-motion",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Expressive, extensible animations for native emoji with optional SVG effects",
5
5
  "type": "module",
6
6
  "exports": {
@@ -62,6 +62,9 @@
62
62
  "src",
63
63
  "assets/logo.svg",
64
64
  "README.md",
65
+ "README.zh-CN.md",
66
+ "README.zh-TW.md",
67
+ "README.ja.md",
65
68
  "LICENSE",
66
69
  "UNICODE-LICENSE.txt",
67
70
  "CHANGELOG.md"
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: ['🥤', '🧃', '🧋', '🍹', '🍸'] },