@atlaskit/emoji 67.0.7 → 67.1.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/CHANGELOG.md +14 -0
- package/dist/cjs/api/EmojiResource.js +12 -1
- package/dist/cjs/components/common/EmojiActions.js +2 -2
- package/dist/cjs/components/hooks.js +8 -5
- package/dist/cjs/components/picker/EmojiPickerComponent.js +23 -40
- package/dist/cjs/components/picker/EmojiPickerList.js +20 -43
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +53 -117
- package/dist/cjs/components/picker/VirtualList.js +100 -180
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/cjs/i18n/cs.js +35 -34
- package/dist/cjs/i18n/da.js +35 -34
- package/dist/cjs/i18n/de.js +35 -34
- package/dist/cjs/i18n/en.js +35 -34
- package/dist/cjs/i18n/en_GB.js +35 -34
- package/dist/cjs/i18n/es.js +35 -34
- package/dist/cjs/i18n/fi.js +35 -34
- package/dist/cjs/i18n/fr.js +35 -34
- package/dist/cjs/i18n/hu.js +35 -34
- package/dist/cjs/i18n/it.js +35 -34
- package/dist/cjs/i18n/ja.js +35 -34
- package/dist/cjs/i18n/ko.js +35 -34
- package/dist/cjs/i18n/nb.js +35 -34
- package/dist/cjs/i18n/nl.js +35 -34
- package/dist/cjs/i18n/pl.js +35 -34
- package/dist/cjs/i18n/pt_BR.js +35 -34
- package/dist/cjs/i18n/ru.js +35 -34
- package/dist/cjs/i18n/sv.js +35 -34
- package/dist/cjs/i18n/th.js +35 -34
- package/dist/cjs/i18n/tr.js +35 -34
- package/dist/cjs/i18n/uk.js +35 -34
- package/dist/cjs/i18n/vi.js +35 -34
- package/dist/cjs/i18n/zh.js +35 -34
- package/dist/cjs/i18n/zh_TW.js +35 -34
- package/dist/cjs/types.js +7 -1
- package/dist/cjs/util/constants.js +4 -2
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiResource.js +13 -2
- package/dist/es2019/components/common/EmojiActions.js +1 -1
- package/dist/es2019/components/hooks.js +7 -4
- package/dist/es2019/components/picker/EmojiPickerComponent.js +24 -41
- package/dist/es2019/components/picker/EmojiPickerList.js +17 -40
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +51 -98
- package/dist/es2019/components/picker/VirtualList.js +71 -113
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/es2019/i18n/cs.js +35 -34
- package/dist/es2019/i18n/da.js +35 -34
- package/dist/es2019/i18n/de.js +35 -34
- package/dist/es2019/i18n/en.js +35 -34
- package/dist/es2019/i18n/en_GB.js +35 -34
- package/dist/es2019/i18n/es.js +35 -34
- package/dist/es2019/i18n/fi.js +35 -34
- package/dist/es2019/i18n/fr.js +35 -34
- package/dist/es2019/i18n/hu.js +35 -34
- package/dist/es2019/i18n/it.js +35 -34
- package/dist/es2019/i18n/ja.js +35 -34
- package/dist/es2019/i18n/ko.js +35 -34
- package/dist/es2019/i18n/nb.js +35 -34
- package/dist/es2019/i18n/nl.js +35 -34
- package/dist/es2019/i18n/pl.js +35 -34
- package/dist/es2019/i18n/pt_BR.js +35 -34
- package/dist/es2019/i18n/ru.js +35 -34
- package/dist/es2019/i18n/sv.js +35 -34
- package/dist/es2019/i18n/th.js +35 -34
- package/dist/es2019/i18n/tr.js +35 -34
- package/dist/es2019/i18n/uk.js +35 -34
- package/dist/es2019/i18n/vi.js +35 -34
- package/dist/es2019/i18n/zh.js +35 -34
- package/dist/es2019/i18n/zh_TW.js +35 -34
- package/dist/es2019/types.js +5 -0
- package/dist/es2019/util/constants.js +1 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiResource.js +13 -2
- package/dist/esm/components/common/EmojiActions.js +1 -1
- package/dist/esm/components/hooks.js +7 -4
- package/dist/esm/components/picker/EmojiPickerComponent.js +24 -41
- package/dist/esm/components/picker/EmojiPickerList.js +21 -40
- package/dist/esm/components/picker/EmojiPickerListSearch.js +51 -117
- package/dist/esm/components/picker/VirtualList.js +99 -180
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +0 -10
- package/dist/esm/i18n/cs.js +35 -34
- package/dist/esm/i18n/da.js +35 -34
- package/dist/esm/i18n/de.js +35 -34
- package/dist/esm/i18n/en.js +35 -34
- package/dist/esm/i18n/en_GB.js +35 -34
- package/dist/esm/i18n/es.js +35 -34
- package/dist/esm/i18n/fi.js +35 -34
- package/dist/esm/i18n/fr.js +35 -34
- package/dist/esm/i18n/hu.js +35 -34
- package/dist/esm/i18n/it.js +35 -34
- package/dist/esm/i18n/ja.js +35 -34
- package/dist/esm/i18n/ko.js +35 -34
- package/dist/esm/i18n/nb.js +35 -34
- package/dist/esm/i18n/nl.js +35 -34
- package/dist/esm/i18n/pl.js +35 -34
- package/dist/esm/i18n/pt_BR.js +35 -34
- package/dist/esm/i18n/ru.js +35 -34
- package/dist/esm/i18n/sv.js +35 -34
- package/dist/esm/i18n/th.js +35 -34
- package/dist/esm/i18n/tr.js +35 -34
- package/dist/esm/i18n/uk.js +35 -34
- package/dist/esm/i18n/vi.js +35 -34
- package/dist/esm/i18n/zh.js +35 -34
- package/dist/esm/i18n/zh_TW.js +35 -34
- package/dist/esm/types.js +5 -0
- package/dist/esm/util/constants.js +1 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/common/EmojiActions.d.ts +1 -1
- package/dist/types/components/hooks.d.ts +1 -1
- package/dist/types/components/picker/CategoryTracker.d.ts +2 -2
- package/dist/types/components/picker/EmojiPickerList.d.ts +4 -2
- package/dist/types/components/picker/EmojiPickerListSearch.d.ts +3 -8
- package/dist/types/components/picker/VirtualList.d.ts +5 -24
- package/dist/types/i18n/cs.d.ts +34 -34
- package/dist/types/i18n/da.d.ts +34 -34
- package/dist/types/i18n/de.d.ts +34 -34
- package/dist/types/i18n/en.d.ts +34 -34
- package/dist/types/i18n/en_GB.d.ts +34 -34
- package/dist/types/i18n/es.d.ts +34 -34
- package/dist/types/i18n/fi.d.ts +34 -34
- package/dist/types/i18n/fr.d.ts +34 -34
- package/dist/types/i18n/hu.d.ts +34 -34
- package/dist/types/i18n/it.d.ts +34 -34
- package/dist/types/i18n/ja.d.ts +34 -34
- package/dist/types/i18n/ko.d.ts +34 -34
- package/dist/types/i18n/nb.d.ts +34 -34
- package/dist/types/i18n/nl.d.ts +34 -34
- package/dist/types/i18n/pl.d.ts +34 -34
- package/dist/types/i18n/pt_BR.d.ts +34 -34
- package/dist/types/i18n/ru.d.ts +34 -34
- package/dist/types/i18n/sv.d.ts +34 -34
- package/dist/types/i18n/th.d.ts +34 -34
- package/dist/types/i18n/tr.d.ts +34 -34
- package/dist/types/i18n/uk.d.ts +34 -34
- package/dist/types/i18n/vi.d.ts +34 -34
- package/dist/types/i18n/zh.d.ts +34 -34
- package/dist/types/i18n/zh_TW.d.ts +34 -34
- package/dist/types/types.d.ts +5 -0
- package/dist/types/util/constants.d.ts +1 -0
- package/package.json +5 -4
- package/report.api.md +10 -0
package/dist/cjs/i18n/vi.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
/* prettier-ignore */
|
|
7
8
|
/**
|
|
8
9
|
* NOTE:
|
|
9
10
|
*
|
|
@@ -12,39 +13,39 @@ exports.default = void 0;
|
|
|
12
13
|
*/
|
|
13
14
|
//Vietnamese (Vietnam)
|
|
14
15
|
var _default = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
16
|
+
"fabric.emoji.add.custom.emoji.label": "Thêm biểu tượng cảm xúc của riêng bạn",
|
|
17
|
+
"fabric.emoji.add.label": "Thêm biểu tượng cảm xúc",
|
|
18
|
+
"fabric.emoji.cancel.label": "Hủy",
|
|
19
|
+
"fabric.emoji.categories.search.results": "Kết quả tìm kiếm",
|
|
20
|
+
"fabric.emoji.category.activity": "Hoạt động",
|
|
21
|
+
"fabric.emoji.category.all.uploads": "Tất cả các nội dung tải lên",
|
|
22
|
+
"fabric.emoji.category.flags": "Cờ",
|
|
23
|
+
"fabric.emoji.category.foods": "Thực phẩm & Đồ uống",
|
|
24
|
+
"fabric.emoji.category.frequent": "Thường ngày",
|
|
25
|
+
"fabric.emoji.category.nature": "Thiên nhiên",
|
|
26
|
+
"fabric.emoji.category.objects": "Đồ vật",
|
|
27
|
+
"fabric.emoji.category.people": "Mọi người",
|
|
28
|
+
"fabric.emoji.category.places": "Du lịch & Địa điểm",
|
|
29
|
+
"fabric.emoji.category.productivity": "Năng suất",
|
|
30
|
+
"fabric.emoji.category.symbols": "Biểu tượng",
|
|
31
|
+
"fabric.emoji.category.user.uploads": "Các nội dung bạn tải lên",
|
|
32
|
+
"fabric.emoji.choose.file.screenReaderDescription": "Chọn một tệp cho biểu tượng cảm xúc. JPG, PNG hoặc GIF. Kích thước tối đa 1 MB.",
|
|
33
|
+
"fabric.emoji.choose.file.title": "Chọn tập tin",
|
|
34
|
+
"fabric.emoji.delete.description": "Tất cả các phiên bản hiện tại của biểu tượng cảm xúc này sẽ được thay thế bằng {emojiShortName}",
|
|
35
|
+
"fabric.emoji.delete.label": "Xóa",
|
|
36
|
+
"fabric.emoji.delete.title": "Xóa biểu tượng cảm xúc",
|
|
37
|
+
"fabric.emoji.error.delete.failed": "Không xóa được",
|
|
38
|
+
"fabric.emoji.error.image.too.big": "Hình ảnh đã chọn có kích thước lớn hơn 1 MB",
|
|
39
|
+
"fabric.emoji.error.invalid.image": "Hình ảnh đã chọn không hợp lệ",
|
|
40
|
+
"fabric.emoji.error.upload.failed": "Không thể tải lên",
|
|
41
|
+
"fabric.emoji.image.requirements": "JPG, PNG hoặc GIF. Kích thước tối đa 1 MB.",
|
|
42
|
+
"fabric.emoji.name.ariaLabel": "Nhập tên cho biểu tượng cảm xúc mới này",
|
|
43
|
+
"fabric.emoji.placeholder": "Tên biểu tượng cảm xúc",
|
|
44
|
+
"fabric.emoji.preview": "Biểu tượng cảm xúc mới của bạn {emoji} trông rất tuyệt",
|
|
45
|
+
"fabric.emoji.preview.title": "Xem trước",
|
|
46
|
+
"fabric.emoji.retry.label": "Thử lại",
|
|
47
|
+
"fabric.emoji.search.label": "Tìm kiếm biểu tượng cảm xúc",
|
|
48
|
+
"fabric.emoji.search.placeholder": "Tìm kiếm",
|
|
49
|
+
"fabric.emoji.select.skin.tone.ariaLabel": "Chọn tông màu da, {selectedTone}"
|
|
49
50
|
};
|
|
50
51
|
exports.default = _default;
|
package/dist/cjs/i18n/zh.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
/* prettier-ignore */
|
|
7
8
|
/**
|
|
8
9
|
* NOTE:
|
|
9
10
|
*
|
|
@@ -12,39 +13,39 @@ exports.default = void 0;
|
|
|
12
13
|
*/
|
|
13
14
|
//Chinese (Simplified)
|
|
14
15
|
var _default = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
16
|
+
"fabric.emoji.add.custom.emoji.label": "添加您自己的表情符号",
|
|
17
|
+
"fabric.emoji.add.label": "添加表情符号",
|
|
18
|
+
"fabric.emoji.cancel.label": "取消",
|
|
19
|
+
"fabric.emoji.categories.search.results": "搜索结果",
|
|
20
|
+
"fabric.emoji.category.activity": "活动",
|
|
21
|
+
"fabric.emoji.category.all.uploads": "所有上传",
|
|
22
|
+
"fabric.emoji.category.flags": "标记",
|
|
23
|
+
"fabric.emoji.category.foods": "食物和饮品",
|
|
24
|
+
"fabric.emoji.category.frequent": "频率",
|
|
25
|
+
"fabric.emoji.category.nature": "性质",
|
|
26
|
+
"fabric.emoji.category.objects": "对象",
|
|
27
|
+
"fabric.emoji.category.people": "人员",
|
|
28
|
+
"fabric.emoji.category.places": "旅行和地点",
|
|
29
|
+
"fabric.emoji.category.productivity": "生产力",
|
|
30
|
+
"fabric.emoji.category.symbols": "符号",
|
|
31
|
+
"fabric.emoji.category.user.uploads": "您的上传",
|
|
32
|
+
"fabric.emoji.choose.file.screenReaderDescription": "为表情符号选择一个文件。JPG、PNG 或 GIF。文件大小不得超过 1 MB。",
|
|
33
|
+
"fabric.emoji.choose.file.title": "选择文件",
|
|
34
|
+
"fabric.emoji.delete.description": "此表情符号的所有现有实例将替换为{emojiShortName}",
|
|
35
|
+
"fabric.emoji.delete.label": "删除",
|
|
36
|
+
"fabric.emoji.delete.title": "删除表情符号",
|
|
37
|
+
"fabric.emoji.error.delete.failed": "删除失败",
|
|
38
|
+
"fabric.emoji.error.image.too.big": "选择的图像超过 1 MB",
|
|
39
|
+
"fabric.emoji.error.invalid.image": "选择的图像无效",
|
|
40
|
+
"fabric.emoji.error.upload.failed": "上传失败",
|
|
41
|
+
"fabric.emoji.image.requirements": "JPG、PNG 或 GIF 最大为 1 MB。",
|
|
42
|
+
"fabric.emoji.name.ariaLabel": "为新表情符号输入名称",
|
|
43
|
+
"fabric.emoji.placeholder": "表情符号名称",
|
|
44
|
+
"fabric.emoji.preview": "您的新表情符号{emoji}看起来很棒",
|
|
45
|
+
"fabric.emoji.preview.title": "预览",
|
|
46
|
+
"fabric.emoji.retry.label": "重试",
|
|
47
|
+
"fabric.emoji.search.label": "搜索表情",
|
|
48
|
+
"fabric.emoji.search.placeholder": "搜索",
|
|
49
|
+
"fabric.emoji.select.skin.tone.ariaLabel": "选择肤色,{selectedTone}"
|
|
49
50
|
};
|
|
50
51
|
exports.default = _default;
|
package/dist/cjs/i18n/zh_TW.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
/* prettier-ignore */
|
|
7
8
|
/**
|
|
8
9
|
* NOTE:
|
|
9
10
|
*
|
|
@@ -12,39 +13,39 @@ exports.default = void 0;
|
|
|
12
13
|
*/
|
|
13
14
|
//Chinese (Traditional)
|
|
14
15
|
var _default = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
16
|
+
"fabric.emoji.add.custom.emoji.label": "新增專屬的表情符號",
|
|
17
|
+
"fabric.emoji.add.label": "新增表情符號",
|
|
18
|
+
"fabric.emoji.cancel.label": "取消",
|
|
19
|
+
"fabric.emoji.categories.search.results": "搜尋結果",
|
|
20
|
+
"fabric.emoji.category.activity": "活動",
|
|
21
|
+
"fabric.emoji.category.all.uploads": "所有上傳項目",
|
|
22
|
+
"fabric.emoji.category.flags": "旗標",
|
|
23
|
+
"fabric.emoji.category.foods": "食物和飲料",
|
|
24
|
+
"fabric.emoji.category.frequent": "常用項目",
|
|
25
|
+
"fabric.emoji.category.nature": "自然",
|
|
26
|
+
"fabric.emoji.category.objects": "物體",
|
|
27
|
+
"fabric.emoji.category.people": "人員",
|
|
28
|
+
"fabric.emoji.category.places": "旅遊和地點",
|
|
29
|
+
"fabric.emoji.category.productivity": "生產力",
|
|
30
|
+
"fabric.emoji.category.symbols": "符號",
|
|
31
|
+
"fabric.emoji.category.user.uploads": "您的上傳項目",
|
|
32
|
+
"fabric.emoji.choose.file.screenReaderDescription": "請選擇表情符號的檔案。JPG、PNG 或 GIF。大小上限為 1 MB。",
|
|
33
|
+
"fabric.emoji.choose.file.title": "選擇檔案",
|
|
34
|
+
"fabric.emoji.delete.description": "此表情符號的所有現有執行個體都將取代為 {emojiShortName}",
|
|
35
|
+
"fabric.emoji.delete.label": "移除",
|
|
36
|
+
"fabric.emoji.delete.title": "移除表情符號",
|
|
37
|
+
"fabric.emoji.error.delete.failed": "移除失敗",
|
|
38
|
+
"fabric.emoji.error.image.too.big": "所選的影像超過 1 MB",
|
|
39
|
+
"fabric.emoji.error.invalid.image": "所選的影像無效",
|
|
40
|
+
"fabric.emoji.error.upload.failed": "上傳失敗",
|
|
41
|
+
"fabric.emoji.image.requirements": "JPG、PNG 或 GIF。大小上限為 1 MB。",
|
|
42
|
+
"fabric.emoji.name.ariaLabel": "請輸入新表情符號的名稱",
|
|
43
|
+
"fabric.emoji.placeholder": "表情符號名稱",
|
|
44
|
+
"fabric.emoji.preview": "新的表情符號 {emoji} 看起來很棒",
|
|
45
|
+
"fabric.emoji.preview.title": "預覽",
|
|
46
|
+
"fabric.emoji.retry.label": "重試",
|
|
47
|
+
"fabric.emoji.search.label": "搜尋表情符號",
|
|
48
|
+
"fabric.emoji.search.placeholder": "搜尋",
|
|
49
|
+
"fabric.emoji.select.skin.tone.ariaLabel": "選取膚色,{selectedTone}"
|
|
49
50
|
};
|
|
50
51
|
exports.default = _default;
|
package/dist/cjs/types.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.UfoExperienceName = exports.UfoEmojiTimingsKeys = exports.UfoEmojiTimings = exports.UfoComponentName = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
6
|
+
exports.UfoExperienceName = exports.UfoEmojiTimingsKeys = exports.UfoEmojiTimings = exports.UfoComponentName = exports.SearchSourceTypes = exports.SearchSort = exports.ProviderTypes = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Minimum information to defined an emoji is the shortName.
|
|
9
9
|
* In order to uniquely define an emoji, the id should be included, and is
|
|
@@ -35,6 +35,12 @@ exports.SearchSort = SearchSort;
|
|
|
35
35
|
SearchSort[SearchSort["Default"] = 1] = "Default";
|
|
36
36
|
SearchSort[SearchSort["UsageFrequency"] = 2] = "UsageFrequency";
|
|
37
37
|
})(SearchSort || (exports.SearchSort = SearchSort = {}));
|
|
38
|
+
var SearchSourceTypes;
|
|
39
|
+
exports.SearchSourceTypes = SearchSourceTypes;
|
|
40
|
+
(function (SearchSourceTypes) {
|
|
41
|
+
SearchSourceTypes["PICKER"] = "picker";
|
|
42
|
+
SearchSourceTypes["TYPEAHEAD"] = "typeahead";
|
|
43
|
+
})(SearchSourceTypes || (exports.SearchSourceTypes = SearchSourceTypes = {}));
|
|
38
44
|
var ProviderTypes;
|
|
39
45
|
exports.ProviderTypes = ProviderTypes;
|
|
40
46
|
(function (ProviderTypes) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.userCustomTitle = exports.sizeGap = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerPreviewHeight = exports.emojiPickerMinHeight = exports.emojiPickerListHeight = exports.emojiPickerHeightWithPreview = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiPickerSize = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP = exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = exports.MAX_ORDINAL = void 0;
|
|
6
|
+
exports.userCustomTitle = exports.sizeGap = exports.selectedToneStorageKey = exports.migrationUserId = exports.localStoragePrefix = exports.frequentCategory = exports.emojiPickerWidth = exports.emojiPickerPreviewHeight = exports.emojiPickerMinHeight = exports.emojiPickerListHeight = exports.emojiPickerHeightWithPreview = exports.emojiPickerHeight = exports.deleteEmojiLabel = exports.defaultListLimit = exports.defaultEmojiPickerSize = exports.defaultEmojiHeight = exports.defaultCategories = exports.dataURLPrefix = exports.customType = exports.customTitle = exports.customCategory = exports.analyticsEmojiPrefix = exports.SAMPLING_RATE_EMOJI_RESOURCE_FETCHED_EXP = exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = exports.MAX_ORDINAL = exports.EMOJI_SEARCH_DEBOUNCE = void 0;
|
|
7
7
|
var customCategory = 'CUSTOM';
|
|
8
8
|
exports.customCategory = customCategory;
|
|
9
9
|
var frequentCategory = 'FREQUENT';
|
|
@@ -54,9 +54,11 @@ exports.defaultListLimit = defaultListLimit;
|
|
|
54
54
|
var migrationUserId = 'hipchat_migration_emoticons';
|
|
55
55
|
exports.migrationUserId = migrationUserId;
|
|
56
56
|
var analyticsEmojiPrefix = 'atlassian.fabric.emoji.picker';
|
|
57
|
+
exports.analyticsEmojiPrefix = analyticsEmojiPrefix;
|
|
58
|
+
var EMOJI_SEARCH_DEBOUNCE = 150;
|
|
57
59
|
|
|
58
60
|
// This is the base sampling rate in Emoji
|
|
59
|
-
exports.
|
|
61
|
+
exports.EMOJI_SEARCH_DEBOUNCE = EMOJI_SEARCH_DEBOUNCE;
|
|
60
62
|
var SAMPLING_RATE_EMOJI_RENDERED_EXP = 20;
|
|
61
63
|
// This rate is used in fetching emoji resource
|
|
62
64
|
exports.SAMPLING_RATE_EMOJI_RENDERED_EXP = SAMPLING_RATE_EMOJI_RENDERED_EXP;
|
package/dist/cjs/version.json
CHANGED
|
@@ -8,7 +8,7 @@ import { ProviderTypes } from '../types';
|
|
|
8
8
|
import EmojiLoader from './EmojiLoader';
|
|
9
9
|
import EmojiRepository from './EmojiRepository';
|
|
10
10
|
import SiteEmojiResource from './media/SiteEmojiResource';
|
|
11
|
-
import { sampledUfoEmojiResourceFetched } from '../util/analytics/ufoExperiences';
|
|
11
|
+
import { sampledUfoEmojiResourceFetched, ufoExperiences } from '../util/analytics/ufoExperiences';
|
|
12
12
|
/**
|
|
13
13
|
* Checks if the emojiProvider can support uploading at a feature level.
|
|
14
14
|
*
|
|
@@ -284,12 +284,23 @@ export class EmojiResource extends AbstractResource {
|
|
|
284
284
|
return optimistic;
|
|
285
285
|
}
|
|
286
286
|
filter(query, options) {
|
|
287
|
+
ufoExperiences['emoji-searched'].start();
|
|
288
|
+
ufoExperiences['emoji-searched'].addMetadata({
|
|
289
|
+
queryLength: (query === null || query === void 0 ? void 0 : query.length) || 0
|
|
290
|
+
});
|
|
287
291
|
this.lastQuery = {
|
|
288
292
|
query,
|
|
289
293
|
options
|
|
290
294
|
};
|
|
291
295
|
if (this.emojiRepository) {
|
|
292
|
-
this.
|
|
296
|
+
const searchResults = this.emojiRepository.search(query, options);
|
|
297
|
+
this.notifyResult(searchResults);
|
|
298
|
+
ufoExperiences['emoji-searched'].success({
|
|
299
|
+
metadata: {
|
|
300
|
+
emojisLength: searchResults.emojis.length,
|
|
301
|
+
source: (options === null || options === void 0 ? void 0 : options.source) || 'typeahead'
|
|
302
|
+
}
|
|
303
|
+
});
|
|
293
304
|
} else {
|
|
294
305
|
// not ready
|
|
295
306
|
this.notifyNotReady();
|
|
@@ -5,7 +5,7 @@ import { jsx } from '@emotion/react';
|
|
|
5
5
|
import { FormattedMessage, injectIntl } from 'react-intl-next';
|
|
6
6
|
import EmojiDeletePreview from '../common/EmojiDeletePreview';
|
|
7
7
|
import EmojiUploadPicker from '../common/EmojiUploadPicker';
|
|
8
|
-
import EmojiPickerListSearch from '../picker/EmojiPickerListSearch';
|
|
8
|
+
import { EmojiPickerListSearch } from '../picker/EmojiPickerListSearch';
|
|
9
9
|
import ToneSelector from './ToneSelector';
|
|
10
10
|
import EmojiButton from './EmojiButton';
|
|
11
11
|
import { messages } from '../i18n';
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { useRef, useEffect } from 'react';
|
|
2
|
-
export function
|
|
3
|
-
const
|
|
2
|
+
export function useIsMounted() {
|
|
3
|
+
const isMountedRef = useRef(false);
|
|
4
4
|
useEffect(() => {
|
|
5
|
-
|
|
5
|
+
isMountedRef.current = true;
|
|
6
|
+
return () => {
|
|
7
|
+
isMountedRef.current = false;
|
|
8
|
+
};
|
|
6
9
|
}, []);
|
|
7
|
-
return
|
|
10
|
+
return isMountedRef.current;
|
|
8
11
|
}
|
|
@@ -7,7 +7,7 @@ import { getEmojiVariation } from '../../api/EmojiRepository';
|
|
|
7
7
|
import { supportsUploadFeature } from '../../api/EmojiResource';
|
|
8
8
|
import { customCategory, defaultEmojiPickerSize, frequentCategory } from '../../util/constants';
|
|
9
9
|
import { containsEmojiId, isPromise /*, isEmojiIdEqual, isEmojiLoaded*/, isEmojiDescription } from '../../util/type-helpers';
|
|
10
|
-
import { SearchSort } from '../../types';
|
|
10
|
+
import { SearchSort, SearchSourceTypes } from '../../types';
|
|
11
11
|
import { getToneEmoji } from '../../util/filters';
|
|
12
12
|
import { uploadEmoji } from '../common/UploadEmoji';
|
|
13
13
|
import { createRecordSelectionDefault } from '../common/RecordSelectionDefault';
|
|
@@ -16,8 +16,8 @@ import EmojiPickerFooter from './EmojiPickerFooter';
|
|
|
16
16
|
import EmojiPickerList from './EmojiPickerList';
|
|
17
17
|
import { createAndFireEventInElementsChannel, categoryClickedEvent, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, selectedFileEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, toneSelectorClosedEvent, ufoExperiences } from '../../util/analytics';
|
|
18
18
|
import { emojiPicker } from './styles';
|
|
19
|
-
import { useDidMount } from '../hooks';
|
|
20
19
|
import { useEmoji } from '../../hooks/useEmoji';
|
|
20
|
+
import { useIsMounted } from '../hooks';
|
|
21
21
|
const FREQUENTLY_USED_MAX = 16;
|
|
22
22
|
const EmojiPickerComponent = ({
|
|
23
23
|
onSelection,
|
|
@@ -47,12 +47,11 @@ const EmojiPickerComponent = ({
|
|
|
47
47
|
const emojiPickerList = useMemo(() => /*#__PURE__*/createRef(), []);
|
|
48
48
|
const openTime = useRef(0);
|
|
49
49
|
const isMounting = useRef(true);
|
|
50
|
-
const didMount = useDidMount();
|
|
51
|
-
const updateAfterDidMount = useRef(true);
|
|
52
50
|
const previousEmojiProvider = useRef(emojiProvider);
|
|
53
51
|
const currentUser = useMemo(() => {
|
|
54
52
|
return emojiProvider.getCurrentUser();
|
|
55
53
|
}, [emojiProvider]);
|
|
54
|
+
const isMounted = useIsMounted();
|
|
56
55
|
const fireAnalytics = useCallback(analyticsEvent => {
|
|
57
56
|
if (createAnalyticsEvent) {
|
|
58
57
|
createAndFireEventInElementsChannel(analyticsEvent)(createAnalyticsEvent);
|
|
@@ -157,7 +156,11 @@ const EmojiPickerComponent = ({
|
|
|
157
156
|
emojiToRender,
|
|
158
157
|
searchEmoji: searchResults.emojis
|
|
159
158
|
});
|
|
160
|
-
|
|
159
|
+
fireAnalytics(pickerSearchedEvent({
|
|
160
|
+
queryLength: searchQuery.length,
|
|
161
|
+
numMatches: searchResults.emojis.length
|
|
162
|
+
}));
|
|
163
|
+
}, [frequentlyUsedEmojis, query, setStateAfterEmojiChange, fireAnalytics]);
|
|
161
164
|
const onProviderChange = useMemo(() => {
|
|
162
165
|
return {
|
|
163
166
|
result: onSearchResult
|
|
@@ -242,22 +245,22 @@ const EmojiPickerComponent = ({
|
|
|
242
245
|
const onFileChooserClicked = useCallback(() => {
|
|
243
246
|
fireAnalytics(selectedFileEvent());
|
|
244
247
|
}, [fireAnalytics]);
|
|
248
|
+
const scrollToTopOfList = useCallback(() => {
|
|
249
|
+
var _emojiPickerList$curr;
|
|
250
|
+
(_emojiPickerList$curr = emojiPickerList.current) === null || _emojiPickerList$curr === void 0 ? void 0 : _emojiPickerList$curr.scrollToTop();
|
|
251
|
+
}, [emojiPickerList]);
|
|
245
252
|
const onSearch = useCallback(searchQuery => {
|
|
246
253
|
const options = {
|
|
247
|
-
skinTone: selectedTone
|
|
254
|
+
skinTone: selectedTone,
|
|
255
|
+
source: SearchSourceTypes.PICKER
|
|
248
256
|
};
|
|
249
|
-
if (query) {
|
|
250
|
-
ufoExperiences['emoji-searched'].start();
|
|
251
|
-
ufoExperiences['emoji-searched'].addMetadata({
|
|
252
|
-
queryLength: query.length,
|
|
253
|
-
source: 'EmojiPickerComponent'
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
257
|
if (searchQuery !== query) {
|
|
257
258
|
setQuery(searchQuery);
|
|
259
|
+
// scroll to top when search, which is search results section
|
|
260
|
+
scrollToTopOfList();
|
|
258
261
|
}
|
|
259
|
-
updateEmojis(
|
|
260
|
-
}, [query, selectedTone, updateEmojis]);
|
|
262
|
+
updateEmojis(searchQuery, options);
|
|
263
|
+
}, [query, selectedTone, updateEmojis, scrollToTopOfList]);
|
|
261
264
|
const onOpenUpload = useCallback(() => {
|
|
262
265
|
// Prime upload token so it's ready when the user adds
|
|
263
266
|
if (supportsUploadFeature(emojiProvider)) {
|
|
@@ -273,8 +276,8 @@ const EmojiPickerComponent = ({
|
|
|
273
276
|
if (emojiPickerList.current) {
|
|
274
277
|
// Wait a tick to ensure repaint and updated height for picker list
|
|
275
278
|
window.setTimeout(() => {
|
|
276
|
-
var _emojiPickerList$
|
|
277
|
-
(_emojiPickerList$
|
|
279
|
+
var _emojiPickerList$curr2;
|
|
280
|
+
(_emojiPickerList$curr2 = emojiPickerList.current) === null || _emojiPickerList$curr2 === void 0 ? void 0 : _emojiPickerList$curr2.scrollToBottom();
|
|
278
281
|
}, 0);
|
|
279
282
|
}
|
|
280
283
|
}, [emojiPickerList]);
|
|
@@ -343,11 +346,10 @@ const EmojiPickerComponent = ({
|
|
|
343
346
|
}
|
|
344
347
|
useEffect(() => {
|
|
345
348
|
// componentDidMount logic
|
|
346
|
-
if (
|
|
349
|
+
if (!isMounted) {
|
|
347
350
|
onComponentDidMount();
|
|
348
|
-
updateAfterDidMount.current = false;
|
|
349
351
|
}
|
|
350
|
-
}, [
|
|
352
|
+
}, [onComponentDidMount, isMounted]);
|
|
351
353
|
useEffect(() => {
|
|
352
354
|
previousEmojiProvider.current.unsubscribe(onProviderChange);
|
|
353
355
|
previousEmojiProvider.current = emojiProvider;
|
|
@@ -356,26 +358,6 @@ const EmojiPickerComponent = ({
|
|
|
356
358
|
emojiProvider.unsubscribe(onProviderChange);
|
|
357
359
|
};
|
|
358
360
|
}, [emojiProvider, onProviderChange]);
|
|
359
|
-
useEffect(() => {
|
|
360
|
-
// We changed provider which means we subscribed to filter results for a new subscriber.
|
|
361
|
-
// So we refresh the emoji display with onSearch and we do it here, after the new props have
|
|
362
|
-
// been set since onSearch leads to filter being called on the current emojiProvider.
|
|
363
|
-
// (Calling onSearch in a '...Will...' lifecycle method would lead to filter being called on
|
|
364
|
-
// an emojiProvider we have already unsubscribed from)
|
|
365
|
-
onSearch(query);
|
|
366
|
-
}, [emojiProvider, onSearch, query]);
|
|
367
|
-
useEffect(() => {
|
|
368
|
-
// Fire analytics event whenever query changes
|
|
369
|
-
fireAnalytics(pickerSearchedEvent({
|
|
370
|
-
queryLength: query.length,
|
|
371
|
-
numMatches: filteredEmojis.length
|
|
372
|
-
}));
|
|
373
|
-
ufoExperiences['emoji-searched'].success({
|
|
374
|
-
metadata: {
|
|
375
|
-
emojisLength: filteredEmojis.length
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
}, [filteredEmojis.length, fireAnalytics, query]);
|
|
379
361
|
useEffect(() => {
|
|
380
362
|
if (!frequentlyUsedEmojis.length || query) {
|
|
381
363
|
setFilteredEmojis(searchEmojis);
|
|
@@ -445,7 +427,8 @@ const EmojiPickerComponent = ({
|
|
|
445
427
|
onCloseDelete: onCloseDelete,
|
|
446
428
|
onFileChooserClicked: onFileChooserClicked,
|
|
447
429
|
onOpenUpload: onOpenUpload,
|
|
448
|
-
size: size
|
|
430
|
+
size: size,
|
|
431
|
+
activeCategoryId: activeCategory
|
|
449
432
|
}), showPreview && jsx(EmojiPickerFooter, {
|
|
450
433
|
selectedEmoji: selectedEmoji
|
|
451
434
|
}));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
/** @jsx jsx */
|
|
3
|
-
import
|
|
3
|
+
import { createRef, PureComponent } from 'react';
|
|
4
4
|
import { jsx } from '@emotion/react';
|
|
5
5
|
import { customCategory, defaultEmojiPickerSize, userCustomTitle } from '../../util/constants';
|
|
6
6
|
import { CategoryDescriptionMap } from './categories';
|
|
@@ -11,6 +11,7 @@ import EmojiActions from '../common/EmojiActions';
|
|
|
11
11
|
import { emojiPickerList } from './styles';
|
|
12
12
|
import { emojiPickerHeightOffset } from './utils';
|
|
13
13
|
import { VirtualList } from './VirtualList';
|
|
14
|
+
|
|
14
15
|
/**
|
|
15
16
|
* Test id for wrapper Emoji Picker List div
|
|
16
17
|
*/
|
|
@@ -22,14 +23,15 @@ export default class EmojiPickerVirtualList extends PureComponent {
|
|
|
22
23
|
super(_props);
|
|
23
24
|
_defineProperty(this, "virtualItems", []);
|
|
24
25
|
_defineProperty(this, "categoryTracker", new CategoryTracker());
|
|
26
|
+
_defineProperty(this, "listRef", /*#__PURE__*/createRef());
|
|
25
27
|
_defineProperty(this, "onEmojiMouseEnter", (emojiId, emoji) => {
|
|
26
28
|
if (this.props.onEmojiActive) {
|
|
27
29
|
this.props.onEmojiActive(emojiId, emoji);
|
|
28
30
|
}
|
|
29
31
|
});
|
|
30
|
-
_defineProperty(this, "onSearch",
|
|
32
|
+
_defineProperty(this, "onSearch", value => {
|
|
31
33
|
if (this.props.onSearch) {
|
|
32
|
-
this.props.onSearch(
|
|
34
|
+
this.props.onSearch(value);
|
|
33
35
|
}
|
|
34
36
|
});
|
|
35
37
|
_defineProperty(this, "buildVirtualItemFromGroup", group => {
|
|
@@ -90,19 +92,7 @@ export default class EmojiPickerVirtualList extends PureComponent {
|
|
|
90
92
|
});
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
|
-
const rowCountChanged = this.virtualItems.length !== items.length;
|
|
94
95
|
this.virtualItems = items;
|
|
95
|
-
const list = this.refs.list;
|
|
96
|
-
if (!rowCountChanged && list) {
|
|
97
|
-
// Row count has not changed, so need to tell list to rerender.
|
|
98
|
-
list.forceUpdateGrid();
|
|
99
|
-
}
|
|
100
|
-
if (!query && list) {
|
|
101
|
-
// VirtualList can apply stale heights since it performs a shallow
|
|
102
|
-
// compare to check if the list has changed. Should manually recompute
|
|
103
|
-
// row heights for the case when frequent category come in later
|
|
104
|
-
list.recomputeRowHeights();
|
|
105
|
-
}
|
|
106
96
|
});
|
|
107
97
|
_defineProperty(this, "addToCategoryMap", (categoryToGroupMap, emoji, category) => {
|
|
108
98
|
if (!categoryToGroupMap[category]) {
|
|
@@ -134,33 +124,15 @@ export default class EmojiPickerVirtualList extends PureComponent {
|
|
|
134
124
|
return group;
|
|
135
125
|
}).sort(byOrder);
|
|
136
126
|
});
|
|
137
|
-
_defineProperty(this, "repaintList", () => {
|
|
138
|
-
if (this.refs.root) {
|
|
139
|
-
const root = this.refs.root;
|
|
140
|
-
const display = root.style.display;
|
|
141
|
-
root.style.display = 'none';
|
|
142
|
-
|
|
143
|
-
// we need to access offset to force repaint
|
|
144
|
-
// eslint-disable-next-line no-unused-expressions
|
|
145
|
-
root.offsetHeight;
|
|
146
|
-
root.style.display = display;
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
127
|
_defineProperty(this, "checkCategoryIdChange", indexes => {
|
|
150
128
|
const {
|
|
151
129
|
startIndex
|
|
152
130
|
} = indexes;
|
|
153
|
-
|
|
154
|
-
// FS-1844 Fix a rendering problem when scrolling to the top
|
|
155
|
-
if (startIndex === 0) {
|
|
156
|
-
this.repaintList();
|
|
157
|
-
}
|
|
158
131
|
if (!this.props.query) {
|
|
159
132
|
// Calculate category in view - only relevant if categories shown, i.e. no query
|
|
160
|
-
const list = this.
|
|
133
|
+
const list = this.listRef.current;
|
|
161
134
|
const currentCategory = this.categoryTracker.findNearestCategoryAbove(startIndex, list);
|
|
162
|
-
if (currentCategory && this.activeCategoryId !== currentCategory) {
|
|
163
|
-
this.activeCategoryId = currentCategory;
|
|
135
|
+
if (currentCategory && this.props.activeCategoryId !== currentCategory) {
|
|
164
136
|
if (this.props.onCategoryActivated) {
|
|
165
137
|
this.props.onCategoryActivated(currentCategory);
|
|
166
138
|
}
|
|
@@ -191,12 +163,17 @@ export default class EmojiPickerVirtualList extends PureComponent {
|
|
|
191
163
|
*/
|
|
192
164
|
reveal(category) {
|
|
193
165
|
const row = this.categoryTracker.getRow(category);
|
|
194
|
-
|
|
195
|
-
list.scrollToRow(row);
|
|
166
|
+
this.scrollToRow(row);
|
|
196
167
|
}
|
|
197
168
|
scrollToBottom() {
|
|
198
|
-
|
|
199
|
-
|
|
169
|
+
this.scrollToRow(this.virtualItems.length);
|
|
170
|
+
}
|
|
171
|
+
scrollToTop() {
|
|
172
|
+
this.scrollToRow(0);
|
|
173
|
+
}
|
|
174
|
+
scrollToRow(index) {
|
|
175
|
+
var _this$listRef$current;
|
|
176
|
+
(_this$listRef$current = this.listRef.current) === null || _this$listRef$current === void 0 ? void 0 : _this$listRef$current.scrollToRow(index);
|
|
200
177
|
}
|
|
201
178
|
render() {
|
|
202
179
|
const {
|
|
@@ -242,7 +219,7 @@ export default class EmojiPickerVirtualList extends PureComponent {
|
|
|
242
219
|
query: query,
|
|
243
220
|
onChange: this.onSearch
|
|
244
221
|
}), jsx(VirtualList, {
|
|
245
|
-
ref:
|
|
222
|
+
ref: this.listRef,
|
|
246
223
|
height: virtualListHeight,
|
|
247
224
|
overscanRowCount: 10,
|
|
248
225
|
rowCount: this.virtualItems.length,
|