@atlaskit/share 0.33.0 → 0.34.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cjs/clients/ShareServiceClient.js +1 -1
  3. package/dist/cjs/components/CopyLinkButton.js +1 -1
  4. package/dist/cjs/components/ShareDialogContainer.js +3 -3
  5. package/dist/cjs/components/ShareDialogWithTrigger.js +13 -8
  6. package/dist/cjs/components/ShareForm.js +124 -62
  7. package/dist/cjs/components/ShareHeader.js +2 -3
  8. package/dist/cjs/components/SplitButton.js +32 -19
  9. package/dist/cjs/components/analytics.js +1 -1
  10. package/dist/cjs/components/localStorageUtils.js +1 -1
  11. package/dist/cjs/components/styles.js +1 -1
  12. package/dist/cjs/components/utils.js +1 -1
  13. package/dist/cjs/i18n/index.js +42 -42
  14. package/dist/cjs/i18n.js +5 -0
  15. package/dist/cjs/index.js +8 -8
  16. package/dist/cjs/types/Flag.js +1 -1
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/components/ShareDialogContainer.js +2 -2
  19. package/dist/es2019/components/ShareDialogWithTrigger.js +11 -7
  20. package/dist/es2019/components/ShareForm.js +103 -47
  21. package/dist/es2019/components/ShareHeader.js +2 -3
  22. package/dist/es2019/components/SplitButton.js +16 -8
  23. package/dist/es2019/i18n.js +5 -0
  24. package/dist/es2019/version.json +1 -1
  25. package/dist/esm/components/ShareDialogContainer.js +2 -2
  26. package/dist/esm/components/ShareDialogWithTrigger.js +12 -7
  27. package/dist/esm/components/ShareForm.js +113 -60
  28. package/dist/esm/components/ShareHeader.js +2 -3
  29. package/dist/esm/components/SplitButton.js +30 -19
  30. package/dist/esm/i18n.js +5 -0
  31. package/dist/esm/version.json +1 -1
  32. package/dist/types/components/ShareDialogContainer.d.ts +3 -3
  33. package/dist/types/components/ShareDialogWithTrigger.d.ts +3 -2
  34. package/dist/types/components/ShareForm.d.ts +9 -3
  35. package/dist/types/components/ShareHeader.d.ts +0 -1
  36. package/dist/types/i18n.d.ts +5 -0
  37. package/dist/types/types/ShareDialogWithTrigger.d.ts +1 -0
  38. package/dist/types/types/ShareEntities.d.ts +1 -0
  39. package/package.json +5 -4
@@ -301,6 +301,7 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
301
301
  triggerButtonTooltipPosition = _this$props6.triggerButtonTooltipPosition,
302
302
  triggerButtonAppearance = _this$props6.triggerButtonAppearance,
303
303
  triggerButtonStyle = _this$props6.triggerButtonStyle,
304
+ integrationMode = _this$props6.integrationMode,
304
305
  shareIntegrations = _this$props6.shareIntegrations,
305
306
  dialogZIndex = _this$props6.dialogZIndex,
306
307
  dialogPlacement = _this$props6.dialogPlacement;
@@ -311,6 +312,7 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
311
312
  var shareError = _this.state.shareError;
312
313
  button = renderCustomTriggerButton({
313
314
  error: shareError,
315
+ isDisabled: isDisabled,
314
316
  isSelected: isDialogOpen,
315
317
  onClick: _this.onTriggerClick
316
318
  }, triggerProps);
@@ -337,7 +339,7 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
337
339
  } // If there are any integrations, wrap the share button in a split button with integrations.
338
340
 
339
341
 
340
- if (shareIntegrations !== null && shareIntegrations !== void 0 && shareIntegrations.length) {
342
+ if (integrationMode === 'split' && shareIntegrations !== null && shareIntegrations !== void 0 && shareIntegrations.length) {
341
343
  button = /*#__PURE__*/React.createElement(SplitButton, {
342
344
  shareButton: button,
343
345
  handleOpenSplitButton: _this.handleOpenSplitButton,
@@ -356,10 +358,10 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
356
358
  });
357
359
 
358
360
  _defineProperty(_assertThisInitialized(_this), "handleOpenSplitButton", function () {
359
- _this.handleDialogOpen();
360
-
361
361
  _this.setState({
362
362
  isUsingSplitButton: true
363
+ }, function () {
364
+ return _this.handleCloseDialog();
363
365
  });
364
366
 
365
367
  _this.createAndFireEvent(shareSplitButtonEvent());
@@ -408,7 +410,6 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
408
410
  loadUserOptions = _this$props7.loadUserOptions,
409
411
  shareFormTitle = _this$props7.shareFormTitle,
410
412
  shareFormHelperMessage = _this$props7.shareFormHelperMessage,
411
- contentPermissions = _this$props7.contentPermissions,
412
413
  bottomMessage = _this$props7.bottomMessage,
413
414
  submitButtonLabel = _this$props7.submitButtonLabel,
414
415
  product = _this$props7.product,
@@ -421,7 +422,9 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
421
422
  dialogZIndex = _this$props7.dialogZIndex,
422
423
  isPublicLink = _this$props7.isPublicLink,
423
424
  tabIndex = _this$props7.tabIndex,
424
- copyTooltipText = _this$props7.copyTooltipText;
425
+ copyTooltipText = _this$props7.copyTooltipText,
426
+ integrationMode = _this$props7.integrationMode,
427
+ shareIntegrations = _this$props7.shareIntegrations;
425
428
  var style = typeof tabIndex !== 'undefined' && tabIndex >= 0 ? {
426
429
  outline: 'none'
427
430
  } : undefined; // for performance purposes, we may want to have a loadable content i.e. ShareForm
@@ -447,8 +450,8 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
447
450
  isSharing: isSharing,
448
451
  onSubmit: _this2.handleShareSubmit,
449
452
  title: shareFormTitle,
453
+ showTitle: integrationMode !== 'tabs' || !shareIntegrations || !shareIntegrations.length,
450
454
  helperMessage: shareFormHelperMessage,
451
- contentPermissions: contentPermissions,
452
455
  shareError: shareError,
453
456
  onDismiss: _this2.handleFormDismiss,
454
457
  defaultValue: defaultValue,
@@ -464,7 +467,9 @@ export var ShareDialogWithTriggerInternal = /*#__PURE__*/function (_React$PureCo
464
467
  fieldsFooter: shareFieldsFooter,
465
468
  selectPortalRef: _this2.selectPortalRef,
466
469
  isPublicLink: isPublicLink,
467
- copyTooltipText: copyTooltipText
470
+ copyTooltipText: copyTooltipText,
471
+ integrationMode: integrationMode,
472
+ shareIntegrations: shareIntegrations
468
473
  })), bottomMessage ? /*#__PURE__*/React.createElement(BottomMessageWrapper, null, bottomMessage) : null, customFooter && /*#__PURE__*/React.createElement(CustomFooterWrapper, null, customFooter)));
469
474
  },
470
475
  isOpen: isDialogOpen,
@@ -1,4 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
2
  import _createClass from "@babel/runtime/helpers/createClass";
4
3
  import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
@@ -6,9 +5,10 @@ import _inherits from "@babel/runtime/helpers/inherits";
6
5
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
7
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
8
7
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
+ import _extends from "@babel/runtime/helpers/extends";
9
9
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
10
10
 
11
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
11
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
12
12
 
13
13
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
14
14
 
@@ -20,6 +20,7 @@ import ErrorIcon from '@atlaskit/icon/glyph/error';
20
20
  import { R400 } from '@atlaskit/theme/colors';
21
21
  import { gridSize } from '@atlaskit/theme/constants';
22
22
  import Tooltip from '@atlaskit/tooltip';
23
+ import Tabs, { Tab, TabList, TabPanel } from '@atlaskit/tabs';
23
24
  import React from 'react';
24
25
  import { FormattedMessage, injectIntl } from 'react-intl';
25
26
  import styled from 'styled-components';
@@ -28,11 +29,24 @@ import { CommentField } from './CommentField';
28
29
  import CopyLinkButton from './CopyLinkButton';
29
30
  import { ShareHeader } from './ShareHeader';
30
31
  import { UserPickerField } from './UserPickerField';
32
+ import { IntegrationForm } from './IntegrationForm';
31
33
  var SubmitButtonWrapper = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n margin-left: auto;\n"])));
32
34
  var CenterAlignedIconWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n align-self: center;\n padding: 0 10px;\n\n > div {\n line-height: 1;\n }\n"])));
33
- export var FormWrapper = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n /* jira has a class override font settings on h1 in gh-custom-field-pickers.css */\n #ghx-modes-tools #ghx-share & h1:first-child {\n margin-top: 0;\n }\n"])));
35
+ export var FormWrapper = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n margin-top: ", "px;\n width: 100%;\n\n /* jira has a class override font settings on h1 in gh-custom-field-pickers.css */\n #ghx-modes-tools #ghx-share & h1:first-child {\n margin-top: 0;\n }\n"])), function (props) {
36
+ return props.isMainShare ? gridSize() : gridSize() * 2;
37
+ });
34
38
  export var FormFooter = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: ", "px;\n display: flex;\n justify-content: flex-start;\n"])), gridSize);
35
39
  var FormField = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n"])));
40
+ var IntegrationWrapper = styled.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n"])));
41
+ var IntegrationIconWrapper = styled.span(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n margin-right: 5px;\n"])));
42
+
43
+ var integrationTabText = function integrationTabText(integrationName) {
44
+ return /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.shareInIntegrationButtonText, {
45
+ values: {
46
+ integrationName: integrationName
47
+ }
48
+ }));
49
+ };
36
50
 
37
51
  var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
38
52
  _inherits(InternalForm, _React$PureComponent);
@@ -50,14 +64,65 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
50
64
 
51
65
  _this = _super.call.apply(_super, [this].concat(args));
52
66
 
53
- _defineProperty(_assertThisInitialized(_this), "renderSubmitButton", function () {
67
+ _defineProperty(_assertThisInitialized(_this), "renderShareForm", function () {
54
68
  var _this$props = _this.props,
55
- formatMessage = _this$props.intl.formatMessage,
56
- isSharing = _this$props.isSharing,
57
- shareError = _this$props.shareError,
58
- submitButtonLabel = _this$props.submitButtonLabel,
69
+ formProps = _this$props.formProps,
70
+ title = _this$props.title,
71
+ _this$props$showTitle = _this$props.showTitle,
72
+ showTitle = _this$props$showTitle === void 0 ? true : _this$props$showTitle,
73
+ loadOptions = _this$props.loadOptions,
74
+ onLinkCopy = _this$props.onLinkCopy,
75
+ copyLink = _this$props.copyLink,
76
+ defaultValue = _this$props.defaultValue,
77
+ config = _this$props.config,
78
+ isFetchingConfig = _this$props.isFetchingConfig,
79
+ product = _this$props.product,
80
+ onUserInputChange = _this$props.onUserInputChange,
81
+ enableSmartUserPicker = _this$props.enableSmartUserPicker,
82
+ loggedInAccountId = _this$props.loggedInAccountId,
83
+ cloudId = _this$props.cloudId,
84
+ onUserSelectionChange = _this$props.onUserSelectionChange,
85
+ fieldsFooter = _this$props.fieldsFooter,
86
+ selectPortalRef = _this$props.selectPortalRef,
59
87
  isDisabled = _this$props.isDisabled,
60
- isPublicLink = _this$props.isPublicLink;
88
+ isPublicLink = _this$props.isPublicLink,
89
+ copyTooltipText = _this$props.copyTooltipText,
90
+ helperMessage = _this$props.helperMessage;
91
+ return /*#__PURE__*/React.createElement("form", formProps, showTitle && /*#__PURE__*/React.createElement(ShareHeader, {
92
+ title: title
93
+ }), /*#__PURE__*/React.createElement(FormField, null, /*#__PURE__*/React.createElement(UserPickerField, {
94
+ onInputChange: onUserInputChange,
95
+ onChange: onUserSelectionChange,
96
+ loadOptions: loadOptions,
97
+ defaultValue: defaultValue && defaultValue.users,
98
+ config: config,
99
+ isLoading: isFetchingConfig,
100
+ product: product,
101
+ enableSmartUserPicker: enableSmartUserPicker,
102
+ loggedInAccountId: loggedInAccountId,
103
+ cloudId: cloudId,
104
+ selectPortalRef: selectPortalRef,
105
+ isPublicLink: isPublicLink,
106
+ helperMessage: helperMessage
107
+ })), /*#__PURE__*/React.createElement(FormField, null, /*#__PURE__*/React.createElement(CommentField, {
108
+ defaultValue: defaultValue && defaultValue.comment
109
+ })), fieldsFooter, /*#__PURE__*/React.createElement(FormFooter, null, /*#__PURE__*/React.createElement(CopyLinkButton, {
110
+ isDisabled: isDisabled,
111
+ onLinkCopy: onLinkCopy,
112
+ link: copyLink,
113
+ isPublicLink: isPublicLink,
114
+ copyTooltipText: copyTooltipText
115
+ }), _this.renderSubmitButton()));
116
+ });
117
+
118
+ _defineProperty(_assertThisInitialized(_this), "renderSubmitButton", function () {
119
+ var _this$props2 = _this.props,
120
+ formatMessage = _this$props2.intl.formatMessage,
121
+ isSharing = _this$props2.isSharing,
122
+ shareError = _this$props2.shareError,
123
+ submitButtonLabel = _this$props2.submitButtonLabel,
124
+ isDisabled = _this$props2.isDisabled,
125
+ isPublicLink = _this$props2.isPublicLink;
61
126
  var shouldShowWarning = shareError && !isSharing;
62
127
  var buttonAppearance = !shouldShowWarning ? 'primary' : 'warning';
63
128
  var sendLabel = isPublicLink ? messages.formSendPublic : messages.formSend;
@@ -83,9 +148,9 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
83
148
  _createClass(InternalForm, [{
84
149
  key: "componentWillUnmount",
85
150
  value: function componentWillUnmount() {
86
- var _this$props2 = this.props,
87
- onDismiss = _this$props2.onDismiss,
88
- getValues = _this$props2.getValues;
151
+ var _this$props3 = this.props,
152
+ onDismiss = _this$props3.onDismiss,
153
+ getValues = _this$props3.getValues;
89
154
 
90
155
  if (onDismiss) {
91
156
  onDismiss(getValues());
@@ -94,54 +159,42 @@ var InternalForm = /*#__PURE__*/function (_React$PureComponent) {
94
159
  }, {
95
160
  key: "render",
96
161
  value: function render() {
97
- var _this$props3 = this.props,
98
- formProps = _this$props3.formProps,
99
- title = _this$props3.title,
100
- contentPermissions = _this$props3.contentPermissions,
101
- loadOptions = _this$props3.loadOptions,
102
- onLinkCopy = _this$props3.onLinkCopy,
103
- copyLink = _this$props3.copyLink,
104
- defaultValue = _this$props3.defaultValue,
105
- config = _this$props3.config,
106
- isFetchingConfig = _this$props3.isFetchingConfig,
107
- product = _this$props3.product,
108
- onUserInputChange = _this$props3.onUserInputChange,
109
- enableSmartUserPicker = _this$props3.enableSmartUserPicker,
110
- loggedInAccountId = _this$props3.loggedInAccountId,
111
- cloudId = _this$props3.cloudId,
112
- onUserSelectionChange = _this$props3.onUserSelectionChange,
113
- fieldsFooter = _this$props3.fieldsFooter,
114
- selectPortalRef = _this$props3.selectPortalRef,
115
- isDisabled = _this$props3.isDisabled,
116
- isPublicLink = _this$props3.isPublicLink,
117
- copyTooltipText = _this$props3.copyTooltipText,
118
- helperMessage = _this$props3.helperMessage;
119
- return /*#__PURE__*/React.createElement(FormWrapper, null, /*#__PURE__*/React.createElement("form", formProps, /*#__PURE__*/React.createElement(ShareHeader, {
120
- title: title,
121
- contentPermissions: contentPermissions
122
- }), /*#__PURE__*/React.createElement(FormField, null, /*#__PURE__*/React.createElement(UserPickerField, {
123
- onInputChange: onUserInputChange,
124
- onChange: onUserSelectionChange,
125
- loadOptions: loadOptions,
126
- defaultValue: defaultValue && defaultValue.users,
127
- config: config,
128
- isLoading: isFetchingConfig,
129
- product: product,
130
- helperMessage: helperMessage,
131
- enableSmartUserPicker: enableSmartUserPicker,
132
- loggedInAccountId: loggedInAccountId,
133
- cloudId: cloudId,
134
- selectPortalRef: selectPortalRef,
135
- isPublicLink: isPublicLink
136
- })), /*#__PURE__*/React.createElement(FormField, null, /*#__PURE__*/React.createElement(CommentField, {
137
- defaultValue: defaultValue && defaultValue.comment
138
- })), fieldsFooter, /*#__PURE__*/React.createElement(FormFooter, null, /*#__PURE__*/React.createElement(CopyLinkButton, {
139
- isDisabled: isDisabled,
140
- onLinkCopy: onLinkCopy,
141
- link: copyLink,
142
- isPublicLink: isPublicLink,
143
- copyTooltipText: copyTooltipText
144
- }), this.renderSubmitButton())));
162
+ var _this$props4 = this.props,
163
+ title = _this$props4.title,
164
+ _this$props4$integrat = _this$props4.integrationMode,
165
+ integrationMode = _this$props4$integrat === void 0 ? 'off' : _this$props4$integrat,
166
+ shareIntegrations = _this$props4.shareIntegrations;
167
+
168
+ if (integrationMode === 'off' || !shareIntegrations || !shareIntegrations.length) {
169
+ return this.renderShareForm();
170
+ }
171
+
172
+ var firstIntegration = shareIntegrations[0];
173
+
174
+ if (integrationMode === 'tabs') {
175
+ return /*#__PURE__*/React.createElement(Tabs, {
176
+ id: "ShareForm-Tabs-Integrations"
177
+ }, /*#__PURE__*/React.createElement(TabList, null, /*#__PURE__*/React.createElement(Tab, {
178
+ key: "share-tab-default"
179
+ }, title || /*#__PURE__*/React.createElement(FormattedMessage, messages.formTitle)), /*#__PURE__*/React.createElement(Tab, {
180
+ key: "share-tab-".concat(firstIntegration.type)
181
+ }, /*#__PURE__*/React.createElement(IntegrationWrapper, null, /*#__PURE__*/React.createElement(IntegrationIconWrapper, null, /*#__PURE__*/React.createElement(firstIntegration.Icon, null)), integrationTabText(firstIntegration.type)))), /*#__PURE__*/React.createElement(TabPanel, {
182
+ key: "share-tabPanel-default"
183
+ }, /*#__PURE__*/React.createElement(FormWrapper, {
184
+ isMainShare: true
185
+ }, this.renderShareForm())), /*#__PURE__*/React.createElement(TabPanel, {
186
+ key: "share-tabPanel-integration"
187
+ }, /*#__PURE__*/React.createElement(FormWrapper, {
188
+ isMainShare: false
189
+ }, /*#__PURE__*/React.createElement(IntegrationForm, {
190
+ Content: firstIntegration.Content,
191
+ onIntegrationClose: function onIntegrationClose() {
192
+ return null;
193
+ }
194
+ }))));
195
+ }
196
+
197
+ return this.renderShareForm();
145
198
  }
146
199
  }]);
147
200
 
@@ -11,7 +11,6 @@ import { messages } from '../i18n';
11
11
  var HeaderWrapper = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n"])));
12
12
  export var FormHeaderTitle = styled.h1(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n ", ";\n line-height: ", "px;\n margin-right: ", "px;\n margin-top: ", "px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n > span {\n font-size: initial;\n }\n"])), h500, gridSize() * 4, gridSize() * 4, gridSize() * 4);
13
13
  export var ShareHeader = function ShareHeader(_ref) {
14
- var title = _ref.title,
15
- contentPermissions = _ref.contentPermissions;
16
- return /*#__PURE__*/React.createElement(HeaderWrapper, null, /*#__PURE__*/React.createElement(FormHeaderTitle, null, title || /*#__PURE__*/React.createElement(FormattedMessage, messages.formTitle)), contentPermissions);
14
+ var title = _ref.title;
15
+ return /*#__PURE__*/React.createElement(HeaderWrapper, null, /*#__PURE__*/React.createElement(FormHeaderTitle, null, title || /*#__PURE__*/React.createElement(FormattedMessage, messages.formTitle)));
17
16
  };
@@ -1,3 +1,4 @@
1
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
1
2
  import _extends from "@babel/runtime/helpers/extends";
2
3
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
3
4
 
@@ -6,7 +7,9 @@ var _templateObject, _templateObject2, _templateObject3;
6
7
  import React, { useCallback } from 'react';
7
8
  import { FormattedMessage } from 'react-intl';
8
9
  import styled from 'styled-components';
9
- import { DropdownMenuStateless, DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
10
+ import Button from '@atlaskit/button/standard-button';
11
+ import DropdownMenu, { DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
12
+ import ChevronDownIcon from '@atlaskit/icon/glyph/chevron-down';
10
13
  import { N800 } from '@atlaskit/theme/colors';
11
14
  import { borderRadius } from '@atlaskit/theme/constants';
12
15
  import { messages } from '../i18n';
@@ -45,19 +48,27 @@ var SplitButtonDropdown = function SplitButtonDropdown(props) {
45
48
  onIntegrationClick(integration);
46
49
  createAndFireEvent(shareIntegrationButtonEvent(integration.type));
47
50
  }, [createAndFireEvent, onIntegrationClick]);
48
- return /*#__PURE__*/React.createElement(DropdownMenuWrapper, null, /*#__PURE__*/React.createElement(DropdownMenuStateless, {
49
- "data-testid": "split-button-dropdown",
50
- triggerButtonProps: {
51
- appearance: triggerButtonAppearance
51
+ return /*#__PURE__*/React.createElement(DropdownMenuWrapper, null, /*#__PURE__*/React.createElement(DropdownMenu, {
52
+ testId: "split-button-dropdown",
53
+ trigger: function trigger(_ref2) {
54
+ var triggerRef = _ref2.triggerRef,
55
+ providedProps = _objectWithoutProperties(_ref2, ["triggerRef"]);
56
+
57
+ return /*#__PURE__*/React.createElement(Button, _extends({}, providedProps, {
58
+ ref: triggerRef,
59
+ iconBefore: /*#__PURE__*/React.createElement(ChevronDownIcon, {
60
+ label: ""
61
+ }),
62
+ appearance: triggerButtonAppearance
63
+ }));
52
64
  },
53
- triggerType: "button",
54
- position: "bottom right",
65
+ placement: "bottom-end",
55
66
  isOpen: isUsingSplitButton,
56
67
  onOpenChange: onOpenChange
57
68
  }, /*#__PURE__*/React.createElement(DropdownItemGroup, null, shareIntegrations.map(function (integration) {
58
69
  return /*#__PURE__*/React.createElement(DropdownItem, {
59
70
  key: integration.type,
60
- "data-testid": "split-button-dropdownitem-".concat(integration.type)
71
+ testId: "split-button-dropdownitem-".concat(integration.type)
61
72
  }, /*#__PURE__*/React.createElement(DropDownIntegrationButtonWrapper, null, /*#__PURE__*/React.createElement(IntegrationButton, {
62
73
  textColor: N800,
63
74
  appearance: "subtle",
@@ -72,17 +83,17 @@ var SplitButtonDropdown = function SplitButtonDropdown(props) {
72
83
  };
73
84
 
74
85
  SplitButtonDropdown.displayName = 'SplitButtonDropdown';
75
- export default function SplitButton(_ref2) {
76
- var shareButton = _ref2.shareButton,
77
- handleOpenSplitButton = _ref2.handleOpenSplitButton,
78
- handleCloseSplitButton = _ref2.handleCloseSplitButton,
79
- isUsingSplitButton = _ref2.isUsingSplitButton,
80
- shareIntegrations = _ref2.shareIntegrations,
81
- onIntegrationClick = _ref2.onIntegrationClick,
82
- triggerButtonAppearance = _ref2.triggerButtonAppearance,
83
- dialogZIndex = _ref2.dialogZIndex,
84
- dialogPlacement = _ref2.dialogPlacement,
85
- createAndFireEvent = _ref2.createAndFireEvent;
86
+ export default function SplitButton(_ref3) {
87
+ var shareButton = _ref3.shareButton,
88
+ handleOpenSplitButton = _ref3.handleOpenSplitButton,
89
+ handleCloseSplitButton = _ref3.handleCloseSplitButton,
90
+ isUsingSplitButton = _ref3.isUsingSplitButton,
91
+ shareIntegrations = _ref3.shareIntegrations,
92
+ onIntegrationClick = _ref3.onIntegrationClick,
93
+ triggerButtonAppearance = _ref3.triggerButtonAppearance,
94
+ dialogZIndex = _ref3.dialogZIndex,
95
+ dialogPlacement = _ref3.dialogPlacement,
96
+ createAndFireEvent = _ref3.createAndFireEvent;
86
97
  return /*#__PURE__*/React.createElement(SplitButtonWrapper, {
87
98
  "data-testid": "split-button"
88
99
  }, shareButton, /*#__PURE__*/React.createElement(SplitButtonDropdown, {
package/dist/esm/i18n.js CHANGED
@@ -155,5 +155,10 @@ export var messages = defineMessages({
155
155
  id: 'fabric.elements.share.to.integration.button',
156
156
  defaultMessage: 'Share to {integrationName}',
157
157
  description: 'Text for the button that allows the user to share the currently viewed item through a 3rd party app like Slack'
158
+ },
159
+ shareInIntegrationButtonText: {
160
+ id: 'fabric.elements.share.in.integration.button',
161
+ defaultMessage: 'Share in {integrationName}',
162
+ description: 'Text for the button that allows the user to share the currently viewed item through a 3rd party app like Slack'
158
163
  }
159
164
  });
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@atlaskit/share",
3
- "version": "0.33.0"
3
+ "version": "0.34.3"
4
4
  }
@@ -6,6 +6,7 @@ import { UrlShortenerClient, ShortenRequest } from '../clients/AtlassianUrlShort
6
6
  import { ConfigResponse, ShareClient } from '../clients/ShareServiceClient';
7
7
  import { DialogContentState, DialogPlacement, Flag, OriginTracing, OriginTracingFactory, ProductId, ProductName, RenderCustomTriggerButton, ShareButtonStyle, TooltipPosition, Integration } from '../types';
8
8
  import { IconProps } from '@atlaskit/icon';
9
+ import { IntegrationMode } from '../types/ShareEntities';
9
10
  export declare const defaultConfig: ConfigResponse;
10
11
  export declare type Props = {
11
12
  onTriggerButtonClick?: () => void;
@@ -76,8 +77,6 @@ export declare type Props = {
76
77
  shareFormTitle?: React.ReactNode;
77
78
  /** Copy for helper message to be displayed under share form input box. */
78
79
  shareFormHelperMessage?: string;
79
- /** Copy for content permissions to be displayed in share form header. */
80
- contentPermissions?: React.ReactNode;
81
80
  /** To enable closing the modal on escape key press. */
82
81
  shouldCloseOnEscapePress?: boolean;
83
82
  /**
@@ -136,6 +135,7 @@ export declare type Props = {
136
135
  shareFieldsFooter?: React.ReactNode;
137
136
  isCopyDisabled?: boolean;
138
137
  isPublicLink?: boolean;
138
+ integrationMode?: IntegrationMode;
139
139
  shareIntegrations?: Array<Integration>;
140
140
  /**
141
141
  * Optionally sets a tabIndex value if you need to set focus
@@ -191,7 +191,7 @@ export declare class ShareDialogContainerInternal extends React.Component<WithAn
191
191
  getFormShareLink: () => string;
192
192
  render(): JSX.Element;
193
193
  }
194
- export declare const ShareDialogContainer: React.ForwardRefExoticComponent<Pick<Pick<WithAnalyticsEventsProps & Props, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "contentPermissions" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener" | "shareeAction">, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "contentPermissions" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener"> & Partial<Pick<Pick<WithAnalyticsEventsProps & Props, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "contentPermissions" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener" | "shareeAction">, "product" | "enableSmartUserPicker" | "shareeAction">> & Partial<Pick<{
194
+ export declare const ShareDialogContainer: React.ForwardRefExoticComponent<Pick<Pick<WithAnalyticsEventsProps & Props, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "integrationMode" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener" | "shareeAction">, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "integrationMode" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener"> & Partial<Pick<Pick<WithAnalyticsEventsProps & Props, "isPublicLink" | "tabIndex" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "onUserSelectionChange" | "integrationMode" | "onTriggerButtonClick" | "isAutoOpenDialog" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri" | "shareClient" | "urlShortenerClient" | "shortLinkData" | "formatCopyLink" | "originTracingFactory" | "productId" | "shareLink" | "shareTitle" | "enableEmailPermissionCheck" | "useUrlShortener" | "shareeAction">, "product" | "enableSmartUserPicker" | "shareeAction">> & Partial<Pick<{
195
195
  enableSmartUserPicker: boolean;
196
196
  shareeAction: "view" | "edit";
197
197
  product: string;
@@ -6,6 +6,7 @@ import React from 'react';
6
6
  import { InjectedIntlProps } from 'react-intl';
7
7
  import { ConfigResponse, DialogContentState, DialogPlacement, Flag, OriginTracing, ProductName, RenderCustomTriggerButton, ShareButtonStyle, ShareError, TooltipPosition, Integration } from '../types';
8
8
  import { IconProps } from '@atlaskit/icon';
9
+ import { IntegrationMode } from '../types/ShareEntities';
9
10
  declare type DialogState = {
10
11
  isDialogOpen: boolean;
11
12
  isSharing: boolean;
@@ -36,7 +37,6 @@ export declare type Props = {
36
37
  shareContentType: string;
37
38
  shareFormTitle?: React.ReactNode;
38
39
  shareFormHelperMessage?: string;
39
- contentPermissions?: React.ReactNode;
40
40
  copyLinkOrigin?: OriginTracing;
41
41
  formShareOrigin?: OriginTracing;
42
42
  shouldCloseOnEscapePress?: boolean;
@@ -57,6 +57,7 @@ export declare type Props = {
57
57
  shareFieldsFooter?: React.ReactNode;
58
58
  isCopyDisabled?: boolean;
59
59
  isPublicLink?: boolean;
60
+ integrationMode?: IntegrationMode;
60
61
  shareIntegrations?: Array<Integration>;
61
62
  /** Atlassian Resource Identifier of a Site resource to be shared. */
62
63
  shareAri?: string;
@@ -94,5 +95,5 @@ export declare class ShareDialogWithTriggerInternal extends React.PureComponent<
94
95
  handleCloseSplitButton: () => void;
95
96
  render(): JSX.Element;
96
97
  }
97
- export declare const ShareDialogWithTrigger: React.ForwardRefExoticComponent<Pick<Props & WithAnalyticsEventsProps, "isPublicLink" | "children" | "tabIndex" | "isDisabled" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "contentPermissions" | "config" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "isFetchingConfig" | "copyLink" | "submitButtonLabel" | "onUserSelectionChange" | "onTriggerButtonClick" | "isAutoOpenDialog" | "analyticsDecorator" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "onShareSubmit" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "copyLinkOrigin" | "formShareOrigin" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri"> & React.RefAttributes<any>>;
98
+ export declare const ShareDialogWithTrigger: React.ForwardRefExoticComponent<Pick<Props & WithAnalyticsEventsProps, "isPublicLink" | "children" | "tabIndex" | "isDisabled" | "triggerButtonAppearance" | "shareIntegrations" | "dialogZIndex" | "dialogPlacement" | "copyTooltipText" | "config" | "product" | "enableSmartUserPicker" | "loggedInAccountId" | "cloudId" | "isFetchingConfig" | "copyLink" | "submitButtonLabel" | "onUserSelectionChange" | "integrationMode" | "onTriggerButtonClick" | "isAutoOpenDialog" | "analyticsDecorator" | "loadUserOptions" | "onDialogOpen" | "onDialogClose" | "onShareSubmit" | "renderCustomTriggerButton" | "shareContentType" | "shareFormTitle" | "shareFormHelperMessage" | "copyLinkOrigin" | "formShareOrigin" | "shouldCloseOnEscapePress" | "showFlags" | "triggerButtonIcon" | "triggerButtonStyle" | "triggerButtonTooltipPosition" | "triggerButtonTooltipText" | "bottomMessage" | "customFooter" | "shareFieldsFooter" | "isCopyDisabled" | "shareAri"> & React.RefAttributes<any>>;
98
99
  export {};
@@ -1,8 +1,12 @@
1
1
  import { LoadOptions, OptionData, Value } from '@atlaskit/user-picker';
2
2
  import React from 'react';
3
3
  import { InjectedIntlProps } from 'react-intl';
4
- import { Comment, ConfigResponse, DialogContentState, FormChildrenArgs, ProductName } from '../types';
5
- export declare const FormWrapper: import("styled-components").StyledComponentClass<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, any, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
4
+ import { Comment, ConfigResponse, DialogContentState, FormChildrenArgs, Integration, ProductName } from '../types';
5
+ import { IntegrationMode } from '../types/ShareEntities';
6
+ interface FormWrapperType {
7
+ isMainShare?: boolean;
8
+ }
9
+ export declare const FormWrapper: import("styled-components").StyledComponentClass<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & FormWrapperType, any, React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & FormWrapperType>;
6
10
  export declare const FormFooter: import("styled-components").StyledComponentClass<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, any, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>>;
7
11
  declare type ShareError = {
8
12
  message: string;
@@ -22,8 +26,8 @@ export declare type Props = {
22
26
  shareError?: ShareError;
23
27
  submitButtonLabel?: React.ReactNode;
24
28
  title?: React.ReactNode;
29
+ showTitle?: boolean;
25
30
  helperMessage?: string;
26
- contentPermissions?: React.ReactNode;
27
31
  onDismiss?: (data: ShareData) => void;
28
32
  defaultValue?: DialogContentState;
29
33
  product: ProductName;
@@ -38,6 +42,8 @@ export declare type Props = {
38
42
  isPublicLink?: boolean;
39
43
  isSplitButton?: boolean;
40
44
  copyTooltipText?: string;
45
+ integrationMode?: IntegrationMode;
46
+ shareIntegrations?: Array<Integration>;
41
47
  };
42
48
  export declare type InternalFormProps = FormChildrenArgs<ShareData> & Props & InjectedIntlProps;
43
49
  export declare const ShareForm: React.FC<Props>;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  export declare type Props = {
3
3
  title?: React.ReactNode;
4
- contentPermissions?: React.ReactNode;
5
4
  };
6
5
  export declare const FormHeaderTitle: import("styled-components").StyledComponentClass<(React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").AtlaskitThemeProps) | (React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").CustomThemeProps) | (React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").NoThemeProps), any, (React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").AtlaskitThemeProps) | (React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").CustomThemeProps) | (React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement> & import("@atlaskit/theme").NoThemeProps)>;
7
6
  export declare const ShareHeader: React.StatelessComponent<Props>;
@@ -154,4 +154,9 @@ export declare const messages: {
154
154
  defaultMessage: string;
155
155
  description: string;
156
156
  };
157
+ shareInIntegrationButtonText: {
158
+ id: string;
159
+ defaultMessage: string;
160
+ description: string;
161
+ };
157
162
  };
@@ -4,6 +4,7 @@ import { TriggerProps } from '@atlaskit/popup';
4
4
  import { ShareError } from './ShareContentState';
5
5
  export declare type RenderCustomTriggerButton = (args: {
6
6
  error?: ShareError;
7
+ isDisabled?: boolean;
7
8
  isSelected?: boolean;
8
9
  onClick: () => void;
9
10
  }, triggerProps: TriggerProps) => React.ReactNode;
@@ -22,3 +22,4 @@ export declare type Integration = {
22
22
  Icon: React.ComponentType;
23
23
  Content: React.ComponentType<IntegrationContentProps>;
24
24
  };
25
+ export declare type IntegrationMode = 'tabs' | 'split' | 'off';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/share",
3
- "version": "0.33.0",
3
+ "version": "0.34.3",
4
4
  "description": "Fabric Share Element",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -32,12 +32,13 @@
32
32
  "dependencies": {
33
33
  "@atlaskit/analytics-next": "^8.2.0",
34
34
  "@atlaskit/button": "^16.0.0",
35
- "@atlaskit/dropdown-menu": "^10.0.6",
35
+ "@atlaskit/dropdown-menu": "^11.0.0",
36
36
  "@atlaskit/field-text-area": "^8.0.0",
37
37
  "@atlaskit/form": "^8.4.0",
38
38
  "@atlaskit/icon": "^21.9.0",
39
39
  "@atlaskit/popup": "^1.1.0",
40
40
  "@atlaskit/portal": "^4.0.0",
41
+ "@atlaskit/tabs": "^13.2.3",
41
42
  "@atlaskit/theme": "^12.0.0",
42
43
  "@atlaskit/tooltip": "^17.5.0",
43
44
  "@atlaskit/user-picker": "^7.16.0",
@@ -54,12 +55,12 @@
54
55
  },
55
56
  "devDependencies": {
56
57
  "@atlaskit/docs": "^9.0.0",
57
- "@atlaskit/editor-test-helpers": "^15.5.0",
58
+ "@atlaskit/editor-test-helpers": "^15.6.0",
58
59
  "@atlaskit/flag": "^14.4.0",
59
60
  "@atlaskit/section-message": "^6.0.0",
60
61
  "@atlaskit/select": "^15.0.0",
61
62
  "@atlaskit/toggle": "^12.3.0",
62
- "@atlaskit/util-data-test": "^16.0.0",
63
+ "@atlaskit/util-data-test": "^17.0.0",
63
64
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
64
65
  "enzyme": "^3.10.0",
65
66
  "enzyme-adapter-react-16": "^1.15.1",