@atlaskit/emoji 70.5.2 → 70.6.1

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/afm-products/tsconfig.json +3 -0
  4. package/dist/cjs/components/common/EmojiUploadPicker.compiled.css +8 -0
  5. package/dist/cjs/components/common/EmojiUploadPicker.js +68 -3
  6. package/dist/cjs/components/common/FileChooser.compiled.css +22 -0
  7. package/dist/cjs/components/common/FileChooser.js +95 -10
  8. package/dist/cjs/components/i18n.js +5 -0
  9. package/dist/cjs/components/picker/EmojiPickerComponent.compiled.css +10 -2
  10. package/dist/cjs/components/picker/EmojiPickerComponent.js +13 -3
  11. package/dist/cjs/util/analytics/analytics.js +1 -1
  12. package/dist/es2019/components/common/EmojiUploadPicker.compiled.css +8 -0
  13. package/dist/es2019/components/common/EmojiUploadPicker.js +66 -3
  14. package/dist/es2019/components/common/FileChooser.compiled.css +22 -0
  15. package/dist/es2019/components/common/FileChooser.js +88 -10
  16. package/dist/es2019/components/i18n.js +5 -0
  17. package/dist/es2019/components/picker/EmojiPickerComponent.compiled.css +10 -2
  18. package/dist/es2019/components/picker/EmojiPickerComponent.js +13 -3
  19. package/dist/es2019/util/analytics/analytics.js +1 -1
  20. package/dist/esm/components/common/EmojiUploadPicker.compiled.css +8 -0
  21. package/dist/esm/components/common/EmojiUploadPicker.js +68 -3
  22. package/dist/esm/components/common/FileChooser.compiled.css +22 -0
  23. package/dist/esm/components/common/FileChooser.js +95 -10
  24. package/dist/esm/components/i18n.js +5 -0
  25. package/dist/esm/components/picker/EmojiPickerComponent.compiled.css +10 -2
  26. package/dist/esm/components/picker/EmojiPickerComponent.js +13 -3
  27. package/dist/esm/util/analytics/analytics.js +1 -1
  28. package/dist/types/components/common/FileChooser.d.ts +8 -0
  29. package/dist/types/components/i18n.d.ts +5 -0
  30. package/dist/types-ts4.5/components/common/FileChooser.d.ts +8 -0
  31. package/dist/types-ts4.5/components/i18n.d.ts +5 -0
  32. package/package.json +3 -2
@@ -1,18 +1,34 @@
1
- import React, { useRef } from 'react';
1
+ /* FileChooser.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ import "./FileChooser.compiled.css";
3
+ import { ax, ix } from "@compiled/react/runtime";
4
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
2
5
  import Button from '@atlaskit/button/new';
6
+ import UploadIcon from '@atlaskit/icon/core/upload';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
8
+ import { dropTargetForExternal } from '@atlaskit/pragmatic-drag-and-drop/external/adapter';
9
+ import { containsFiles, getFiles } from '@atlaskit/pragmatic-drag-and-drop/external/file';
3
10
  export const chooseFileButtonTestId = 'choose-file-button';
4
11
  export const fileUploadInputTestId = 'file-upload';
12
+ export const dropzoneTestId = 'file-dropzone';
13
+ const dropzone = null;
14
+ const dropzoneActive = null;
15
+ const previewImageStyles = null;
5
16
  const FileChooser = props => {
6
17
  const {
7
18
  accept,
8
19
  ariaDescribedBy,
9
20
  isDisabled,
21
+ isDropDisabled,
10
22
  label,
11
23
  onChange,
12
- onClick
24
+ onClick,
25
+ previewImage,
26
+ previewAlt
13
27
  } = props;
14
28
  const filePickerRef = useRef(null);
15
29
  const fileButtonRef = useRef(null);
30
+ const dropzoneRef = useRef(null);
31
+ const [isDragging, setIsDragging] = useState(false);
16
32
  const handleOnChooseFile = () => {
17
33
  var _fileButtonRef$curren;
18
34
  if (!filePickerRef.current) {
@@ -24,13 +40,47 @@ const FileChooser = props => {
24
40
  filePickerRef.current.click();
25
41
  (_fileButtonRef$curren = fileButtonRef.current) === null || _fileButtonRef$curren === void 0 ? void 0 : _fileButtonRef$curren.focus();
26
42
  };
27
- return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
28
- onClick: handleOnChooseFile,
29
- isDisabled: isDisabled,
30
- "aria-describedby": ariaDescribedBy,
31
- testId: chooseFileButtonTestId,
32
- ref: fileButtonRef
33
- }, label), /*#__PURE__*/React.createElement("input", {
43
+ const handleFileDrop = useCallback(files => {
44
+ if (!onChange || !files.length) {
45
+ return;
46
+ }
47
+ const dataTransfer = new DataTransfer();
48
+ files.forEach(file => dataTransfer.items.add(file));
49
+ const syntheticEvent = {
50
+ target: {
51
+ files: dataTransfer.files
52
+ }
53
+ };
54
+ onChange(syntheticEvent);
55
+ }, [onChange]);
56
+ useEffect(() => {
57
+ const element = dropzoneRef.current;
58
+ if (!element || !fg('platform_emoji_picker_refresh')) {
59
+ return;
60
+ }
61
+ return dropTargetForExternal({
62
+ element,
63
+ canDrop: containsFiles,
64
+ onDragEnter: () => {
65
+ if (!isDropDisabled) {
66
+ setIsDragging(true);
67
+ }
68
+ },
69
+ onDragLeave: () => setIsDragging(false),
70
+ onDrop: ({
71
+ source
72
+ }) => {
73
+ setIsDragging(false);
74
+ if (!isDropDisabled) {
75
+ const files = getFiles({
76
+ source
77
+ });
78
+ handleFileDrop(files);
79
+ }
80
+ }
81
+ });
82
+ }, [isDropDisabled, handleFileDrop]);
83
+ const hiddenInput = /*#__PURE__*/React.createElement("input", {
34
84
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
35
85
  className: "emojiUploadFileInput",
36
86
  ref: filePickerRef,
@@ -43,6 +93,34 @@ const FileChooser = props => {
43
93
  display: 'none'
44
94
  },
45
95
  "data-testid": fileUploadInputTestId
46
- }));
96
+ });
97
+ if (fg('platform_emoji_picker_refresh')) {
98
+ return /*#__PURE__*/React.createElement("div", {
99
+ ref: dropzoneRef,
100
+ "data-testid": dropzoneTestId,
101
+ role: "region",
102
+ "aria-label": label,
103
+ className: ax(["_zulpu2gc _2rko1qi0 _189ee4h9 _1dqogq9o _1h6d1l7x _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o _4t3i7l9q _u5f3utpp _19bvutpp _bfhkhfxm _80omtlke _k8m01rje _1oec6ebc _6fl45ucs", isDragging && "_1h6dq98m _bfhkufnl"])
104
+ }, previewImage ? /*#__PURE__*/React.createElement("img", {
105
+ src: previewImage,
106
+ alt: previewAlt,
107
+ className: ax(["_c71lys9h _p12f1osq _5ral1f51"])
108
+ }) : /*#__PURE__*/React.createElement(Button, {
109
+ onClick: handleOnChooseFile,
110
+ isDisabled: isDisabled,
111
+ appearance: "subtle",
112
+ iconBefore: UploadIcon,
113
+ "aria-describedby": ariaDescribedBy,
114
+ testId: chooseFileButtonTestId,
115
+ ref: fileButtonRef
116
+ }, label), hiddenInput);
117
+ }
118
+ return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
119
+ onClick: handleOnChooseFile,
120
+ isDisabled: isDisabled,
121
+ "aria-describedby": ariaDescribedBy,
122
+ testId: chooseFileButtonTestId,
123
+ ref: fileButtonRef
124
+ }, label), hiddenInput);
47
125
  };
48
126
  export default FileChooser;
@@ -40,6 +40,11 @@ export const messages = defineMessages({
40
40
  defaultMessage: 'Enter a name for the new emoji',
41
41
  description: 'Explains to enter a name for a new emoji'
42
42
  },
43
+ emojiNameLabel: {
44
+ id: 'fabric.emoji.name.label',
45
+ defaultMessage: 'Emoji name',
46
+ description: 'Label for the emoji name input field in the custom emoji upload panel'
47
+ },
43
48
  emojiChooseFileTitle: {
44
49
  id: 'fabric.emoji.choose.file.title',
45
50
  defaultMessage: 'Choose file',
@@ -1,18 +1,23 @@
1
1
 
2
2
  ._19itahnd{border:var(--ds-border,#0b120e24) var(--ds-border-width,1px) solid}
3
- ._2rkofajl{border-radius:var(--ds-radius-small,3px)}._16jlkb7n{flex-grow:1}
3
+ ._2rkofajl{border-radius:var(--ds-radius-small,3px)}._154iidpf{top:0}
4
+ ._16jlkb7n{flex-grow:1}
4
5
  ._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
5
6
  ._18m915vq{overflow-y:hidden}
7
+ ._18m91wug{overflow-y:auto}
6
8
  ._1bah1yb4{justify-content:space-between}
7
9
  ._1bsb1edt{width:350px}
8
10
  ._1e0c1txw{display:flex}
11
+ ._1ltvidpf{left:0}
9
12
  ._1o9zkb7n{flex-shrink:1}
13
+ ._1pbykb7n{z-index:1}
10
14
  ._1reo15vq{overflow-x:hidden}
11
15
  ._1tke1pna{min-height:420px}
12
16
  ._1tke5x59{min-height:340px}
13
17
  ._1tkegx0z{min-height:260px}
14
18
  ._1tkeidpf{min-height:0}
15
19
  ._1ul91edt{min-width:350px}
20
+ ._1xi2idpf{right:0}
16
21
  ._2lx21bp4{flex-direction:column}
17
22
  ._4t3i1ckg{height:455px}
18
23
  ._4t3i2300{height:429px}
@@ -20,6 +25,9 @@
20
25
  ._4t3iixjv{height:375px}
21
26
  ._4t3ivixp{height:349px}
22
27
  ._4t3ixt2k{height:509px}
28
+ ._94n5idpf{bottom:0}
23
29
  ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
24
30
  ._c71l1y6z{max-height:calc(80vh - 86px)}
25
- ._i0dlf1ug{flex-basis:0%}
31
+ ._i0dlf1ug{flex-basis:0%}
32
+ ._kqswh2mm{position:relative}
33
+ ._kqswstnw{position:absolute}
@@ -16,6 +16,7 @@ import { uploadEmoji } from '../common/UploadEmoji';
16
16
  import { createRecordSelectionDefault } from '../common/RecordSelectionDefault';
17
17
  import CategorySelector from './CategorySelector';
18
18
  import EmojiPickerFooter from './EmojiPickerFooter';
19
+ import EmojiUploadPicker from '../common/EmojiUploadPicker';
19
20
  import { EmojiPickerVirtualListInternal as EmojiPickerList } from './EmojiPickerList';
20
21
  import { createAndFireEventInElementsChannel, categoryClickedEvent, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, selectedFileEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, toneSelectorClosedEvent, ufoExperiences } from '../../util/analytics';
21
22
  import { useEmoji } from '../../hooks/useEmoji';
@@ -28,6 +29,7 @@ const emojiPickerWidth = 350;
28
29
  const emojiPickerMinHeight = 260;
29
30
  const heightOffset = 80;
30
31
  const emojiPicker = null;
32
+ const uploadOverlay = null;
31
33
  const emojiPickerWrapper = null;
32
34
  const withPreviewHeight = {
33
35
  small: "_4t3ivixp _1tkegx0z",
@@ -460,7 +462,7 @@ const EmojiPickerComponent = ({
460
462
  role: "dialog",
461
463
  "aria-label": formatMessage(messages.emojiPickerTitle),
462
464
  "aria-modal": true,
463
- className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]])
465
+ className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]])
464
466
  }, /*#__PURE__*/React.createElement("div", {
465
467
  role: "presentation",
466
468
  onKeyPress: suppressKeyPress,
@@ -516,7 +518,7 @@ const EmojiPickerComponent = ({
516
518
  onKeyPress: suppressKeyPress,
517
519
  onKeyUp: suppressKeyPress,
518
520
  onKeyDown: suppressKeyPress,
519
- className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]])
521
+ className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iaq3k _1bsb1edt _1ul91edt _c71l1y6z _kqswh2mm", showPreview || uploading && fg('platform_emoji_picker_refresh') ? withPreviewHeight[size] : withoutPreviewHeight[size]])
520
522
  }, /*#__PURE__*/React.createElement(CategorySelector, {
521
523
  activeCategoryId: activeCategory,
522
524
  dynamicCategories: dynamicCategories,
@@ -555,7 +557,15 @@ const EmojiPickerComponent = ({
555
557
  selectedEmoji: selectedEmoji,
556
558
  uploadEnabled: isUploadSupported && !uploading,
557
559
  onOpenUpload: onOpenUpload
558
- }));
560
+ }), uploading && fg('platform_emoji_picker_refresh') && /*#__PURE__*/React.createElement("div", {
561
+ className: ax(["_2rkofajl _kqswstnw _154iidpf _1ltvidpf _1xi2idpf _94n5idpf _bfhk1bhr _1pbykb7n _18m91wug"])
562
+ }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
563
+ onUploadEmoji: onUploadEmoji,
564
+ onUploadCancelled: onUploadCancelled,
565
+ onFileChooserClicked: onFileChooserClicked,
566
+ errorMessage: formattedErrorMessage,
567
+ initialUploadName: query
568
+ })));
559
569
  };
560
570
  const _default_1 = /*#__PURE__*/memo(EmojiPickerComponent);
561
571
  export default _default_1;
@@ -9,7 +9,7 @@ const createEvent = (eventType, action, actionSubject, actionSubjectId, attribut
9
9
  actionSubjectId,
10
10
  attributes: {
11
11
  packageName: "@atlaskit/emoji",
12
- packageVersion: "70.5.1",
12
+ packageVersion: "70.6.0",
13
13
  ...attributes
14
14
  }
15
15
  });
@@ -1,23 +1,31 @@
1
1
  ._11c8wadc{font:var(--ds-font-body-small,normal 400 9pt/1pc "Atlassian Sans",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
2
2
  ._scffidpf input{border:0}
3
+ ._zulppxbi{gap:var(--ds-space-200,1pc)}
4
+ ._zulpu2gc{gap:var(--ds-space-100,8px)}
3
5
  ._16jlkb7n{flex-grow:1}
6
+ ._19bvpxbi{padding-left:var(--ds-space-200,1pc)}
4
7
  ._19bvu2gc{padding-left:var(--ds-space-100,8px)}
5
8
  ._1bah1b1v{justify-content:space-around}
6
9
  ._1bah1yb4{justify-content:space-between}
10
+ ._1bahesu3{justify-content:flex-end}
7
11
  ._1e0c1txw{display:flex}
8
12
  ._1o9zkb7n{flex-shrink:1}
9
13
  ._1rwq1j28 input{background-color:transparent}
10
14
  ._1w90azsu._1w90azsu{color:var(--ds-text-subtle,#505258)}
11
15
  ._2lx21bp4{flex-direction:column}
12
16
  ._34ir1o36 input{outline-width:medium}
17
+ ._4cvr1h6o{align-items:center}
13
18
  ._4cvresu3{align-items:flex-end}
14
19
  ._9bj2glyw input::-ms-clear{display:none}
20
+ ._ca0qpxbi{padding-top:var(--ds-space-200,1pc)}
15
21
  ._ca0qu2gc{padding-top:var(--ds-space-100,8px)}
16
22
  ._coc6glyw input:invalid{box-shadow:none}
17
23
  ._gxxuglyw input{outline-style:none}
18
24
  ._gy1p12x7{column-gap:var(--ds-space-075,6px)}
19
25
  ._i0dl1wug{flex-basis:auto}
20
26
  ._k48p1pd9{font-weight:var(--ds-font-weight-semibold,600)}
27
+ ._n3td1ejb{padding-bottom:var(--ds-space-300,24px)}
21
28
  ._n3tdu2gc{padding-bottom:var(--ds-space-100,8px)}
29
+ ._u5f3pxbi{padding-right:var(--ds-space-200,1pc)}
22
30
  ._u5f3u2gc{padding-right:var(--ds-space-100,8px)}
23
31
  ._xmji1r31 input{outline-color:currentColor}
@@ -20,13 +20,17 @@ import EmojiUploadPreview from './EmojiUploadPreview';
20
20
  import FileChooser from './FileChooser';
21
21
  import { UploadStatus } from './internal-types';
22
22
  import { fg } from '@atlaskit/platform-feature-flags';
23
+ import Button from '@atlaskit/button/new';
23
24
  var closeEmojiUploadButton = null;
25
+ var uploadAddRowNew = null;
24
26
  var emojiUpload = null;
27
+ var emojiUploadNew = null;
25
28
  var emojiUploadTop = null;
26
29
  var labelStyles = null;
27
30
  var uploadChooseFileEmojiName = null;
28
31
  var uploadChooseFileMessage = null;
29
32
  var uploadChooseFileRow = null;
33
+ var uploadChooseFileRowNew = null;
30
34
  export var uploadEmojiNameInputTestId = 'upload-emoji-name-input';
31
35
  export var uploadEmojiComponentTestId = 'upload-emoji-component';
32
36
  export var cancelEmojiUploadPickerTestId = 'cancel-emoji-upload-picker';
@@ -50,7 +54,10 @@ var ChooseEmojiFile = /*#__PURE__*/memo(function (props) {
50
54
  onClick = props.onClick,
51
55
  onNameChange = props.onNameChange,
52
56
  onUploadCancelled = props.onUploadCancelled,
57
+ onAddEmoji = props.onAddEmoji,
53
58
  errorMessage = props.errorMessage,
59
+ previewImage = props.previewImage,
60
+ uploadStatus = props.uploadStatus,
54
61
  intl = props.intl;
55
62
  var formatMessage = intl.formatMessage;
56
63
  var disableChooser = !name;
@@ -71,7 +78,62 @@ var ChooseEmojiFile = /*#__PURE__*/memo(function (props) {
71
78
  var emojiPlaceholder = formatMessage(messages.emojiPlaceholder);
72
79
  var emojiNameAriaLabel = formatMessage(messages.emojiNameAriaLabel);
73
80
  var emojiChooseFileTitle = formatMessage(messages.emojiChooseFileTitle);
74
- return /*#__PURE__*/React.createElement("div", {
81
+ var isUploading = uploadStatus === UploadStatus.Uploading;
82
+ var addEmojiDisabled = !previewImage || !name || isUploading;
83
+ return fg('platform_emoji_picker_refresh') ? /*#__PURE__*/React.createElement("div", {
84
+ "data-testid": uploadEmojiComponentTestId,
85
+ className: ax(["_ca0qu2gc _u5f3pxbi _n3tdu2gc _19bvpxbi _1e0c1txw _2lx21bp4 _1bah1b1v"])
86
+ }, /*#__PURE__*/React.createElement("div", {
87
+ className: ax(["_11c8wadc _n3tdu2gc _1e0c1txw _1bah1yb4 _4cvresu3"])
88
+ }, /*#__PURE__*/React.createElement("label", {
89
+ htmlFor: "new-emoji-name-input",
90
+ className: ax(["_1w90azsu", "_11c8wadc _k48p1pd9"])
91
+ }, previewImage ? /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiPreviewTitle) : /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel))), /*#__PURE__*/React.createElement("div", {
92
+ className: ax(["_zulppxbi _1e0c1txw _2lx21bp4 _n3tdu2gc"])
93
+ }, /*#__PURE__*/React.createElement(Text, null, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiChooseFileScreenReaderDescription, function () {
94
+ return /*#__PURE__*/React.createElement(FileChooser, {
95
+ label: emojiChooseFileTitle,
96
+ onChange: onChooseFile,
97
+ onClick: onClick,
98
+ accept: "image/png,image/jpeg,image/gif",
99
+ ariaDescribedBy: fileChooserButtonDescriptionId,
100
+ previewImage: previewImage,
101
+ previewAlt: name
102
+ });
103
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("label", {
104
+ htmlFor: "new-emoji-name-input",
105
+ className: ax(["_1w90azsu", "_11c8wadc _k48p1pd9"])
106
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.emojiNameLabel)), /*#__PURE__*/React.createElement(TextField, {
107
+ placeholder: emojiPlaceholder,
108
+ "aria-label": emojiNameAriaLabel,
109
+ maxLength: maxNameLength,
110
+ onChange: onNameChange,
111
+ onKeyDown: onKeyDownHandler,
112
+ value: name,
113
+ isCompact: true,
114
+ autoFocus: true,
115
+ testId: uploadEmojiNameInputTestId,
116
+ ref: inputRef,
117
+ id: "new-emoji-name-input",
118
+ "aria-required": true
119
+ }))), /*#__PURE__*/React.createElement("div", {
120
+ id: fileChooserButtonDescriptionId
121
+ }, errorMessage && /*#__PURE__*/React.createElement(EmojiErrorMessage, {
122
+ errorStyle: "chooseFile",
123
+ message: errorMessage
124
+ })), /*#__PURE__*/React.createElement("div", {
125
+ className: ax(["_zulpu2gc _1e0c1txw _1bahesu3 _4cvr1h6o _ca0qpxbi _n3td1ejb"])
126
+ }, /*#__PURE__*/React.createElement(Button, {
127
+ onClick: onUploadCancelled,
128
+ appearance: "subtle",
129
+ isDisabled: isUploading,
130
+ testId: cancelEmojiUploadPickerTestId
131
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.cancelLabel)), /*#__PURE__*/React.createElement(Button, {
132
+ onClick: onAddEmoji,
133
+ appearance: "primary",
134
+ isDisabled: addEmojiDisabled,
135
+ isLoading: isUploading
136
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addEmojiLabel)))) : /*#__PURE__*/React.createElement("div", {
75
137
  "data-testid": uploadEmojiComponentTestId,
76
138
  className: ax(["_ca0qu2gc _u5f3u2gc _n3tdu2gc _19bvu2gc _1e0c1txw _2lx21bp4 _1bah1b1v"])
77
139
  }, /*#__PURE__*/React.createElement("div", {
@@ -79,7 +141,7 @@ var ChooseEmojiFile = /*#__PURE__*/memo(function (props) {
79
141
  }, /*#__PURE__*/React.createElement("label", {
80
142
  htmlFor: "new-emoji-name-input",
81
143
  className: ax(["_1w90azsu", "_11c8wadc _k48p1pd9"])
82
- }, /*#__PURE__*/React.createElement(FormattedMessage, fg('platform_emoji_picker_refresh') ? messages.addEmojiLabel : messages.addCustomEmojiLabel)), /*#__PURE__*/React.createElement("div", {
144
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.addCustomEmojiLabel)), /*#__PURE__*/React.createElement("div", {
83
145
  className: ax(["_1e0c1txw"])
84
146
  }, /*#__PURE__*/React.createElement(AkButton, {
85
147
  onClick: onUploadCancelled,
@@ -288,7 +350,7 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
288
350
  var onChooseFileClicked = function onChooseFileClicked() {
289
351
  onFileChooserClicked && onFileChooserClicked();
290
352
  };
291
- var content = name && previewImage ? /*#__PURE__*/React.createElement(EmojiUploadPreview, {
353
+ var content = !fg('platform_emoji_picker_refresh') && name && previewImage ? /*#__PURE__*/React.createElement(EmojiUploadPreview, {
292
354
  errorMessage: errorMessage,
293
355
  name: name,
294
356
  onAddEmoji: onAddEmoji,
@@ -301,6 +363,9 @@ var EmojiUploadPicker = function EmojiUploadPicker(props) {
301
363
  onClick: onChooseFileClicked,
302
364
  onNameChange: onNameChange,
303
365
  onUploadCancelled: cancelUpload,
366
+ onAddEmoji: onAddEmoji,
367
+ previewImage: previewImage,
368
+ uploadStatus: uploadStatus,
304
369
  errorMessage: chooseEmojiErrorMessage,
305
370
  intl: intl
306
371
  });
@@ -0,0 +1,22 @@
1
+
2
+ ._2rko1qi0{border-radius:var(--ds-radius-medium,6px)}
3
+ ._zulpu2gc{gap:var(--ds-space-100,8px)}._189ee4h9{border-width:var(--ds-border-width,1px)}
4
+ ._1dqogq9o{border-style:dashed}
5
+ ._1h6d1l7x{border-color:var(--ds-border,#0b120e24)}
6
+ ._1h6dq98m{border-color:var(--ds-border-selected,#1868db)}
7
+ ._19bvutpp{padding-left:var(--ds-space-150,9pt)}
8
+ ._1bah1h6o{justify-content:center}
9
+ ._1e0c1txw{display:flex}
10
+ ._1oec6ebc{transition-duration:.15s}
11
+ ._2lx21bp4{flex-direction:column}
12
+ ._4cvr1h6o{align-items:center}
13
+ ._4t3i7l9q{height:170px}
14
+ ._5ral1f51{object-fit:contain}
15
+ ._6fl45ucs{transition-timing-function:ease}
16
+ ._80omtlke{cursor:pointer}
17
+ ._bfhkhfxm{background-color:var(--ds-surface-sunken,#f8f8f8)}
18
+ ._bfhkufnl{background-color:var(--ds-background-selected-hovered,#cfe1fd)}
19
+ ._c71lys9h{max-height:5pc}
20
+ ._k8m01rje{transition-property:background-color,border-color}
21
+ ._p12f1osq{max-width:100%}
22
+ ._u5f3utpp{padding-right:var(--ds-space-150,9pt)}
@@ -1,16 +1,36 @@
1
- import React, { useRef } from 'react';
1
+ /* FileChooser.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import "./FileChooser.compiled.css";
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
2
6
  import Button from '@atlaskit/button/new';
7
+ import UploadIcon from '@atlaskit/icon/core/upload';
8
+ import { fg } from '@atlaskit/platform-feature-flags';
9
+ import { dropTargetForExternal } from '@atlaskit/pragmatic-drag-and-drop/external/adapter';
10
+ import { containsFiles, getFiles } from '@atlaskit/pragmatic-drag-and-drop/external/file';
3
11
  export var chooseFileButtonTestId = 'choose-file-button';
4
12
  export var fileUploadInputTestId = 'file-upload';
13
+ export var dropzoneTestId = 'file-dropzone';
14
+ var dropzone = null;
15
+ var dropzoneActive = null;
16
+ var previewImageStyles = null;
5
17
  var FileChooser = function FileChooser(props) {
6
18
  var accept = props.accept,
7
19
  ariaDescribedBy = props.ariaDescribedBy,
8
20
  isDisabled = props.isDisabled,
21
+ isDropDisabled = props.isDropDisabled,
9
22
  label = props.label,
10
23
  onChange = props.onChange,
11
- onClick = props.onClick;
24
+ onClick = props.onClick,
25
+ previewImage = props.previewImage,
26
+ previewAlt = props.previewAlt;
12
27
  var filePickerRef = useRef(null);
13
28
  var fileButtonRef = useRef(null);
29
+ var dropzoneRef = useRef(null);
30
+ var _useState = useState(false),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ isDragging = _useState2[0],
33
+ setIsDragging = _useState2[1];
14
34
  var handleOnChooseFile = function handleOnChooseFile() {
15
35
  var _fileButtonRef$curren;
16
36
  if (!filePickerRef.current) {
@@ -22,13 +42,50 @@ var FileChooser = function FileChooser(props) {
22
42
  filePickerRef.current.click();
23
43
  (_fileButtonRef$curren = fileButtonRef.current) === null || _fileButtonRef$curren === void 0 || _fileButtonRef$curren.focus();
24
44
  };
25
- return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
26
- onClick: handleOnChooseFile,
27
- isDisabled: isDisabled,
28
- "aria-describedby": ariaDescribedBy,
29
- testId: chooseFileButtonTestId,
30
- ref: fileButtonRef
31
- }, label), /*#__PURE__*/React.createElement("input", {
45
+ var handleFileDrop = useCallback(function (files) {
46
+ if (!onChange || !files.length) {
47
+ return;
48
+ }
49
+ var dataTransfer = new DataTransfer();
50
+ files.forEach(function (file) {
51
+ return dataTransfer.items.add(file);
52
+ });
53
+ var syntheticEvent = {
54
+ target: {
55
+ files: dataTransfer.files
56
+ }
57
+ };
58
+ onChange(syntheticEvent);
59
+ }, [onChange]);
60
+ useEffect(function () {
61
+ var element = dropzoneRef.current;
62
+ if (!element || !fg('platform_emoji_picker_refresh')) {
63
+ return;
64
+ }
65
+ return dropTargetForExternal({
66
+ element: element,
67
+ canDrop: containsFiles,
68
+ onDragEnter: function onDragEnter() {
69
+ if (!isDropDisabled) {
70
+ setIsDragging(true);
71
+ }
72
+ },
73
+ onDragLeave: function onDragLeave() {
74
+ return setIsDragging(false);
75
+ },
76
+ onDrop: function onDrop(_ref) {
77
+ var source = _ref.source;
78
+ setIsDragging(false);
79
+ if (!isDropDisabled) {
80
+ var files = getFiles({
81
+ source: source
82
+ });
83
+ handleFileDrop(files);
84
+ }
85
+ }
86
+ });
87
+ }, [isDropDisabled, handleFileDrop]);
88
+ var hiddenInput = /*#__PURE__*/React.createElement("input", {
32
89
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
33
90
  className: "emojiUploadFileInput",
34
91
  ref: filePickerRef,
@@ -41,6 +98,34 @@ var FileChooser = function FileChooser(props) {
41
98
  display: 'none'
42
99
  },
43
100
  "data-testid": fileUploadInputTestId
44
- }));
101
+ });
102
+ if (fg('platform_emoji_picker_refresh')) {
103
+ return /*#__PURE__*/React.createElement("div", {
104
+ ref: dropzoneRef,
105
+ "data-testid": dropzoneTestId,
106
+ role: "region",
107
+ "aria-label": label,
108
+ className: ax(["_zulpu2gc _2rko1qi0 _189ee4h9 _1dqogq9o _1h6d1l7x _1e0c1txw _2lx21bp4 _4cvr1h6o _1bah1h6o _4t3i7l9q _u5f3utpp _19bvutpp _bfhkhfxm _80omtlke _k8m01rje _1oec6ebc _6fl45ucs", isDragging && "_1h6dq98m _bfhkufnl"])
109
+ }, previewImage ? /*#__PURE__*/React.createElement("img", {
110
+ src: previewImage,
111
+ alt: previewAlt,
112
+ className: ax(["_c71lys9h _p12f1osq _5ral1f51"])
113
+ }) : /*#__PURE__*/React.createElement(Button, {
114
+ onClick: handleOnChooseFile,
115
+ isDisabled: isDisabled,
116
+ appearance: "subtle",
117
+ iconBefore: UploadIcon,
118
+ "aria-describedby": ariaDescribedBy,
119
+ testId: chooseFileButtonTestId,
120
+ ref: fileButtonRef
121
+ }, label), hiddenInput);
122
+ }
123
+ return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Button, {
124
+ onClick: handleOnChooseFile,
125
+ isDisabled: isDisabled,
126
+ "aria-describedby": ariaDescribedBy,
127
+ testId: chooseFileButtonTestId,
128
+ ref: fileButtonRef
129
+ }, label), hiddenInput);
45
130
  };
46
131
  export default FileChooser;
@@ -40,6 +40,11 @@ export var messages = defineMessages({
40
40
  defaultMessage: 'Enter a name for the new emoji',
41
41
  description: 'Explains to enter a name for a new emoji'
42
42
  },
43
+ emojiNameLabel: {
44
+ id: 'fabric.emoji.name.label',
45
+ defaultMessage: 'Emoji name',
46
+ description: 'Label for the emoji name input field in the custom emoji upload panel'
47
+ },
43
48
  emojiChooseFileTitle: {
44
49
  id: 'fabric.emoji.choose.file.title',
45
50
  defaultMessage: 'Choose file',
@@ -1,18 +1,23 @@
1
1
 
2
2
  ._19itahnd{border:var(--ds-border,#0b120e24) var(--ds-border-width,1px) solid}
3
- ._2rkofajl{border-radius:var(--ds-radius-small,3px)}._16jlkb7n{flex-grow:1}
3
+ ._2rkofajl{border-radius:var(--ds-radius-small,3px)}._154iidpf{top:0}
4
+ ._16jlkb7n{flex-grow:1}
4
5
  ._16qs130s{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #1e1f2126,0 0 1px #1e1f214f)}
5
6
  ._18m915vq{overflow-y:hidden}
7
+ ._18m91wug{overflow-y:auto}
6
8
  ._1bah1yb4{justify-content:space-between}
7
9
  ._1bsb10mj{width:var(--_gsvyy7)}
8
10
  ._1e0c1txw{display:flex}
11
+ ._1ltvidpf{left:0}
9
12
  ._1o9zkb7n{flex-shrink:1}
13
+ ._1pbykb7n{z-index:1}
10
14
  ._1reo15vq{overflow-x:hidden}
11
15
  ._1tke1pna{min-height:420px}
12
16
  ._1tke5x59{min-height:340px}
13
17
  ._1tkegx0z{min-height:260px}
14
18
  ._1tkeidpf{min-height:0}
15
19
  ._1ul910mj{min-width:var(--_gsvyy7)}
20
+ ._1xi2idpf{right:0}
16
21
  ._2lx21bp4{flex-direction:column}
17
22
  ._4t3i1ckg{height:455px}
18
23
  ._4t3i2300{height:429px}
@@ -21,6 +26,9 @@
21
26
  ._4t3iuxo9{height:var(--_19dn98e)}
22
27
  ._4t3ivixp{height:349px}
23
28
  ._4t3ixt2k{height:509px}
29
+ ._94n5idpf{bottom:0}
24
30
  ._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
25
31
  ._c71l1y6z{max-height:calc(80vh - 86px)}
26
- ._i0dlf1ug{flex-basis:0%}
32
+ ._i0dlf1ug{flex-basis:0%}
33
+ ._kqswh2mm{position:relative}
34
+ ._kqswstnw{position:absolute}
@@ -21,6 +21,7 @@ import { uploadEmoji } from '../common/UploadEmoji';
21
21
  import { createRecordSelectionDefault } from '../common/RecordSelectionDefault';
22
22
  import CategorySelector from './CategorySelector';
23
23
  import EmojiPickerFooter from './EmojiPickerFooter';
24
+ import EmojiUploadPicker from '../common/EmojiUploadPicker';
24
25
  import { EmojiPickerVirtualListInternal as EmojiPickerList } from './EmojiPickerList';
25
26
  import { createAndFireEventInElementsChannel, categoryClickedEvent, closedPickerEvent, deleteBeginEvent, deleteCancelEvent, deleteConfirmEvent, openedPickerEvent, pickerClickedEvent, pickerSearchedEvent, selectedFileEvent, uploadBeginButton, uploadCancelButton, uploadConfirmButton, toneSelectorClosedEvent, ufoExperiences } from '../../util/analytics';
26
27
  import { useEmoji } from '../../hooks/useEmoji';
@@ -33,6 +34,7 @@ var emojiPickerWidth = 350;
33
34
  var emojiPickerMinHeight = 260;
34
35
  var heightOffset = 80;
35
36
  var emojiPicker = null;
37
+ var uploadOverlay = null;
36
38
  var emojiPickerWrapper = null;
37
39
  var withPreviewHeight = {
38
40
  small: "_4t3ivixp _1tkegx0z",
@@ -513,7 +515,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
513
515
  role: "dialog",
514
516
  "aria-label": formatMessage(messages.emojiPickerTitle),
515
517
  "aria-modal": true,
516
- className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iuxo9 _1bsb10mj _1ul910mj _c71l1y6z", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]]),
518
+ className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iuxo9 _1bsb10mj _1ul910mj _c71l1y6z _kqswh2mm", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]]),
517
519
  style: {
518
520
  "--_19dn98e": ix("".concat(emojiPickerHeight, "px")),
519
521
  "--_gsvyy7": ix("".concat(emojiPickerWidth, "px"))
@@ -573,7 +575,7 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
573
575
  onKeyPress: suppressKeyPress,
574
576
  onKeyUp: suppressKeyPress,
575
577
  onKeyDown: suppressKeyPress,
576
- className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iuxo9 _1bsb10mj _1ul910mj _c71l1y6z", showPreview && withPreviewHeight[size], !showPreview && withoutPreviewHeight[size]]),
578
+ className: ax(["_19itahnd _2rkofajl _1e0c1txw _2lx21bp4 _1bah1yb4 _bfhk1bhr _16qs130s _4t3iuxo9 _1bsb10mj _1ul910mj _c71l1y6z _kqswh2mm", showPreview || uploading && fg('platform_emoji_picker_refresh') ? withPreviewHeight[size] : withoutPreviewHeight[size]]),
577
579
  style: {
578
580
  "--_19dn98e": ix("".concat(emojiPickerHeight, "px")),
579
581
  "--_gsvyy7": ix("".concat(emojiPickerWidth, "px"))
@@ -616,7 +618,15 @@ var EmojiPickerComponent = function EmojiPickerComponent(_ref) {
616
618
  selectedEmoji: selectedEmoji,
617
619
  uploadEnabled: isUploadSupported && !uploading,
618
620
  onOpenUpload: onOpenUpload
619
- }));
621
+ }), uploading && fg('platform_emoji_picker_refresh') && /*#__PURE__*/React.createElement("div", {
622
+ className: ax(["_2rkofajl _kqswstnw _154iidpf _1ltvidpf _1xi2idpf _94n5idpf _bfhk1bhr _1pbykb7n _18m91wug"])
623
+ }, /*#__PURE__*/React.createElement(EmojiUploadPicker, {
624
+ onUploadEmoji: onUploadEmoji,
625
+ onUploadCancelled: onUploadCancelled,
626
+ onFileChooserClicked: onFileChooserClicked,
627
+ errorMessage: formattedErrorMessage,
628
+ initialUploadName: query
629
+ })));
620
630
  };
621
631
  var _default_1 = /*#__PURE__*/memo(EmojiPickerComponent);
622
632
  export default _default_1;
@@ -14,7 +14,7 @@ var createEvent = function createEvent(eventType, action, actionSubject, actionS
14
14
  actionSubjectId: actionSubjectId,
15
15
  attributes: _objectSpread({
16
16
  packageName: "@atlaskit/emoji",
17
- packageVersion: "70.5.1"
17
+ packageVersion: "70.6.0"
18
18
  }, attributes)
19
19
  };
20
20
  };