expo-native-sheet-emojis 1.7.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/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 +2 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetContentView.kt +4 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetModule.kt +18 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetUIView.kt +67 -0
- package/android/src/main/java/expo/community/modules/emojisheet/StickyHeaderDecoration.kt +6 -0
- package/ios/EmojiCategoryStrip.swift +6 -0
- package/ios/EmojiGridView.swift +15 -2
- package/ios/EmojiSearchBar.swift +12 -0
- package/ios/EmojiSheetContentView.swift +4 -0
- package/ios/EmojiSheetModule.podspec +1 -1
- package/ios/EmojiSheetModule.swift +5 -0
- 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 +2 -0
- 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 +2 -0
- package/lib/module/EmojiSheetView.js.map +1 -1
- package/lib/typescript/EmojiSheetModule.d.ts.map +1 -1
- package/lib/typescript/EmojiSheetModule.types.d.ts +3 -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 +3 -0
- package/src/EmojiSheetView.tsx +2 -0
|
@@ -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(
|
|
@@ -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)
|
|
@@ -38,6 +38,10 @@ class EmojiSheetContentView(
|
|
|
38
38
|
pickerView.applyConfiguration()
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
fun updateLayoutDirection(direction: String) {
|
|
42
|
+
pickerView.layoutDirectionProp = direction
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
fun updateColumns(columns: Int) {
|
|
42
46
|
pickerView.columns = columns
|
|
43
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
|
}
|
|
@@ -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()
|
|
@@ -109,6 +114,8 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
109
114
|
private var initialTouchY = 0f
|
|
110
115
|
private var lastTopPullDragDistance = 0f
|
|
111
116
|
private var isHandlingTopPullDrag = false
|
|
117
|
+
private var isSheetExpanded = false
|
|
118
|
+
private var isSheetExpansionInProgress = false
|
|
112
119
|
private val touchSlop = ViewConfiguration.get(context).scaledTouchSlop.toFloat()
|
|
113
120
|
private var velocityTracker: VelocityTracker? = null
|
|
114
121
|
private var topPullStartY: Float? = null
|
|
@@ -176,6 +183,10 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
176
183
|
lastTopPullDragDistance = 0f
|
|
177
184
|
isHandlingTopPullDrag = false
|
|
178
185
|
topPullStartY = null
|
|
186
|
+
if (isSheetExpansionInProgress) {
|
|
187
|
+
rv.stopScroll()
|
|
188
|
+
return true
|
|
189
|
+
}
|
|
179
190
|
}
|
|
180
191
|
android.view.MotionEvent.ACTION_UP,
|
|
181
192
|
android.view.MotionEvent.ACTION_CANCEL -> {
|
|
@@ -190,12 +201,28 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
190
201
|
topPullStartY = null
|
|
191
202
|
velocityTracker?.recycle()
|
|
192
203
|
velocityTracker = null
|
|
204
|
+
if (isSheetExpansionInProgress) {
|
|
205
|
+
rv.stopScroll()
|
|
206
|
+
return true
|
|
207
|
+
}
|
|
193
208
|
}
|
|
194
209
|
}
|
|
195
210
|
|
|
196
211
|
if (e.actionMasked == android.view.MotionEvent.ACTION_MOVE) {
|
|
212
|
+
if (isSheetExpansionInProgress) {
|
|
213
|
+
rv.stopScroll()
|
|
214
|
+
return true
|
|
215
|
+
}
|
|
216
|
+
|
|
197
217
|
val deltaY = e.y - initialTouchY
|
|
198
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
|
+
}
|
|
199
226
|
if (isHandlingTopPullDrag) {
|
|
200
227
|
rv.parent?.requestDisallowInterceptTouchEvent(true)
|
|
201
228
|
rv.stopScroll()
|
|
@@ -235,6 +262,11 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
235
262
|
}
|
|
236
263
|
|
|
237
264
|
override fun onScrolled(rv: RecyclerView, dx: Int, dy: Int) {
|
|
265
|
+
if (!isSheetExpanded) {
|
|
266
|
+
rv.stopScroll()
|
|
267
|
+
return
|
|
268
|
+
}
|
|
269
|
+
|
|
238
270
|
if (dy > 0 && rv.scrollState != RecyclerView.SCROLL_STATE_IDLE && !didTriggerExpandForCurrentDrag) {
|
|
239
271
|
didTriggerExpandForCurrentDrag = true
|
|
240
272
|
onScrollIntentUp?.invoke()
|
|
@@ -277,6 +309,21 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
277
309
|
addView(contentFrame)
|
|
278
310
|
|
|
279
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
|
+
}
|
|
280
327
|
}
|
|
281
328
|
|
|
282
329
|
/** Call after setting configurable properties but before loadDataAsync to apply layout changes. */
|
|
@@ -415,9 +462,27 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
415
462
|
gridAdapter.updateTheme(theme)
|
|
416
463
|
recyclerView.setBackgroundColor(theme.backgroundColor)
|
|
417
464
|
stickyHeaderDecoration.backgroundColor = theme.backgroundColor
|
|
465
|
+
stickyHeaderDecoration.invalidateCache()
|
|
418
466
|
emptyStateLabel.setTextColor(theme.textSecondaryColor)
|
|
419
467
|
}
|
|
420
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
|
+
|
|
421
486
|
private fun buildCategoryKeys(): List<String> {
|
|
422
487
|
val keys = mutableListOf<String>()
|
|
423
488
|
if (showRecents && getFrequentlyUsed().isNotEmpty()) {
|
|
@@ -477,6 +542,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
477
542
|
}
|
|
478
543
|
|
|
479
544
|
gridAdapter.setItems(items, sectionPositions)
|
|
545
|
+
stickyHeaderDecoration.invalidateCache()
|
|
480
546
|
|
|
481
547
|
// Rebuild category keys in case frequently_used changed
|
|
482
548
|
val newKeys = buildCategoryKeys()
|
|
@@ -504,6 +570,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
504
570
|
addView(categoryStrip, index)
|
|
505
571
|
}
|
|
506
572
|
categoryStrip.applyTheme(currentTheme)
|
|
573
|
+
applyLayoutDirection()
|
|
507
574
|
}
|
|
508
575
|
|
|
509
576
|
private fun resolveSkinTone(baseEmoji: String, emojiId: String, toneEnabled: Boolean): String {
|
|
@@ -3,6 +3,7 @@ package expo.community.modules.emojisheet
|
|
|
3
3
|
import android.graphics.Canvas
|
|
4
4
|
import android.view.View
|
|
5
5
|
import android.view.ViewGroup
|
|
6
|
+
import android.widget.TextView
|
|
6
7
|
import androidx.recyclerview.widget.RecyclerView
|
|
7
8
|
|
|
8
9
|
class StickyHeaderDecoration(
|
|
@@ -50,6 +51,11 @@ class StickyHeaderDecoration(
|
|
|
50
51
|
val holder = adapter.createViewHolder(parent, EmojiGridAdapter.VIEW_TYPE_HEADER)
|
|
51
52
|
adapter.bindViewHolder(holder, position)
|
|
52
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
|
+
}
|
|
53
59
|
if (backgroundColor != 0) {
|
|
54
60
|
view.setBackgroundColor(backgroundColor)
|
|
55
61
|
}
|
|
@@ -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()
|
|
@@ -50,6 +50,10 @@ class EmojiSheetContentView: ExpoView, EmojiSheetUIViewDelegate {
|
|
|
50
50
|
pickerView.categoryBarPosition = position
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
func updateLayoutDirection(_ direction: String) {
|
|
54
|
+
pickerView.layoutDirection = direction
|
|
55
|
+
}
|
|
56
|
+
|
|
53
57
|
func updateColumns(_ columns: Int) {
|
|
54
58
|
pickerView.columns = columns
|
|
55
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
|
}
|
|
@@ -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":[]}
|
|
@@ -12,6 +12,7 @@ function EmojiSheetView({
|
|
|
12
12
|
onDismiss,
|
|
13
13
|
theme,
|
|
14
14
|
translations,
|
|
15
|
+
layoutDirection,
|
|
15
16
|
categoryBarPosition,
|
|
16
17
|
columns,
|
|
17
18
|
emojiSize,
|
|
@@ -33,6 +34,7 @@ function EmojiSheetView({
|
|
|
33
34
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeView, {
|
|
34
35
|
...rest,
|
|
35
36
|
theme: resolvedTheme,
|
|
37
|
+
layoutDirection: layoutDirection,
|
|
36
38
|
categoryBarPosition: categoryBarPosition,
|
|
37
39
|
columns: columns,
|
|
38
40
|
emojiSize: emojiSize,
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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":[]}
|
|
@@ -8,6 +8,7 @@ export default function EmojiSheetView({
|
|
|
8
8
|
onDismiss,
|
|
9
9
|
theme,
|
|
10
10
|
translations,
|
|
11
|
+
layoutDirection,
|
|
11
12
|
categoryBarPosition,
|
|
12
13
|
columns,
|
|
13
14
|
emojiSize,
|
|
@@ -29,6 +30,7 @@ export default function EmojiSheetView({
|
|
|
29
30
|
return /*#__PURE__*/_jsx(NativeView, {
|
|
30
31
|
...rest,
|
|
31
32
|
theme: resolvedTheme,
|
|
33
|
+
layoutDirection: layoutDirection,
|
|
32
34
|
categoryBarPosition: categoryBarPosition,
|
|
33
35
|
columns: columns,
|
|
34
36
|
emojiSize: emojiSize,
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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;
|
|
@@ -55,6 +56,7 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
55
56
|
onDismiss?: () => void;
|
|
56
57
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
57
58
|
translations?: EmojiSheetTranslations;
|
|
59
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
58
60
|
categoryBarPosition?: 'top' | 'bottom';
|
|
59
61
|
columns?: number;
|
|
60
62
|
emojiSize?: number;
|
|
@@ -72,6 +74,7 @@ export type EmojiSheetNativeViewProps = ViewProps & {
|
|
|
72
74
|
nativeEvent: {};
|
|
73
75
|
}) => void;
|
|
74
76
|
theme?: string;
|
|
77
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
75
78
|
categoryBarPosition?: string;
|
|
76
79
|
columns?: number;
|
|
77
80
|
emojiSize?: 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, onDismiss, 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,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,
|
|
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;
|
|
@@ -64,6 +65,7 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
64
65
|
onDismiss?: () => void;
|
|
65
66
|
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
66
67
|
translations?: EmojiSheetTranslations;
|
|
68
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
67
69
|
categoryBarPosition?: 'top' | 'bottom';
|
|
68
70
|
columns?: number;
|
|
69
71
|
emojiSize?: number;
|
|
@@ -80,6 +82,7 @@ export type EmojiSheetNativeViewProps = ViewProps & {
|
|
|
80
82
|
onEmojiSelected: EmojiSelectionListener;
|
|
81
83
|
onDismiss?: (event: { nativeEvent: {} }) => void;
|
|
82
84
|
theme?: string;
|
|
85
|
+
layoutDirection?: 'ltr' | 'rtl' | 'auto';
|
|
83
86
|
categoryBarPosition?: string;
|
|
84
87
|
columns?: number;
|
|
85
88
|
emojiSize?: number;
|
package/src/EmojiSheetView.tsx
CHANGED
|
@@ -13,6 +13,7 @@ export default function EmojiSheetView({
|
|
|
13
13
|
onDismiss,
|
|
14
14
|
theme,
|
|
15
15
|
translations,
|
|
16
|
+
layoutDirection,
|
|
16
17
|
categoryBarPosition,
|
|
17
18
|
columns,
|
|
18
19
|
emojiSize,
|
|
@@ -35,6 +36,7 @@ export default function EmojiSheetView({
|
|
|
35
36
|
<NativeView
|
|
36
37
|
{...rest}
|
|
37
38
|
theme={resolvedTheme}
|
|
39
|
+
layoutDirection={layoutDirection}
|
|
38
40
|
categoryBarPosition={categoryBarPosition}
|
|
39
41
|
columns={columns}
|
|
40
42
|
emojiSize={emojiSize}
|