expo-native-sheet-emojis 1.2.1 → 1.4.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 +18 -3
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiGridAdapter.kt +6 -2
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetContentView.kt +4 -0
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetModule.kt +33 -2
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSheetUIView.kt +6 -1
- package/android/src/main/java/expo/community/modules/emojisheet/EmojiSkinTonePicker.kt +5 -1
- package/ios/EmojiGridView.swift +12 -0
- package/ios/EmojiSheetContentView.swift +4 -0
- package/ios/EmojiSheetModule.podspec +1 -1
- package/ios/EmojiSheetModule.swift +34 -2
- package/ios/EmojiSheetUIView.swift +3 -0
- package/ios/EmojiSkinTonePicker.swift +4 -0
- package/lib/commonjs/EmojiSheetModule.js +7 -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 +7 -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 +2 -0
- package/lib/typescript/EmojiSheetModule.d.ts.map +1 -1
- package/lib/typescript/EmojiSheetModule.types.d.ts +5 -2
- 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 +9 -0
- package/src/EmojiSheetModule.types.ts +5 -2
- package/src/EmojiSheetView.tsx +2 -0
package/README.md
CHANGED
|
@@ -285,6 +285,18 @@ Programmatically dismisses the emoji picker sheet.
|
|
|
285
285
|
|
|
286
286
|
**Returns:** `Promise<void>`
|
|
287
287
|
|
|
288
|
+
### EmojiSheetModule.clearRecents()
|
|
289
|
+
|
|
290
|
+
Clears all frequently used emoji data.
|
|
291
|
+
|
|
292
|
+
**Returns:** `Promise<void>`
|
|
293
|
+
|
|
294
|
+
### EmojiSheetModule.clearSkinTonePreferences()
|
|
295
|
+
|
|
296
|
+
Clears all saved skin tone preferences.
|
|
297
|
+
|
|
298
|
+
**Returns:** `Promise<void>`
|
|
299
|
+
|
|
288
300
|
### EmojiSheetView
|
|
289
301
|
|
|
290
302
|
A declarative React component that renders the emoji picker inline.
|
|
@@ -294,7 +306,7 @@ A declarative React component that renders the emoji picker inline.
|
|
|
294
306
|
| Prop | Type | Default | Description |
|
|
295
307
|
|-|-|-|-|
|
|
296
308
|
| onEmojiSelected | `(emoji: string) => void` | required | Called when an emoji is tapped |
|
|
297
|
-
| theme | `EmojiSheetTheme \| 'dark' \| 'light'` | `'light'` | Theme configuration |
|
|
309
|
+
| theme | `EmojiSheetTheme \| 'dark' \| 'light' \| 'system'` | `'light'` | Theme configuration |
|
|
298
310
|
| translations | `EmojiSheetTranslations` | -- | Localized strings |
|
|
299
311
|
| categoryBarPosition | `'top' \| 'bottom'` | `'top'` | Position of the category tab bar |
|
|
300
312
|
| columns | `number` | `7` | Number of emoji columns in the grid |
|
|
@@ -303,6 +315,7 @@ A declarative React component that renders the emoji picker inline.
|
|
|
303
315
|
| showSearch | `boolean` | `true` | Whether to show the search bar |
|
|
304
316
|
| showRecents | `boolean` | `true` | Whether to show the frequently used section |
|
|
305
317
|
| enableSkinTones | `boolean` | `true` | Whether to enable skin tone selection on long press |
|
|
318
|
+
| enableHaptics | `boolean` | `true` | Whether to trigger haptic feedback on emoji tap, long-press, and skin tone selection |
|
|
306
319
|
| excludeEmojis | `string[]` | `[]` | Array of emoji IDs to exclude (e.g., `["pile_of_poo", "thumbs_down"]`) |
|
|
307
320
|
|
|
308
321
|
### EmojiSheetTheme
|
|
@@ -338,7 +351,7 @@ All theme fields with their purpose:
|
|
|
338
351
|
|
|
339
352
|
| Field | Type | Default | Description |
|
|
340
353
|
|-|-|-|-|
|
|
341
|
-
| theme | `EmojiSheetTheme \| 'dark' \| 'light'` | `'light'` | Theme configuration |
|
|
354
|
+
| theme | `EmojiSheetTheme \| 'dark' \| 'light' \| 'system'` | `'light'` | Theme configuration |
|
|
342
355
|
| translations | `EmojiSheetTranslations` | -- | Localized UI strings |
|
|
343
356
|
| snapPoints | `[number, number]` | `[0.5, 1.0]` | Bottom sheet snap points as screen fractions |
|
|
344
357
|
| categoryBarPosition | `'top' \| 'bottom'` | `'top'` | Position of the category tab bar |
|
|
@@ -348,6 +361,7 @@ All theme fields with their purpose:
|
|
|
348
361
|
| showSearch | `boolean` | `true` | Show the search bar |
|
|
349
362
|
| showRecents | `boolean` | `true` | Show the frequently used section |
|
|
350
363
|
| enableSkinTones | `boolean` | `true` | Enable skin tone long-press |
|
|
364
|
+
| enableHaptics | `boolean` | `true` | Haptic feedback on tap, long-press, and skin tone select |
|
|
351
365
|
| gestureEnabled | `boolean` | `true` | Allow swipe-to-dismiss gesture |
|
|
352
366
|
| backdropOpacity | `number` | `0.22` | Opacity of the backdrop behind the sheet |
|
|
353
367
|
| excludeEmojis | `string[]` | `[]` | Emoji IDs to hide from the picker |
|
|
@@ -375,7 +389,7 @@ Set via `categoryBarPosition: 'top'` or `categoryBarPosition: 'bottom'` in the o
|
|
|
375
389
|
|
|
376
390
|
| Prop | Type | Default | Description |
|
|
377
391
|
|-|-|-|-|
|
|
378
|
-
| theme | `EmojiSheetTheme \| 'dark' \| 'light'` | `'light'` | Visual theme |
|
|
392
|
+
| theme | `EmojiSheetTheme \| 'dark' \| 'light' \| 'system'` | `'light'` | Visual theme |
|
|
379
393
|
| translations | `EmojiSheetTranslations` | -- | Localized strings |
|
|
380
394
|
| snapPoints | `[number, number]` | `[0.5, 1.0]` | Sheet snap points |
|
|
381
395
|
| categoryBarPosition | `'top' \| 'bottom'` | `'top'` | Category bar placement |
|
|
@@ -385,6 +399,7 @@ Set via `categoryBarPosition: 'top'` or `categoryBarPosition: 'bottom'` in the o
|
|
|
385
399
|
| showSearch | `boolean` | `true` | Show search bar |
|
|
386
400
|
| showRecents | `boolean` | `true` | Show recents section |
|
|
387
401
|
| enableSkinTones | `boolean` | `true` | Skin tone long-press |
|
|
402
|
+
| enableHaptics | `boolean` | `true` | Haptic feedback on interactions |
|
|
388
403
|
| excludeEmojis | `string[]` | `[]` | Emoji IDs to exclude |
|
|
389
404
|
| gestureEnabled | `boolean` | `true` | Swipe to dismiss |
|
|
390
405
|
| backdropOpacity | `number` | `0.22` | Backdrop opacity |
|
|
@@ -25,6 +25,7 @@ class EmojiGridAdapter(
|
|
|
25
25
|
var spanCount: Int = 7
|
|
26
26
|
var emojiTextSize: Float = 32f
|
|
27
27
|
var enableSkinTones: Boolean = true
|
|
28
|
+
var enableHaptics: Boolean = true
|
|
28
29
|
|
|
29
30
|
sealed class ListItem {
|
|
30
31
|
data class Header(val title: String, val categoryKey: String) : ListItem()
|
|
@@ -114,11 +115,14 @@ class EmojiGridAdapter(
|
|
|
114
115
|
// Prevent theme text color from washing out color emojis
|
|
115
116
|
h.textView.setTextColor(Color.BLACK)
|
|
116
117
|
h.textView.alpha = 1.0f
|
|
117
|
-
h.container.setOnClickListener {
|
|
118
|
+
h.container.setOnClickListener { view ->
|
|
119
|
+
if (enableHaptics) {
|
|
120
|
+
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
|
121
|
+
}
|
|
118
122
|
onEmojiClick(item.emoji, item.id)
|
|
119
123
|
}
|
|
120
124
|
if (item.toneEnabled && enableSkinTones) {
|
|
121
|
-
h.container.setOnLongClickListener {
|
|
125
|
+
h.container.setOnLongClickListener { view ->
|
|
122
126
|
onEmojiLongPress(h.container, item.emoji, item.id)
|
|
123
127
|
true
|
|
124
128
|
}
|
|
@@ -63,6 +63,10 @@ class EmojiSheetContentView(
|
|
|
63
63
|
pickerView.enableSkinTones = enable
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
fun updateEnableHaptics(enable: Boolean) {
|
|
67
|
+
pickerView.enableHaptics = enable
|
|
68
|
+
}
|
|
69
|
+
|
|
66
70
|
fun updateSearchPlaceholder(text: String) {
|
|
67
71
|
pickerView.searchPlaceholder = text
|
|
68
72
|
}
|
|
@@ -51,9 +51,27 @@ class EmojiSheetModule : Module() {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
AsyncFunction("clearRecents") {
|
|
55
|
+
appContext.reactContext
|
|
56
|
+
?.getSharedPreferences("emoji_sheet_frequently_used", android.content.Context.MODE_PRIVATE)
|
|
57
|
+
?.edit()?.clear()?.apply()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
AsyncFunction("clearSkinTonePreferences") {
|
|
61
|
+
appContext.reactContext
|
|
62
|
+
?.getSharedPreferences("emoji_sheet_skin_tones", android.content.Context.MODE_PRIVATE)
|
|
63
|
+
?.edit()?.clear()?.apply()
|
|
64
|
+
}
|
|
65
|
+
|
|
54
66
|
View(EmojiSheetContentView::class) {
|
|
55
67
|
Prop("theme") { view: EmojiSheetContentView, theme: String? ->
|
|
56
|
-
|
|
68
|
+
val resolved = if (theme == "system") {
|
|
69
|
+
val uiMode = view.context.resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK
|
|
70
|
+
if (uiMode == android.content.res.Configuration.UI_MODE_NIGHT_YES) "dark" else "light"
|
|
71
|
+
} else {
|
|
72
|
+
theme ?: "light"
|
|
73
|
+
}
|
|
74
|
+
view.updateTheme(resolved)
|
|
57
75
|
}
|
|
58
76
|
Prop("categoryBarPosition") { view: EmojiSheetContentView, position: String? ->
|
|
59
77
|
view.updateCategoryBarPosition(position ?: "top")
|
|
@@ -76,6 +94,9 @@ class EmojiSheetModule : Module() {
|
|
|
76
94
|
Prop("enableSkinTones") { view: EmojiSheetContentView, enable: Boolean? ->
|
|
77
95
|
view.updateEnableSkinTones(enable ?: true)
|
|
78
96
|
}
|
|
97
|
+
Prop("enableHaptics") { view: EmojiSheetContentView, enable: Boolean? ->
|
|
98
|
+
view.updateEnableHaptics(enable ?: true)
|
|
99
|
+
}
|
|
79
100
|
Prop("searchPlaceholder") { view: EmojiSheetContentView, text: String? ->
|
|
80
101
|
if (text != null) view.updateSearchPlaceholder(text)
|
|
81
102
|
}
|
|
@@ -94,7 +115,15 @@ class EmojiSheetModule : Module() {
|
|
|
94
115
|
|
|
95
116
|
private fun presentSheet(options: Map<String, Any>, promise: Promise) {
|
|
96
117
|
val activity = appContext.currentActivity ?: return
|
|
97
|
-
val
|
|
118
|
+
val themeString = options["theme"] as? String ?: "light"
|
|
119
|
+
val isDark = when (themeString) {
|
|
120
|
+
"dark" -> true
|
|
121
|
+
"system" -> {
|
|
122
|
+
val uiMode = activity.resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK
|
|
123
|
+
uiMode == android.content.res.Configuration.UI_MODE_NIGHT_YES
|
|
124
|
+
}
|
|
125
|
+
else -> false
|
|
126
|
+
}
|
|
98
127
|
val density = activity.resources.displayMetrics.density
|
|
99
128
|
|
|
100
129
|
// Parse new options
|
|
@@ -105,6 +134,7 @@ class EmojiSheetModule : Module() {
|
|
|
105
134
|
val showSearch = options["showSearch"] as? Boolean ?: true
|
|
106
135
|
val showRecents = options["showRecents"] as? Boolean ?: true
|
|
107
136
|
val enableSkinTones = options["enableSkinTones"] as? Boolean ?: true
|
|
137
|
+
val enableHaptics = options["enableHaptics"] as? Boolean ?: true
|
|
108
138
|
val recentLimit = (options["recentLimit"] as? Number)?.toInt() ?: 30
|
|
109
139
|
val gestureEnabled = options["gestureEnabled"] as? Boolean ?: true
|
|
110
140
|
val backdropOpacity = (options["backdropOpacity"] as? Number)?.toFloat() ?: if (isDark) 0.4f else 0.22f
|
|
@@ -164,6 +194,7 @@ class EmojiSheetModule : Module() {
|
|
|
164
194
|
pickerView.showSearch = showSearch
|
|
165
195
|
pickerView.showRecents = showRecents
|
|
166
196
|
pickerView.enableSkinTones = enableSkinTones
|
|
197
|
+
pickerView.enableHaptics = enableHaptics
|
|
167
198
|
pickerView.recentLimit = recentLimit
|
|
168
199
|
pickerView.categoryBarPosition = categoryBarPosition
|
|
169
200
|
pickerView.categoryNames = categoryNames
|
|
@@ -79,6 +79,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
79
79
|
var showSearch: Boolean = true
|
|
80
80
|
var showRecents: Boolean = true
|
|
81
81
|
var enableSkinTones: Boolean = true
|
|
82
|
+
var enableHaptics: Boolean = true
|
|
82
83
|
var recentLimit: Int = 30
|
|
83
84
|
var categoryBarPosition: String = "top"
|
|
84
85
|
var categoryNames: Map<String, String>? = null
|
|
@@ -280,6 +281,7 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
280
281
|
gridAdapter.spanCount = columns
|
|
281
282
|
gridAdapter.emojiTextSize = emojiSize
|
|
282
283
|
gridAdapter.enableSkinTones = enableSkinTones
|
|
284
|
+
gridAdapter.enableHaptics = enableHaptics
|
|
283
285
|
gridLayoutManager.spanCount = columns
|
|
284
286
|
|
|
285
287
|
// Show/hide search
|
|
@@ -612,8 +614,11 @@ class EmojiSheetUIView(context: Context) : LinearLayout(context) {
|
|
|
612
614
|
|
|
613
615
|
private fun showSkinTonePicker(anchorView: View, baseEmoji: String, emojiId: String) {
|
|
614
616
|
if (!enableSkinTones) return
|
|
617
|
+
if (enableHaptics) {
|
|
618
|
+
anchorView.performHapticFeedback(android.view.HapticFeedbackConstants.LONG_PRESS)
|
|
619
|
+
}
|
|
615
620
|
val originalBase = findBaseEmoji(emojiId) ?: baseEmoji
|
|
616
|
-
val picker = EmojiSkinTonePicker(context, currentTheme) { selectedEmoji ->
|
|
621
|
+
val picker = EmojiSkinTonePicker(context, currentTheme, enableHaptics) { selectedEmoji ->
|
|
617
622
|
trackFrequentlyUsed(emojiId)
|
|
618
623
|
refreshVisibleItemsAfterUsage()
|
|
619
624
|
val name = findEmojiName(emojiId) ?: ""
|
|
@@ -17,6 +17,7 @@ import androidx.appcompat.widget.AppCompatTextView
|
|
|
17
17
|
class EmojiSkinTonePicker(
|
|
18
18
|
private val context: Context,
|
|
19
19
|
private val theme: EmojiSheetTheme,
|
|
20
|
+
private val enableHaptics: Boolean = true,
|
|
20
21
|
private val onToneSelected: (emoji: String) -> Unit
|
|
21
22
|
) {
|
|
22
23
|
companion object {
|
|
@@ -95,7 +96,10 @@ class EmojiSkinTonePicker(
|
|
|
95
96
|
// Set click listeners now that popup exists
|
|
96
97
|
for (i in 0 until container.childCount) {
|
|
97
98
|
val (variantEmoji, toneCodePoint) = variants[i]
|
|
98
|
-
(container.getChildAt(i) as View).setOnClickListener {
|
|
99
|
+
(container.getChildAt(i) as View).setOnClickListener { view ->
|
|
100
|
+
if (enableHaptics) {
|
|
101
|
+
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
|
102
|
+
}
|
|
99
103
|
if (toneCodePoint != -1) {
|
|
100
104
|
saveTone(context, emojiId, toneCodePoint)
|
|
101
105
|
} else {
|
package/ios/EmojiGridView.swift
CHANGED
|
@@ -19,6 +19,10 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
19
19
|
didSet { if cellHeight != oldValue { rebuildLayout() } }
|
|
20
20
|
}
|
|
21
21
|
var enableSkinTones: Bool = true
|
|
22
|
+
var enableHaptics: Bool = true
|
|
23
|
+
|
|
24
|
+
private lazy var selectionFeedback = UISelectionFeedbackGenerator()
|
|
25
|
+
private lazy var impactFeedbackMedium = UIImpactFeedbackGenerator(style: .medium)
|
|
22
26
|
|
|
23
27
|
private var sections: [EmojiSection] = []
|
|
24
28
|
private var categoryNames: [String: String] = [:]
|
|
@@ -231,6 +235,9 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
231
235
|
// MARK: - UICollectionViewDelegate
|
|
232
236
|
|
|
233
237
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
238
|
+
if enableHaptics {
|
|
239
|
+
selectionFeedback.selectionChanged()
|
|
240
|
+
}
|
|
234
241
|
let item = sections[indexPath.section].data[indexPath.item]
|
|
235
242
|
var emoji = item.emoji
|
|
236
243
|
if item.toneEnabled, let savedTone = UserDefaults.standard.string(forKey: "EmojiSkinTone_\(item.id)") {
|
|
@@ -329,11 +336,16 @@ class EmojiGridView: UIView, UICollectionViewDataSource, UICollectionViewDelegat
|
|
|
329
336
|
guard let cell = collectionView.cellForItem(at: indexPath) else { return }
|
|
330
337
|
let cellFrameInSelf = collectionView.convert(cell.frame, to: self)
|
|
331
338
|
|
|
339
|
+
if enableHaptics {
|
|
340
|
+
impactFeedbackMedium.impactOccurred()
|
|
341
|
+
}
|
|
342
|
+
|
|
332
343
|
let picker = EmojiSkinTonePicker(
|
|
333
344
|
baseEmoji: item.emoji,
|
|
334
345
|
emojiId: item.id,
|
|
335
346
|
theme: currentTheme
|
|
336
347
|
)
|
|
348
|
+
picker.enableHaptics = enableHaptics
|
|
337
349
|
picker.onEmojiSelected = { [weak self] emoji, modifier in
|
|
338
350
|
guard let self = self else { return }
|
|
339
351
|
if let modifier = modifier {
|
|
@@ -73,6 +73,10 @@ class EmojiSheetContentView: ExpoView, EmojiSheetUIViewDelegate {
|
|
|
73
73
|
pickerView.enableSkinTones = enable
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
func updateEnableHaptics(_ enable: Bool) {
|
|
77
|
+
pickerView.enableHaptics = enable
|
|
78
|
+
}
|
|
79
|
+
|
|
76
80
|
func updateSearchPlaceholder(_ text: String) {
|
|
77
81
|
pickerView.searchPlaceholder = text
|
|
78
82
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Pod::Spec.new do |s|
|
|
2
2
|
s.name = 'EmojiSheetModule'
|
|
3
|
-
s.version = '1.
|
|
3
|
+
s.version = '1.4.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 = ''
|
|
@@ -23,9 +23,27 @@ public class EmojiSheetModule: Module {
|
|
|
23
23
|
}
|
|
24
24
|
.runOnQueue(DispatchQueue.main)
|
|
25
25
|
|
|
26
|
+
AsyncFunction("clearRecents") {
|
|
27
|
+
UserDefaults.standard.removeObject(forKey: "EmojiSheet_FrequentlyUsed")
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
AsyncFunction("clearSkinTonePreferences") {
|
|
31
|
+
let defaults = UserDefaults.standard
|
|
32
|
+
let allKeys = defaults.dictionaryRepresentation().keys
|
|
33
|
+
for key in allKeys where key.hasPrefix("EmojiSkinTone_") {
|
|
34
|
+
defaults.removeObject(forKey: key)
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
26
38
|
View(EmojiSheetContentView.self) {
|
|
27
39
|
Prop("theme") { (view, theme: String?) in
|
|
28
|
-
|
|
40
|
+
let resolved: String
|
|
41
|
+
if theme == "system" {
|
|
42
|
+
resolved = UITraitCollection.current.userInterfaceStyle == .dark ? "dark" : "light"
|
|
43
|
+
} else {
|
|
44
|
+
resolved = theme ?? "light"
|
|
45
|
+
}
|
|
46
|
+
view.updateTheme(resolved)
|
|
29
47
|
}
|
|
30
48
|
Prop("categoryBarPosition") { (view, position: String?) in
|
|
31
49
|
view.updateCategoryBarPosition(position ?? "top")
|
|
@@ -48,6 +66,9 @@ public class EmojiSheetModule: Module {
|
|
|
48
66
|
Prop("enableSkinTones") { (view, enable: Bool?) in
|
|
49
67
|
view.updateEnableSkinTones(enable ?? true)
|
|
50
68
|
}
|
|
69
|
+
Prop("enableHaptics") { (view, enable: Bool?) in
|
|
70
|
+
view.updateEnableHaptics(enable ?? true)
|
|
71
|
+
}
|
|
51
72
|
Prop("searchPlaceholder") { (view, text: String?) in
|
|
52
73
|
if let text { view.updateSearchPlaceholder(text) }
|
|
53
74
|
}
|
|
@@ -75,7 +96,16 @@ public class EmojiSheetModule: Module {
|
|
|
75
96
|
return
|
|
76
97
|
}
|
|
77
98
|
|
|
78
|
-
let
|
|
99
|
+
let themeString = options["theme"] as? String ?? "light"
|
|
100
|
+
let isDark: Bool
|
|
101
|
+
switch themeString {
|
|
102
|
+
case "dark":
|
|
103
|
+
isDark = true
|
|
104
|
+
case "system":
|
|
105
|
+
isDark = UITraitCollection.current.userInterfaceStyle == .dark
|
|
106
|
+
default:
|
|
107
|
+
isDark = false
|
|
108
|
+
}
|
|
79
109
|
|
|
80
110
|
// Parse new options
|
|
81
111
|
let snapPoints = (options["snapPoints"] as? [Double]) ?? [0.5, 1.0]
|
|
@@ -84,6 +114,7 @@ public class EmojiSheetModule: Module {
|
|
|
84
114
|
let showSearch = (options["showSearch"] as? Bool) ?? true
|
|
85
115
|
let showRecents = (options["showRecents"] as? Bool) ?? true
|
|
86
116
|
let enableSkinTones = (options["enableSkinTones"] as? Bool) ?? true
|
|
117
|
+
let enableHaptics = (options["enableHaptics"] as? Bool) ?? true
|
|
87
118
|
let recentLimit = (options["recentLimit"] as? Int) ?? 30
|
|
88
119
|
let gestureEnabled = (options["gestureEnabled"] as? Bool) ?? true
|
|
89
120
|
let backdropOpacity = options["backdropOpacity"] as? Double ?? (isDark ? 0.4 : 0.22)
|
|
@@ -148,6 +179,7 @@ public class EmojiSheetModule: Module {
|
|
|
148
179
|
pickerView.showSearch = showSearch
|
|
149
180
|
pickerView.showRecents = showRecents
|
|
150
181
|
pickerView.enableSkinTones = enableSkinTones
|
|
182
|
+
pickerView.enableHaptics = enableHaptics
|
|
151
183
|
pickerView.recentLimit = recentLimit
|
|
152
184
|
pickerView.categoryBarPosition = categoryBarPosition
|
|
153
185
|
pickerView.categoryNames = categoryNames
|
|
@@ -58,6 +58,9 @@ class EmojiSheetUIView: UIView,
|
|
|
58
58
|
var enableSkinTones: Bool = true {
|
|
59
59
|
didSet { gridView.enableSkinTones = enableSkinTones }
|
|
60
60
|
}
|
|
61
|
+
var enableHaptics: Bool = true {
|
|
62
|
+
didSet { gridView.enableHaptics = enableHaptics }
|
|
63
|
+
}
|
|
61
64
|
var recentLimit: Int = 30
|
|
62
65
|
var categoryBarPosition: String = "top" {
|
|
63
66
|
didSet { if categoryBarPosition != oldValue { configureLayout() } }
|
|
@@ -2,6 +2,7 @@ import UIKit
|
|
|
2
2
|
|
|
3
3
|
class EmojiSkinTonePicker: UIView {
|
|
4
4
|
var onEmojiSelected: ((_ emoji: String, _ modifier: String?) -> Void)?
|
|
5
|
+
var enableHaptics: Bool = true
|
|
5
6
|
|
|
6
7
|
private let baseEmoji: String
|
|
7
8
|
private let emojiId: String
|
|
@@ -94,6 +95,9 @@ class EmojiSkinTonePicker: UIView {
|
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
@objc private func buttonTapped(_ sender: UIButton) {
|
|
98
|
+
if enableHaptics {
|
|
99
|
+
UIImpactFeedbackGenerator(style: .light).impactOccurred()
|
|
100
|
+
}
|
|
97
101
|
let tag = sender.tag
|
|
98
102
|
if tag == 0 {
|
|
99
103
|
// Base emoji, no modifier
|
|
@@ -48,6 +48,7 @@ function flattenOptions(options) {
|
|
|
48
48
|
if (options.showSearch != null) flat.showSearch = options.showSearch;
|
|
49
49
|
if (options.showRecents != null) flat.showRecents = options.showRecents;
|
|
50
50
|
if (options.enableSkinTones != null) flat.enableSkinTones = options.enableSkinTones;
|
|
51
|
+
if (options.enableHaptics != null) flat.enableHaptics = options.enableHaptics;
|
|
51
52
|
if (options.gestureEnabled != null) flat.gestureEnabled = options.gestureEnabled;
|
|
52
53
|
if (options.backdropOpacity != null) flat.backdropOpacity = options.backdropOpacity;
|
|
53
54
|
if (options.excludeEmojis) flat.excludeEmojis = options.excludeEmojis;
|
|
@@ -60,6 +61,12 @@ var _default = exports.default = {
|
|
|
60
61
|
},
|
|
61
62
|
dismiss() {
|
|
62
63
|
return NativeEmojiSheet.dismiss();
|
|
64
|
+
},
|
|
65
|
+
clearRecents() {
|
|
66
|
+
return NativeEmojiSheet.clearRecents();
|
|
67
|
+
},
|
|
68
|
+
clearSkinTonePreferences() {
|
|
69
|
+
return NativeEmojiSheet.clearSkinTonePreferences();
|
|
63
70
|
}
|
|
64
71
|
};
|
|
65
72
|
//# sourceMappingURL=EmojiSheetModule.js.map
|
|
@@ -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","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","requireNativeModule","_default","exports","default","present","dismiss"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":"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
|
|
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","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","requireNativeModule","_default","exports","default","present","dismiss","clearRecents","clearSkinTonePreferences"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -18,6 +18,7 @@ function EmojiSheetView({
|
|
|
18
18
|
showSearch,
|
|
19
19
|
showRecents,
|
|
20
20
|
enableSkinTones,
|
|
21
|
+
enableHaptics,
|
|
21
22
|
excludeEmojis,
|
|
22
23
|
...rest
|
|
23
24
|
}) {
|
|
@@ -37,6 +38,7 @@ function EmojiSheetView({
|
|
|
37
38
|
showSearch: showSearch,
|
|
38
39
|
showRecents: showRecents,
|
|
39
40
|
enableSkinTones: enableSkinTones,
|
|
41
|
+
enableHaptics: enableHaptics,
|
|
40
42
|
excludeEmojis: excludeEmojis,
|
|
41
43
|
searchPlaceholder: translations?.searchPlaceholder,
|
|
42
44
|
noResultsText: translations?.noResultsText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_expo","require","_jsxRuntime","NativeView","requireNativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","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;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,
|
|
1
|
+
{"version":3,"names":["_expo","require","_jsxRuntime","NativeView","requireNativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","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,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOZ,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACE,IAAAL,WAAA,CAAAkB,GAAA,EAACjB,UAAU;IAAA,GACLe,IAAI;IACRX,KAAK,EAAEY,aAAc;IACrBV,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,aAAa,EAAEA,aAAc;IAC7BI,iBAAiB,EAAEb,YAAY,EAAEa,iBAAkB;IACnDC,aAAa,EAAEd,YAAY,EAAEc,aAAc;IAC3CC,aAAa,EAAEf,YAAY,EAAEe,aAAc;IAC3CjB,eAAe,EAAEA,CAAC;MAAEkB;IAAY,CAAC,KAAK;MACpClB,eAAe,CAACkB,WAAW,CAACC,KAAK,CAAC;IACpC;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
|
|
@@ -44,6 +44,7 @@ function flattenOptions(options) {
|
|
|
44
44
|
if (options.showSearch != null) flat.showSearch = options.showSearch;
|
|
45
45
|
if (options.showRecents != null) flat.showRecents = options.showRecents;
|
|
46
46
|
if (options.enableSkinTones != null) flat.enableSkinTones = options.enableSkinTones;
|
|
47
|
+
if (options.enableHaptics != null) flat.enableHaptics = options.enableHaptics;
|
|
47
48
|
if (options.gestureEnabled != null) flat.gestureEnabled = options.gestureEnabled;
|
|
48
49
|
if (options.backdropOpacity != null) flat.backdropOpacity = options.backdropOpacity;
|
|
49
50
|
if (options.excludeEmojis) flat.excludeEmojis = options.excludeEmojis;
|
|
@@ -56,6 +57,12 @@ export default {
|
|
|
56
57
|
},
|
|
57
58
|
dismiss() {
|
|
58
59
|
return NativeEmojiSheet.dismiss();
|
|
60
|
+
},
|
|
61
|
+
clearRecents() {
|
|
62
|
+
return NativeEmojiSheet.clearRecents();
|
|
63
|
+
},
|
|
64
|
+
clearSkinTonePreferences() {
|
|
65
|
+
return NativeEmojiSheet.clearSkinTonePreferences();
|
|
59
66
|
}
|
|
60
67
|
};
|
|
61
68
|
//# sourceMappingURL=EmojiSheetModule.js.map
|
|
@@ -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","gestureEnabled","backdropOpacity","excludeEmojis","NativeEmojiSheet","present","dismiss"],"sourceRoot":"../../src","sources":["EmojiSheetModule.ts"],"mappings":"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
|
|
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","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,UAAU,EAAEpB,IAAI,CAACoB,UAAU,GAAGrB,OAAO,CAACqB,UAAU;EAC5D,IAAIrB,OAAO,CAACsB,mBAAmB,EAAErB,IAAI,CAACqB,mBAAmB,GAAGtB,OAAO,CAACsB,mBAAmB;EACvF,IAAItB,OAAO,CAACuB,OAAO,IAAI,IAAI,EAAEtB,IAAI,CAACsB,OAAO,GAAGvB,OAAO,CAACuB,OAAO;EAC3D,IAAIvB,OAAO,CAACwB,SAAS,IAAI,IAAI,EAAEvB,IAAI,CAACuB,SAAS,GAAGxB,OAAO,CAACwB,SAAS;EACjE,IAAIxB,OAAO,CAACyB,WAAW,IAAI,IAAI,EAAExB,IAAI,CAACwB,WAAW,GAAGzB,OAAO,CAACyB,WAAW;EACvE,IAAIzB,OAAO,CAAC0B,UAAU,IAAI,IAAI,EAAEzB,IAAI,CAACyB,UAAU,GAAG1B,OAAO,CAAC0B,UAAU;EACpE,IAAI1B,OAAO,CAAC2B,WAAW,IAAI,IAAI,EAAE1B,IAAI,CAAC0B,WAAW,GAAG3B,OAAO,CAAC2B,WAAW;EACvE,IAAI3B,OAAO,CAAC4B,eAAe,IAAI,IAAI,EAAE3B,IAAI,CAAC2B,eAAe,GAAG5B,OAAO,CAAC4B,eAAe;EACnF,IAAI5B,OAAO,CAAC6B,aAAa,IAAI,IAAI,EAAE5B,IAAI,CAAC4B,aAAa,GAAG7B,OAAO,CAAC6B,aAAa;EAC7E,IAAI7B,OAAO,CAAC8B,cAAc,IAAI,IAAI,EAAE7B,IAAI,CAAC6B,cAAc,GAAG9B,OAAO,CAAC8B,cAAc;EAChF,IAAI9B,OAAO,CAAC+B,eAAe,IAAI,IAAI,EAAE9B,IAAI,CAAC8B,eAAe,GAAG/B,OAAO,CAAC+B,eAAe;EACnF,IAAI/B,OAAO,CAACgC,aAAa,EAAE/B,IAAI,CAAC+B,aAAa,GAAGhC,OAAO,CAACgC,aAAa;EAErE,OAAO/B,IAAI;AACb;AASA,MAAMgC,gBAAgB,GAAGnC,mBAAmB,CAAuB,YAAY,CAAC;AAIhF,eAAe;EACboC,OAAOA,CAAClC,OAAiC,GAAG,CAAC,CAAC,EAA6B;IACzE,OAAOiC,gBAAgB,CAACC,OAAO,CAACnC,cAAc,CAACC,OAAO,CAAC,CAAC;EAC1D,CAAC;EACDmC,OAAOA,CAAA,EAAkB;IACvB,OAAOF,gBAAgB,CAACE,OAAO,CAAC,CAAC;EACnC,CAAC;EACDC,YAAYA,CAAA,EAAkB;IAC5B,OAAOH,gBAAgB,CAACG,YAAY,CAAC,CAAC;EACxC,CAAC;EACDC,wBAAwBA,CAAA,EAAkB;IACxC,OAAOJ,gBAAgB,CAACI,wBAAwB,CAAC,CAAC;EACpD;AACF,CAAC","ignoreList":[]}
|
|
@@ -14,6 +14,7 @@ export default function EmojiSheetView({
|
|
|
14
14
|
showSearch,
|
|
15
15
|
showRecents,
|
|
16
16
|
enableSkinTones,
|
|
17
|
+
enableHaptics,
|
|
17
18
|
excludeEmojis,
|
|
18
19
|
...rest
|
|
19
20
|
}) {
|
|
@@ -33,6 +34,7 @@ export default function EmojiSheetView({
|
|
|
33
34
|
showSearch: showSearch,
|
|
34
35
|
showRecents: showRecents,
|
|
35
36
|
enableSkinTones: enableSkinTones,
|
|
37
|
+
enableHaptics: enableHaptics,
|
|
36
38
|
excludeEmojis: excludeEmojis,
|
|
37
39
|
searchPlaceholder: translations?.searchPlaceholder,
|
|
38
40
|
noResultsText: translations?.noResultsText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["requireNativeView","jsx","_jsx","NativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","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;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,
|
|
1
|
+
{"version":3,"names":["requireNativeView","jsx","_jsx","NativeView","EmojiSheetView","onEmojiSelected","theme","translations","categoryBarPosition","columns","emojiSize","recentLimit","showSearch","showRecents","enableSkinTones","enableHaptics","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,aAAa;EACb,GAAGC;AACgB,CAAC,EAAE;EACtB,MAAMC,aAAa,GAAG,OAAOZ,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAGA,KAAK;;EAElE;EACA;EACA;;EAEA,oBACEJ,IAAA,CAACC,UAAU;IAAA,GACLc,IAAI;IACRX,KAAK,EAAEY,aAAc;IACrBV,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,aAAa,EAAEA,aAAc;IAC7BG,iBAAiB,EAAEZ,YAAY,EAAEY,iBAAkB;IACnDC,aAAa,EAAEb,YAAY,EAAEa,aAAc;IAC3CC,aAAa,EAAEd,YAAY,EAAEc,aAAc;IAC3ChB,eAAe,EAAEA,CAAC;MAAEiB;IAAY,CAAC,KAAK;MACpCjB,eAAe,CAACiB,WAAW,CAACC,KAAK,CAAC;IACpC;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
|
|
@@ -3,6 +3,8 @@ export type { EmojiSheetResult };
|
|
|
3
3
|
declare const _default: {
|
|
4
4
|
present(options?: EmojiSheetPresentOptions): Promise<EmojiSheetResult>;
|
|
5
5
|
dismiss(): Promise<void>;
|
|
6
|
+
clearRecents(): Promise<void>;
|
|
7
|
+
clearSkinTonePreferences(): Promise<void>;
|
|
6
8
|
};
|
|
7
9
|
export default _default;
|
|
8
10
|
//# sourceMappingURL=EmojiSheetModule.d.ts.map
|
|
@@ -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;AAgE5G,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"}
|
|
@@ -22,7 +22,7 @@ export type EmojiSheetTranslations = {
|
|
|
22
22
|
categoryNames?: Partial<Record<EmojiCategory, string>>;
|
|
23
23
|
};
|
|
24
24
|
export type EmojiSheetPresentOptions = {
|
|
25
|
-
theme?: EmojiSheetTheme | 'dark' | 'light';
|
|
25
|
+
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
26
26
|
translations?: EmojiSheetTranslations;
|
|
27
27
|
snapPoints?: [number, number];
|
|
28
28
|
categoryBarPosition?: 'top' | 'bottom';
|
|
@@ -32,6 +32,7 @@ export type EmojiSheetPresentOptions = {
|
|
|
32
32
|
showSearch?: boolean;
|
|
33
33
|
showRecents?: boolean;
|
|
34
34
|
enableSkinTones?: boolean;
|
|
35
|
+
enableHaptics?: boolean;
|
|
35
36
|
gestureEnabled?: boolean;
|
|
36
37
|
backdropOpacity?: number;
|
|
37
38
|
excludeEmojis?: string[];
|
|
@@ -50,7 +51,7 @@ export type EmojiSelectionListener = (event: {
|
|
|
50
51
|
}) => void;
|
|
51
52
|
export type EmojiSheetViewProps = ViewProps & {
|
|
52
53
|
onEmojiSelected: (emoji: string) => void;
|
|
53
|
-
theme?: EmojiSheetTheme | 'dark' | 'light';
|
|
54
|
+
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
54
55
|
translations?: EmojiSheetTranslations;
|
|
55
56
|
categoryBarPosition?: 'top' | 'bottom';
|
|
56
57
|
columns?: number;
|
|
@@ -59,6 +60,7 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
59
60
|
showSearch?: boolean;
|
|
60
61
|
showRecents?: boolean;
|
|
61
62
|
enableSkinTones?: boolean;
|
|
63
|
+
enableHaptics?: boolean;
|
|
62
64
|
excludeEmojis?: string[];
|
|
63
65
|
};
|
|
64
66
|
export type EmojiSheetNativeViewProps = ViewProps & {
|
|
@@ -71,6 +73,7 @@ export type EmojiSheetNativeViewProps = ViewProps & {
|
|
|
71
73
|
showSearch?: boolean;
|
|
72
74
|
showRecents?: boolean;
|
|
73
75
|
enableSkinTones?: boolean;
|
|
76
|
+
enableHaptics?: boolean;
|
|
74
77
|
searchPlaceholder?: string;
|
|
75
78
|
noResultsText?: string;
|
|
76
79
|
categoryNames?: Partial<Record<EmojiCategory, string>>;
|
|
@@ -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,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, excludeEmojis, ...rest }: EmojiSheetViewProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export default function EmojiSheetView({ onEmojiSelected, theme, translations, categoryBarPosition, columns, emojiSize, recentLimit, showSearch, showRecents, enableSkinTones, enableHaptics, 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,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,KAAK,EACL,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,aAAa,EACb,GAAG,IAAI,EACR,EAAE,mBAAmB,2CA4BrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-native-sheet-emojis",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.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
|
@@ -46,6 +46,7 @@ function flattenOptions(options: EmojiSheetPresentOptions): NativeOptions {
|
|
|
46
46
|
if (options.showSearch != null) flat.showSearch = options.showSearch;
|
|
47
47
|
if (options.showRecents != null) flat.showRecents = options.showRecents;
|
|
48
48
|
if (options.enableSkinTones != null) flat.enableSkinTones = options.enableSkinTones;
|
|
49
|
+
if (options.enableHaptics != null) flat.enableHaptics = options.enableHaptics;
|
|
49
50
|
if (options.gestureEnabled != null) flat.gestureEnabled = options.gestureEnabled;
|
|
50
51
|
if (options.backdropOpacity != null) flat.backdropOpacity = options.backdropOpacity;
|
|
51
52
|
if (options.excludeEmojis) flat.excludeEmojis = options.excludeEmojis;
|
|
@@ -56,6 +57,8 @@ function flattenOptions(options: EmojiSheetPresentOptions): NativeOptions {
|
|
|
56
57
|
declare class EmojiSheetModuleType extends NativeModule {
|
|
57
58
|
present(options: NativeOptions): Promise<EmojiSheetResult>;
|
|
58
59
|
dismiss(): Promise<void>;
|
|
60
|
+
clearRecents(): Promise<void>;
|
|
61
|
+
clearSkinTonePreferences(): Promise<void>;
|
|
59
62
|
}
|
|
60
63
|
|
|
61
64
|
const NativeEmojiSheet = requireNativeModule<EmojiSheetModuleType>('EmojiSheet');
|
|
@@ -69,4 +72,10 @@ export default {
|
|
|
69
72
|
dismiss(): Promise<void> {
|
|
70
73
|
return NativeEmojiSheet.dismiss();
|
|
71
74
|
},
|
|
75
|
+
clearRecents(): Promise<void> {
|
|
76
|
+
return NativeEmojiSheet.clearRecents();
|
|
77
|
+
},
|
|
78
|
+
clearSkinTonePreferences(): Promise<void> {
|
|
79
|
+
return NativeEmojiSheet.clearSkinTonePreferences();
|
|
80
|
+
},
|
|
72
81
|
};
|
|
@@ -36,7 +36,7 @@ export type EmojiSheetTranslations = {
|
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
export type EmojiSheetPresentOptions = {
|
|
39
|
-
theme?: EmojiSheetTheme | 'dark' | 'light';
|
|
39
|
+
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
40
40
|
translations?: EmojiSheetTranslations;
|
|
41
41
|
snapPoints?: [number, number];
|
|
42
42
|
categoryBarPosition?: 'top' | 'bottom';
|
|
@@ -46,6 +46,7 @@ export type EmojiSheetPresentOptions = {
|
|
|
46
46
|
showSearch?: boolean;
|
|
47
47
|
showRecents?: boolean;
|
|
48
48
|
enableSkinTones?: boolean;
|
|
49
|
+
enableHaptics?: boolean;
|
|
49
50
|
gestureEnabled?: boolean;
|
|
50
51
|
backdropOpacity?: number;
|
|
51
52
|
excludeEmojis?: string[];
|
|
@@ -59,7 +60,7 @@ export type EmojiSelectionListener = (event: { nativeEvent: { emoji: string } })
|
|
|
59
60
|
|
|
60
61
|
export type EmojiSheetViewProps = ViewProps & {
|
|
61
62
|
onEmojiSelected: (emoji: string) => void;
|
|
62
|
-
theme?: EmojiSheetTheme | 'dark' | 'light';
|
|
63
|
+
theme?: EmojiSheetTheme | 'dark' | 'light' | 'system';
|
|
63
64
|
translations?: EmojiSheetTranslations;
|
|
64
65
|
categoryBarPosition?: 'top' | 'bottom';
|
|
65
66
|
columns?: number;
|
|
@@ -68,6 +69,7 @@ export type EmojiSheetViewProps = ViewProps & {
|
|
|
68
69
|
showSearch?: boolean;
|
|
69
70
|
showRecents?: boolean;
|
|
70
71
|
enableSkinTones?: boolean;
|
|
72
|
+
enableHaptics?: boolean;
|
|
71
73
|
excludeEmojis?: string[];
|
|
72
74
|
};
|
|
73
75
|
|
|
@@ -81,6 +83,7 @@ export type EmojiSheetNativeViewProps = ViewProps & {
|
|
|
81
83
|
showSearch?: boolean;
|
|
82
84
|
showRecents?: boolean;
|
|
83
85
|
enableSkinTones?: boolean;
|
|
86
|
+
enableHaptics?: boolean;
|
|
84
87
|
searchPlaceholder?: string;
|
|
85
88
|
noResultsText?: string;
|
|
86
89
|
categoryNames?: Partial<Record<EmojiCategory, string>>;
|
package/src/EmojiSheetView.tsx
CHANGED
|
@@ -19,6 +19,7 @@ export default function EmojiSheetView({
|
|
|
19
19
|
showSearch,
|
|
20
20
|
showRecents,
|
|
21
21
|
enableSkinTones,
|
|
22
|
+
enableHaptics,
|
|
22
23
|
excludeEmojis,
|
|
23
24
|
...rest
|
|
24
25
|
}: EmojiSheetViewProps) {
|
|
@@ -39,6 +40,7 @@ export default function EmojiSheetView({
|
|
|
39
40
|
showSearch={showSearch}
|
|
40
41
|
showRecents={showRecents}
|
|
41
42
|
enableSkinTones={enableSkinTones}
|
|
43
|
+
enableHaptics={enableHaptics}
|
|
42
44
|
excludeEmojis={excludeEmojis}
|
|
43
45
|
searchPlaceholder={translations?.searchPlaceholder}
|
|
44
46
|
noResultsText={translations?.noResultsText}
|