@atlaskit/emoji 69.0.1 → 69.0.3
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 +17 -0
- package/afm-cc/tsconfig.json +3 -0
- package/afm-jira/tsconfig.json +3 -0
- package/afm-post-office/tsconfig.json +3 -0
- package/dist/cjs/components/compiled/common/EmojiActions.js +1 -1
- package/dist/cjs/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
- package/dist/cjs/components/compiled/common/EmojiPreviewComponent.js +1 -1
- package/dist/cjs/components/compiled/picker/CategorySelector.compiled.css +24 -0
- package/dist/cjs/components/compiled/picker/CategorySelector.js +161 -0
- package/dist/cjs/components/compiled/picker/EmojiPicker.compiled.css +12 -0
- package/dist/cjs/components/compiled/picker/EmojiPicker.js +109 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerCategoryHeading.js +43 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerComponent.compiled.css +20 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerComponent.js +574 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerEmojiRow.js +76 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerFooter.js +33 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerListSearch.js +93 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerTabPanel.js +60 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
- package/dist/cjs/components/compiled/picker/EmojiPickerVirtualItems.js +86 -0
- package/dist/cjs/components/compiled/picker/VirtualList.compiled.css +10 -0
- package/dist/cjs/components/compiled/picker/VirtualList.js +303 -0
- package/dist/cjs/components/picker/EmojiPickerFooter.js +0 -2
- package/dist/cjs/components/picker/EmojiPickerList.js +219 -145
- package/dist/cjs/components/picker/EmojiPickerTabPanel.js +67 -0
- package/dist/cjs/components/picker/styles.js +1 -10
- package/dist/cjs/index.js +4 -6
- package/dist/cjs/picker.js +5 -7
- package/dist/cjs/util/analytics/analytics.js +1 -1
- package/dist/es2019/components/compiled/common/EmojiActions.js +1 -1
- package/dist/es2019/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
- package/dist/es2019/components/compiled/common/EmojiPreviewComponent.js +1 -1
- package/dist/es2019/components/compiled/picker/CategorySelector.compiled.css +24 -0
- package/dist/es2019/components/compiled/picker/CategorySelector.js +136 -0
- package/dist/es2019/components/compiled/picker/EmojiPicker.compiled.css +12 -0
- package/dist/es2019/components/compiled/picker/EmojiPicker.js +67 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerCategoryHeading.js +30 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerComponent.compiled.css +19 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerComponent.js +506 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerEmojiRow.js +69 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerFooter.js +19 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerListSearch.js +79 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerTabPanel.js +39 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
- package/dist/es2019/components/compiled/picker/EmojiPickerVirtualItems.js +51 -0
- package/dist/es2019/components/compiled/picker/VirtualList.compiled.css +10 -0
- package/dist/es2019/components/compiled/picker/VirtualList.js +288 -0
- package/dist/es2019/components/picker/EmojiPickerFooter.js +1 -1
- package/dist/es2019/components/picker/EmojiPickerList.js +186 -114
- package/dist/es2019/components/picker/EmojiPickerTabPanel.js +48 -0
- package/dist/es2019/components/picker/styles.js +0 -9
- package/dist/es2019/index.js +2 -1
- package/dist/es2019/picker.js +5 -1
- package/dist/es2019/util/analytics/analytics.js +1 -1
- package/dist/esm/components/compiled/common/EmojiActions.js +1 -1
- package/dist/esm/components/compiled/common/EmojiPreviewComponent.compiled.css +0 -1
- package/dist/esm/components/compiled/common/EmojiPreviewComponent.js +1 -1
- package/dist/esm/components/compiled/picker/CategorySelector.compiled.css +24 -0
- package/dist/esm/components/compiled/picker/CategorySelector.js +151 -0
- package/dist/esm/components/compiled/picker/EmojiPicker.compiled.css +12 -0
- package/dist/esm/components/compiled/picker/EmojiPicker.js +97 -0
- package/dist/esm/components/compiled/picker/EmojiPickerCategoryHeading.compiled.css +9 -0
- package/dist/esm/components/compiled/picker/EmojiPickerCategoryHeading.js +34 -0
- package/dist/esm/components/compiled/picker/EmojiPickerComponent.compiled.css +20 -0
- package/dist/esm/components/compiled/picker/EmojiPickerComponent.js +564 -0
- package/dist/esm/components/compiled/picker/EmojiPickerEmojiRow.compiled.css +35 -0
- package/dist/esm/components/compiled/picker/EmojiPickerEmojiRow.js +66 -0
- package/dist/esm/components/compiled/picker/EmojiPickerFooter.compiled.css +5 -0
- package/dist/esm/components/compiled/picker/EmojiPickerFooter.js +24 -0
- package/dist/esm/components/compiled/picker/EmojiPickerListSearch.compiled.css +23 -0
- package/dist/esm/components/compiled/picker/EmojiPickerListSearch.js +83 -0
- package/dist/esm/components/compiled/picker/EmojiPickerTabPanel.compiled.css +6 -0
- package/dist/esm/components/compiled/picker/EmojiPickerTabPanel.js +50 -0
- package/dist/esm/components/compiled/picker/EmojiPickerVirtualItems.compiled.css +8 -0
- package/dist/esm/components/compiled/picker/EmojiPickerVirtualItems.js +76 -0
- package/dist/esm/components/compiled/picker/VirtualList.compiled.css +10 -0
- package/dist/esm/components/compiled/picker/VirtualList.js +293 -0
- package/dist/esm/components/picker/EmojiPickerFooter.js +1 -1
- package/dist/esm/components/picker/EmojiPickerList.js +219 -147
- package/dist/esm/components/picker/EmojiPickerTabPanel.js +59 -0
- package/dist/esm/components/picker/styles.js +0 -9
- package/dist/esm/index.js +2 -1
- package/dist/esm/picker.js +5 -1
- package/dist/esm/util/analytics/analytics.js +1 -1
- package/dist/types/components/compiled/picker/CategorySelector.d.ts +17 -0
- package/dist/types/components/compiled/picker/EmojiPicker.d.ts +44 -0
- package/dist/types/components/compiled/picker/EmojiPickerCategoryHeading.d.ts +13 -0
- package/dist/types/components/compiled/picker/EmojiPickerComponent.d.ts +24 -0
- package/dist/types/components/compiled/picker/EmojiPickerEmojiRow.d.ts +17 -0
- package/dist/types/components/compiled/picker/EmojiPickerFooter.d.ts +8 -0
- package/dist/types/components/compiled/picker/EmojiPickerListSearch.d.ts +11 -0
- package/dist/types/components/compiled/picker/EmojiPickerTabPanel.d.ts +21 -0
- package/dist/types/components/compiled/picker/EmojiPickerVirtualItems.d.ts +35 -0
- package/dist/types/components/compiled/picker/VirtualList.d.ts +42 -0
- package/dist/types/components/picker/EmojiPickerList.d.ts +1 -6
- package/dist/types/components/picker/EmojiPickerTabPanel.d.ts +21 -0
- package/dist/types/components/picker/styles.d.ts +0 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/picker.d.ts +3 -1
- package/dist/types-ts4.5/components/compiled/picker/CategorySelector.d.ts +17 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPicker.d.ts +44 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerCategoryHeading.d.ts +13 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerComponent.d.ts +24 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerEmojiRow.d.ts +17 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerFooter.d.ts +8 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerListSearch.d.ts +11 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerTabPanel.d.ts +21 -0
- package/dist/types-ts4.5/components/compiled/picker/EmojiPickerVirtualItems.d.ts +35 -0
- package/dist/types-ts4.5/components/compiled/picker/VirtualList.d.ts +42 -0
- package/dist/types-ts4.5/components/picker/EmojiPickerList.d.ts +1 -6
- package/dist/types-ts4.5/components/picker/EmojiPickerTabPanel.d.ts +21 -0
- package/dist/types-ts4.5/components/picker/styles.d.ts +0 -1
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/picker.d.ts +3 -1
- package/package.json +4 -3
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* EmojiPickerFooter.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.emojiPickerFooterTestId = exports.default = void 0;
|
|
9
|
+
require("./EmojiPickerFooter.compiled.css");
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var React = _react;
|
|
12
|
+
var _runtime = require("@compiled/react/runtime");
|
|
13
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
14
|
+
var _EmojiPreviewComponent = require("../common/EmojiPreviewComponent");
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
var emojiPickerFooter = null;
|
|
18
|
+
var emojiPickerFooterWithTopShadow = null;
|
|
19
|
+
var emojiPickerFooterTestId = exports.emojiPickerFooterTestId = 'emoji-picker-footer';
|
|
20
|
+
var EmojiPickerFooter = function EmojiPickerFooter(_ref) {
|
|
21
|
+
var selectedEmoji = _ref.selectedEmoji;
|
|
22
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
23
|
+
"data-testid": emojiPickerFooterTestId,
|
|
24
|
+
className: (0, _runtime.ax)(["_16jlidpf _1o9zidpf _i0dl1wug", "_x3do18ew _16qs4j53"]),
|
|
25
|
+
style: {
|
|
26
|
+
"--_m6cf7x": (0, _runtime.ix)("2px solid ".concat("var(--ds-border, ".concat(_colors.N30A, ")"))),
|
|
27
|
+
"--_cfawkn": (0, _runtime.ix)("0px -1px 1px 0px ".concat("var(--ds-border, rgba(0, 0, 0, 0.1))"))
|
|
28
|
+
}
|
|
29
|
+
}, selectedEmoji && /*#__PURE__*/React.createElement(_EmojiPreviewComponent.EmojiPreviewComponent, {
|
|
30
|
+
emoji: selectedEmoji
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(EmojiPickerFooter);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
._11c82smr{font:var(--ds-font-body,normal 400 14px/20px ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
|
|
2
|
+
._12ji1r31{outline-color:currentColor}
|
|
3
|
+
._12y31o36{outline-width:medium}
|
|
4
|
+
._13xeglyw:invalid{box-shadow:none}
|
|
5
|
+
._18u01i6y{margin-left:var(--ds-space-negative-025,-2px)}
|
|
6
|
+
._19bvutpp{padding-left:var(--ds-space-150,9pt)}
|
|
7
|
+
._1bsb1osq{width:100%}
|
|
8
|
+
._1e0cglyw{display:none}
|
|
9
|
+
._1goxglyw::-ms-clear{display:none}
|
|
10
|
+
._1q51t94y{padding-block-start:1px}
|
|
11
|
+
._1qu2glyw{outline-style:none}
|
|
12
|
+
._3um015vq{visibility:hidden}
|
|
13
|
+
._80om1kw7{cursor:inherit}
|
|
14
|
+
._85i5v77o{padding-block-end:var(--ds-space-025,2px)}
|
|
15
|
+
._bozg12x7{padding-inline-start:var(--ds-space-075,6px)}
|
|
16
|
+
._ca0qutpp{padding-top:var(--ds-space-150,9pt)}
|
|
17
|
+
._n3tdutpp{padding-bottom:var(--ds-space-150,9pt)}
|
|
18
|
+
._syaz1kw7{color:inherit}
|
|
19
|
+
._tzy4105o{opacity:.5}
|
|
20
|
+
._tzy4idpf{opacity:0}
|
|
21
|
+
._u5f3utpp{padding-right:var(--ds-space-150,9pt)}
|
|
22
|
+
._vchhusvi{box-sizing:border-box}
|
|
23
|
+
._y4tize3t{padding-inline-end:var(--ds-space-0,0)}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/* EmojiPickerListSearch.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.emojiPickerSearchTestId = exports.EmojiPickerListSearch = void 0;
|
|
10
|
+
require("./EmojiPickerListSearch.compiled.css");
|
|
11
|
+
var _runtime = require("@compiled/react/runtime");
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
var _search = _interopRequireDefault(require("@atlaskit/icon/core/migration/search"));
|
|
14
|
+
var _textfield = _interopRequireDefault(require("@atlaskit/textfield"));
|
|
15
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
var _reactIntlNext = require("react-intl-next");
|
|
18
|
+
var _useDebounce = require("use-debounce");
|
|
19
|
+
var _constants = require("../../../util/constants");
|
|
20
|
+
var _i18n = require("../../i18n");
|
|
21
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
22
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
23
|
+
var input = null;
|
|
24
|
+
var pickerSearch = null;
|
|
25
|
+
var searchIcon = null;
|
|
26
|
+
var hidden = null;
|
|
27
|
+
var emojiPickerSearchTestId = exports.emojiPickerSearchTestId = 'emoji-picker-search';
|
|
28
|
+
var EmojiPickerListSearch = exports.EmojiPickerListSearch = function EmojiPickerListSearch(props) {
|
|
29
|
+
var style = props.style,
|
|
30
|
+
query = props.query,
|
|
31
|
+
_props$isVisible = props.isVisible,
|
|
32
|
+
isVisible = _props$isVisible === void 0 ? true : _props$isVisible,
|
|
33
|
+
resultsCount = props.resultsCount,
|
|
34
|
+
onChange = props.onChange;
|
|
35
|
+
var textRef = (0, _react.useRef)(null);
|
|
36
|
+
var _useState = (0, _react.useState)(false),
|
|
37
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
38
|
+
dirty = _useState2[0],
|
|
39
|
+
setDirty = _useState2[1];
|
|
40
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
41
|
+
formatMessage = _useIntl.formatMessage;
|
|
42
|
+
|
|
43
|
+
// Debounce callback
|
|
44
|
+
var _useDebouncedCallback = (0, _useDebounce.useDebouncedCallback)(function (value) {
|
|
45
|
+
onChange(value);
|
|
46
|
+
setDirty(true);
|
|
47
|
+
},
|
|
48
|
+
// delay in ms
|
|
49
|
+
_constants.EMOJI_SEARCH_DEBOUNCE),
|
|
50
|
+
_useDebouncedCallback2 = (0, _slicedToArray2.default)(_useDebouncedCallback, 1),
|
|
51
|
+
debouncedSearch = _useDebouncedCallback2[0];
|
|
52
|
+
var handleOnChange = function handleOnChange(e) {
|
|
53
|
+
debouncedSearch(e.target.value);
|
|
54
|
+
};
|
|
55
|
+
(0, _react.useLayoutEffect)(function () {
|
|
56
|
+
requestAnimationFrame(function () {
|
|
57
|
+
if (textRef) {
|
|
58
|
+
var _textRef$current;
|
|
59
|
+
(_textRef$current = textRef.current) === null || _textRef$current === void 0 || _textRef$current.focus();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}, []);
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
64
|
+
style: style,
|
|
65
|
+
className: (0, _runtime.ax)(["_vchhusvi _ca0qutpp _n3tdutpp _19bvutpp _u5f3utpp _1bsb1osq", !isVisible && "_tzy4idpf _3um015vq _1e0cglyw"])
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement(_visuallyHidden.default, {
|
|
67
|
+
id: "emoji-search-results-status",
|
|
68
|
+
role: "status"
|
|
69
|
+
}, dirty && query === '' && formatMessage(_i18n.messages.searchResultsStatusSeeAll), query !== '' && formatMessage(_i18n.messages.searchResultsStatusSeeAll, {
|
|
70
|
+
// change to messages.searchResultsStatus once translated
|
|
71
|
+
count: resultsCount
|
|
72
|
+
})), /*#__PURE__*/_react.default.createElement(_textfield.default, {
|
|
73
|
+
role: "searchbox",
|
|
74
|
+
"aria-label": formatMessage(_i18n.messages.searchLabel),
|
|
75
|
+
autoComplete: "off",
|
|
76
|
+
name: "search",
|
|
77
|
+
placeholder: "".concat(formatMessage(_i18n.messages.searchPlaceholder), "..."),
|
|
78
|
+
defaultValue: query || '',
|
|
79
|
+
onChange: handleOnChange,
|
|
80
|
+
elemBeforeInput: /*#__PURE__*/_react.default.createElement("span", {
|
|
81
|
+
className: (0, _runtime.ax)(["_tzy4105o _18u01i6y"])
|
|
82
|
+
}, /*#__PURE__*/_react.default.createElement(_search.default, {
|
|
83
|
+
LEGACY_margin: "0 0 0 2px",
|
|
84
|
+
color: "currentColor",
|
|
85
|
+
spacing: "spacious",
|
|
86
|
+
label: ""
|
|
87
|
+
})),
|
|
88
|
+
testId: emojiPickerSearchTestId,
|
|
89
|
+
ref: textRef,
|
|
90
|
+
isCompact: true,
|
|
91
|
+
className: (0, _runtime.ax)(["_11c82smr _12ji1r31 _1qu2glyw _12y31o36 _vchhusvi _syaz1kw7 _80om1kw7 _1q51t94y _y4tize3t _85i5v77o _bozg12x7 _1bsb1osq _13xeglyw _1goxglyw"])
|
|
92
|
+
}));
|
|
93
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* EmojiPickerTabPanel.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
require("./EmojiPickerTabPanel.compiled.css");
|
|
11
|
+
var _runtime = require("@compiled/react/runtime");
|
|
12
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
18
|
+
var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
|
|
19
|
+
var _reactIntlNext = require("react-intl-next");
|
|
20
|
+
var _i18n = require("../../i18n");
|
|
21
|
+
var _EmojiPickerList = require("../../picker/EmojiPickerList");
|
|
22
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
23
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
24
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
25
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
26
|
+
var emojiPickerList = null;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* TODO: have to use class component here as unit test is relying on ref.root. Will refactor this whole file + EmojiPickerList to functional component in future
|
|
30
|
+
* ticket: COLLAB-2317
|
|
31
|
+
*/
|
|
32
|
+
var EmojiPickerTabPanelInternal = /*#__PURE__*/function (_PureComponent) {
|
|
33
|
+
function EmojiPickerTabPanelInternal() {
|
|
34
|
+
(0, _classCallCheck2.default)(this, EmojiPickerTabPanelInternal);
|
|
35
|
+
return _callSuper(this, EmojiPickerTabPanelInternal, arguments);
|
|
36
|
+
}
|
|
37
|
+
(0, _inherits2.default)(EmojiPickerTabPanelInternal, _PureComponent);
|
|
38
|
+
return (0, _createClass2.default)(EmojiPickerTabPanelInternal, [{
|
|
39
|
+
key: "render",
|
|
40
|
+
value: function render() {
|
|
41
|
+
var _this$props = this.props,
|
|
42
|
+
formatMessage = _this$props.intl.formatMessage,
|
|
43
|
+
children = _this$props.children,
|
|
44
|
+
showSearchResults = _this$props.showSearchResults;
|
|
45
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
46
|
+
ref: "root",
|
|
47
|
+
"data-testid": _EmojiPickerList.RENDER_EMOJI_PICKER_LIST_TESTID,
|
|
48
|
+
id: _EmojiPickerList.RENDER_EMOJI_PICKER_LIST_TESTID,
|
|
49
|
+
role: "tabpanel",
|
|
50
|
+
"aria-label": formatMessage(_i18n.messages.emojiPickerListPanel),
|
|
51
|
+
className: (0, _runtime.ax)(["_16jlkb7n _1o9zkb7n _i0dl1wug _1e0c1txw _2lx21bp4 _4t3iidpf"])
|
|
52
|
+
}, /*#__PURE__*/_react.default.createElement(_visuallyHidden.default, {
|
|
53
|
+
id: "emoji-picker-table-description"
|
|
54
|
+
}, formatMessage(_i18n.messages.emojiPickerGrid, {
|
|
55
|
+
showSearchResults: showSearchResults
|
|
56
|
+
})), children);
|
|
57
|
+
}
|
|
58
|
+
}]);
|
|
59
|
+
}(_react.PureComponent);
|
|
60
|
+
var _default = exports.default = (0, _reactIntlNext.injectIntl)(EmojiPickerTabPanelInternal);
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* EmojiPickerVirtualItems.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.virtualItemRenderer = exports.LoadingItem = exports.EmojisRowItem = exports.CategoryHeadingItem = exports.AbstractItem = void 0;
|
|
10
|
+
require("./EmojiPickerVirtualItems.compiled.css");
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _runtime = require("@compiled/react/runtime");
|
|
13
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
20
|
+
var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
|
|
21
|
+
var _EmojiPickerCategoryHeading = _interopRequireDefault(require("./EmojiPickerCategoryHeading"));
|
|
22
|
+
var _EmojiPickerEmojiRow = _interopRequireDefault(require("./EmojiPickerEmojiRow"));
|
|
23
|
+
var _EmojiPickerSizes = require("../../picker/EmojiPickerSizes");
|
|
24
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
25
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
26
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
27
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
28
|
+
var emojiPickerSpinner = null;
|
|
29
|
+
var AbstractItem = exports.AbstractItem = /*#__PURE__*/(0, _createClass2.default)(function AbstractItem(props, height) {
|
|
30
|
+
(0, _classCallCheck2.default)(this, AbstractItem);
|
|
31
|
+
this.props = props;
|
|
32
|
+
this.height = height;
|
|
33
|
+
});
|
|
34
|
+
var EmojisRowItem = exports.EmojisRowItem = /*#__PURE__*/function (_AbstractItem) {
|
|
35
|
+
function EmojisRowItem(props) {
|
|
36
|
+
var _this;
|
|
37
|
+
(0, _classCallCheck2.default)(this, EmojisRowItem);
|
|
38
|
+
_this = _callSuper(this, EmojisRowItem, [props, _EmojiPickerSizes.sizes.emojiRowHeight]);
|
|
39
|
+
(0, _defineProperty2.default)(_this, "renderItem", function (context) {
|
|
40
|
+
return /*#__PURE__*/React.createElement(_EmojiPickerEmojiRow.default, (0, _extends2.default)({}, _this.props, {
|
|
41
|
+
virtualItemContext: context
|
|
42
|
+
}));
|
|
43
|
+
});
|
|
44
|
+
return _this;
|
|
45
|
+
}
|
|
46
|
+
(0, _inherits2.default)(EmojisRowItem, _AbstractItem);
|
|
47
|
+
return (0, _createClass2.default)(EmojisRowItem);
|
|
48
|
+
}(AbstractItem);
|
|
49
|
+
var LoadingItem = exports.LoadingItem = /*#__PURE__*/function (_AbstractItem2) {
|
|
50
|
+
function LoadingItem() {
|
|
51
|
+
var _this2;
|
|
52
|
+
(0, _classCallCheck2.default)(this, LoadingItem);
|
|
53
|
+
_this2 = _callSuper(this, LoadingItem, [{}, _EmojiPickerSizes.sizes.loadingRowHeight]);
|
|
54
|
+
(0, _defineProperty2.default)(_this2, "renderItem", function () {
|
|
55
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
className: (0, _runtime.ax)(["_1e0c1txw _1bsb1osq _4t3i1w81 _1bah1h6o _4cvr1h6o _nphsidpf _t1edidpf _1t3b1wug"])
|
|
57
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(_spinner.default, {
|
|
58
|
+
size: "medium"
|
|
59
|
+
})));
|
|
60
|
+
});
|
|
61
|
+
return _this2;
|
|
62
|
+
}
|
|
63
|
+
(0, _inherits2.default)(LoadingItem, _AbstractItem2);
|
|
64
|
+
return (0, _createClass2.default)(LoadingItem);
|
|
65
|
+
}(AbstractItem);
|
|
66
|
+
var CategoryHeadingItem = exports.CategoryHeadingItem = /*#__PURE__*/function (_AbstractItem3) {
|
|
67
|
+
function CategoryHeadingItem(props) {
|
|
68
|
+
var _this3;
|
|
69
|
+
(0, _classCallCheck2.default)(this, CategoryHeadingItem);
|
|
70
|
+
_this3 = _callSuper(this, CategoryHeadingItem, [props, _EmojiPickerSizes.sizes.categoryHeadingHeight]);
|
|
71
|
+
(0, _defineProperty2.default)(_this3, "renderItem", function () {
|
|
72
|
+
return /*#__PURE__*/React.createElement(_EmojiPickerCategoryHeading.default, _this3.props);
|
|
73
|
+
});
|
|
74
|
+
return _this3;
|
|
75
|
+
}
|
|
76
|
+
(0, _inherits2.default)(CategoryHeadingItem, _AbstractItem3);
|
|
77
|
+
return (0, _createClass2.default)(CategoryHeadingItem);
|
|
78
|
+
}(AbstractItem);
|
|
79
|
+
var virtualItemRenderer = exports.virtualItemRenderer = function virtualItemRenderer(rows, context) {
|
|
80
|
+
var index = context.index,
|
|
81
|
+
key = context.key;
|
|
82
|
+
var row = rows[index];
|
|
83
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
84
|
+
key: key
|
|
85
|
+
}, row && row.renderItem(context));
|
|
86
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
._154iidpf{top:0}
|
|
2
|
+
._18m91wug{overflow-y:auto}
|
|
3
|
+
._1bsb1osq{width:100%}
|
|
4
|
+
._1ltvidpf{left:0}
|
|
5
|
+
._1reo15vq{overflow-x:hidden}
|
|
6
|
+
._kqswstnw{position:absolute}
|
|
7
|
+
._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
|
|
8
|
+
._1hvw1o36:focus{outline-width:medium}
|
|
9
|
+
._49pcglyw:focus{outline-style:none}
|
|
10
|
+
._nt751r31:focus{outline-color:currentColor}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/* VirtualList.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
"use strict";
|
|
3
|
+
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.virtualListScrollContainerTestId = exports.VirtualList = void 0;
|
|
10
|
+
require("./VirtualList.compiled.css");
|
|
11
|
+
var _runtime = require("@compiled/react/runtime");
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
14
|
+
var _reactVirtual = require("@tanstack/react-virtual");
|
|
15
|
+
var _useEmojiPickerListContext = require("../../../hooks/useEmojiPickerListContext");
|
|
16
|
+
var _constants = require("../../../util/constants");
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
20
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
21
|
+
var virtualList = null;
|
|
22
|
+
var virtualRowStyle = null;
|
|
23
|
+
var virtualListScrollContainerTestId = exports.virtualListScrollContainerTestId = 'virtual-list-scroll-container';
|
|
24
|
+
var VirtualList = exports.VirtualList = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
25
|
+
var parentRef = _react.default.useRef(null);
|
|
26
|
+
var virtualistItemsRef = _react.default.useRef(null);
|
|
27
|
+
var rowRenderer = props.rowRenderer,
|
|
28
|
+
onRowsRendered = props.onRowsRendered,
|
|
29
|
+
scrollToAlignment = props.scrollToAlignment,
|
|
30
|
+
width = props.width,
|
|
31
|
+
height = props.height,
|
|
32
|
+
rowCount = props.rowCount;
|
|
33
|
+
var _useEmojiPickerListCo = (0, _useEmojiPickerListContext.useEmojiPickerListContext)(),
|
|
34
|
+
currentEmojisFocus = _useEmojiPickerListCo.currentEmojisFocus,
|
|
35
|
+
setEmojisFocus = _useEmojiPickerListCo.setEmojisFocus;
|
|
36
|
+
var getVirtualizerOptions = function getVirtualizerOptions() {
|
|
37
|
+
var rowCount = props.rowCount,
|
|
38
|
+
rowHeight = props.rowHeight,
|
|
39
|
+
overscanRowCount = props.overscanRowCount;
|
|
40
|
+
return {
|
|
41
|
+
count: rowCount,
|
|
42
|
+
getScrollElement: function getScrollElement() {
|
|
43
|
+
return parentRef.current;
|
|
44
|
+
},
|
|
45
|
+
estimateSize: rowHeight,
|
|
46
|
+
overscan: overscanRowCount,
|
|
47
|
+
onChange: function onChange() {
|
|
48
|
+
var startIndex = getFirstVisibleListElementIndex();
|
|
49
|
+
onRowsRendered({
|
|
50
|
+
startIndex: startIndex
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
scrollPaddingStart: 28,
|
|
54
|
+
scrollPaddingEnd: 28
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
var rowVirtualizer = (0, _reactVirtual.useVirtualizer)(getVirtualizerOptions());
|
|
58
|
+
var isElementVisible = function isElementVisible(element) {
|
|
59
|
+
var parent = parentRef.current;
|
|
60
|
+
var elementRect = element.getBoundingClientRect();
|
|
61
|
+
var parentRect = parent.getBoundingClientRect();
|
|
62
|
+
var elemTop = elementRect.top;
|
|
63
|
+
var elemBottom = elementRect.bottom;
|
|
64
|
+
var parentTop = parentRect.top;
|
|
65
|
+
var parentBottom = parentRect.bottom;
|
|
66
|
+
|
|
67
|
+
// Only completely visible elements return true:
|
|
68
|
+
var isVisible = elemTop >= parentTop && elemBottom <= parentBottom;
|
|
69
|
+
return isVisible;
|
|
70
|
+
};
|
|
71
|
+
var getFirstVisibleListElementIndex = (0, _react.useCallback)(function () {
|
|
72
|
+
var _parentRef$current;
|
|
73
|
+
var virtualList = rowVirtualizer.getVirtualItems();
|
|
74
|
+
var renderedElements = (_parentRef$current = parentRef.current) === null || _parentRef$current === void 0 || (_parentRef$current = _parentRef$current.firstChild) === null || _parentRef$current === void 0 ? void 0 : _parentRef$current.childNodes;
|
|
75
|
+
if (virtualList.length === 0 || !renderedElements || renderedElements.length === 0) {
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
// Convert NodeListOf<ChildNodes> to ChildNodes[]
|
|
79
|
+
var renderedElementsToArray = Array.from(renderedElements);
|
|
80
|
+
var firstVisibleIndex = renderedElementsToArray.findIndex(function (elem) {
|
|
81
|
+
return isElementVisible(elem);
|
|
82
|
+
});
|
|
83
|
+
if (firstVisibleIndex !== -1) {
|
|
84
|
+
var _virtualList$firstVis;
|
|
85
|
+
return ((_virtualList$firstVis = virtualList[firstVisibleIndex]) === null || _virtualList$firstVis === void 0 ? void 0 : _virtualList$firstVis.index) || 0;
|
|
86
|
+
}
|
|
87
|
+
return 0;
|
|
88
|
+
}, [rowVirtualizer]);
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Recurisive function to find next available emoji and it's focus indexes in the grid
|
|
92
|
+
*
|
|
93
|
+
* current focus element is at rowIndex.columnIndex
|
|
94
|
+
* if found element then return the element and focus indexes
|
|
95
|
+
* otherwise change row/column till find the element
|
|
96
|
+
* if can't find the element till reach the edge of grid, we keep current focus states
|
|
97
|
+
*
|
|
98
|
+
* @param rowIndex search from row index (0 based)
|
|
99
|
+
* @param columnIndex search from column index (0 based)
|
|
100
|
+
* @param direction search direction
|
|
101
|
+
*/
|
|
102
|
+
var findNextEmoji = (0, _react.useCallback)(function (rowIndex, columnIndex, direction) {
|
|
103
|
+
var _virtualistItemsRef$c;
|
|
104
|
+
var emojiToFocus = (_virtualistItemsRef$c = virtualistItemsRef.current) === null || _virtualistItemsRef$c === void 0 ? void 0 : _virtualistItemsRef$c.querySelector("[data-focus-index=\"".concat(rowIndex, "-").concat(columnIndex, "\"]"));
|
|
105
|
+
var lastRowIndex = rowCount - 1;
|
|
106
|
+
var lastColumnIndex = _constants.EMOJI_LIST_COLUMNS - 1;
|
|
107
|
+
if (emojiToFocus) {
|
|
108
|
+
return {
|
|
109
|
+
element: emojiToFocus,
|
|
110
|
+
rowIndex: rowIndex,
|
|
111
|
+
columnIndex: columnIndex
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
switch (direction) {
|
|
115
|
+
case _constants.KeyboardNavigationDirection.Down:
|
|
116
|
+
if (rowIndex >= lastRowIndex) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
// find emoji in same column but lower row
|
|
120
|
+
return findNextEmoji(rowIndex + 1, columnIndex, _constants.KeyboardNavigationDirection.Down);
|
|
121
|
+
case _constants.KeyboardNavigationDirection.Up:
|
|
122
|
+
if (rowIndex <= 0) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
// find emoji in same column but upper row
|
|
126
|
+
return findNextEmoji(rowIndex - 1, columnIndex, _constants.KeyboardNavigationDirection.Up);
|
|
127
|
+
case _constants.KeyboardNavigationDirection.Left:
|
|
128
|
+
if (rowIndex <= 0) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
if (columnIndex < 0) {
|
|
132
|
+
// find emoji in upper row
|
|
133
|
+
return findNextEmoji(rowIndex - 1, lastColumnIndex, _constants.KeyboardNavigationDirection.Left);
|
|
134
|
+
}
|
|
135
|
+
// find emoji on left in the current row
|
|
136
|
+
return findNextEmoji(rowIndex, columnIndex - 1, _constants.KeyboardNavigationDirection.Left);
|
|
137
|
+
case _constants.KeyboardNavigationDirection.Right:
|
|
138
|
+
if (rowIndex >= lastRowIndex) {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// if no emoji on right, we try first emoji in next row
|
|
142
|
+
return findNextEmoji(rowIndex + 1, 0, _constants.KeyboardNavigationDirection.Right);
|
|
143
|
+
default:
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
}, [rowCount]);
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Find the valid emoji to scroll and focus
|
|
150
|
+
*/
|
|
151
|
+
var scrollToRowAndFocusEmoji = (0, _react.useCallback)(function (emojiToFocus) {
|
|
152
|
+
if (emojiToFocus) {
|
|
153
|
+
var _emojiToFocus$element;
|
|
154
|
+
rowVirtualizer.scrollToIndex(emojiToFocus.rowIndex);
|
|
155
|
+
(_emojiToFocus$element = emojiToFocus.element) === null || _emojiToFocus$element === void 0 || _emojiToFocus$element.focus({
|
|
156
|
+
preventScroll: true
|
|
157
|
+
});
|
|
158
|
+
setEmojisFocus({
|
|
159
|
+
rowIndex: emojiToFocus.rowIndex,
|
|
160
|
+
columnIndex: emojiToFocus.columnIndex
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}, [rowVirtualizer, setEmojisFocus]);
|
|
164
|
+
var focusEmoji = (0, _react.useCallback)(function (rIndex, cIndex, direction) {
|
|
165
|
+
var waitForScrollFinish = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
166
|
+
if (waitForScrollFinish) {
|
|
167
|
+
// scroll to target rowIndex first to ensure the row is rendered in list.
|
|
168
|
+
// used in page up/down, ctrl+Home, ctrl+End
|
|
169
|
+
rowVirtualizer.scrollToIndex(rIndex);
|
|
170
|
+
setTimeout(function () {
|
|
171
|
+
var emojiToFocus = findNextEmoji(rIndex, cIndex, direction);
|
|
172
|
+
scrollToRowAndFocusEmoji(emojiToFocus);
|
|
173
|
+
}, 100); // 100ms is virtual list scrolling time
|
|
174
|
+
} else {
|
|
175
|
+
var emojiToFocus = findNextEmoji(rIndex, cIndex, direction);
|
|
176
|
+
scrollToRowAndFocusEmoji(emojiToFocus);
|
|
177
|
+
}
|
|
178
|
+
}, [scrollToRowAndFocusEmoji, findNextEmoji, rowVirtualizer]);
|
|
179
|
+
|
|
180
|
+
// following the guide from https://www.w3.org/WAI/ARIA/apg/patterns/grid/
|
|
181
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
182
|
+
if (!_constants.EMOJIPICKERLIST_KEYBOARD_KEYS_SUPPORTED.includes(e.key)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
e.preventDefault();
|
|
186
|
+
e.stopPropagation();
|
|
187
|
+
var lastRowIndex = rowCount - 1;
|
|
188
|
+
var lastColumnIndex = _constants.EMOJI_LIST_COLUMNS - 1;
|
|
189
|
+
|
|
190
|
+
// focus first emoji on first row
|
|
191
|
+
if (e.key === _constants.KeyboardKeys.Home && e.ctrlKey) {
|
|
192
|
+
focusEmoji(1, 0, _constants.KeyboardNavigationDirection.Up, true);
|
|
193
|
+
return;
|
|
194
|
+
} else if (e.key === _constants.KeyboardKeys.End && e.ctrlKey) {
|
|
195
|
+
// focus last available emoji on last row
|
|
196
|
+
focusEmoji(lastRowIndex, lastColumnIndex, _constants.KeyboardNavigationDirection.Left, true);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
switch (e.key) {
|
|
200
|
+
// navigate to the right column
|
|
201
|
+
case _constants.KeyboardKeys.ArrowRight:
|
|
202
|
+
focusEmoji(currentEmojisFocus.rowIndex, currentEmojisFocus.columnIndex + 1, _constants.KeyboardNavigationDirection.Right);
|
|
203
|
+
break;
|
|
204
|
+
// navigate to the left column
|
|
205
|
+
case _constants.KeyboardKeys.ArrowLeft:
|
|
206
|
+
focusEmoji(currentEmojisFocus.rowIndex, currentEmojisFocus.columnIndex - 1, _constants.KeyboardNavigationDirection.Left);
|
|
207
|
+
break;
|
|
208
|
+
// navigate to the down row
|
|
209
|
+
case _constants.KeyboardKeys.ArrowDown:
|
|
210
|
+
focusEmoji(currentEmojisFocus.rowIndex === lastRowIndex ? lastRowIndex : currentEmojisFocus.rowIndex + 1, currentEmojisFocus.columnIndex, _constants.KeyboardNavigationDirection.Down);
|
|
211
|
+
break;
|
|
212
|
+
// navigate to the row after {EMOJI_LIST_PAGE_COUNT} rows
|
|
213
|
+
case _constants.KeyboardKeys.PageDown:
|
|
214
|
+
focusEmoji(currentEmojisFocus.rowIndex + _constants.EMOJI_LIST_PAGE_COUNT, currentEmojisFocus.columnIndex, _constants.KeyboardNavigationDirection.Down, true);
|
|
215
|
+
break;
|
|
216
|
+
// navigate to the up row
|
|
217
|
+
case _constants.KeyboardKeys.ArrowUp:
|
|
218
|
+
focusEmoji(currentEmojisFocus.rowIndex <= 1 ? 1 : currentEmojisFocus.rowIndex - 1, currentEmojisFocus.columnIndex, _constants.KeyboardNavigationDirection.Up);
|
|
219
|
+
break;
|
|
220
|
+
// navigate to the row before {EMOJI_LIST_PAGE_COUNT} rows
|
|
221
|
+
case _constants.KeyboardKeys.PageUp:
|
|
222
|
+
focusEmoji(currentEmojisFocus.rowIndex - _constants.EMOJI_LIST_PAGE_COUNT, currentEmojisFocus.columnIndex, _constants.KeyboardNavigationDirection.Up, true);
|
|
223
|
+
break;
|
|
224
|
+
// navigate to the first cell of current row
|
|
225
|
+
case _constants.KeyboardKeys.Home:
|
|
226
|
+
focusEmoji(currentEmojisFocus.rowIndex, 0, _constants.KeyboardNavigationDirection.Left);
|
|
227
|
+
break;
|
|
228
|
+
// navigate to the last cell of current row
|
|
229
|
+
case _constants.KeyboardKeys.End:
|
|
230
|
+
focusEmoji(currentEmojisFocus.rowIndex, lastColumnIndex, _constants.KeyboardNavigationDirection.Left);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// Exposing a custom ref handle to the parent component EmojiPickerList to trigger scrollToRow via the listRef
|
|
236
|
+
// https://beta.reactjs.org/reference/react/useImperativeHandle
|
|
237
|
+
(0, _react.useImperativeHandle)(ref, function () {
|
|
238
|
+
return {
|
|
239
|
+
scrollToRow: function scrollToRow(index) {
|
|
240
|
+
if (index !== undefined) {
|
|
241
|
+
rowVirtualizer.setOptions(_objectSpread(_objectSpread({}, rowVirtualizer.options), {}, {
|
|
242
|
+
scrollPaddingStart: 0
|
|
243
|
+
}));
|
|
244
|
+
rowVirtualizer.scrollToIndex(index, {
|
|
245
|
+
align: scrollToAlignment
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
scrollToRowAndFocusLastEmoji: function scrollToRowAndFocusLastEmoji(index) {
|
|
250
|
+
if (index !== undefined) {
|
|
251
|
+
focusEmoji(index, _constants.EMOJI_LIST_COLUMNS, _constants.KeyboardNavigationDirection.Left, true);
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
scrollToEmojiAndFocus: function scrollToEmojiAndFocus(rowIndex, columnIndex) {
|
|
255
|
+
focusEmoji(rowIndex, columnIndex, _constants.KeyboardNavigationDirection.Left, true);
|
|
256
|
+
},
|
|
257
|
+
updateFocusIndex: function updateFocusIndex(rowIndex) {
|
|
258
|
+
var _virtualistItemsRef$c2;
|
|
259
|
+
var columnIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
260
|
+
// row could be removed from virtual list after scrolling, we'll update emoji cell tabIndex after losing focus
|
|
261
|
+
if (!((_virtualistItemsRef$c2 = virtualistItemsRef.current) !== null && _virtualistItemsRef$c2 !== void 0 && _virtualistItemsRef$c2.contains(document.activeElement))) {
|
|
262
|
+
setEmojisFocus({
|
|
263
|
+
rowIndex: rowIndex,
|
|
264
|
+
columnIndex: columnIndex
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
}, [setEmojisFocus, focusEmoji, rowVirtualizer, scrollToAlignment]);
|
|
270
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
271
|
+
ref: parentRef,
|
|
272
|
+
style: {
|
|
273
|
+
height: "".concat(height, "px"),
|
|
274
|
+
width: "".concat(width, "px")
|
|
275
|
+
},
|
|
276
|
+
"data-testid": virtualListScrollContainerTestId,
|
|
277
|
+
"aria-labelledby": "emoji-picker-table-description",
|
|
278
|
+
role: "grid",
|
|
279
|
+
className: (0, _runtime.ax)(["_1reo15vq _18m91wug _n3tdu2gc _nt751r31 _49pcglyw _1hvw1o36"])
|
|
280
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
281
|
+
style: {
|
|
282
|
+
height: "".concat(rowVirtualizer.getTotalSize(), "px"),
|
|
283
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
|
|
284
|
+
width: '100%',
|
|
285
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
|
|
286
|
+
position: 'relative'
|
|
287
|
+
},
|
|
288
|
+
ref: virtualistItemsRef,
|
|
289
|
+
onKeyDown: handleKeyDown,
|
|
290
|
+
role: "presentation"
|
|
291
|
+
}, rowVirtualizer.getVirtualItems().map(function (virtualRow, index) {
|
|
292
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
293
|
+
key: virtualRow.key,
|
|
294
|
+
style: {
|
|
295
|
+
height: "".concat(virtualRow.size, "px"),
|
|
296
|
+
transform: "translateY(".concat(virtualRow.start, "px)")
|
|
297
|
+
},
|
|
298
|
+
role: "row",
|
|
299
|
+
"aria-rowindex": index + 1,
|
|
300
|
+
className: (0, _runtime.ax)(["_kqswstnw _154iidpf _1ltvidpf _1bsb1osq"])
|
|
301
|
+
}, rowRenderer(virtualRow));
|
|
302
|
+
})));
|
|
303
|
+
});
|
|
@@ -15,8 +15,6 @@ var _styles = require("./styles");
|
|
|
15
15
|
|
|
16
16
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
17
17
|
|
|
18
|
-
// ED-26865: use compiled EmojiPreviewComponent when migrating picker to compiled css
|
|
19
|
-
|
|
20
18
|
// eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
|
|
21
19
|
var previewFooterClassnames = [_styles.emojiPickerFooter, _styles.emojiPickerFooterWithTopShadow];
|
|
22
20
|
var emojiPickerFooterTestId = exports.emojiPickerFooterTestId = 'emoji-picker-footer';
|