@oiij/emoji-picker 0.0.11 → 0.0.12
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/dist/index.d.mts +16 -6
- package/dist/index.mjs +53 -36
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import * as _vueuse_core0 from "@vueuse/core";
|
|
1
2
|
import { Picker } from "emoji-mart";
|
|
2
3
|
import * as vue0 from "vue";
|
|
3
|
-
import {
|
|
4
|
+
import { MaybeRefOrGetter, TemplateRef } from "vue";
|
|
4
5
|
|
|
5
6
|
//#region src/index.d.ts
|
|
6
7
|
type EmojiResult = {
|
|
@@ -45,11 +46,20 @@ type EmojiPickerOptions = {
|
|
|
45
46
|
theme?: 'auto' | 'light' | 'dark';
|
|
46
47
|
getSpritesheetURL?: string;
|
|
47
48
|
};
|
|
48
|
-
|
|
49
|
+
type UseEmojiPickerOptions = {
|
|
50
|
+
darkMode?: MaybeRefOrGetter<boolean>;
|
|
51
|
+
language?: MaybeRefOrGetter<'zh' | 'en'>;
|
|
52
|
+
emojiPickerOptions?: EmojiPickerOptions;
|
|
53
|
+
};
|
|
54
|
+
declare function useEmojiPicker(templateRef: TemplateRef<HTMLElement>, options?: UseEmojiPickerOptions): {
|
|
49
55
|
templateRef: Readonly<vue0.ShallowRef<HTMLElement | null>>;
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
darkModeRef: vue0.Ref<boolean | undefined, boolean | undefined>;
|
|
57
|
+
languageRef: vue0.Ref<"zh" | "en" | undefined, "zh" | "en" | undefined>;
|
|
58
|
+
emojiPickerInst: vue0.ShallowRef<Picker | null, Picker | null>;
|
|
59
|
+
updateTheme: (darkMode?: boolean) => void;
|
|
60
|
+
updateLanguage: (language?: "zh" | "en") => void;
|
|
61
|
+
onRender: _vueuse_core0.EventHookOn<[Picker]>;
|
|
52
62
|
};
|
|
53
|
-
type
|
|
63
|
+
type UseEmojiPickerReturns = ReturnType<typeof useEmojiPicker>;
|
|
54
64
|
//#endregion
|
|
55
|
-
export { EmojiPickerOptions,
|
|
65
|
+
export { EmojiPickerOptions, EmojiResult, UseEmojiPickerOptions, UseEmojiPickerReturns, useEmojiPicker };
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
import data from "@emoji-mart/data";
|
|
2
|
+
import { createEventHook, watchOnce } from "@vueuse/core";
|
|
2
3
|
import { Picker } from "emoji-mart";
|
|
3
|
-
import {
|
|
4
|
+
import { onUnmounted, ref, shallowRef, toValue, watch, watchEffect } from "vue";
|
|
4
5
|
|
|
6
|
+
//#region ../_utils/custom-watch.ts
|
|
7
|
+
function watchRefOrGetter(value, callback) {
|
|
8
|
+
const refValue = ref(toValue(value));
|
|
9
|
+
watchEffect(() => {
|
|
10
|
+
refValue.value = toValue(value);
|
|
11
|
+
});
|
|
12
|
+
watch(refValue, (val) => {
|
|
13
|
+
callback?.(val);
|
|
14
|
+
});
|
|
15
|
+
return refValue;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
5
19
|
//#region src/index.ts
|
|
6
|
-
function useEmojiPicker(templateRef,
|
|
20
|
+
function useEmojiPicker(templateRef, options) {
|
|
21
|
+
const { darkMode, language, emojiPickerOptions } = options ?? {};
|
|
22
|
+
const darkModeRef = watchRefOrGetter(darkMode, updateTheme);
|
|
23
|
+
const languageRef = watchRefOrGetter(language, updateLanguage);
|
|
7
24
|
const _options = {
|
|
8
25
|
data,
|
|
9
26
|
emojiButtonRadius: "6px",
|
|
@@ -15,51 +32,51 @@ function useEmojiPicker(templateRef, darkMode, language, options) {
|
|
|
15
32
|
"rgba(255,213,143,.7)",
|
|
16
33
|
"rgba(211,209,255,.7)"
|
|
17
34
|
],
|
|
18
|
-
theme:
|
|
19
|
-
locale:
|
|
20
|
-
...
|
|
35
|
+
theme: darkModeRef.value ? "dark" : "light",
|
|
36
|
+
locale: languageRef.value,
|
|
37
|
+
...emojiPickerOptions
|
|
21
38
|
};
|
|
22
|
-
const
|
|
23
|
-
|
|
39
|
+
const emojiPickerInst = shallowRef(null);
|
|
40
|
+
const onRenderEvent = createEventHook();
|
|
41
|
+
function updateTheme(darkMode) {
|
|
42
|
+
if (darkMode) darkModeRef.value = darkMode;
|
|
43
|
+
_options.theme = darkModeRef.value ? "dark" : "light";
|
|
44
|
+
destroy();
|
|
45
|
+
render();
|
|
46
|
+
}
|
|
47
|
+
function updateLanguage(language) {
|
|
48
|
+
if (language) languageRef.value = language;
|
|
49
|
+
_options.locale = languageRef.value ?? "zh";
|
|
50
|
+
destroy();
|
|
51
|
+
render();
|
|
52
|
+
}
|
|
24
53
|
function render() {
|
|
25
|
-
if (templateRef.value
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
54
|
+
if (templateRef.value) {
|
|
55
|
+
if (!emojiPickerInst.value) {
|
|
56
|
+
emojiPickerInst.value = new Picker({
|
|
57
|
+
parent: templateRef.value,
|
|
58
|
+
..._options
|
|
59
|
+
});
|
|
60
|
+
onRenderEvent.trigger(emojiPickerInst.value);
|
|
61
|
+
}
|
|
31
62
|
}
|
|
32
63
|
}
|
|
33
64
|
function destroy() {
|
|
34
|
-
|
|
35
|
-
templateRef.value.innerHTML = "";
|
|
36
|
-
emojiPicker.value = null;
|
|
65
|
+
emojiPickerInst.value = null;
|
|
66
|
+
if (templateRef.value) templateRef.value.innerHTML = "";
|
|
37
67
|
}
|
|
38
|
-
|
|
39
|
-
render();
|
|
40
|
-
});
|
|
41
|
-
watch(() => darkMode?.value, (v) => {
|
|
42
|
-
destroy();
|
|
43
|
-
_options.theme = v ? "dark" : "light";
|
|
44
|
-
render();
|
|
45
|
-
});
|
|
46
|
-
watch(() => language?.value, (v) => {
|
|
47
|
-
destroy();
|
|
48
|
-
_options.locale = v ?? "zh";
|
|
49
|
-
render();
|
|
50
|
-
});
|
|
51
|
-
onMounted(() => {
|
|
52
|
-
render();
|
|
53
|
-
});
|
|
68
|
+
watchOnce(templateRef, render);
|
|
54
69
|
onUnmounted(() => {
|
|
55
70
|
destroy();
|
|
56
71
|
});
|
|
57
72
|
return {
|
|
58
73
|
templateRef,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
darkModeRef,
|
|
75
|
+
languageRef,
|
|
76
|
+
emojiPickerInst,
|
|
77
|
+
updateTheme,
|
|
78
|
+
updateLanguage,
|
|
79
|
+
onRender: onRenderEvent.on
|
|
63
80
|
};
|
|
64
81
|
}
|
|
65
82
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oiij/emoji-picker",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.12",
|
|
5
5
|
"description": "A Vue Composable for emoji-picker",
|
|
6
6
|
"author": "oiij",
|
|
7
7
|
"license": "MIT",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"@emoji-mart/data": "^1.2.1",
|
|
29
29
|
"@vueuse/core": "^14.1.0",
|
|
30
30
|
"emoji-mart": "^5.6.0",
|
|
31
|
-
"vue": "^3.5.
|
|
31
|
+
"vue": "^3.5.27"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@emoji-mart/data": "^1.2.1",
|
|
35
35
|
"@vueuse/core": "^14.1.0",
|
|
36
36
|
"emoji-mart": "^5.6.0",
|
|
37
|
-
"vue": "^3.5.
|
|
37
|
+
"vue": "^3.5.27"
|
|
38
38
|
},
|
|
39
39
|
"publishConfig": {
|
|
40
40
|
"access": "public"
|