@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.
- package/CHANGELOG.md +26 -0
- package/dist/cjs/clients/ShareServiceClient.js +1 -1
- package/dist/cjs/components/CopyLinkButton.js +1 -1
- package/dist/cjs/components/ShareDialogContainer.js +3 -3
- package/dist/cjs/components/ShareDialogWithTrigger.js +13 -8
- package/dist/cjs/components/ShareForm.js +124 -62
- package/dist/cjs/components/ShareHeader.js +2 -3
- package/dist/cjs/components/SplitButton.js +32 -19
- package/dist/cjs/components/analytics.js +1 -1
- package/dist/cjs/components/localStorageUtils.js +1 -1
- package/dist/cjs/components/styles.js +1 -1
- package/dist/cjs/components/utils.js +1 -1
- package/dist/cjs/i18n/index.js +42 -42
- package/dist/cjs/i18n.js +5 -0
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/types/Flag.js +1 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/components/ShareDialogContainer.js +2 -2
- package/dist/es2019/components/ShareDialogWithTrigger.js +11 -7
- package/dist/es2019/components/ShareForm.js +103 -47
- package/dist/es2019/components/ShareHeader.js +2 -3
- package/dist/es2019/components/SplitButton.js +16 -8
- package/dist/es2019/i18n.js +5 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/components/ShareDialogContainer.js +2 -2
- package/dist/esm/components/ShareDialogWithTrigger.js +12 -7
- package/dist/esm/components/ShareForm.js +113 -60
- package/dist/esm/components/ShareHeader.js +2 -3
- package/dist/esm/components/SplitButton.js +30 -19
- package/dist/esm/i18n.js +5 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/ShareDialogContainer.d.ts +3 -3
- package/dist/types/components/ShareDialogWithTrigger.d.ts +3 -2
- package/dist/types/components/ShareForm.d.ts +9 -3
- package/dist/types/components/ShareHeader.d.ts +0 -1
- package/dist/types/i18n.d.ts +5 -0
- package/dist/types/types/ShareDialogWithTrigger.d.ts +1 -0
- package/dist/types/types/ShareEntities.d.ts +1 -0
- 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), "
|
|
67
|
+
_defineProperty(_assertThisInitialized(_this), "renderShareForm", function () {
|
|
54
68
|
var _this$props = _this.props,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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$
|
|
87
|
-
onDismiss = _this$
|
|
88
|
-
getValues = _this$
|
|
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$
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
76
|
-
var shareButton =
|
|
77
|
-
handleOpenSplitButton =
|
|
78
|
-
handleCloseSplitButton =
|
|
79
|
-
isUsingSplitButton =
|
|
80
|
-
shareIntegrations =
|
|
81
|
-
onIntegrationClick =
|
|
82
|
-
triggerButtonAppearance =
|
|
83
|
-
dialogZIndex =
|
|
84
|
-
dialogPlacement =
|
|
85
|
-
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
|
});
|
package/dist/esm/version.json
CHANGED
|
@@ -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" | "
|
|
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" | "
|
|
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
|
-
|
|
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>;
|
package/dist/types/i18n.d.ts
CHANGED
|
@@ -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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/share",
|
|
3
|
-
"version": "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": "^
|
|
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.
|
|
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": "^
|
|
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",
|