@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
|
@@ -1,107 +1,60 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
/** @jsx jsx */
|
|
3
|
-
import React, {
|
|
2
|
+
import React, { useLayoutEffect, useRef } from 'react';
|
|
4
3
|
import { jsx } from '@emotion/react';
|
|
5
4
|
import TextField from '@atlaskit/textfield';
|
|
6
5
|
import SearchIcon from '@atlaskit/icon/glyph/search';
|
|
7
|
-
import {
|
|
6
|
+
import { useIntl } from 'react-intl-next';
|
|
8
7
|
import { messages } from '../i18n';
|
|
9
8
|
import { input, pickerSearch, searchIcon } from './styles';
|
|
9
|
+
import { EMOJI_SEARCH_DEBOUNCE } from '../../util/constants';
|
|
10
|
+
import { useDebouncedCallback } from 'use-debounce';
|
|
10
11
|
export const emojiPickerSearchTestId = 'emoji-picker-serach';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
export const EmojiPickerListSearch = props => {
|
|
13
|
+
const {
|
|
14
|
+
style,
|
|
15
|
+
query,
|
|
16
|
+
onChange
|
|
17
|
+
} = props;
|
|
18
|
+
const textRef = useRef(null);
|
|
19
|
+
const {
|
|
20
|
+
formatMessage
|
|
21
|
+
} = useIntl();
|
|
22
|
+
|
|
23
|
+
// Debounce callback
|
|
24
|
+
const [debouncedSearch] = useDebouncedCallback(value => {
|
|
25
|
+
onChange(value);
|
|
26
|
+
},
|
|
27
|
+
// delay in ms
|
|
28
|
+
EMOJI_SEARCH_DEBOUNCE);
|
|
29
|
+
const handleOnChange = e => {
|
|
30
|
+
debouncedSearch(e.target.value);
|
|
31
|
+
};
|
|
32
|
+
useLayoutEffect(() => {
|
|
33
|
+
requestAnimationFrame(() => {
|
|
34
|
+
if (textRef) {
|
|
35
|
+
var _textRef$current;
|
|
36
|
+
(_textRef$current = textRef.current) === null || _textRef$current === void 0 ? void 0 : _textRef$current.focus();
|
|
20
37
|
}
|
|
21
38
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
saveInputSelection() {
|
|
45
|
-
this.inputSelection = undefined;
|
|
46
|
-
if (this.inputRef) {
|
|
47
|
-
const {
|
|
48
|
-
selectionStart,
|
|
49
|
-
selectionEnd,
|
|
50
|
-
selectionDirection
|
|
51
|
-
} = this.inputRef;
|
|
52
|
-
if (selectionStart && selectionEnd && selectionDirection) {
|
|
53
|
-
this.inputSelection = {
|
|
54
|
-
selectionStart,
|
|
55
|
-
selectionEnd,
|
|
56
|
-
selectionDirection: selectionDirection
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
restoreInputFocus() {
|
|
62
|
-
this.focusInput();
|
|
63
|
-
if (this.inputSelection && this.inputRef && this.inputRef.setSelectionRange) {
|
|
64
|
-
const {
|
|
65
|
-
selectionStart,
|
|
66
|
-
selectionEnd,
|
|
67
|
-
selectionDirection
|
|
68
|
-
} = this.inputSelection;
|
|
69
|
-
this.inputRef.setSelectionRange(selectionStart, selectionEnd, selectionDirection);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
render() {
|
|
73
|
-
const {
|
|
74
|
-
style,
|
|
75
|
-
query,
|
|
76
|
-
intl
|
|
77
|
-
} = this.props;
|
|
78
|
-
const {
|
|
79
|
-
formatMessage
|
|
80
|
-
} = intl;
|
|
81
|
-
return jsx("div", {
|
|
82
|
-
css: pickerSearch,
|
|
83
|
-
style: style
|
|
84
|
-
}, jsx(TextField, {
|
|
85
|
-
"aria-label": formatMessage(messages.searchLabel),
|
|
86
|
-
css: input,
|
|
87
|
-
autoComplete: "off",
|
|
88
|
-
name: "search",
|
|
89
|
-
placeholder: `${formatMessage(messages.searchPlaceholder)}...`,
|
|
90
|
-
onChange: this.onChange,
|
|
91
|
-
value: query || '',
|
|
92
|
-
ref: this.handleInputRef,
|
|
93
|
-
isCompact: true,
|
|
94
|
-
onBlur: this.onBlur,
|
|
95
|
-
elemBeforeInput: jsx("span", {
|
|
96
|
-
css: searchIcon
|
|
97
|
-
}, jsx(SearchIcon, {
|
|
98
|
-
label: ""
|
|
99
|
-
})),
|
|
100
|
-
testId: emojiPickerSearchTestId
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
_defineProperty(EmojiPickerListSearch, "defaultProps", {
|
|
105
|
-
style: {}
|
|
106
|
-
});
|
|
107
|
-
export default injectIntl(EmojiPickerListSearch);
|
|
39
|
+
}, []);
|
|
40
|
+
return jsx("div", {
|
|
41
|
+
css: pickerSearch,
|
|
42
|
+
style: style
|
|
43
|
+
}, jsx(TextField, {
|
|
44
|
+
"aria-label": formatMessage(messages.searchLabel),
|
|
45
|
+
css: input,
|
|
46
|
+
autoComplete: "off",
|
|
47
|
+
name: "search",
|
|
48
|
+
placeholder: `${formatMessage(messages.searchPlaceholder)}...`,
|
|
49
|
+
defaultValue: query || '',
|
|
50
|
+
onChange: handleOnChange,
|
|
51
|
+
isCompact: true,
|
|
52
|
+
elemBeforeInput: jsx("span", {
|
|
53
|
+
css: searchIcon
|
|
54
|
+
}, jsx(SearchIcon, {
|
|
55
|
+
label: ""
|
|
56
|
+
})),
|
|
57
|
+
testId: emojiPickerSearchTestId,
|
|
58
|
+
ref: textRef
|
|
59
|
+
}));
|
|
60
|
+
};
|
|
@@ -1,42 +1,41 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
/** @jsx jsx */
|
|
3
2
|
import { jsx } from '@emotion/react';
|
|
4
|
-
import
|
|
5
|
-
import React, { PureComponent, createRef } from 'react';
|
|
3
|
+
import React, { useCallback, useImperativeHandle } from 'react';
|
|
6
4
|
import { virtualList } from './styles';
|
|
5
|
+
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
7
6
|
export const virtualListScrollContainerTestId = 'virtual-list-scroll-container';
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
getVirtualizerOptions(props) {
|
|
7
|
+
export const VirtualList = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
8
|
+
const parentRef = React.useRef(null);
|
|
9
|
+
const currentIndex = React.useRef(0);
|
|
10
|
+
const {
|
|
11
|
+
rowRenderer,
|
|
12
|
+
onRowsRendered,
|
|
13
|
+
scrollToAlignment,
|
|
14
|
+
width,
|
|
15
|
+
height
|
|
16
|
+
} = props;
|
|
17
|
+
const getVirtualizerOptions = () => {
|
|
20
18
|
const {
|
|
21
19
|
rowCount,
|
|
22
20
|
rowHeight,
|
|
23
21
|
overscanRowCount
|
|
24
22
|
} = props;
|
|
25
23
|
return {
|
|
26
|
-
observeElementRect: observeElementRect,
|
|
27
|
-
observeElementOffset: observeElementOffset,
|
|
28
|
-
scrollToFn: elementScroll,
|
|
29
24
|
count: rowCount,
|
|
30
|
-
getScrollElement: () =>
|
|
25
|
+
getScrollElement: () => parentRef.current,
|
|
31
26
|
estimateSize: rowHeight,
|
|
32
27
|
overscan: overscanRowCount,
|
|
33
28
|
onChange: () => {
|
|
34
|
-
|
|
29
|
+
const startIndex = getFirstVisibleListElementIndex();
|
|
30
|
+
onRowsRendered({
|
|
31
|
+
startIndex
|
|
32
|
+
});
|
|
35
33
|
}
|
|
36
34
|
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
};
|
|
36
|
+
const rowVirtualizer = useVirtualizer(getVirtualizerOptions());
|
|
37
|
+
const isElementVisible = element => {
|
|
38
|
+
const parent = parentRef.current;
|
|
40
39
|
const elementRect = element.getBoundingClientRect();
|
|
41
40
|
const parentRect = parent.getBoundingClientRect();
|
|
42
41
|
const elemTop = elementRect.top;
|
|
@@ -47,105 +46,64 @@ export class VirtualList extends PureComponent {
|
|
|
47
46
|
// Only completely visible elements return true:
|
|
48
47
|
const isVisible = elemTop >= parentTop && elemBottom <= parentBottom;
|
|
49
48
|
return isVisible;
|
|
50
|
-
}
|
|
51
|
-
getFirstVisibleListElementIndex() {
|
|
52
|
-
var
|
|
53
|
-
const virtualList =
|
|
54
|
-
const renderedElements = (
|
|
49
|
+
};
|
|
50
|
+
const getFirstVisibleListElementIndex = useCallback(() => {
|
|
51
|
+
var _parentRef$current, _parentRef$current$fi;
|
|
52
|
+
const virtualList = rowVirtualizer.getVirtualItems();
|
|
53
|
+
const renderedElements = (_parentRef$current = parentRef.current) === null || _parentRef$current === void 0 ? void 0 : (_parentRef$current$fi = _parentRef$current.firstChild) === null || _parentRef$current$fi === void 0 ? void 0 : _parentRef$current$fi.childNodes;
|
|
55
54
|
if (virtualList.length === 0 || !renderedElements || renderedElements.length === 0) {
|
|
56
55
|
return 0;
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
// Convert NodeListOf<ChildNodes> to ChildNodes[]
|
|
60
58
|
const renderedElementsToArray = Array.from(renderedElements);
|
|
61
|
-
const firstVisibleIndex = renderedElementsToArray.findIndex(elem =>
|
|
59
|
+
const firstVisibleIndex = renderedElementsToArray.findIndex(elem => isElementVisible(elem));
|
|
62
60
|
if (firstVisibleIndex !== -1) {
|
|
63
61
|
var _virtualList$firstVis;
|
|
64
62
|
return ((_virtualList$firstVis = virtualList[firstVisibleIndex]) === null || _virtualList$firstVis === void 0 ? void 0 : _virtualList$firstVis.index) || 0;
|
|
65
63
|
}
|
|
66
64
|
return 0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
smoothScroll: false
|
|
100
|
-
});
|
|
101
|
-
this.forceUpdateGrid();
|
|
65
|
+
}, [rowVirtualizer]);
|
|
66
|
+
|
|
67
|
+
// Exposing a custom ref handle to the parent component EmojiPickerList to trigger scrollToRow via the listRef
|
|
68
|
+
// https://beta.reactjs.org/reference/react/useImperativeHandle
|
|
69
|
+
useImperativeHandle(ref, () => {
|
|
70
|
+
return {
|
|
71
|
+
scrollToRow(index) {
|
|
72
|
+
// only scroll if row index is defined and has changed
|
|
73
|
+
if (index !== undefined && currentIndex.current !== index) {
|
|
74
|
+
currentIndex.current = index;
|
|
75
|
+
rowVirtualizer.scrollToIndex(index, {
|
|
76
|
+
align: scrollToAlignment,
|
|
77
|
+
smoothScroll: false
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}, [scrollToAlignment, rowVirtualizer]);
|
|
83
|
+
return jsx("div", {
|
|
84
|
+
ref: parentRef,
|
|
85
|
+
role: "grid",
|
|
86
|
+
style: {
|
|
87
|
+
height: `${height}px`,
|
|
88
|
+
width: `${width}px`
|
|
89
|
+
},
|
|
90
|
+
css: virtualList,
|
|
91
|
+
"data-testid": virtualListScrollContainerTestId
|
|
92
|
+
}, jsx("div", {
|
|
93
|
+
style: {
|
|
94
|
+
height: `${rowVirtualizer.getTotalSize()}px`,
|
|
95
|
+
width: '100%',
|
|
96
|
+
position: 'relative'
|
|
102
97
|
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
}, rowVirtualizer.getVirtualItems().map(virtualRow => jsx("div", {
|
|
99
|
+
key: virtualRow.key,
|
|
100
|
+
style: {
|
|
101
|
+
position: 'absolute',
|
|
102
|
+
top: 0,
|
|
103
|
+
left: 0,
|
|
104
|
+
width: '100%',
|
|
105
|
+
height: `${virtualRow.size}px`,
|
|
106
|
+
transform: `translateY(${virtualRow.start}px)`
|
|
107
107
|
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
var _this$rowVirtualizer2;
|
|
111
|
-
(_this$rowVirtualizer2 = this.rowVirtualizer) === null || _this$rowVirtualizer2 === void 0 ? void 0 : _this$rowVirtualizer2.measure();
|
|
112
|
-
}
|
|
113
|
-
handleScroll(e) {
|
|
114
|
-
e.preventDefault();
|
|
115
|
-
}
|
|
116
|
-
render() {
|
|
117
|
-
var _this$rowVirtualizer3, _this$rowVirtualizer4;
|
|
118
|
-
const {
|
|
119
|
-
rowRenderer,
|
|
120
|
-
width,
|
|
121
|
-
height
|
|
122
|
-
} = this.props;
|
|
123
|
-
return jsx("div", {
|
|
124
|
-
ref: this.parentRef,
|
|
125
|
-
role: "grid",
|
|
126
|
-
style: {
|
|
127
|
-
height: `${height}px`,
|
|
128
|
-
width: `${width}px`
|
|
129
|
-
},
|
|
130
|
-
css: virtualList,
|
|
131
|
-
"data-testid": virtualListScrollContainerTestId,
|
|
132
|
-
onScroll: this.handleScroll
|
|
133
|
-
}, jsx("div", {
|
|
134
|
-
style: {
|
|
135
|
-
height: `${(_this$rowVirtualizer3 = this.rowVirtualizer) === null || _this$rowVirtualizer3 === void 0 ? void 0 : _this$rowVirtualizer3.getTotalSize()}px`,
|
|
136
|
-
width: '100%',
|
|
137
|
-
position: 'relative'
|
|
138
|
-
}
|
|
139
|
-
}, (_this$rowVirtualizer4 = this.rowVirtualizer) === null || _this$rowVirtualizer4 === void 0 ? void 0 : _this$rowVirtualizer4.getVirtualItems().map(virtualRow => jsx("div", {
|
|
140
|
-
key: virtualRow.key,
|
|
141
|
-
style: {
|
|
142
|
-
position: 'absolute',
|
|
143
|
-
top: 0,
|
|
144
|
-
left: 0,
|
|
145
|
-
width: '100%',
|
|
146
|
-
height: `${virtualRow.size}px`,
|
|
147
|
-
transform: `translateY(${virtualRow.start}px)`
|
|
148
|
-
}
|
|
149
|
-
}, rowRenderer(virtualRow)))));
|
|
150
|
-
}
|
|
151
|
-
}
|
|
108
|
+
}, rowRenderer(virtualRow)))));
|
|
109
|
+
});
|
|
@@ -71,11 +71,6 @@ export default class EmojiTypeAheadComponent extends PureComponent {
|
|
|
71
71
|
const wasVisible = this.state.visible;
|
|
72
72
|
const visible = emojis.length > 0;
|
|
73
73
|
this.fireAnalyticsEvent(typeaheadRenderedEvent(Date.now() - this.renderStartTime, query, emojis));
|
|
74
|
-
ufoExperiences['emoji-searched'].success({
|
|
75
|
-
metadata: {
|
|
76
|
-
emojisLength: emojis.length
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
74
|
debug('emoji-typeahead.applyPropChanges', emojis.length, wasVisible, visible);
|
|
80
75
|
this.setState({
|
|
81
76
|
emojis: emojis,
|
|
@@ -192,11 +187,6 @@ export default class EmojiTypeAheadComponent extends PureComponent {
|
|
|
192
187
|
// if empty query (i.e. typeahead triggered only) then only sort by usage
|
|
193
188
|
options.sort = SearchSort.UsageFrequency;
|
|
194
189
|
}
|
|
195
|
-
ufoExperiences['emoji-searched'].start();
|
|
196
|
-
ufoExperiences['emoji-searched'].addMetadata({
|
|
197
|
-
queryLength: (query === null || query === void 0 ? void 0 : query.length) || 0,
|
|
198
|
-
source: 'EmojiTypeAheadComponent'
|
|
199
|
-
});
|
|
200
190
|
this.renderStartTime = Date.now();
|
|
201
191
|
emojiProvider.filter(query, options);
|
|
202
192
|
}
|
package/dist/es2019/i18n/cs.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* prettier-ignore */
|
|
1
2
|
/**
|
|
2
3
|
* NOTE:
|
|
3
4
|
*
|
|
@@ -6,38 +7,38 @@
|
|
|
6
7
|
*/
|
|
7
8
|
//Czech
|
|
8
9
|
export default {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
10
|
+
"fabric.emoji.add.custom.emoji.label": "Přidat své vlastní emoji",
|
|
11
|
+
"fabric.emoji.add.label": "Přidat emoji",
|
|
12
|
+
"fabric.emoji.cancel.label": "Zrušit",
|
|
13
|
+
"fabric.emoji.categories.search.results": "Výsledky vyhledávání",
|
|
14
|
+
"fabric.emoji.category.activity": "Činnosti",
|
|
15
|
+
"fabric.emoji.category.all.uploads": "Všechny nahrané položky",
|
|
16
|
+
"fabric.emoji.category.flags": "Vlajky",
|
|
17
|
+
"fabric.emoji.category.foods": "Jídlo a pití",
|
|
18
|
+
"fabric.emoji.category.frequent": "Časté",
|
|
19
|
+
"fabric.emoji.category.nature": "Příroda",
|
|
20
|
+
"fabric.emoji.category.objects": "Objekty",
|
|
21
|
+
"fabric.emoji.category.people": "Lidé",
|
|
22
|
+
"fabric.emoji.category.places": "Cestování a místa",
|
|
23
|
+
"fabric.emoji.category.productivity": "Produktivita",
|
|
24
|
+
"fabric.emoji.category.symbols": "Symboly",
|
|
25
|
+
"fabric.emoji.category.user.uploads": "Vaše nahrané položky",
|
|
26
|
+
"fabric.emoji.choose.file.screenReaderDescription": "Vyberte soubor smajlíku. JPG, PNG nebo GIF. Maximální velikost je 1 MB.",
|
|
27
|
+
"fabric.emoji.choose.file.title": "Vybrat soubor",
|
|
28
|
+
"fabric.emoji.delete.description": "Veškeré existující výskyty tohoto emoji budou nahrazeny {emojiShortName}",
|
|
29
|
+
"fabric.emoji.delete.label": "Odstranit",
|
|
30
|
+
"fabric.emoji.delete.title": "Odstranit emoji",
|
|
31
|
+
"fabric.emoji.error.delete.failed": "Odstranění se nezdařilo.",
|
|
32
|
+
"fabric.emoji.error.image.too.big": "Vybraný obrázek je větší než 1 MB.",
|
|
33
|
+
"fabric.emoji.error.invalid.image": "Vybraný obrázek je neplatný.",
|
|
34
|
+
"fabric.emoji.error.upload.failed": "Nahrávání se nezdařilo",
|
|
35
|
+
"fabric.emoji.image.requirements": "JPG, PNG nebo GIF. Max. velikost je 1 MB.",
|
|
36
|
+
"fabric.emoji.name.ariaLabel": "Zadejte název nového emotikonu",
|
|
37
|
+
"fabric.emoji.placeholder": "Název emoji",
|
|
38
|
+
"fabric.emoji.preview": "Vaše nové emoji {emoji} vypadá skvěle!",
|
|
39
|
+
"fabric.emoji.preview.title": "Náhled",
|
|
40
|
+
"fabric.emoji.retry.label": "Zkusit znovu",
|
|
41
|
+
"fabric.emoji.search.label": "Vyhledat smajlík",
|
|
42
|
+
"fabric.emoji.search.placeholder": "Vyhledat",
|
|
43
|
+
"fabric.emoji.select.skin.tone.ariaLabel": "Výběr odstínu pleti – {selectedTone}"
|
|
43
44
|
};
|
package/dist/es2019/i18n/da.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* prettier-ignore */
|
|
1
2
|
/**
|
|
2
3
|
* NOTE:
|
|
3
4
|
*
|
|
@@ -6,38 +7,38 @@
|
|
|
6
7
|
*/
|
|
7
8
|
//Danish (Denmark)
|
|
8
9
|
export default {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
10
|
+
"fabric.emoji.add.custom.emoji.label": "Tilføj din egen emoji",
|
|
11
|
+
"fabric.emoji.add.label": "Tilføj emoji",
|
|
12
|
+
"fabric.emoji.cancel.label": "Annullér",
|
|
13
|
+
"fabric.emoji.categories.search.results": "Søgeresultater",
|
|
14
|
+
"fabric.emoji.category.activity": "Aktivitet",
|
|
15
|
+
"fabric.emoji.category.all.uploads": "Alle uploads",
|
|
16
|
+
"fabric.emoji.category.flags": "Flag",
|
|
17
|
+
"fabric.emoji.category.foods": "Mad og drikke",
|
|
18
|
+
"fabric.emoji.category.frequent": "Ofte benyttede",
|
|
19
|
+
"fabric.emoji.category.nature": "Natur",
|
|
20
|
+
"fabric.emoji.category.objects": "Objekter",
|
|
21
|
+
"fabric.emoji.category.people": "Personer",
|
|
22
|
+
"fabric.emoji.category.places": "Rejser og steder",
|
|
23
|
+
"fabric.emoji.category.productivity": "Produktivitet",
|
|
24
|
+
"fabric.emoji.category.symbols": "Symboler",
|
|
25
|
+
"fabric.emoji.category.user.uploads": "Dine uploads",
|
|
26
|
+
"fabric.emoji.choose.file.screenReaderDescription": "Vælg en fil til emojien. JPG, PNG eller GIF. Maks. størrelse 1 MB.",
|
|
27
|
+
"fabric.emoji.choose.file.title": "Vælg fil",
|
|
28
|
+
"fabric.emoji.delete.description": "Alle eksisterende forekomster af denne emoji erstattes med {emojiShortName}",
|
|
29
|
+
"fabric.emoji.delete.label": "Fjern",
|
|
30
|
+
"fabric.emoji.delete.title": "Fjern emoji",
|
|
31
|
+
"fabric.emoji.error.delete.failed": "Fjern mislykkede",
|
|
32
|
+
"fabric.emoji.error.image.too.big": "Det valgte billede er større end 1 MB",
|
|
33
|
+
"fabric.emoji.error.invalid.image": "Det valgte billede er ugyldigt",
|
|
34
|
+
"fabric.emoji.error.upload.failed": "Upload mislykkedes",
|
|
35
|
+
"fabric.emoji.image.requirements": "JPG, PNG eller GIF. Maks. størrelse 1 MB.",
|
|
36
|
+
"fabric.emoji.name.ariaLabel": "Angiv et navn til den nye emoji",
|
|
37
|
+
"fabric.emoji.placeholder": "Emojinavn",
|
|
38
|
+
"fabric.emoji.preview": "Din nye emoji {emoji} ser flot ud",
|
|
39
|
+
"fabric.emoji.preview.title": "Vis",
|
|
40
|
+
"fabric.emoji.retry.label": "Prøv igen",
|
|
41
|
+
"fabric.emoji.search.label": "Søg efter emoji",
|
|
42
|
+
"fabric.emoji.search.placeholder": "Søg",
|
|
43
|
+
"fabric.emoji.select.skin.tone.ariaLabel": "Vælg hudfarve, {selectedTone}"
|
|
43
44
|
};
|