expo-native-sheet-emojis 1.5.0 → 1.7.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/README.md +1 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSearchBar.kt +1 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetContentView.kt +1 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetModule.kt +1 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetUIView.kt +4 -0
- package/android/src/main/java/expo/community/modules/emojisheet/StickyHeaderDecoration.kt +89 -0
- package/android/src/main/res/drawable/ic_search.xml +9 -0
- package/ios/EmojiCategoryStrip.swift +1 -1
- package/ios/EmojiSheetContentView.swift +1 -0
- package/ios/EmojiSheetModule.podspec +1 -1
- package/ios/EmojiSheetModule.swift +9 -9
- package/lib/commonjs/EmojiSheetView.js +3 -1
- package/lib/commonjs/EmojiSheetView.js.map +1 -1
- package/lib/module/EmojiSheetView.js +3 -1
- package/lib/module/EmojiSheetView.js.map +1 -1
- package/lib/typescript/EmojiSheetModule.types.d.ts +4 -0
- package/lib/typescript/EmojiSheetModule.types.d.ts.map +1 -1
- package/lib/typescript/EmojiSheetView.d.ts +1 -1
- package/lib/typescript/EmojiSheetView.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/EmojiSheetModule.types.ts +2 -0
- package/src/EmojiSheetView.tsx +2 -0
package/README.md
CHANGED
|
@@ -306,6 +306,7 @@ A declarative React component that renders the emoji picker inline.
|
|
|
306
306
|
| Prop | Type | Default | Description |
|
|
307
307
|
|-|-|-|-|
|
|
308
308
|
| onEmojiSelected | `(emoji: string) => void` | required | Called when an emoji is tapped |
|
|
309
|
+
| onDismiss | `() => void` | -- | Called when the picker is dismissed (View API only, not Embedded view) |
|
|
309
310
|
| theme | `EmojiSheetTheme \| 'dark' \| 'light' \| 'system'` | `'light'` | Theme configuration |
|
|
310
311
|
| translations | `EmojiSheetTranslations` | -- | Localized strings |
|
|
311
312
|
| categoryBarPosition | `'top' \| 'bottom'` | `'top'` | Position of the category tab bar |
|
package/android/build.gradle
CHANGED
|
@@ -44,7 +44,7 @@ android {
|
|
|
44
44
|
dependencies {
|
|
45
45
|
implementation "androidx.recyclerview:recyclerview:1.3.2"
|
|
46
46
|
implementation "androidx.appcompat:appcompat:1.6.1"
|
|
47
|
-
implementation "com.google.android.material:material:1.
|
|
47
|
+
implementation "com.google.android.material:material:1.12.0"
|
|
48
48
|
implementation "androidx.emoji2:emoji2:1.6.0"
|
|
49
49
|
implementation "androidx.emoji2:emoji2-views-helper:1.6.0"
|
|
50
50
|
}
|
|
@@ -53,7 +53,7 @@ class EmojiSearchBar(
|
|
|
53
53
|
layoutParams = lp
|
|
54
54
|
|
|
55
55
|
searchIcon = ImageView(context).apply {
|
|
56
|
-
setImageResource(
|
|
56
|
+
setImageResource(R.drawable.ic_search)
|
|
57
57
|
scaleType = ImageView.ScaleType.CENTER_INSIDE
|
|
58
58
|
val iconLp = LayoutParams(iconWidth, LayoutParams.MATCH_PARENT)
|
|
59
59
|
layoutParams = iconLp
|
|
@@ -112,7 +112,7 @@ class EmojiSheetModule : Module() {
|
|
|
112
112
|
Prop("excludeEmojis") { view: EmojiSheetContentView, ids: List<String>? ->
|
|
113
113
|
view.updateExcludeEmojis(ids ?: emptyList())
|
|
114
114
|
}
|
|
115
|
-
Events("onEmojiSelected")
|
|
115
|
+
Events("onEmojiSelected", "onDismiss")
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
@@ -97,6 +97,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
97
97
|
private val recyclerView: RecyclerView
|
|
98
98
|
private val gridAdapter: EmojiGridAdapter
|
|
99
99
|
private val gridLayoutManager: GridLayoutManager
|
|
100
|
+
private val stickyHeaderDecoration: StickyHeaderDecoration
|
|
100
101
|
private val emptyStateLabel: TextView
|
|
101
102
|
private val contentFrame: FrameLayout
|
|
102
103
|
|
|
@@ -156,6 +157,8 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
156
157
|
recyclerView = RecyclerView(context).apply {
|
|
157
158
|
layoutManager = gridLayoutManager
|
|
158
159
|
adapter = gridAdapter
|
|
160
|
+
stickyHeaderDecoration = StickyHeaderDecoration(gridAdapter, currentTheme.backgroundColor)
|
|
161
|
+
addItemDecoration(stickyHeaderDecoration)
|
|
159
162
|
setHasFixedSize(false)
|
|
160
163
|
overScrollMode = View.OVER_SCROLL_NEVER
|
|
161
164
|
isNestedScrollingEnabled = true
|
|
@@ -411,6 +414,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
411
414
|
categoryStrip.applyTheme(theme)
|
|
412
415
|
gridAdapter.updateTheme(theme)
|
|
413
416
|
recyclerView.setBackgroundColor(theme.backgroundColor)
|
|
417
|
+
stickyHeaderDecoration.backgroundColor = theme.backgroundColor
|
|
414
418
|
emptyStateLabel.setTextColor(theme.textSecondaryColor)
|
|
415
419
|
}
|
|
416
420
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package expo.community.modules.emojisheet
|
|
2
|
+
|
|
3
|
+
import android.graphics.Canvas
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import androidx.recyclerview.widget.RecyclerView
|
|
7
|
+
|
|
8
|
+
class StickyHeaderDecoration(
|
|
9
|
+
private val adapter: EmojiGridAdapter,
|
|
10
|
+
var backgroundColor: Int = 0
|
|
11
|
+
) : RecyclerView.ItemDecoration() {
|
|
12
|
+
|
|
13
|
+
private var cachedHeaderPosition: Int = RecyclerView.NO_POSITION
|
|
14
|
+
private var cachedHeaderView: View? = null
|
|
15
|
+
private var cachedParentWidth: Int = 0
|
|
16
|
+
|
|
17
|
+
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
|
18
|
+
val topChild = parent.getChildAt(0) ?: return
|
|
19
|
+
val topPosition = parent.getChildAdapterPosition(topChild)
|
|
20
|
+
if (topPosition == RecyclerView.NO_POSITION) return
|
|
21
|
+
|
|
22
|
+
val headerPosition = findHeaderPositionBefore(topPosition)
|
|
23
|
+
if (headerPosition == RecyclerView.NO_POSITION) return
|
|
24
|
+
|
|
25
|
+
val headerView = getHeaderView(parent, headerPosition)
|
|
26
|
+
|
|
27
|
+
val nextHeaderPosition = findNextHeaderPosition(topPosition)
|
|
28
|
+
if (nextHeaderPosition != RecyclerView.NO_POSITION) {
|
|
29
|
+
val nextHeaderView = parent.findViewHolderForAdapterPosition(nextHeaderPosition)?.itemView
|
|
30
|
+
if (nextHeaderView != null && nextHeaderView.top < headerView.height) {
|
|
31
|
+
val offset = maxOf(0f, (nextHeaderView.top - headerView.height).toFloat())
|
|
32
|
+
c.save()
|
|
33
|
+
c.translate(0f, offset)
|
|
34
|
+
headerView.draw(c)
|
|
35
|
+
c.restore()
|
|
36
|
+
return
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
c.save()
|
|
41
|
+
c.translate(0f, 0f)
|
|
42
|
+
headerView.draw(c)
|
|
43
|
+
c.restore()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private fun getHeaderView(parent: RecyclerView, position: Int): View {
|
|
47
|
+
if (position == cachedHeaderPosition && cachedHeaderView != null && cachedParentWidth == parent.width) {
|
|
48
|
+
return cachedHeaderView!!
|
|
49
|
+
}
|
|
50
|
+
val holder = adapter.createViewHolder(parent, EmojiGridAdapter.VIEW_TYPE_HEADER)
|
|
51
|
+
adapter.bindViewHolder(holder, position)
|
|
52
|
+
val view = holder.itemView
|
|
53
|
+
if (backgroundColor != 0) {
|
|
54
|
+
view.setBackgroundColor(backgroundColor)
|
|
55
|
+
}
|
|
56
|
+
fixLayoutSize(parent, view)
|
|
57
|
+
cachedHeaderPosition = position
|
|
58
|
+
cachedHeaderView = view
|
|
59
|
+
cachedParentWidth = parent.width
|
|
60
|
+
return view
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
fun invalidateCache() {
|
|
64
|
+
cachedHeaderPosition = RecyclerView.NO_POSITION
|
|
65
|
+
cachedHeaderView = null
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private fun findHeaderPositionBefore(pos: Int): Int {
|
|
69
|
+
for (i in pos downTo 0) {
|
|
70
|
+
if (adapter.getItemViewType(i) == EmojiGridAdapter.VIEW_TYPE_HEADER) return i
|
|
71
|
+
}
|
|
72
|
+
return RecyclerView.NO_POSITION
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private fun findNextHeaderPosition(pos: Int): Int {
|
|
76
|
+
val count = adapter.itemCount
|
|
77
|
+
for (i in (pos + 1) until count) {
|
|
78
|
+
if (adapter.getItemViewType(i) == EmojiGridAdapter.VIEW_TYPE_HEADER) return i
|
|
79
|
+
}
|
|
80
|
+
return RecyclerView.NO_POSITION
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private fun fixLayoutSize(parent: ViewGroup, view: View) {
|
|
84
|
+
val widthSpec = View.MeasureSpec.makeMeasureSpec(parent.width, View.MeasureSpec.EXACTLY)
|
|
85
|
+
val heightSpec = View.MeasureSpec.makeMeasureSpec(parent.height, View.MeasureSpec.UNSPECIFIED)
|
|
86
|
+
view.measure(widthSpec, heightSpec)
|
|
87
|
+
view.layout(0, 0, view.measuredWidth, view.measuredHeight)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
android:width="24dp"
|
|
3
|
+
android:height="24dp"
|
|
4
|
+
android:viewportWidth="24"
|
|
5
|
+
android:viewportHeight="24">
|
|
6
|
+
<path
|
|
7
|
+
android:fillColor="#000000"
|
|
8
|
+
android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
|
|
9
|
+
</vector>
|
|
@@ -65,7 +65,7 @@ class EmojiCategoryStrip: UIView, UICollectionViewDataSource, UICollectionViewDe
|
|
|
65
65
|
dividerLine.leadingAnchor.constraint(equalTo: leadingAnchor),
|
|
66
66
|
dividerLine.trailingAnchor.constraint(equalTo: trailingAnchor),
|
|
67
67
|
dividerLine.bottomAnchor.constraint(equalTo: bottomAnchor),
|
|
68
|
-
dividerLine.heightAnchor.constraint(equalToConstant:
|
|
68
|
+
dividerLine.heightAnchor.constraint(equalToConstant: 0.5),
|
|
69
69
|
])
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -21,6 +21,7 @@ struct EmojiSection {
|
|
|
21
21
|
|
|
22
22
|
class EmojiSheetContentView: ExpoView, EmojiSheetUIViewDelegate {
|
|
23
23
|
let onEmojiSelected = EventDispatcher()
|
|
24
|
+
let onDismiss = EventDispatcher()
|
|
24
25
|
private let pickerView = EmojiSheetUIView()
|
|
25
26
|
|
|
26
27
|
required init(appContext: AppContext? = nil) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Pod::Spec.new do |s|
|
|
2
2
|
s.name = 'EmojiSheetModule'
|
|
3
|
-
s.version = '1.
|
|
3
|
+
s.version = '1.7.0'
|
|
4
4
|
s.summary = 'Native emoji picker bottom sheet for React Native'
|
|
5
5
|
s.description = 'A fully native iOS/Android emoji picker presented in a bottom sheet with search, skin tones, and theming support.'
|
|
6
6
|
s.author = ''
|
|
@@ -58,16 +58,16 @@ public class EmojiSheetModule: Module {
|
|
|
58
58
|
view.updateRecentLimit(limit ?? 30)
|
|
59
59
|
}
|
|
60
60
|
Prop("showSearch") { (view, show: Bool?) in
|
|
61
|
-
view.updateShowSearch(show ??
|
|
61
|
+
view.updateShowSearch(show ?? true)
|
|
62
62
|
}
|
|
63
63
|
Prop("showRecents") { (view, show: Bool?) in
|
|
64
|
-
view.updateShowRecents(show ??
|
|
64
|
+
view.updateShowRecents(show ?? true)
|
|
65
65
|
}
|
|
66
66
|
Prop("enableSkinTones") { (view, enable: Bool?) in
|
|
67
|
-
view.updateEnableSkinTones(enable ??
|
|
67
|
+
view.updateEnableSkinTones(enable ?? true)
|
|
68
68
|
}
|
|
69
69
|
Prop("enableHaptics") { (view, enable: Bool?) in
|
|
70
|
-
view.updateEnableHaptics(enable ??
|
|
70
|
+
view.updateEnableHaptics(enable ?? true)
|
|
71
71
|
}
|
|
72
72
|
Prop("enableAnimations") { (view, enable: Bool?) in
|
|
73
73
|
view.updateEnableAnimations(enable ?? false)
|
|
@@ -84,7 +84,7 @@ public class EmojiSheetModule: Module {
|
|
|
84
84
|
Prop("excludeEmojis") { (view, ids: [String]?) in
|
|
85
85
|
view.updateExcludeEmojis(ids ?? [])
|
|
86
86
|
}
|
|
87
|
-
Events("onEmojiSelected")
|
|
87
|
+
Events("onEmojiSelected", "onDismiss")
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -114,13 +114,13 @@ public class EmojiSheetModule: Module {
|
|
|
114
114
|
let snapPoints = (options["snapPoints"] as? [Double]) ?? [0.5, 1.0]
|
|
115
115
|
let columns = (options["columns"] as? Int) ?? 7
|
|
116
116
|
let emojiSize = options["emojiSize"] as? Double ?? 32
|
|
117
|
-
let showSearch = (options["showSearch"] as? Bool) ??
|
|
118
|
-
let showRecents = (options["showRecents"] as? Bool) ??
|
|
119
|
-
let enableSkinTones = (options["enableSkinTones"] as? Bool) ??
|
|
117
|
+
let showSearch = (options["showSearch"] as? Bool) ?? true
|
|
118
|
+
let showRecents = (options["showRecents"] as? Bool) ?? true
|
|
119
|
+
let enableSkinTones = (options["enableSkinTones"] as? Bool) ?? true
|
|
120
120
|
let enableHaptics = (options["enableHaptics"] as? Bool) ?? true
|
|
121
121
|
let enableAnimations = (options["enableAnimations"] as? Bool) ?? false
|
|
122
122
|
let recentLimit = (options["recentLimit"] as? Int) ?? 30
|
|
123
|
-
let gestureEnabled = (options["gestureEnabled"] as? Bool) ??
|
|
123
|
+
let gestureEnabled = (options["gestureEnabled"] as? Bool) ?? true
|
|
124
124
|
let backdropOpacity = options["backdropOpacity"] as? Double ?? (isDark ? 0.4 : 0.22)
|
|
125
125
|
let categoryBarPosition = (options["categoryBarPosition"] as? String) ?? "top"
|
|
126
126
|
let categoryNames = options["categoryNames"] as? [String: String]
|
|
@@ -9,6 +9,7 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
9
9
|
const NativeView = (0, _expo.requireNativeView)('EmojiSheet');
|
|
10
10
|
function EmojiSheetView({
|
|
11
11
|
onEmojiSelected,
|
|
12
|
+
onDismiss,
|
|
12
13
|
theme,
|
|
13
14
|
translations,
|
|
14
15
|
categoryBarPosition,
|
|
@@ -49,7 +50,8 @@ function EmojiSheetView({
|
|
|
49
50
|
nativeEvent
|
|
50
51
|
}) => {
|
|
51
52
|
onEmojiSelected(nativeEvent.emoji);
|
|
52
|
-
}
|
|
53
|
+
},
|
|
54
|
+
onDismiss: onDismiss ? () => onDismiss() : undefined
|
|
53
55
|
});
|
|
54
56
|
}
|
|
55
57
|
//# sourceMappingURL=EmojiSheetView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_expo","require","_jsxRuntime","NativeView","requireNativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","excludeEmojis","rest","resolvedTheme","jsx","searchPlaceholder","noResultsText","categoryNames","nativeEvent","emoji"],"sourceRoot":"../../src","sources":["EmojiSheetView.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAyC,IAAAC,WAAA,GAAAD,OAAA;AAOzC,MAAME,UAA0D,GAC9D,IAAAC,uBAAiB,EAAC,YAAY,CAAC;AAElB,SAASC,cAAcA,CAAC;EACrCC,eAAe;EACfC,KAAK;EACLC,YAAY;EACZC,mBAAmB;EACnBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,UAAU;EACVC,WAAW;EACXC,eAAe;EACfC,aAAa;EACbC,gBAAgB;EAChBC,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOb,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACE,
|
|
1
|
+
{"version":3,"names":["_expo","require","_jsxRuntime","NativeView","requireNativeView","EmojiSheetView","onEmojiSelected","onDismiss","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","excludeEmojis","rest","resolvedTheme","jsx","searchPlaceholder","noResultsText","categoryNames","nativeEvent","emoji","undefined"],"sourceRoot":"../../src","sources":["EmojiSheetView.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAAyC,IAAAC,WAAA,GAAAD,OAAA;AAOzC,MAAME,UAA0D,GAC9D,IAAAC,uBAAiB,EAAC,YAAY,CAAC;AAElB,SAASC,cAAcA,CAAC;EACrCC,eAAe;EACfC,SAAS;EACTC,KAAK;EACLC,YAAY;EACZC,mBAAmB;EACnBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,UAAU;EACVC,WAAW;EACXC,eAAe;EACfC,aAAa;EACbC,gBAAgB;EAChBC,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOb,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACE,IAAAN,WAAA,CAAAoB,GAAA,EAACnB,UAAU;IAAA,GACLiB,IAAI;IACRZ,KAAK,EAAEa,aAAc;IACrBX,mBAAmB,EAAEA,mBAAoB;IACzCC,OAAO,EAAEA,OAAQ;IACjBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,UAAU,EAAEA,UAAW;IACvBC,WAAW,EAAEA,WAAY;IACzBC,eAAe,EAAEA,eAAgB;IACjCC,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCC,aAAa,EAAEA,aAAc;IAC7BI,iBAAiB,EAAEd,YAAY,EAAEc,iBAAkB;IACnDC,aAAa,EAAEf,YAAY,EAAEe,aAAc;IAC3CC,aAAa,EAAEhB,YAAY,EAAEgB,aAAc;IAC3CnB,eAAe,EAAEA,CAAC;MAAEoB;IAAY,CAAC,KAAK;MACpCpB,eAAe,CAACoB,WAAW,CAACC,KAAK,CAAC;IACpC,CAAE;IACFpB,SAAS,EAAEA,SAAS,GAAG,MAAMA,SAAS,CAAC,CAAC,GAAGqB;EAAU,CACtD,CAAC;AAEN","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
5
5
|
const NativeView = requireNativeView('EmojiSheet');
|
|
6
6
|
export default function EmojiSheetView({
|
|
7
7
|
onEmojiSelected,
|
|
8
|
+
onDismiss,
|
|
8
9
|
theme,
|
|
9
10
|
translations,
|
|
10
11
|
categoryBarPosition,
|
|
@@ -45,7 +46,8 @@ export default function EmojiSheetView({
|
|
|
45
46
|
nativeEvent
|
|
46
47
|
}) => {
|
|
47
48
|
onEmojiSelected(nativeEvent.emoji);
|
|
48
|
-
}
|
|
49
|
+
},
|
|
50
|
+
onDismiss: onDismiss ? () => onDismiss() : undefined
|
|
49
51
|
});
|
|
50
52
|
}
|
|
51
53
|
//# sourceMappingURL=EmojiSheetView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["requireNativeView","jsx","_jsx","NativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","excludeEmojis","rest","resolvedTheme","searchPlaceholder","noResultsText","categoryNames","nativeEvent","emoji"],"sourceRoot":"../../src","sources":["EmojiSheetView.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,MAAM;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzC,MAAMC,UAA0D,GAC9DH,iBAAiB,CAAC,YAAY,CAAC;AAEjC,eAAe,SAASI,cAAcA,CAAC;EACrCC,eAAe;EACfC,KAAK;EACLC,YAAY;EACZC,mBAAmB;EACnBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,UAAU;EACVC,WAAW;EACXC,eAAe;EACfC,aAAa;EACbC,gBAAgB;EAChBC,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOb,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,
|
|
1
|
+
{"version":3,"names":["requireNativeView","jsx","_jsx","NativeView","EmojiSheetView","onEmojiSelected","onDismiss","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","excludeEmojis","rest","resolvedTheme","searchPlaceholder","noResultsText","categoryNames","nativeEvent","emoji","undefined"],"sourceRoot":"../../src","sources":["EmojiSheetView.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,MAAM;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzC,MAAMC,UAA0D,GAC9DH,iBAAiB,CAAC,YAAY,CAAC;AAEjC,eAAe,SAASI,cAAcA,CAAC;EACrCC,eAAe;EACfC,SAAS;EACTC,KAAK;EACLC,YAAY;EACZC,mBAAmB;EACnBC,OAAO;EACPC,SAAS;EACTC,WAAW;EACXC,UAAU;EACVC,WAAW;EACXC,eAAe;EACfC,aAAa;EACbC,gBAAgB;EAChBC,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOb,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACEL,IAAA,CAACC,UAAU;IAAA,GACLgB,IAAI;IACRZ,KAAK,EAAEa,aAAc;IACrBX,mBAAmB,EAAEA,mBAAoB;IACzCC,OAAO,EAAEA,OAAQ;IACjBC,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAEA,WAAY;IACzBC,UAAU,EAAEA,UAAW;IACvBC,WAAW,EAAEA,WAAY;IACzBC,eAAe,EAAEA,eAAgB;IACjCC,aAAa,EAAEA,aAAc;IAC7BC,gBAAgB,EAAEA,gBAAiB;IACnCC,aAAa,EAAEA,aAAc;IAC7BG,iBAAiB,EAAEb,YAAY,EAAEa,iBAAkB;IACnDC,aAAa,EAAEd,YAAY,EAAEc,aAAc;IAC3CC,aAAa,EAAEf,YAAY,EAAEe,aAAc;IAC3ClB,eAAe,EAAEA,CAAC;MAAEmB;IAAY,CAAC,KAAK;MACpCnB,eAAe,CAACmB,WAAW,CAACC,KAAK,CAAC;IACpC,CAAE;IACFnB,SAAS,EAAEA,SAAS,GAAG,MAAMA,SAAS,CAAC,CAAC,GAAGoB;EAAU,CACtD,CAAC;AAEN","ignoreList":[]}
|
|
@@ -52,6 +52,7 @@ export type EmojiSelectionListener = (event: {
|
|
|
52
52
|
}) => void;
|
|
53
53
|
export type EmojiSheetViewProps = ViewProps & {
|
|
54
54
|
onEmojiSelected: (emoji: string) => void;
|
|
55
|
+
onDismiss?: () => void;
|
|
55
56
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
56
57
|
translations?: EmojiSheetTranslations;
|
|
57
58
|
categoryBarPosition?: 'top' | 'bottom';
|
|
@@ -67,6 +68,9 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
67
68
|
};
|
|
68
69
|
export type EmojiSheetNativeViewProps = ViewProps & {
|
|
69
70
|
onEmojiSelected: EmojiSelectionListener;
|
|
71
|
+
onDismiss?: (event: {
|
|
72
|
+
nativeEvent: {};
|
|
73
|
+
}) => void;
|
|
70
74
|
theme?: string;
|
|
71
75
|
categoryBarPosition?: string;
|
|
72
76
|
columns?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiSheetModule.types.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetModule.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EmojiSheetModule.types.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetModule.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { EmojiSheetViewProps } from './EmojiSheetModule.types';
|
|
2
|
-
export default function EmojiSheetView({ onEmojiSelected, theme, translations, categoryBarPosition, columns, emojiSize, recentLimit, showSearch, showRecents, enableSkinTones, enableHaptics, enableAnimations, excludeEmojis, ...rest }: EmojiSheetViewProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function EmojiSheetView({ onEmojiSelected, onDismiss, theme, translations, categoryBarPosition, columns, emojiSize, recentLimit, showSearch, showRecents, enableSkinTones, enableHaptics, enableAnimations, excludeEmojis, ...rest }: EmojiSheetViewProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=EmojiSheetView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiSheetView.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,eAAe,EACf,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,GAAG,IAAI,EACR,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"EmojiSheetView.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetView.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAKlC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACrC,eAAe,EACf,SAAS,EACT,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,GAAG,IAAI,EACR,EAAE,mBAAmB,2CA8BrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-native-sheet-emojis",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "A fully native emoji picker bottom sheet for React Native. Built with Swift and Kotlin for maximum performance. Features search with multilingual keywords, skin tones, frequently used tracking, theming, and configurable layout.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -61,6 +61,7 @@ export type EmojiSelectionListener = (event: { nativeEvent: { emoji: string } })
|
|
|
61
61
|
|
|
62
62
|
export type EmojiSheetViewProps = ViewProps & {
|
|
63
63
|
onEmojiSelected: (emoji: string) => void;
|
|
64
|
+
onDismiss?: () => void;
|
|
64
65
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
65
66
|
translations?: EmojiSheetTranslations;
|
|
66
67
|
categoryBarPosition?: 'top' | 'bottom';
|
|
@@ -77,6 +78,7 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
77
78
|
|
|
78
79
|
export type EmojiSheetNativeViewProps = ViewProps & {
|
|
79
80
|
onEmojiSelected: EmojiSelectionListener;
|
|
81
|
+
onDismiss?: (event: { nativeEvent: {} }) => void;
|
|
80
82
|
theme?: string;
|
|
81
83
|
categoryBarPosition?: string;
|
|
82
84
|
columns?: number;
|
package/src/EmojiSheetView.tsx
CHANGED
|
@@ -10,6 +10,7 @@ const NativeView: React.ComponentType<EmojiSheetNativeViewProps> =
|
|
|
10
10
|
|
|
11
11
|
export default function EmojiSheetView({
|
|
12
12
|
onEmojiSelected,
|
|
13
|
+
onDismiss,
|
|
13
14
|
theme,
|
|
14
15
|
translations,
|
|
15
16
|
categoryBarPosition,
|
|
@@ -50,6 +51,7 @@ export default function EmojiSheetView({
|
|
|
50
51
|
onEmojiSelected={({ nativeEvent }) => {
|
|
51
52
|
onEmojiSelected(nativeEvent.emoji);
|
|
52
53
|
}}
|
|
54
|
+
onDismiss={onDismiss ? () => onDismiss() : undefined}
|
|
53
55
|
/>
|
|
54
56
|
);
|
|
55
57
|
}
|