@atlaskit/smart-card 43.8.1 → 43.9.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 (52) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/extractors/flexible/icon/extract-file-formatIcon.js +22 -0
  3. package/dist/cjs/state/actions/index.js +5 -1
  4. package/dist/cjs/utils/analytics/analytics.js +1 -1
  5. package/dist/cjs/utils/window-open-features.js +24 -0
  6. package/dist/cjs/view/HoverCard/components/CustomPopupContainer.js +25 -2
  7. package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +16 -5
  8. package/dist/cjs/view/InlineCard/IconAndTitleLayout/index.js +1 -1
  9. package/dist/cjs/view/LinkUrl/index.js +1 -1
  10. package/dist/es2019/extractors/flexible/icon/extract-file-formatIcon.js +22 -0
  11. package/dist/es2019/state/actions/index.js +5 -1
  12. package/dist/es2019/utils/analytics/analytics.js +1 -1
  13. package/dist/es2019/utils/window-open-features.js +18 -0
  14. package/dist/es2019/view/HoverCard/components/CustomPopupContainer.js +19 -0
  15. package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +16 -6
  16. package/dist/es2019/view/InlineCard/IconAndTitleLayout/index.js +1 -1
  17. package/dist/es2019/view/LinkUrl/index.js +1 -1
  18. package/dist/esm/extractors/flexible/icon/extract-file-formatIcon.js +22 -0
  19. package/dist/esm/state/actions/index.js +5 -1
  20. package/dist/esm/utils/analytics/analytics.js +1 -1
  21. package/dist/esm/utils/window-open-features.js +18 -0
  22. package/dist/esm/view/HoverCard/components/CustomPopupContainer.js +24 -1
  23. package/dist/esm/view/HoverCard/components/HoverCardComponent.js +17 -6
  24. package/dist/esm/view/InlineCard/IconAndTitleLayout/index.js +1 -1
  25. package/dist/esm/view/LinkUrl/index.js +1 -1
  26. package/dist/types/state/modal/index.d.ts +1 -1
  27. package/dist/types/utils/window-open-features.d.ts +3 -0
  28. package/dist/types/view/CardWithUrl/component-lazy/LoadingCardLink.d.ts +1 -1
  29. package/dist/types/view/EmbedModal/components/link-info/link-info-button/index.d.ts +1 -1
  30. package/dist/types/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-container/manual-triggers-form/paragraph-prompt/main.d.ts +1 -1
  31. package/dist/types/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-modal/sub-components/footer/main.d.ts +1 -1
  32. package/dist/types/view/FlexibleCard/components/blocks/ai-footer-block/resolved/ai-footer-metadata.d.ts +1 -1
  33. package/dist/types/view/FlexibleCard/components/common/atlaskit-icon/index.d.ts +1 -1
  34. package/dist/types/view/FlexibleCard/components/elements/common/base-lozenge-element/lozenge-action/lozenge-action-item/index.d.ts +1 -1
  35. package/dist/types/view/HoverCard/components/CustomPopupContainer.d.ts +4 -0
  36. package/dist/types/view/HoverCard/components/HoverCardComponent.d.ts +1 -1
  37. package/dist/types/view/HoverCard/components/ImagePreview.d.ts +1 -1
  38. package/dist/types/view/HoverCard/types.d.ts +6 -1
  39. package/dist/types-ts4.5/state/modal/index.d.ts +1 -1
  40. package/dist/types-ts4.5/utils/window-open-features.d.ts +3 -0
  41. package/dist/types-ts4.5/view/CardWithUrl/component-lazy/LoadingCardLink.d.ts +1 -1
  42. package/dist/types-ts4.5/view/EmbedModal/components/link-info/link-info-button/index.d.ts +1 -1
  43. package/dist/types-ts4.5/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-container/manual-triggers-form/paragraph-prompt/main.d.ts +1 -1
  44. package/dist/types-ts4.5/view/FlexibleCard/components/actions/automation-action/automation-manual-triggers/manual-triggers-modal/sub-components/footer/main.d.ts +1 -1
  45. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-footer-block/resolved/ai-footer-metadata.d.ts +1 -1
  46. package/dist/types-ts4.5/view/FlexibleCard/components/common/atlaskit-icon/index.d.ts +1 -1
  47. package/dist/types-ts4.5/view/FlexibleCard/components/elements/common/base-lozenge-element/lozenge-action/lozenge-action-item/index.d.ts +1 -1
  48. package/dist/types-ts4.5/view/HoverCard/components/CustomPopupContainer.d.ts +4 -0
  49. package/dist/types-ts4.5/view/HoverCard/components/HoverCardComponent.d.ts +1 -1
  50. package/dist/types-ts4.5/view/HoverCard/components/ImagePreview.d.ts +1 -1
  51. package/dist/types-ts4.5/view/HoverCard/types.d.ts +6 -1
  52. package/package.json +7 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 43.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`b19c48cd86a0f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b19c48cd86a0f) -
8
+ [ux] Open auth window experiment, behind platform_sl_3p_auth_window_experiment
9
+ - Updated dependencies
10
+
11
+ ## 43.9.0
12
+
13
+ ### Minor Changes
14
+
15
+ - [`f2ab75f2947ab`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f2ab75f2947ab) -
16
+ [ux] Add shouldRenderToParent prop to HoverCard which is propagated to the internal Popup
17
+ component
18
+
19
+ ### Patch Changes
20
+
21
+ - [`06d5717d57f36`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/06d5717d57f36) -
22
+ Suppress i18n errors
23
+
3
24
  ## 43.8.1
4
25
 
5
26
  ### Patch Changes
@@ -11,6 +11,7 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
11
11
  switch (fileFormat) {
12
12
  // Generic documents
13
13
  case 'folder':
14
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
14
15
  return {
15
16
  icon: _constants.IconType.Folder,
16
17
  label: 'Folder'
@@ -18,44 +19,52 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
18
19
  case 'text/plain':
19
20
  case 'application/vnd.oasis.opendocument.text':
20
21
  case 'application/vnd.apple.pages':
22
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
21
23
  return {
22
24
  icon: _constants.IconType.Document,
23
25
  label: 'Document'
24
26
  };
25
27
  case 'application/pdf':
28
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
26
29
  return {
27
30
  icon: _constants.IconType.PDF,
28
31
  label: 'PDF document'
29
32
  };
30
33
  case 'application/vnd.oasis.opendocument.presentation':
31
34
  case 'application/vnd.apple.keynote':
35
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
32
36
  return {
33
37
  icon: _constants.IconType.Presentation,
34
38
  label: 'Presentation'
35
39
  };
36
40
  case 'application/vnd.oasis.opendocument.spreadsheet':
37
41
  case 'application/vnd.apple.numbers':
42
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
38
43
  return {
39
44
  icon: _constants.IconType.Spreadsheet,
40
45
  label: 'Spreadsheet'
41
46
  };
42
47
  // Google Drive
43
48
  case 'application/vnd.google-apps.document':
49
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
44
50
  return {
45
51
  icon: _constants.IconType.GoogleDocs,
46
52
  label: 'Google Docs'
47
53
  };
48
54
  case 'application/vnd.google-apps.form':
55
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
49
56
  return {
50
57
  icon: _constants.IconType.GoogleForms,
51
58
  label: 'Google Form'
52
59
  };
53
60
  case 'application/vnd.google-apps.spreadsheet':
61
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
54
62
  return {
55
63
  icon: _constants.IconType.GoogleSheets,
56
64
  label: 'Google Sheets'
57
65
  };
58
66
  case 'application/vnd.google-apps.presentation':
67
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
59
68
  return {
60
69
  icon: _constants.IconType.GoogleSlides,
61
70
  label: 'Google Slides'
@@ -63,18 +72,21 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
63
72
  // Microsoft
64
73
  case 'application/vnd.ms-excel':
65
74
  case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
75
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
66
76
  return {
67
77
  icon: _constants.IconType.MSExcel,
68
78
  label: 'Excel spreadsheet'
69
79
  };
70
80
  case 'application/vnd.ms-powerpoint':
71
81
  case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
82
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
72
83
  return {
73
84
  icon: _constants.IconType.MSPowerpoint,
74
85
  label: 'PowerPoint presentation'
75
86
  };
76
87
  case 'application/msword':
77
88
  case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
89
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
78
90
  return {
79
91
  icon: _constants.IconType.MSWord,
80
92
  label: 'Word document'
@@ -84,11 +96,13 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
84
96
  case 'image/bmp':
85
97
  case 'image/webp':
86
98
  case 'image/svg+xml':
99
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
87
100
  return {
88
101
  icon: _constants.IconType.Image,
89
102
  label: 'Image'
90
103
  };
91
104
  case 'image/gif':
105
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
92
106
  return {
93
107
  icon: _constants.IconType.GIF,
94
108
  label: 'GIF'
@@ -98,6 +112,7 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
98
112
  case 'audio/webm':
99
113
  case 'audio/ogg':
100
114
  case 'audio/wav':
115
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
101
116
  return {
102
117
  icon: _constants.IconType.Audio,
103
118
  label: 'Audio'
@@ -109,6 +124,7 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
109
124
  case 'video/ogg':
110
125
  case 'video/x-ms-wmv':
111
126
  case 'video/x-msvideo':
127
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
112
128
  return {
113
129
  icon: _constants.IconType.Video,
114
130
  label: 'Video'
@@ -117,6 +133,7 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
117
133
  case 'text/css':
118
134
  case 'text/html':
119
135
  case 'application/javascript':
136
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
120
137
  return {
121
138
  icon: _constants.IconType.Code,
122
139
  label: 'Source Code'
@@ -127,26 +144,31 @@ var extractFileFormatIcon = function extractFileFormatIcon(fileFormat) {
127
144
  case 'application/x-7z-compressed':
128
145
  case 'application/x-apple-diskimage':
129
146
  case 'application/vnd.rar':
147
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
130
148
  return {
131
149
  icon: _constants.IconType.Archive,
132
150
  label: 'Archive'
133
151
  };
134
152
  case 'application/dmg':
153
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
135
154
  return {
136
155
  icon: _constants.IconType.Executable,
137
156
  label: 'Executable'
138
157
  };
139
158
  case 'application/sketch':
159
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
140
160
  return {
141
161
  icon: _constants.IconType.Sketch,
142
162
  label: 'Sketch'
143
163
  };
144
164
  case 'application/octet-stream':
165
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
145
166
  return {
146
167
  icon: _constants.IconType.Generic,
147
168
  label: 'Binary file'
148
169
  };
149
170
  case 'application/invision.prototype':
171
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
150
172
  return {
151
173
  icon: _constants.IconType.Generic,
152
174
  label: 'Prototype'
@@ -8,11 +8,13 @@ exports.useSmartCardActions = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _react = require("react");
11
+ var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
11
12
  var _linkProvider = require("@atlaskit/link-provider");
12
13
  var _linkingCommon = require("@atlaskit/linking-common");
13
14
  var _outboundAuthFlowClient = require("@atlaskit/outbound-auth-flow-client");
14
15
  var _useAnalyticsEvents2 = require("../../common/analytics/generated/use-analytics-events");
15
16
  var _constants = require("../../constants");
17
+ var _windowOpenFeatures = require("../../utils/window-open-features");
16
18
  var _analytics = require("../analytics");
17
19
  var _helpers = require("../helpers");
18
20
  var _useInvokeClientAction = _interopRequireDefault(require("../hooks/use-invoke-client-action"));
@@ -119,7 +121,9 @@ var useSmartCardActions = exports.useSmartCardActions = function useSmartCardAct
119
121
  fireEvent('screen.consentModal.viewed', {
120
122
  definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null
121
123
  });
122
- (0, _outboundAuthFlowClient.auth)(services[0].url).then(function () {
124
+ var shouldShowInPopupWindow = status === 'unauthorized' && _featureGateJsClient.default.getExperimentValue('platform_sl_3p_auth_window_experiment', 'cohort', 'control') === 'test';
125
+ var windowFeatures = shouldShowInPopupWindow ? (0, _windowOpenFeatures.getWindowOpenFeatures)(_windowOpenFeatures.AUTH_WINDOW_HEIGHT, _windowOpenFeatures.AUTH_WINDOW_WIDTH) : undefined;
126
+ (0, _outboundAuthFlowClient.auth)(services[0].url, windowFeatures).then(function () {
123
127
  fireEvent('track.applicationAccount.connected', {
124
128
  definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null
125
129
  });
@@ -11,7 +11,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
11
11
  var context = exports.context = {
12
12
  componentName: 'smart-cards',
13
13
  packageName: "@atlaskit/smart-card",
14
- packageVersion: "43.8.0"
14
+ packageVersion: "0.0.0-development"
15
15
  };
16
16
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
17
17
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getWindowOpenFeatures = exports.AUTH_WINDOW_WIDTH = exports.AUTH_WINDOW_HEIGHT = void 0;
7
+ var BROWSER_SIZE_THRESHOLD = 38;
8
+ var AUTH_WINDOW_HEIGHT = exports.AUTH_WINDOW_HEIGHT = 760;
9
+ var AUTH_WINDOW_WIDTH = exports.AUTH_WINDOW_WIDTH = 620;
10
+ var getWindowOpenFeatures = exports.getWindowOpenFeatures = function getWindowOpenFeatures(popupHeight, popupWidth) {
11
+ var vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
12
+ var vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
13
+ var vl = window.screenLeft || 0;
14
+ var vt = window.screenTop || 0;
15
+
16
+ // Center the popup window
17
+ var left = (vw - popupWidth) / 2 + vl;
18
+ var top = (vh - popupHeight) / 2 + vt;
19
+
20
+ // Open a popup if there's enough space in the viewport
21
+ // Otherwise, fall back to the default behavior (opening in a new tab)
22
+ var windowFeatures = vw > popupWidth + BROWSER_SIZE_THRESHOLD && vh > popupHeight + BROWSER_SIZE_THRESHOLD ? "width=".concat(popupWidth, ",height=").concat(popupHeight, ",left=").concat(left, ",top=").concat(top) : undefined;
23
+ return windowFeatures;
24
+ };
@@ -4,11 +4,15 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.default = exports.createCustomPopupContainer = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _react = _interopRequireDefault(require("react"));
11
- var _excluded = ["children", "shouldFitContainer", "shouldRenderToParent"];
12
+ var _excluded = ["children", "shouldFitContainer", "shouldRenderToParent"],
13
+ _excluded2 = ["children", "shouldFitContainer", "shouldRenderToParent"];
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
16
  /**
13
17
  * The purpose of this component is to hide the default Popup border.
14
18
  * HoverCard border implementation is in ContentContainer where it can
@@ -23,4 +27,23 @@ var CustomPopupContainer = /*#__PURE__*/_react.default.forwardRef(function (_ref
23
27
  ref: ref
24
28
  }), children);
25
29
  });
30
+
31
+ /**
32
+ * Factory function to create a CustomPopupContainer with a specific z-index
33
+ */
34
+ var createCustomPopupContainer = exports.createCustomPopupContainer = function createCustomPopupContainer(zIndex) {
35
+ return /*#__PURE__*/_react.default.forwardRef(function (_ref2, ref) {
36
+ var children = _ref2.children,
37
+ _ = _ref2.shouldFitContainer,
38
+ __ = _ref2.shouldRenderToParent,
39
+ props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
40
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, props, {
41
+ ref: ref
42
+ }, zIndex !== undefined && {
43
+ style: _objectSpread(_objectSpread({}, props.style), {}, {
44
+ zIndex: zIndex
45
+ })
46
+ }), children);
47
+ });
48
+ };
26
49
  var _default = exports.default = CustomPopupContainer;
@@ -18,7 +18,7 @@ var _actions = require("../../../state/actions");
18
18
  var _renderers = require("../../../state/renderers");
19
19
  var _store = require("../../../state/store");
20
20
  var _SmartLinkAnalyticsContext = require("../../../utils/analytics/SmartLinkAnalyticsContext");
21
- var _CustomPopupContainer = _interopRequireDefault(require("../components/CustomPopupContainer"));
21
+ var _CustomPopupContainer = _interopRequireWildcard(require("../components/CustomPopupContainer"));
22
22
  var _HoverCardContent = _interopRequireDefault(require("../components/HoverCardContent"));
23
23
  var _styled = require("../styled");
24
24
  var _excluded = ["aria-haspopup", "aria-expanded"];
@@ -47,6 +47,8 @@ var HoverCardComponent = exports.HoverCardComponent = function HoverCardComponen
47
47
  noFadeDelay = _ref$noFadeDelay === void 0 ? false : _ref$noFadeDelay,
48
48
  hoverPreviewOptions = _ref.hoverPreviewOptions,
49
49
  role = _ref.role,
50
+ _ref$shouldRenderToPa = _ref.shouldRenderToParent,
51
+ shouldRenderToParent = _ref$shouldRenderToPa === void 0 ? false : _ref$shouldRenderToPa,
50
52
  label = _ref.label,
51
53
  titleId = _ref.titleId,
52
54
  onVisibilityChange = _ref.onVisibilityChange;
@@ -244,7 +246,14 @@ var HoverCardComponent = exports.HoverCardComponent = function HoverCardComponen
244
246
  className: HOVER_CARD_TRIGGER_WRAPPER
245
247
  } : {}), children));
246
248
  }, [children, initHideCard, initShowCard, onChildClick, onContextMenuClick, setMousePosition]);
247
- return /*#__PURE__*/_react.default.createElement(_popup.default, {
249
+ var popupComponent = (0, _platformFeatureFlags.fg)('hover-card-prop-should-render-to-parent') ?
250
+ // eslint-disable-next-line react-hooks/rules-of-hooks
251
+ (0, _react.useMemo)(function () {
252
+ // Within the Popup component, if shouldRenderToParent, the zIndex prop is ignored
253
+ // as it is assumed that the custom popup container has the desired styles
254
+ return (0, _CustomPopupContainer.createCustomPopupContainer)(shouldRenderToParent ? zIndex : undefined);
255
+ }, [zIndex, shouldRenderToParent]) : _CustomPopupContainer.default;
256
+ return /*#__PURE__*/_react.default.createElement(_popup.default, (0, _extends2.default)({
248
257
  testId: "hover-card",
249
258
  isOpen: isOpen && canOpen,
250
259
  onClose: hideCard,
@@ -257,8 +266,10 @@ var HoverCardComponent = exports.HoverCardComponent = function HoverCardComponen
257
266
  role: role,
258
267
  titleId: titleId,
259
268
  label: label
269
+ }, (0, _platformFeatureFlags.fg)('hover-card-prop-should-render-to-parent') ? {
270
+ shouldRenderToParent: shouldRenderToParent
271
+ } : {}, {
260
272
  // @ts-ignore: [PIT-1685] Fails in post-office due to backwards incompatibility issue with React 18
261
- ,
262
- popupComponent: _CustomPopupContainer.default
263
- });
273
+ popupComponent: popupComponent
274
+ }));
264
275
  };
@@ -161,7 +161,7 @@ var IconAndTitleLayout = exports.IconAndTitleLayout = function IconAndTitleLayou
161
161
  xcss: styles.iconEmptyStyle,
162
162
  testId: "icon-empty-wrapper"
163
163
  }), /*#__PURE__*/_react.default.createElement("span", {
164
- "data-testId": "icon-wrapper",
164
+ "data-testid": "icon-wrapper",
165
165
  className: (0, _runtime.ax)(["_11c81o8v _2rkolb4i _1e0c116y _kqswstnw _2hwx1b66 _4t3i7vkz _1bsb7vkz _154i1ssb _1ltv1ssb _t9ec1ooe _uiztglyw"])
166
166
  }, renderIcon(testId)))), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
167
167
  as: "span",
@@ -22,7 +22,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
22
22
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
23
23
  var PACKAGE_DATA = {
24
24
  packageName: "@atlaskit/smart-card",
25
- packageVersion: "43.8.0",
25
+ packageVersion: "0.0.0-development",
26
26
  componentName: 'linkUrl'
27
27
  };
28
28
  var Anchor = (0, _click.withLinkClickedEvent)('a');
@@ -4,6 +4,7 @@ const extractFileFormatIcon = fileFormat => {
4
4
  switch (fileFormat) {
5
5
  // Generic documents
6
6
  case 'folder':
7
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
7
8
  return {
8
9
  icon: IconType.Folder,
9
10
  label: 'Folder'
@@ -11,44 +12,52 @@ const extractFileFormatIcon = fileFormat => {
11
12
  case 'text/plain':
12
13
  case 'application/vnd.oasis.opendocument.text':
13
14
  case 'application/vnd.apple.pages':
15
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
14
16
  return {
15
17
  icon: IconType.Document,
16
18
  label: 'Document'
17
19
  };
18
20
  case 'application/pdf':
21
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
19
22
  return {
20
23
  icon: IconType.PDF,
21
24
  label: 'PDF document'
22
25
  };
23
26
  case 'application/vnd.oasis.opendocument.presentation':
24
27
  case 'application/vnd.apple.keynote':
28
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
25
29
  return {
26
30
  icon: IconType.Presentation,
27
31
  label: 'Presentation'
28
32
  };
29
33
  case 'application/vnd.oasis.opendocument.spreadsheet':
30
34
  case 'application/vnd.apple.numbers':
35
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
31
36
  return {
32
37
  icon: IconType.Spreadsheet,
33
38
  label: 'Spreadsheet'
34
39
  };
35
40
  // Google Drive
36
41
  case 'application/vnd.google-apps.document':
42
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
37
43
  return {
38
44
  icon: IconType.GoogleDocs,
39
45
  label: 'Google Docs'
40
46
  };
41
47
  case 'application/vnd.google-apps.form':
48
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
42
49
  return {
43
50
  icon: IconType.GoogleForms,
44
51
  label: 'Google Form'
45
52
  };
46
53
  case 'application/vnd.google-apps.spreadsheet':
54
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
47
55
  return {
48
56
  icon: IconType.GoogleSheets,
49
57
  label: 'Google Sheets'
50
58
  };
51
59
  case 'application/vnd.google-apps.presentation':
60
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
52
61
  return {
53
62
  icon: IconType.GoogleSlides,
54
63
  label: 'Google Slides'
@@ -56,18 +65,21 @@ const extractFileFormatIcon = fileFormat => {
56
65
  // Microsoft
57
66
  case 'application/vnd.ms-excel':
58
67
  case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
68
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
59
69
  return {
60
70
  icon: IconType.MSExcel,
61
71
  label: 'Excel spreadsheet'
62
72
  };
63
73
  case 'application/vnd.ms-powerpoint':
64
74
  case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
75
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
65
76
  return {
66
77
  icon: IconType.MSPowerpoint,
67
78
  label: 'PowerPoint presentation'
68
79
  };
69
80
  case 'application/msword':
70
81
  case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
82
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
71
83
  return {
72
84
  icon: IconType.MSWord,
73
85
  label: 'Word document'
@@ -77,11 +89,13 @@ const extractFileFormatIcon = fileFormat => {
77
89
  case 'image/bmp':
78
90
  case 'image/webp':
79
91
  case 'image/svg+xml':
92
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
80
93
  return {
81
94
  icon: IconType.Image,
82
95
  label: 'Image'
83
96
  };
84
97
  case 'image/gif':
98
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
85
99
  return {
86
100
  icon: IconType.GIF,
87
101
  label: 'GIF'
@@ -91,6 +105,7 @@ const extractFileFormatIcon = fileFormat => {
91
105
  case 'audio/webm':
92
106
  case 'audio/ogg':
93
107
  case 'audio/wav':
108
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
94
109
  return {
95
110
  icon: IconType.Audio,
96
111
  label: 'Audio'
@@ -102,6 +117,7 @@ const extractFileFormatIcon = fileFormat => {
102
117
  case 'video/ogg':
103
118
  case 'video/x-ms-wmv':
104
119
  case 'video/x-msvideo':
120
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
105
121
  return {
106
122
  icon: IconType.Video,
107
123
  label: 'Video'
@@ -110,6 +126,7 @@ const extractFileFormatIcon = fileFormat => {
110
126
  case 'text/css':
111
127
  case 'text/html':
112
128
  case 'application/javascript':
129
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
113
130
  return {
114
131
  icon: IconType.Code,
115
132
  label: 'Source Code'
@@ -120,26 +137,31 @@ const extractFileFormatIcon = fileFormat => {
120
137
  case 'application/x-7z-compressed':
121
138
  case 'application/x-apple-diskimage':
122
139
  case 'application/vnd.rar':
140
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
123
141
  return {
124
142
  icon: IconType.Archive,
125
143
  label: 'Archive'
126
144
  };
127
145
  case 'application/dmg':
146
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
128
147
  return {
129
148
  icon: IconType.Executable,
130
149
  label: 'Executable'
131
150
  };
132
151
  case 'application/sketch':
152
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
133
153
  return {
134
154
  icon: IconType.Sketch,
135
155
  label: 'Sketch'
136
156
  };
137
157
  case 'application/octet-stream':
158
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
138
159
  return {
139
160
  icon: IconType.Generic,
140
161
  label: 'Binary file'
141
162
  };
142
163
  case 'application/invision.prototype':
164
+ // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-object
143
165
  return {
144
166
  icon: IconType.Generic,
145
167
  label: 'Prototype'
@@ -1,9 +1,11 @@
1
1
  import { useCallback, useMemo } from 'react';
2
+ import FeatureGates from '@atlaskit/feature-gate-js-client';
2
3
  import { useSmartLinkContext } from '@atlaskit/link-provider';
3
4
  import { ACTION_RESOLVING, ACTION_UPDATE_METADATA_STATUS, cardAction } from '@atlaskit/linking-common';
4
5
  import { auth } from '@atlaskit/outbound-auth-flow-client';
5
6
  import { useAnalyticsEvents } from '../../common/analytics/generated/use-analytics-events';
6
7
  import { SmartLinkStatus } from '../../constants';
8
+ import { AUTH_WINDOW_HEIGHT, AUTH_WINDOW_WIDTH, getWindowOpenFeatures } from '../../utils/window-open-features';
7
9
  import { startUfoExperience } from '../analytics';
8
10
  import { getByDefinitionId, getDefinitionId, getExtensionKey, getServices } from '../helpers';
9
11
  import useInvokeClientAction from '../hooks/use-invoke-client-action';
@@ -100,7 +102,9 @@ export const useSmartCardActions = (id, url) => {
100
102
  fireEvent('screen.consentModal.viewed', {
101
103
  definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null
102
104
  });
103
- auth(services[0].url).then(() => {
105
+ const shouldShowInPopupWindow = status === 'unauthorized' && FeatureGates.getExperimentValue('platform_sl_3p_auth_window_experiment', 'cohort', 'control') === 'test';
106
+ const windowFeatures = shouldShowInPopupWindow ? getWindowOpenFeatures(AUTH_WINDOW_HEIGHT, AUTH_WINDOW_WIDTH) : undefined;
107
+ auth(services[0].url, windowFeatures).then(() => {
104
108
  fireEvent('track.applicationAccount.connected', {
105
109
  definitionId: definitionId !== null && definitionId !== void 0 ? definitionId : null
106
110
  });
@@ -2,7 +2,7 @@ export const ANALYTICS_CHANNEL = 'media';
2
2
  export const context = {
3
3
  componentName: 'smart-cards',
4
4
  packageName: "@atlaskit/smart-card",
5
- packageVersion: "43.8.0"
5
+ packageVersion: "0.0.0-development"
6
6
  };
7
7
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
8
8
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -0,0 +1,18 @@
1
+ const BROWSER_SIZE_THRESHOLD = 38;
2
+ export const AUTH_WINDOW_HEIGHT = 760;
3
+ export const AUTH_WINDOW_WIDTH = 620;
4
+ export const getWindowOpenFeatures = (popupHeight, popupWidth) => {
5
+ const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
6
+ const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
7
+ const vl = window.screenLeft || 0;
8
+ const vt = window.screenTop || 0;
9
+
10
+ // Center the popup window
11
+ const left = (vw - popupWidth) / 2 + vl;
12
+ const top = (vh - popupHeight) / 2 + vt;
13
+
14
+ // Open a popup if there's enough space in the viewport
15
+ // Otherwise, fall back to the default behavior (opening in a new tab)
16
+ const windowFeatures = vw > popupWidth + BROWSER_SIZE_THRESHOLD && vh > popupHeight + BROWSER_SIZE_THRESHOLD ? `width=${popupWidth},height=${popupHeight},left=${left},top=${top}` : undefined;
17
+ return windowFeatures;
18
+ };
@@ -13,4 +13,23 @@ const CustomPopupContainer = /*#__PURE__*/React.forwardRef(({
13
13
  }, ref) => /*#__PURE__*/React.createElement("div", _extends({}, props, {
14
14
  ref: ref
15
15
  }), children));
16
+
17
+ /**
18
+ * Factory function to create a CustomPopupContainer with a specific z-index
19
+ */
20
+ export const createCustomPopupContainer = zIndex => {
21
+ return /*#__PURE__*/React.forwardRef(({
22
+ children,
23
+ shouldFitContainer: _,
24
+ shouldRenderToParent: __,
25
+ ...props
26
+ }, ref) => /*#__PURE__*/React.createElement("div", _extends({}, props, {
27
+ ref: ref
28
+ }, zIndex !== undefined && {
29
+ style: {
30
+ ...props.style,
31
+ zIndex
32
+ }
33
+ }), children));
34
+ };
16
35
  export default CustomPopupContainer;
@@ -1,5 +1,5 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import React, { useCallback, useEffect, useRef } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
3
3
  import { fg } from '@atlaskit/platform-feature-flags';
4
4
  import Popup from '@atlaskit/popup';
5
5
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
@@ -8,7 +8,7 @@ import { useSmartCardActions } from '../../../state/actions';
8
8
  import { useSmartLinkRenderers } from '../../../state/renderers';
9
9
  import { useSmartCardState as useLinkState } from '../../../state/store';
10
10
  import { SmartLinkAnalyticsContext } from '../../../utils/analytics/SmartLinkAnalyticsContext';
11
- import CustomPopupContainer from '../components/CustomPopupContainer';
11
+ import CustomPopupContainer, { createCustomPopupContainer } from '../components/CustomPopupContainer';
12
12
  import HoverCardContent from '../components/HoverCardContent';
13
13
  import { CARD_GAP_PX, HOVER_CARD_Z_INDEX } from '../styled';
14
14
  export const HOVER_CARD_SOURCE = 'smartLinkPreviewHoverCard';
@@ -28,6 +28,7 @@ export const HoverCardComponent = ({
28
28
  noFadeDelay = false,
29
29
  hoverPreviewOptions,
30
30
  role,
31
+ shouldRenderToParent = false,
31
32
  label,
32
33
  titleId,
33
34
  onVisibilityChange
@@ -220,7 +221,14 @@ export const HoverCardComponent = ({
220
221
  }, editorExperiment('platform_editor_preview_panel_linking_exp', true) ? {
221
222
  className: HOVER_CARD_TRIGGER_WRAPPER
222
223
  } : {}), children)), [children, initHideCard, initShowCard, onChildClick, onContextMenuClick, setMousePosition]);
223
- return /*#__PURE__*/React.createElement(Popup, {
224
+ const popupComponent = fg('hover-card-prop-should-render-to-parent') ?
225
+ // eslint-disable-next-line react-hooks/rules-of-hooks
226
+ useMemo(() => {
227
+ // Within the Popup component, if shouldRenderToParent, the zIndex prop is ignored
228
+ // as it is assumed that the custom popup container has the desired styles
229
+ return createCustomPopupContainer(shouldRenderToParent ? zIndex : undefined);
230
+ }, [zIndex, shouldRenderToParent]) : CustomPopupContainer;
231
+ return /*#__PURE__*/React.createElement(Popup, _extends({
224
232
  testId: "hover-card",
225
233
  isOpen: isOpen && canOpen,
226
234
  onClose: hideCard,
@@ -233,8 +241,10 @@ export const HoverCardComponent = ({
233
241
  role: role,
234
242
  titleId: titleId,
235
243
  label: label
244
+ }, fg('hover-card-prop-should-render-to-parent') ? {
245
+ shouldRenderToParent
246
+ } : {}, {
236
247
  // @ts-ignore: [PIT-1685] Fails in post-office due to backwards incompatibility issue with React 18
237
- ,
238
- popupComponent: CustomPopupContainer
239
- });
248
+ popupComponent: popupComponent
249
+ }));
240
250
  };
@@ -145,7 +145,7 @@ export const IconAndTitleLayout = ({
145
145
  xcss: styles.iconEmptyStyle,
146
146
  testId: "icon-empty-wrapper"
147
147
  }), /*#__PURE__*/React.createElement("span", {
148
- "data-testId": "icon-wrapper",
148
+ "data-testid": "icon-wrapper",
149
149
  className: ax(["_11c81o8v _2rkolb4i _1e0c116y _kqswstnw _2hwx1b66 _4t3i7vkz _1bsb7vkz _154i1ssb _1ltv1ssb _t9ec1ooe _uiztglyw"])
150
150
  }, renderIcon(testId)))), /*#__PURE__*/React.createElement(Box, {
151
151
  as: "span",
@@ -12,7 +12,7 @@ import LinkWarningModal from './LinkWarningModal';
12
12
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
13
13
  const PACKAGE_DATA = {
14
14
  packageName: "@atlaskit/smart-card",
15
- packageVersion: "43.8.0",
15
+ packageVersion: "0.0.0-development",
16
16
  componentName: 'linkUrl'
17
17
  };
18
18
  const Anchor = withLinkClickedEvent('a');