expo-native-sheet-emojis 1.6.0 → 1.8.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/EmojiCategoryStrip.kt +7 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiGridAdapter.kt +3 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSearchBar.kt +3 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetContentView.kt +5 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetModule.kt +19 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetUIView.kt +71 -0
- package/android/src/main/java/expo/community/modules/emojisheet/StickyHeaderDecoration.kt +95 -0
- package/android/src/main/res/drawable/ic_search.xml +9 -0
- package/ios/EmojiCategoryStrip.swift +6 -0
- package/ios/EmojiGridView.swift +15 -2
- package/ios/EmojiSearchBar.swift +12 -0
- package/ios/EmojiSheetContentView.swift +5 -0
- package/ios/EmojiSheetModule.podspec +1 -1
- package/ios/EmojiSheetModule.swift +6 -1
- package/ios/EmojiSheetUIView.swift +21 -0
- package/lib/commonjs/EmojiSheetModule.js +1 -0
- package/lib/commonjs/EmojiSheetModule.js.map +1 -1
- package/lib/commonjs/EmojiSheetView.js +5 -1
- package/lib/commonjs/EmojiSheetView.js.map +1 -1
- package/lib/module/EmojiSheetModule.js +1 -0
- package/lib/module/EmojiSheetModule.js.map +1 -1
- package/lib/module/EmojiSheetView.js +5 -1
- package/lib/module/EmojiSheetView.js.map +1 -1
- package/lib/typescript/EmojiSheetModule.d.ts.map +1 -1
- package/lib/typescript/EmojiSheetModule.types.d.ts +7 -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.ts +1 -0
- package/src/EmojiSheetModule.types.ts +5 -0
- package/src/EmojiSheetView.tsx +4 -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
|
}
|
|
@@ -81,6 +81,13 @@ class EmojiCategoryStrip(
|
|
|
81
81
|
adapter.notifyDataSetChanged()
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
+
fun applyLayoutDirection(direction: Int) {
|
|
85
|
+
layoutDirection = direction
|
|
86
|
+
recyclerView.layoutDirection = direction
|
|
87
|
+
dividerView.layoutDirection = direction
|
|
88
|
+
recyclerView.adapter?.notifyDataSetChanged()
|
|
89
|
+
}
|
|
90
|
+
|
|
84
91
|
private inner class CategoryAdapter : RecyclerView.Adapter<CategoryAdapter.VH>() {
|
|
85
92
|
|
|
86
93
|
inner class VH(val container: FrameLayout) : RecyclerView.ViewHolder(container) {
|
|
@@ -69,6 +69,9 @@ class EmojiGridAdapter(
|
|
|
69
69
|
val tv = TextView(parent.context).apply {
|
|
70
70
|
setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
|
|
71
71
|
typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
|
|
72
|
+
gravity = Gravity.START or Gravity.CENTER_VERTICAL
|
|
73
|
+
textAlignment = View.TEXT_ALIGNMENT_VIEW_START
|
|
74
|
+
textDirection = View.TEXT_DIRECTION_LOCALE
|
|
72
75
|
val pad = (16 * density).toInt()
|
|
73
76
|
setPadding(pad, pad, pad, (8 * density).toInt())
|
|
74
77
|
layoutParams = RecyclerView.LayoutParams(
|
|
@@ -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
|
|
@@ -85,6 +85,8 @@ class EmojiSearchBar(
|
|
|
85
85
|
setBackgroundColor(0x00000000)
|
|
86
86
|
hint = "Search emoji"
|
|
87
87
|
setSingleLine(true)
|
|
88
|
+
textDirection = View.TEXT_DIRECTION_LOCALE
|
|
89
|
+
textAlignment = View.TEXT_ALIGNMENT_VIEW_START
|
|
88
90
|
imeOptions = EditorInfo.IME_ACTION_SEARCH
|
|
89
91
|
setTextSize(TypedValue.COMPLEX_UNIT_SP, 15f)
|
|
90
92
|
setPadding((4 * density).toInt(), 0, clearSize + clearMarginEnd, 0)
|
|
@@ -13,6 +13,7 @@ class EmojiSheetContentView(
|
|
|
13
13
|
) : ExpoView(context, appContext) {
|
|
14
14
|
|
|
15
15
|
private val onEmojiSelected by EventDispatcher()
|
|
16
|
+
private val onDismiss by EventDispatcher()
|
|
16
17
|
private val pickerView = EmojiSheetUIView(context)
|
|
17
18
|
|
|
18
19
|
init {
|
|
@@ -37,6 +38,10 @@ class EmojiSheetContentView(
|
|
|
37
38
|
pickerView.applyConfiguration()
|
|
38
39
|
}
|
|
39
40
|
|
|
41
|
+
fun updateLayoutDirection(direction: String) {
|
|
42
|
+
pickerView.layoutDirectionProp = direction
|
|
43
|
+
}
|
|
44
|
+
|
|
40
45
|
fun updateColumns(columns: Int) {
|
|
41
46
|
pickerView.columns = columns
|
|
42
47
|
pickerView.applyConfiguration()
|
|
@@ -76,6 +76,9 @@ class EmojiSheetModule : Module() {
|
|
|
76
76
|
Prop("categoryBarPosition") { view: EmojiSheetContentView, position: String? ->
|
|
77
77
|
view.updateCategoryBarPosition(position ?: "top")
|
|
78
78
|
}
|
|
79
|
+
Prop("layoutDirection") { view: EmojiSheetContentView, direction: String? ->
|
|
80
|
+
view.updateLayoutDirection(direction ?: "auto")
|
|
81
|
+
}
|
|
79
82
|
Prop("columns") { view: EmojiSheetContentView, columns: Int? ->
|
|
80
83
|
view.updateColumns(columns ?: 7)
|
|
81
84
|
}
|
|
@@ -112,7 +115,7 @@ class EmojiSheetModule : Module() {
|
|
|
112
115
|
Prop("excludeEmojis") { view: EmojiSheetContentView, ids: List<String>? ->
|
|
113
116
|
view.updateExcludeEmojis(ids ?: emptyList())
|
|
114
117
|
}
|
|
115
|
-
Events("onEmojiSelected")
|
|
118
|
+
Events("onEmojiSelected", "onDismiss")
|
|
116
119
|
}
|
|
117
120
|
}
|
|
118
121
|
|
|
@@ -143,6 +146,7 @@ class EmojiSheetModule : Module() {
|
|
|
143
146
|
val gestureEnabled = options["gestureEnabled"] as? Boolean ?: true
|
|
144
147
|
val backdropOpacity = (options["backdropOpacity"] as? Number)?.toFloat() ?: if (isDark) 0.4f else 0.22f
|
|
145
148
|
val categoryBarPosition = options["categoryBarPosition"] as? String ?: "top"
|
|
149
|
+
val layoutDirection = options["layoutDirection"] as? String ?: "auto"
|
|
146
150
|
@Suppress("UNCHECKED_CAST")
|
|
147
151
|
val categoryNames = options["categoryNames"] as? Map<String, String>
|
|
148
152
|
@Suppress("UNCHECKED_CAST")
|
|
@@ -202,6 +206,7 @@ class EmojiSheetModule : Module() {
|
|
|
202
206
|
pickerView.enableAnimations = enableAnimations
|
|
203
207
|
pickerView.recentLimit = recentLimit
|
|
204
208
|
pickerView.categoryBarPosition = categoryBarPosition
|
|
209
|
+
pickerView.layoutDirectionProp = layoutDirection
|
|
205
210
|
pickerView.categoryNames = categoryNames
|
|
206
211
|
pickerView.excludeEmojis = excludeEmojis
|
|
207
212
|
(options["searchPlaceholder"] as? String)?.let { pickerView.searchPlaceholder = it }
|
|
@@ -221,6 +226,7 @@ class EmojiSheetModule : Module() {
|
|
|
221
226
|
}
|
|
222
227
|
pickerView.onSearchFocused = { hasFocus ->
|
|
223
228
|
if (hasFocus) {
|
|
229
|
+
pickerView.setSheetExpansionInProgress(true)
|
|
224
230
|
bottomSheet.behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
|
225
231
|
} else {
|
|
226
232
|
bottomSheet.behavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
|
|
@@ -228,6 +234,7 @@ class EmojiSheetModule : Module() {
|
|
|
228
234
|
}
|
|
229
235
|
pickerView.onScrollIntentUp = {
|
|
230
236
|
if (bottomSheet.behavior.state != BottomSheetBehavior.STATE_EXPANDED) {
|
|
237
|
+
pickerView.setSheetExpansionInProgress(true)
|
|
231
238
|
bottomSheet.behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
|
232
239
|
}
|
|
233
240
|
}
|
|
@@ -316,6 +323,17 @@ class EmojiSheetModule : Module() {
|
|
|
316
323
|
skipCollapsed = false
|
|
317
324
|
isFitToContents = false
|
|
318
325
|
isDraggable = gestureEnabled
|
|
326
|
+
addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
|
|
327
|
+
override fun onStateChanged(bottomSheet: View, newState: Int) {
|
|
328
|
+
pickerView.setSheetExpanded(newState == BottomSheetBehavior.STATE_EXPANDED)
|
|
329
|
+
pickerView.setSheetExpansionInProgress(
|
|
330
|
+
newState == BottomSheetBehavior.STATE_DRAGGING ||
|
|
331
|
+
newState == BottomSheetBehavior.STATE_SETTLING
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
override fun onSlide(bottomSheet: View, slideOffset: Float) = Unit
|
|
336
|
+
})
|
|
319
337
|
}
|
|
320
338
|
|
|
321
339
|
bottomSheet.setOnDismissListener {
|
|
@@ -83,6 +83,11 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
83
83
|
var enableAnimations: Boolean = false
|
|
84
84
|
var recentLimit: Int = 30
|
|
85
85
|
var categoryBarPosition: String = "top"
|
|
86
|
+
var layoutDirectionProp: String = "auto"
|
|
87
|
+
set(value) {
|
|
88
|
+
field = value
|
|
89
|
+
applyLayoutDirection()
|
|
90
|
+
}
|
|
86
91
|
var categoryNames: Map<String, String>? = null
|
|
87
92
|
@Volatile
|
|
88
93
|
var excludeEmojis: Set<String> = emptySet()
|
|
@@ -97,6 +102,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
97
102
|
private val recyclerView: RecyclerView
|
|
98
103
|
private val gridAdapter: EmojiGridAdapter
|
|
99
104
|
private val gridLayoutManager: GridLayoutManager
|
|
105
|
+
private val stickyHeaderDecoration: StickyHeaderDecoration
|
|
100
106
|
private val emptyStateLabel: TextView
|
|
101
107
|
private val contentFrame: FrameLayout
|
|
102
108
|
|
|
@@ -108,6 +114,8 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
108
114
|
private var initialTouchY = 0f
|
|
109
115
|
private var lastTopPullDragDistance = 0f
|
|
110
116
|
private var isHandlingTopPullDrag = false
|
|
117
|
+
private var isSheetExpanded = false
|
|
118
|
+
private var isSheetExpansionInProgress = false
|
|
111
119
|
private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop.toFloat()
|
|
112
120
|
private var velocityTracker: VelocityTracker? = null
|
|
113
121
|
private var topPullStartY: Float? = null
|
|
@@ -156,6 +164,8 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
156
164
|
recyclerView = RecyclerView(context).apply {
|
|
157
165
|
layoutManager = gridLayoutManager
|
|
158
166
|
adapter = gridAdapter
|
|
167
|
+
stickyHeaderDecoration = StickyHeaderDecoration(gridAdapter, currentTheme.backgroundColor)
|
|
168
|
+
addItemDecoration(stickyHeaderDecoration)
|
|
159
169
|
setHasFixedSize(false)
|
|
160
170
|
overScrollMode = View.OVER_SCROLL_NEVER
|
|
161
171
|
isNestedScrollingEnabled = true
|
|
@@ -173,6 +183,10 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
173
183
|
lastTopPullDragDistance = 0f
|
|
174
184
|
isHandlingTopPullDrag = false
|
|
175
185
|
topPullStartY = null
|
|
186
|
+
if (isSheetExpansionInProgress) {
|
|
187
|
+
rv.stopScroll()
|
|
188
|
+
return true
|
|
189
|
+
}
|
|
176
190
|
}
|
|
177
191
|
android.view.MotionEvent.ACTION_UP,
|
|
178
192
|
android.view.MotionEvent.ACTION_CANCEL -> {
|
|
@@ -187,12 +201,28 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
187
201
|
topPullStartY = null
|
|
188
202
|
velocityTracker?.recycle()
|
|
189
203
|
velocityTracker = null
|
|
204
|
+
if (isSheetExpansionInProgress) {
|
|
205
|
+
rv.stopScroll()
|
|
206
|
+
return true
|
|
207
|
+
}
|
|
190
208
|
}
|
|
191
209
|
}
|
|
192
210
|
|
|
193
211
|
if (e.actionMasked == android.view.MotionEvent.ACTION_MOVE) {
|
|
212
|
+
if (isSheetExpansionInProgress) {
|
|
213
|
+
rv.stopScroll()
|
|
214
|
+
return true
|
|
215
|
+
}
|
|
216
|
+
|
|
194
217
|
val deltaY = e.y - initialTouchY
|
|
195
218
|
val isAtTop = !rv.canScrollVertically(-1)
|
|
219
|
+
if (!isSheetExpanded && deltaY < -touchSlop && !didTriggerExpandForCurrentDrag) {
|
|
220
|
+
didTriggerExpandForCurrentDrag = true
|
|
221
|
+
isSheetExpansionInProgress = true
|
|
222
|
+
rv.stopScroll()
|
|
223
|
+
onScrollIntentUp?.invoke()
|
|
224
|
+
return true
|
|
225
|
+
}
|
|
196
226
|
if (isHandlingTopPullDrag) {
|
|
197
227
|
rv.parent?.requestDisallowInterceptTouchEvent(true)
|
|
198
228
|
rv.stopScroll()
|
|
@@ -232,6 +262,11 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
232
262
|
}
|
|
233
263
|
|
|
234
264
|
override fun onScrolled(rv: RecyclerView, dx: Int, dy: Int) {
|
|
265
|
+
if (!isSheetExpanded) {
|
|
266
|
+
rv.stopScroll()
|
|
267
|
+
return
|
|
268
|
+
}
|
|
269
|
+
|
|
235
270
|
if (dy > 0 && rv.scrollState != RecyclerView.SCROLL_STATE_IDLE && !didTriggerExpandForCurrentDrag) {
|
|
236
271
|
didTriggerExpandForCurrentDrag = true
|
|
237
272
|
onScrollIntentUp?.invoke()
|
|
@@ -274,6 +309,21 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
274
309
|
addView(contentFrame)
|
|
275
310
|
|
|
276
311
|
applyTheme(currentTheme)
|
|
312
|
+
applyLayoutDirection()
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
fun setSheetExpanded(expanded: Boolean) {
|
|
316
|
+
isSheetExpanded = expanded
|
|
317
|
+
if (expanded) {
|
|
318
|
+
isSheetExpansionInProgress = false
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
fun setSheetExpansionInProgress(inProgress: Boolean) {
|
|
323
|
+
isSheetExpansionInProgress = inProgress
|
|
324
|
+
if (inProgress) {
|
|
325
|
+
recyclerView.stopScroll()
|
|
326
|
+
}
|
|
277
327
|
}
|
|
278
328
|
|
|
279
329
|
/** Call after setting configurable properties but before loadDataAsync to apply layout changes. */
|
|
@@ -411,9 +461,28 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
411
461
|
categoryStrip.applyTheme(theme)
|
|
412
462
|
gridAdapter.updateTheme(theme)
|
|
413
463
|
recyclerView.setBackgroundColor(theme.backgroundColor)
|
|
464
|
+
stickyHeaderDecoration.backgroundColor = theme.backgroundColor
|
|
465
|
+
stickyHeaderDecoration.invalidateCache()
|
|
414
466
|
emptyStateLabel.setTextColor(theme.textSecondaryColor)
|
|
415
467
|
}
|
|
416
468
|
|
|
469
|
+
private fun applyLayoutDirection() {
|
|
470
|
+
val dir = when (layoutDirectionProp) {
|
|
471
|
+
"rtl" -> View.LAYOUT_DIRECTION_RTL
|
|
472
|
+
"ltr" -> View.LAYOUT_DIRECTION_LTR
|
|
473
|
+
else -> View.LAYOUT_DIRECTION_LOCALE
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
layoutDirection = dir
|
|
477
|
+
searchBar.layoutDirection = dir
|
|
478
|
+
categoryStrip.applyLayoutDirection(dir)
|
|
479
|
+
recyclerView.layoutDirection = dir
|
|
480
|
+
contentFrame.layoutDirection = dir
|
|
481
|
+
stickyHeaderDecoration.invalidateCache()
|
|
482
|
+
recyclerView.invalidateItemDecorations()
|
|
483
|
+
requestLayout()
|
|
484
|
+
}
|
|
485
|
+
|
|
417
486
|
private fun buildCategoryKeys(): List<String> {
|
|
418
487
|
val keys = mutableListOf<String>()
|
|
419
488
|
if (showRecents && getFrequentlyUsed().isNotEmpty()) {
|
|
@@ -473,6 +542,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
473
542
|
}
|
|
474
543
|
|
|
475
544
|
gridAdapter.setItems(items, sectionPositions)
|
|
545
|
+
stickyHeaderDecoration.invalidateCache()
|
|
476
546
|
|
|
477
547
|
// Rebuild category keys in case frequently_used changed
|
|
478
548
|
val newKeys = buildCategoryKeys()
|
|
@@ -500,6 +570,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
500
570
|
addView(categoryStrip, index)
|
|
501
571
|
}
|
|
502
572
|
categoryStrip.applyTheme(currentTheme)
|
|
573
|
+
applyLayoutDirection()
|
|
503
574
|
}
|
|
504
575
|
|
|
505
576
|
private fun resolveSkinTone(baseEmoji: String, emojiId: String, toneEnabled: Boolean): String {
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
package expo.community.modules.emojisheet
|
|
2
|
+
|
|
3
|
+
import android.graphics.Canvas
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import android.widget.TextView
|
|
7
|
+
import androidx.recyclerview.widget.RecyclerView
|
|
8
|
+
|
|
9
|
+
class StickyHeaderDecoration(
|
|
10
|
+
private val adapter: EmojiGridAdapter,
|
|
11
|
+
var backgroundColor: Int = 0
|
|
12
|
+
) : RecyclerView.ItemDecoration() {
|
|
13
|
+
|
|
14
|
+
private var cachedHeaderPosition: Int = RecyclerView.NO_POSITION
|
|
15
|
+
private var cachedHeaderView: View? = null
|
|
16
|
+
private var cachedParentWidth: Int = 0
|
|
17
|
+
|
|
18
|
+
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
|
|
19
|
+
val topChild = parent.getChildAt(0) ?: return
|
|
20
|
+
val topPosition = parent.getChildAdapterPosition(topChild)
|
|
21
|
+
if (topPosition == RecyclerView.NO_POSITION) return
|
|
22
|
+
|
|
23
|
+
val headerPosition = findHeaderPositionBefore(topPosition)
|
|
24
|
+
if (headerPosition == RecyclerView.NO_POSITION) return
|
|
25
|
+
|
|
26
|
+
val headerView = getHeaderView(parent, headerPosition)
|
|
27
|
+
|
|
28
|
+
val nextHeaderPosition = findNextHeaderPosition(topPosition)
|
|
29
|
+
if (nextHeaderPosition != RecyclerView.NO_POSITION) {
|
|
30
|
+
val nextHeaderView = parent.findViewHolderForAdapterPosition(nextHeaderPosition)?.itemView
|
|
31
|
+
if (nextHeaderView != null && nextHeaderView.top < headerView.height) {
|
|
32
|
+
val offset = maxOf(0f, (nextHeaderView.top - headerView.height).toFloat())
|
|
33
|
+
c.save()
|
|
34
|
+
c.translate(0f, offset)
|
|
35
|
+
headerView.draw(c)
|
|
36
|
+
c.restore()
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
c.save()
|
|
42
|
+
c.translate(0f, 0f)
|
|
43
|
+
headerView.draw(c)
|
|
44
|
+
c.restore()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private fun getHeaderView(parent: RecyclerView, position: Int): View {
|
|
48
|
+
if (position == cachedHeaderPosition && cachedHeaderView != null && cachedParentWidth == parent.width) {
|
|
49
|
+
return cachedHeaderView!!
|
|
50
|
+
}
|
|
51
|
+
val holder = adapter.createViewHolder(parent, EmojiGridAdapter.VIEW_TYPE_HEADER)
|
|
52
|
+
adapter.bindViewHolder(holder, position)
|
|
53
|
+
val view = holder.itemView
|
|
54
|
+
view.layoutDirection = parent.layoutDirection
|
|
55
|
+
if (view is TextView) {
|
|
56
|
+
view.textAlignment = View.TEXT_ALIGNMENT_VIEW_START
|
|
57
|
+
view.textDirection = View.TEXT_DIRECTION_LOCALE
|
|
58
|
+
}
|
|
59
|
+
if (backgroundColor != 0) {
|
|
60
|
+
view.setBackgroundColor(backgroundColor)
|
|
61
|
+
}
|
|
62
|
+
fixLayoutSize(parent, view)
|
|
63
|
+
cachedHeaderPosition = position
|
|
64
|
+
cachedHeaderView = view
|
|
65
|
+
cachedParentWidth = parent.width
|
|
66
|
+
return view
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
fun invalidateCache() {
|
|
70
|
+
cachedHeaderPosition = RecyclerView.NO_POSITION
|
|
71
|
+
cachedHeaderView = null
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private fun findHeaderPositionBefore(pos: Int): Int {
|
|
75
|
+
for (i in pos downTo 0) {
|
|
76
|
+
if (adapter.getItemViewType(i) == EmojiGridAdapter.VIEW_TYPE_HEADER) return i
|
|
77
|
+
}
|
|
78
|
+
return RecyclerView.NO_POSITION
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
private fun findNextHeaderPosition(pos: Int): Int {
|
|
82
|
+
val count = adapter.itemCount
|
|
83
|
+
for (i in (pos + 1) until count) {
|
|
84
|
+
if (adapter.getItemViewType(i) == EmojiGridAdapter.VIEW_TYPE_HEADER) return i
|
|
85
|
+
}
|
|
86
|
+
return RecyclerView.NO_POSITION
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private fun fixLayoutSize(parent: ViewGroup, view: View) {
|
|
90
|
+
val widthSpec = View.MeasureSpec.makeMeasureSpec(parent.width, View.MeasureSpec.EXACTLY)
|
|
91
|
+
val heightSpec = View.MeasureSpec.makeMeasureSpec(parent.height, View.MeasureSpec.UNSPECIFIED)
|
|
92
|
+
view.measure(widthSpec, heightSpec)
|
|
93
|
+
view.layout(0, 0, view.measuredWidth, view.measuredHeight)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -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>
|
|
@@ -82,6 +82,12 @@ class EmojiCategoryStrip: UIView, UICollectionViewDataSource, UICollectionViewDe
|
|
|
82
82
|
collectionView.reloadData()
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
func applyLayoutDirection(_ attribute: UISemanticContentAttribute) {
|
|
86
|
+
semanticContentAttribute = attribute
|
|
87
|
+
collectionView.semanticContentAttribute = attribute
|
|
88
|
+
collectionView.collectionViewLayout.invalidateLayout()
|
|
89
|
+
}
|
|
90
|
+
|
|
85
91
|
func selectCategory(at index: Int) {
|
|
86
92
|
guard !isSearchActive, index != selectedIndex, index >= 0, index < categoryKeys.count else { return }
|
|
87
93
|
selectedIndex = index
|
package/ios/EmojiGridView.swift
CHANGED
|
@@ -28,6 +28,7 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
28
28
|
private var sections: [EmojiSection] = []
|
|
29
29
|
private var categoryNames: [String: String] = [:]
|
|
30
30
|
private var currentTheme: EmojiSheetTheme = .light
|
|
31
|
+
private var headerTextAlignment: NSTextAlignment = .left
|
|
31
32
|
private var collectionView: UICollectionView!
|
|
32
33
|
private var skinTonePicker: EmojiSkinTonePicker?
|
|
33
34
|
private var isScrollingProgrammatically = false
|
|
@@ -128,6 +129,16 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
128
129
|
collectionView.reloadData()
|
|
129
130
|
}
|
|
130
131
|
|
|
132
|
+
func applyLayoutDirection(_ attribute: UISemanticContentAttribute) {
|
|
133
|
+
semanticContentAttribute = attribute
|
|
134
|
+
collectionView.semanticContentAttribute = attribute
|
|
135
|
+
headerTextAlignment = UIView.userInterfaceLayoutDirection(for: attribute) == .rightToLeft
|
|
136
|
+
? .right
|
|
137
|
+
: .left
|
|
138
|
+
collectionView.collectionViewLayout.invalidateLayout()
|
|
139
|
+
collectionView.reloadData()
|
|
140
|
+
}
|
|
141
|
+
|
|
131
142
|
private func indicatorStyle(for theme: EmojiSheetTheme) -> UIScrollView.IndicatorStyle {
|
|
132
143
|
let backgroundBrightness = theme.backgroundColor.resolvedColor(with: traitCollection).perceivedBrightness
|
|
133
144
|
return backgroundBrightness < 0.5 ? .white : .black
|
|
@@ -227,7 +238,7 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
227
238
|
) as! SectionHeaderView
|
|
228
239
|
let title = sections[indexPath.section].title
|
|
229
240
|
let displayName = categoryNames[title] ?? title.replacingOccurrences(of: "_", with: " ").capitalized
|
|
230
|
-
header.configure(title: displayName, theme: currentTheme)
|
|
241
|
+
header.configure(title: displayName, theme: currentTheme, textAlignment: headerTextAlignment)
|
|
231
242
|
header.isAccessibilityElement = true
|
|
232
243
|
header.accessibilityLabel = displayName
|
|
233
244
|
return header
|
|
@@ -491,6 +502,7 @@ private class SectionHeaderView: UICollectionReusableView {
|
|
|
491
502
|
super.init(frame: frame)
|
|
492
503
|
titleLabel.translatesAutoresizingMaskIntoConstraints = false
|
|
493
504
|
titleLabel.font = .systemFont(ofSize: 14, weight: .bold)
|
|
505
|
+
titleLabel.textAlignment = .natural
|
|
494
506
|
addSubview(titleLabel)
|
|
495
507
|
NSLayoutConstraint.activate([
|
|
496
508
|
titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 4),
|
|
@@ -503,8 +515,9 @@ private class SectionHeaderView: UICollectionReusableView {
|
|
|
503
515
|
fatalError("init(coder:) has not been implemented")
|
|
504
516
|
}
|
|
505
517
|
|
|
506
|
-
func configure(title: String, theme: EmojiSheetTheme) {
|
|
518
|
+
func configure(title: String, theme: EmojiSheetTheme, textAlignment: NSTextAlignment) {
|
|
507
519
|
titleLabel.text = title
|
|
520
|
+
titleLabel.textAlignment = textAlignment
|
|
508
521
|
titleLabel.textColor = theme.textSecondaryColor
|
|
509
522
|
backgroundColor = theme.backgroundColor
|
|
510
523
|
}
|
package/ios/EmojiSearchBar.swift
CHANGED
|
@@ -41,6 +41,7 @@ class EmojiSearchBar: UIView, UITextFieldDelegate {
|
|
|
41
41
|
textField.placeholder = "Search emoji"
|
|
42
42
|
textField.borderStyle = .none
|
|
43
43
|
textField.font = .systemFont(ofSize: 16)
|
|
44
|
+
textField.textAlignment = .natural
|
|
44
45
|
textField.returnKeyType = .search
|
|
45
46
|
textField.autocorrectionType = .no
|
|
46
47
|
textField.autocapitalizationType = .none
|
|
@@ -96,6 +97,17 @@ class EmojiSearchBar: UIView, UITextFieldDelegate {
|
|
|
96
97
|
textField.tintColor = theme.selectionColor
|
|
97
98
|
}
|
|
98
99
|
|
|
100
|
+
func applyLayoutDirection(_ attribute: UISemanticContentAttribute) {
|
|
101
|
+
semanticContentAttribute = attribute
|
|
102
|
+
containerView.semanticContentAttribute = attribute
|
|
103
|
+
iconView.semanticContentAttribute = attribute
|
|
104
|
+
textField.semanticContentAttribute = attribute
|
|
105
|
+
clearButton.semanticContentAttribute = attribute
|
|
106
|
+
textField.textAlignment = UIView.userInterfaceLayoutDirection(for: attribute) == .rightToLeft
|
|
107
|
+
? .right
|
|
108
|
+
: .left
|
|
109
|
+
}
|
|
110
|
+
|
|
99
111
|
@objc private func textFieldDidChange() {
|
|
100
112
|
updateClearButtonVisibility()
|
|
101
113
|
debounceTimer?.invalidate()
|
|
@@ -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) {
|
|
@@ -49,6 +50,10 @@ class EmojiSheetContentView: ExpoView, EmojiSheetUIViewDelegate {
|
|
|
49
50
|
pickerView.categoryBarPosition = position
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
func updateLayoutDirection(_ direction: String) {
|
|
54
|
+
pickerView.layoutDirection = direction
|
|
55
|
+
}
|
|
56
|
+
|
|
52
57
|
func updateColumns(_ columns: Int) {
|
|
53
58
|
pickerView.columns = columns
|
|
54
59
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Pod::Spec.new do |s|
|
|
2
2
|
s.name = 'EmojiSheetModule'
|
|
3
|
-
s.version = '1.
|
|
3
|
+
s.version = '1.8.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 = ''
|
|
@@ -48,6 +48,9 @@ public class EmojiSheetModule: Module {
|
|
|
48
48
|
Prop("categoryBarPosition") { (view, position: String?) in
|
|
49
49
|
view.updateCategoryBarPosition(position ?? "top")
|
|
50
50
|
}
|
|
51
|
+
Prop("layoutDirection") { (view, direction: String?) in
|
|
52
|
+
view.updateLayoutDirection(direction ?? "auto")
|
|
53
|
+
}
|
|
51
54
|
Prop("columns") { (view, columns: Int?) in
|
|
52
55
|
view.updateColumns(columns ?? 7)
|
|
53
56
|
}
|
|
@@ -84,7 +87,7 @@ public class EmojiSheetModule: Module {
|
|
|
84
87
|
Prop("excludeEmojis") { (view, ids: [String]?) in
|
|
85
88
|
view.updateExcludeEmojis(ids ?? [])
|
|
86
89
|
}
|
|
87
|
-
Events("onEmojiSelected")
|
|
90
|
+
Events("onEmojiSelected", "onDismiss")
|
|
88
91
|
}
|
|
89
92
|
}
|
|
90
93
|
|
|
@@ -123,6 +126,7 @@ public class EmojiSheetModule: Module {
|
|
|
123
126
|
let gestureEnabled = (options["gestureEnabled"] as? Bool) ?? true
|
|
124
127
|
let backdropOpacity = options["backdropOpacity"] as? Double ?? (isDark ? 0.4 : 0.22)
|
|
125
128
|
let categoryBarPosition = (options["categoryBarPosition"] as? String) ?? "top"
|
|
129
|
+
let layoutDirection = (options["layoutDirection"] as? String) ?? "auto"
|
|
126
130
|
let categoryNames = options["categoryNames"] as? [String: String]
|
|
127
131
|
let excludeEmojis = Set((options["excludeEmojis"] as? [String]) ?? [])
|
|
128
132
|
|
|
@@ -187,6 +191,7 @@ public class EmojiSheetModule: Module {
|
|
|
187
191
|
pickerView.enableAnimations = enableAnimations
|
|
188
192
|
pickerView.recentLimit = recentLimit
|
|
189
193
|
pickerView.categoryBarPosition = categoryBarPosition
|
|
194
|
+
pickerView.layoutDirection = layoutDirection
|
|
190
195
|
pickerView.categoryNames = categoryNames
|
|
191
196
|
pickerView.excludeEmojis = excludeEmojis
|
|
192
197
|
pickerView.applyCustomTheme(customTheme)
|
|
@@ -68,6 +68,9 @@ class EmojiSheetUIView: UIView,
|
|
|
68
68
|
var categoryBarPosition: String = "top" {
|
|
69
69
|
didSet { if categoryBarPosition != oldValue { configureLayout() } }
|
|
70
70
|
}
|
|
71
|
+
var layoutDirection: String = "auto" {
|
|
72
|
+
didSet { applyLayoutDirection() }
|
|
73
|
+
}
|
|
71
74
|
var categoryNames: [String: String]?
|
|
72
75
|
var excludeEmojis: Set<String> = []
|
|
73
76
|
|
|
@@ -150,6 +153,24 @@ class EmojiSheetUIView: UIView,
|
|
|
150
153
|
gridView.delegate = self
|
|
151
154
|
|
|
152
155
|
configureLayout()
|
|
156
|
+
applyLayoutDirection()
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private func applyLayoutDirection() {
|
|
160
|
+
let attribute: UISemanticContentAttribute
|
|
161
|
+
switch layoutDirection {
|
|
162
|
+
case "rtl":
|
|
163
|
+
attribute = .forceRightToLeft
|
|
164
|
+
case "ltr":
|
|
165
|
+
attribute = .forceLeftToRight
|
|
166
|
+
default:
|
|
167
|
+
attribute = .unspecified
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
semanticContentAttribute = attribute
|
|
171
|
+
searchBar.applyLayoutDirection(attribute)
|
|
172
|
+
categoryStrip.applyLayoutDirection(attribute)
|
|
173
|
+
gridView.applyLayoutDirection(attribute)
|
|
153
174
|
}
|
|
154
175
|
|
|
155
176
|
private func configureLayout() {
|
|
@@ -40,6 +40,7 @@ function flattenOptions(options) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// Layout & behavior
|
|
43
|
+
if (options.layoutDirection) flat.layoutDirection = options.layoutDirection;
|
|
43
44
|
if (options.snapPoints) flat.snapPoints = options.snapPoints;
|
|
44
45
|
if (options.categoryBarPosition) flat.categoryBarPosition = options.categoryBarPosition;
|
|
45
46
|
if (options.columns != null) flat.columns = options.columns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_expo","require","flattenOptions","options","flat","theme","backgroundColor","searchBarBackgroundColor","textColor","textSecondaryColor","accentColor","dividerColor","searchTextColor","placeholderTextColor","selectionColor","categoryIconColor","categoryActiveIconColor","categoryActiveBackgroundColor","handleColor","categoryBarBackgroundColor","translations","searchPlaceholder","noResultsText","categoryNames","snapPoints","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","requireNativeModule","_default","exports","default","present","dismiss","clearRecents","clearSkinTonePreferences"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAKA,SAASC,cAAcA,CAACC,OAAiC,EAAiB;EACxE,MAAMC,IAAmB,GAAG,CAAC,CAAC;;EAE9B;EACA,IAAID,OAAO,CAACE,KAAK,EAAE;IACjB,IAAI,OAAOF,OAAO,CAACE,KAAK,KAAK,QAAQ,EAAE;MACrCD,IAAI,CAACC,KAAK,GAAGF,OAAO,CAACE,KAAK;IAC5B,CAAC,MAAM;MACL,MAAMA,KAAK,GAAGF,OAAO,CAACE,KAAwB;MAC9CD,IAAI,CAACC,KAAK,GAAG,QAAQ;MACrBD,IAAI,CAACE,eAAe,GAAGD,KAAK,CAACC,eAAe;MAC5CF,IAAI,CAACG,wBAAwB,GAAGF,KAAK,CAACE,wBAAwB;MAC9DH,IAAI,CAACI,SAAS,GAAGH,KAAK,CAACG,SAAS;MAChCJ,IAAI,CAACK,kBAAkB,GAAGJ,KAAK,CAACI,kBAAkB;MAClDL,IAAI,CAACM,WAAW,GAAGL,KAAK,CAACK,WAAW;MACpCN,IAAI,CAACO,YAAY,GAAGN,KAAK,CAACM,YAAY;MACtC,IAAIN,KAAK,CAACO,eAAe,EAAER,IAAI,CAACQ,eAAe,GAAGP,KAAK,CAACO,eAAe;MACvE,IAAIP,KAAK,CAACQ,oBAAoB,EAAET,IAAI,CAACS,oBAAoB,GAAGR,KAAK,CAACQ,oBAAoB;MACtF,IAAIR,KAAK,CAACS,cAAc,EAAEV,IAAI,CAACU,cAAc,GAAGT,KAAK,CAACS,cAAc;MACpE,IAAIT,KAAK,CAACU,iBAAiB,EAAEX,IAAI,CAACW,iBAAiB,GAAGV,KAAK,CAACU,iBAAiB;MAC7E,IAAIV,KAAK,CAACW,uBAAuB,EAAEZ,IAAI,CAACY,uBAAuB,GAAGX,KAAK,CAACW,uBAAuB;MAC/F,IAAIX,KAAK,CAACY,6BAA6B,EAAEb,IAAI,CAACa,6BAA6B,GAAGZ,KAAK,CAACY,6BAA6B;MACjH,IAAIZ,KAAK,CAACa,WAAW,EAAEd,IAAI,CAACc,WAAW,GAAGb,KAAK,CAACa,WAAW;MAC3D,IAAIb,KAAK,CAACc,0BAA0B,EAAEf,IAAI,CAACe,0BAA0B,GAAGd,KAAK,CAACc,0BAA0B;IAC1G;EACF;;EAEA;EACA,IAAIhB,OAAO,CAACiB,YAAY,EAAE;IACxB,IAAIjB,OAAO,CAACiB,YAAY,CAACC,iBAAiB,EAAEjB,IAAI,CAACiB,iBAAiB,GAAGlB,OAAO,CAACiB,YAAY,CAACC,iBAAiB;IAC3G,IAAIlB,OAAO,CAACiB,YAAY,CAACE,aAAa,EAAElB,IAAI,CAACkB,aAAa,GAAGnB,OAAO,CAACiB,YAAY,CAACE,aAAa;IAC/F,IAAInB,OAAO,CAACiB,YAAY,CAACG,aAAa,EAAEnB,IAAI,CAACmB,aAAa,GAAGpB,OAAO,CAACiB,YAAY,CAACG,aAAa;EACjG;;EAEA;EACA,IAAIpB,OAAO,CAACqB,
|
|
1
|
+
{"version":3,"names":["_expo","require","flattenOptions","options","flat","theme","backgroundColor","searchBarBackgroundColor","textColor","textSecondaryColor","accentColor","dividerColor","searchTextColor","placeholderTextColor","selectionColor","categoryIconColor","categoryActiveIconColor","categoryActiveBackgroundColor","handleColor","categoryBarBackgroundColor","translations","searchPlaceholder","noResultsText","categoryNames","layoutDirection","snapPoints","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","requireNativeModule","_default","exports","default","present","dismiss","clearRecents","clearSkinTonePreferences"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,8 +9,10 @@ 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,
|
|
15
|
+
layoutDirection,
|
|
14
16
|
categoryBarPosition,
|
|
15
17
|
columns,
|
|
16
18
|
emojiSize,
|
|
@@ -32,6 +34,7 @@ function EmojiSheetView({
|
|
|
32
34
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeView, {
|
|
33
35
|
...rest,
|
|
34
36
|
theme: resolvedTheme,
|
|
37
|
+
layoutDirection: layoutDirection,
|
|
35
38
|
categoryBarPosition: categoryBarPosition,
|
|
36
39
|
columns: columns,
|
|
37
40
|
emojiSize: emojiSize,
|
|
@@ -49,7 +52,8 @@ function EmojiSheetView({
|
|
|
49
52
|
nativeEvent
|
|
50
53
|
}) => {
|
|
51
54
|
onEmojiSelected(nativeEvent.emoji);
|
|
52
|
-
}
|
|
55
|
+
},
|
|
56
|
+
onDismiss: onDismiss ? () => onDismiss() : undefined
|
|
53
57
|
});
|
|
54
58
|
}
|
|
55
59
|
//# 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,
|
|
1
|
+
{"version":3,"names":["_expo","require","_jsxRuntime","NativeView","requireNativeView","EmojiSheetView","onEmojiSelected","onDismiss","theme","translations","layoutDirection","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,eAAe;EACfC,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,OAAOd,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACE,IAAAN,WAAA,CAAAqB,GAAA,EAACpB,UAAU;IAAA,GACLkB,IAAI;IACRb,KAAK,EAAEc,aAAc;IACrBZ,eAAe,EAAEA,eAAgB;IACjCC,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,EAAEf,YAAY,EAAEe,iBAAkB;IACnDC,aAAa,EAAEhB,YAAY,EAAEgB,aAAc;IAC3CC,aAAa,EAAEjB,YAAY,EAAEiB,aAAc;IAC3CpB,eAAe,EAAEA,CAAC;MAAEqB;IAAY,CAAC,KAAK;MACpCrB,eAAe,CAACqB,WAAW,CAACC,KAAK,CAAC;IACpC,CAAE;IACFrB,SAAS,EAAEA,SAAS,GAAG,MAAMA,SAAS,CAAC,CAAC,GAAGsB;EAAU,CACtD,CAAC;AAEN","ignoreList":[]}
|
|
@@ -36,6 +36,7 @@ function flattenOptions(options) {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// Layout & behavior
|
|
39
|
+
if (options.layoutDirection) flat.layoutDirection = options.layoutDirection;
|
|
39
40
|
if (options.snapPoints) flat.snapPoints = options.snapPoints;
|
|
40
41
|
if (options.categoryBarPosition) flat.categoryBarPosition = options.categoryBarPosition;
|
|
41
42
|
if (options.columns != null) flat.columns = options.columns;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModule","requireNativeModule","flattenOptions","options","flat","theme","backgroundColor","searchBarBackgroundColor","textColor","textSecondaryColor","accentColor","dividerColor","searchTextColor","placeholderTextColor","selectionColor","categoryIconColor","categoryActiveIconColor","categoryActiveBackgroundColor","handleColor","categoryBarBackgroundColor","translations","searchPlaceholder","noResultsText","categoryNames","snapPoints","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","present","dismiss","clearRecents","clearSkinTonePreferences"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":";;AAAA,SAASA,YAAY,EAAEC,mBAAmB,QAAQ,MAAM;AAKxD,SAASC,cAAcA,CAACC,OAAiC,EAAiB;EACxE,MAAMC,IAAmB,GAAG,CAAC,CAAC;;EAE9B;EACA,IAAID,OAAO,CAACE,KAAK,EAAE;IACjB,IAAI,OAAOF,OAAO,CAACE,KAAK,KAAK,QAAQ,EAAE;MACrCD,IAAI,CAACC,KAAK,GAAGF,OAAO,CAACE,KAAK;IAC5B,CAAC,MAAM;MACL,MAAMA,KAAK,GAAGF,OAAO,CAACE,KAAwB;MAC9CD,IAAI,CAACC,KAAK,GAAG,QAAQ;MACrBD,IAAI,CAACE,eAAe,GAAGD,KAAK,CAACC,eAAe;MAC5CF,IAAI,CAACG,wBAAwB,GAAGF,KAAK,CAACE,wBAAwB;MAC9DH,IAAI,CAACI,SAAS,GAAGH,KAAK,CAACG,SAAS;MAChCJ,IAAI,CAACK,kBAAkB,GAAGJ,KAAK,CAACI,kBAAkB;MAClDL,IAAI,CAACM,WAAW,GAAGL,KAAK,CAACK,WAAW;MACpCN,IAAI,CAACO,YAAY,GAAGN,KAAK,CAACM,YAAY;MACtC,IAAIN,KAAK,CAACO,eAAe,EAAER,IAAI,CAACQ,eAAe,GAAGP,KAAK,CAACO,eAAe;MACvE,IAAIP,KAAK,CAACQ,oBAAoB,EAAET,IAAI,CAACS,oBAAoB,GAAGR,KAAK,CAACQ,oBAAoB;MACtF,IAAIR,KAAK,CAACS,cAAc,EAAEV,IAAI,CAACU,cAAc,GAAGT,KAAK,CAACS,cAAc;MACpE,IAAIT,KAAK,CAACU,iBAAiB,EAAEX,IAAI,CAACW,iBAAiB,GAAGV,KAAK,CAACU,iBAAiB;MAC7E,IAAIV,KAAK,CAACW,uBAAuB,EAAEZ,IAAI,CAACY,uBAAuB,GAAGX,KAAK,CAACW,uBAAuB;MAC/F,IAAIX,KAAK,CAACY,6BAA6B,EAAEb,IAAI,CAACa,6BAA6B,GAAGZ,KAAK,CAACY,6BAA6B;MACjH,IAAIZ,KAAK,CAACa,WAAW,EAAEd,IAAI,CAACc,WAAW,GAAGb,KAAK,CAACa,WAAW;MAC3D,IAAIb,KAAK,CAACc,0BAA0B,EAAEf,IAAI,CAACe,0BAA0B,GAAGd,KAAK,CAACc,0BAA0B;IAC1G;EACF;;EAEA;EACA,IAAIhB,OAAO,CAACiB,YAAY,EAAE;IACxB,IAAIjB,OAAO,CAACiB,YAAY,CAACC,iBAAiB,EAAEjB,IAAI,CAACiB,iBAAiB,GAAGlB,OAAO,CAACiB,YAAY,CAACC,iBAAiB;IAC3G,IAAIlB,OAAO,CAACiB,YAAY,CAACE,aAAa,EAAElB,IAAI,CAACkB,aAAa,GAAGnB,OAAO,CAACiB,YAAY,CAACE,aAAa;IAC/F,IAAInB,OAAO,CAACiB,YAAY,CAACG,aAAa,EAAEnB,IAAI,CAACmB,aAAa,GAAGpB,OAAO,CAACiB,YAAY,CAACG,aAAa;EACjG;;EAEA;EACA,IAAIpB,OAAO,CAACqB,
|
|
1
|
+
{"version":3,"names":["NativeModule","requireNativeModule","flattenOptions","options","flat","theme","backgroundColor","searchBarBackgroundColor","textColor","textSecondaryColor","accentColor","dividerColor","searchTextColor","placeholderTextColor","selectionColor","categoryIconColor","categoryActiveIconColor","categoryActiveBackgroundColor","handleColor","categoryBarBackgroundColor","translations","searchPlaceholder","noResultsText","categoryNames","layoutDirection","snapPoints","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","enableAnimations","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","present","dismiss","clearRecents","clearSkinTonePreferences"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,8 +5,10 @@ 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,
|
|
11
|
+
layoutDirection,
|
|
10
12
|
categoryBarPosition,
|
|
11
13
|
columns,
|
|
12
14
|
emojiSize,
|
|
@@ -28,6 +30,7 @@ export default function EmojiSheetView({
|
|
|
28
30
|
return /*#__PURE__*/_jsx(NativeView, {
|
|
29
31
|
...rest,
|
|
30
32
|
theme: resolvedTheme,
|
|
33
|
+
layoutDirection: layoutDirection,
|
|
31
34
|
categoryBarPosition: categoryBarPosition,
|
|
32
35
|
columns: columns,
|
|
33
36
|
emojiSize: emojiSize,
|
|
@@ -45,7 +48,8 @@ export default function EmojiSheetView({
|
|
|
45
48
|
nativeEvent
|
|
46
49
|
}) => {
|
|
47
50
|
onEmojiSelected(nativeEvent.emoji);
|
|
48
|
-
}
|
|
51
|
+
},
|
|
52
|
+
onDismiss: onDismiss ? () => onDismiss() : undefined
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
55
|
//# 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,
|
|
1
|
+
{"version":3,"names":["requireNativeView","jsx","_jsx","NativeView","EmojiSheetView","onEmojiSelected","onDismiss","theme","translations","layoutDirection","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,eAAe;EACfC,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,OAAOd,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACEL,IAAA,CAACC,UAAU;IAAA,GACLiB,IAAI;IACRb,KAAK,EAAEc,aAAc;IACrBZ,eAAe,EAAEA,eAAgB;IACjCC,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,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":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiSheetModule.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAmB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"EmojiSheetModule.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetModule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAmB,MAAM,0BAA0B,CAAC;AAkE5G,YAAY,EAAE,gBAAgB,EAAE,CAAC;;sBAGd,wBAAwB,GAAQ,OAAO,CAAC,gBAAgB,CAAC;eAG/D,OAAO,CAAC,IAAI,CAAC;oBAGR,OAAO,CAAC,IAAI,CAAC;gCAGD,OAAO,CAAC,IAAI,CAAC;;AAV3C,wBAaE"}
|
|
@@ -24,6 +24,7 @@ export type EmojiSheetTranslations = {
|
|
|
24
24
|
export type EmojiSheetPresentOptions = {
|
|
25
25
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
26
26
|
translations?: EmojiSheetTranslations;
|
|
27
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
27
28
|
snapPoints?: [number, number];
|
|
28
29
|
categoryBarPosition?: 'top' | 'bottom';
|
|
29
30
|
columns?: number;
|
|
@@ -52,8 +53,10 @@ export type EmojiSelectionListener = (event: {
|
|
|
52
53
|
}) => void;
|
|
53
54
|
export type EmojiSheetViewProps = ViewProps & {
|
|
54
55
|
onEmojiSelected: (emoji: string) => void;
|
|
56
|
+
onDismiss?: () => void;
|
|
55
57
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
56
58
|
translations?: EmojiSheetTranslations;
|
|
59
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
57
60
|
categoryBarPosition?: 'top' | 'bottom';
|
|
58
61
|
columns?: number;
|
|
59
62
|
emojiSize?: number;
|
|
@@ -67,7 +70,11 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
67
70
|
};
|
|
68
71
|
export type EmojiSheetNativeViewProps = ViewProps & {
|
|
69
72
|
onEmojiSelected: EmojiSelectionListener;
|
|
73
|
+
onDismiss?: (event: {
|
|
74
|
+
nativeEvent: {};
|
|
75
|
+
}) => void;
|
|
70
76
|
theme?: string;
|
|
77
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
71
78
|
categoryBarPosition?: string;
|
|
72
79
|
columns?: number;
|
|
73
80
|
emojiSize?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmojiSheetModule.types.d.ts","sourceRoot":"","sources":["../../src/EmojiSheetModule.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,aAAa,GACb,gBAAgB,GAChB,YAAY,GACZ,eAAe,GACf,YAAY,GACZ,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GACpC;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAEvC,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,KAAK,IAAI,CAAC;AAEzF,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,mBAAmB,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG;IAClD,eAAe,EAAE,sBAAsB,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC"}
|
|
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, layoutDirection, 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,eAAe,EACf,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,2CA+BrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-native-sheet-emojis",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.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",
|
package/src/EmojiSheetModule.ts
CHANGED
|
@@ -38,6 +38,7 @@ function flattenOptions(options: EmojiSheetPresentOptions): NativeOptions {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
// Layout & behavior
|
|
41
|
+
if (options.layoutDirection) flat.layoutDirection = options.layoutDirection;
|
|
41
42
|
if (options.snapPoints) flat.snapPoints = options.snapPoints;
|
|
42
43
|
if (options.categoryBarPosition) flat.categoryBarPosition = options.categoryBarPosition;
|
|
43
44
|
if (options.columns != null) flat.columns = options.columns;
|
|
@@ -38,6 +38,7 @@ export type EmojiSheetTranslations = {
|
|
|
38
38
|
export type EmojiSheetPresentOptions = {
|
|
39
39
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
40
40
|
translations?: EmojiSheetTranslations;
|
|
41
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
41
42
|
snapPoints?: [number, number];
|
|
42
43
|
categoryBarPosition?: 'top' | 'bottom';
|
|
43
44
|
columns?: number;
|
|
@@ -61,8 +62,10 @@ export type EmojiSelectionListener = (event: { nativeEvent: { emoji: string } })
|
|
|
61
62
|
|
|
62
63
|
export type EmojiSheetViewProps = ViewProps & {
|
|
63
64
|
onEmojiSelected: (emoji: string) => void;
|
|
65
|
+
onDismiss?: () => void;
|
|
64
66
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
65
67
|
translations?: EmojiSheetTranslations;
|
|
68
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
66
69
|
categoryBarPosition?: 'top' | 'bottom';
|
|
67
70
|
columns?: number;
|
|
68
71
|
emojiSize?: number;
|
|
@@ -77,7 +80,9 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
77
80
|
|
|
78
81
|
export type EmojiSheetNativeViewProps = ViewProps & {
|
|
79
82
|
onEmojiSelected: EmojiSelectionListener;
|
|
83
|
+
onDismiss?: (event: { nativeEvent: {} }) => void;
|
|
80
84
|
theme?: string;
|
|
85
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
81
86
|
categoryBarPosition?: string;
|
|
82
87
|
columns?: number;
|
|
83
88
|
emojiSize?: number;
|
package/src/EmojiSheetView.tsx
CHANGED
|
@@ -10,8 +10,10 @@ const NativeView: React.ComponentType<EmojiSheetNativeViewProps> =
|
|
|
10
10
|
|
|
11
11
|
export default function EmojiSheetView({
|
|
12
12
|
onEmojiSelected,
|
|
13
|
+
onDismiss,
|
|
13
14
|
theme,
|
|
14
15
|
translations,
|
|
16
|
+
layoutDirection,
|
|
15
17
|
categoryBarPosition,
|
|
16
18
|
columns,
|
|
17
19
|
emojiSize,
|
|
@@ -34,6 +36,7 @@ export default function EmojiSheetView({
|
|
|
34
36
|
<NativeView
|
|
35
37
|
{...rest}
|
|
36
38
|
theme={resolvedTheme}
|
|
39
|
+
layoutDirection={layoutDirection}
|
|
37
40
|
categoryBarPosition={categoryBarPosition}
|
|
38
41
|
columns={columns}
|
|
39
42
|
emojiSize={emojiSize}
|
|
@@ -50,6 +53,7 @@ export default function EmojiSheetView({
|
|
|
50
53
|
onEmojiSelected={({ nativeEvent }) => {
|
|
51
54
|
onEmojiSelected(nativeEvent.emoji);
|
|
52
55
|
}}
|
|
56
|
+
onDismiss={onDismiss ? () => onDismiss() : undefined}
|
|
53
57
|
/>
|
|
54
58
|
);
|
|
55
59
|
}
|