@atlaskit/link-picker 1.8.2 → 1.8.5

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 (91) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/analytics.codegen.js +1 -1
  3. package/dist/cjs/{ui/link-picker → common/utils}/url.js +0 -0
  4. package/dist/cjs/controllers/use-fix-height/index.js +27 -0
  5. package/dist/cjs/services/use-plugins/index.js +48 -90
  6. package/dist/cjs/services/use-plugins/reducer.js +64 -0
  7. package/dist/cjs/services/use-plugins/utils.js +134 -0
  8. package/dist/cjs/services/use-search-query/index.js +1 -1
  9. package/dist/cjs/services/with-link-picker-analytics/index.js +33 -0
  10. package/dist/cjs/ui/link-picker/form-footer/index.js +76 -0
  11. package/dist/cjs/ui/link-picker/form-footer/styled.js +17 -0
  12. package/dist/cjs/ui/link-picker/index.js +33 -75
  13. package/dist/cjs/ui/link-picker/link-search-error/index.js +47 -6
  14. package/dist/cjs/ui/link-picker/link-search-list/index.js +89 -20
  15. package/dist/cjs/ui/link-picker/link-search-list/link-search-no-results/index.js +54 -0
  16. package/dist/cjs/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/index.js +0 -0
  17. package/dist/cjs/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/styled.js +0 -0
  18. package/dist/cjs/ui/link-picker/link-search-list/link-search-no-results/styled.js +17 -0
  19. package/dist/cjs/ui/link-picker/link-search-list/styled.js +13 -6
  20. package/dist/cjs/ui/link-picker/messages.js +0 -50
  21. package/dist/cjs/ui/link-picker/styled.js +16 -11
  22. package/dist/cjs/ui/link-picker/text-input/styled.js +1 -1
  23. package/dist/cjs/version.json +1 -1
  24. package/dist/es2019/analytics.codegen.js +1 -1
  25. package/dist/es2019/{ui/link-picker → common/utils}/url.js +0 -0
  26. package/dist/es2019/controllers/use-fix-height/index.js +19 -0
  27. package/dist/es2019/services/use-plugins/index.js +35 -57
  28. package/dist/es2019/services/use-plugins/reducer.js +37 -0
  29. package/dist/es2019/services/use-plugins/utils.js +59 -0
  30. package/dist/es2019/services/use-search-query/index.js +1 -1
  31. package/dist/es2019/services/with-link-picker-analytics/index.js +15 -0
  32. package/dist/es2019/ui/link-picker/form-footer/index.js +51 -0
  33. package/dist/es2019/ui/link-picker/form-footer/styled.js +5 -0
  34. package/dist/es2019/ui/link-picker/index.js +28 -69
  35. package/dist/es2019/ui/link-picker/link-search-error/index.js +40 -4
  36. package/dist/es2019/ui/link-picker/link-search-list/index.js +60 -14
  37. package/dist/es2019/ui/link-picker/link-search-list/link-search-no-results/index.js +35 -0
  38. package/dist/es2019/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/index.js +0 -0
  39. package/dist/es2019/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/styled.js +0 -0
  40. package/dist/es2019/ui/link-picker/link-search-list/link-search-no-results/styled.js +6 -0
  41. package/dist/es2019/ui/link-picker/link-search-list/styled.js +23 -2
  42. package/dist/es2019/ui/link-picker/messages.js +0 -50
  43. package/dist/es2019/ui/link-picker/styled.js +20 -15
  44. package/dist/es2019/ui/link-picker/text-input/styled.js +3 -1
  45. package/dist/es2019/version.json +1 -1
  46. package/dist/esm/analytics.codegen.js +1 -1
  47. package/dist/esm/{ui/link-picker → common/utils}/url.js +0 -0
  48. package/dist/esm/controllers/use-fix-height/index.js +19 -0
  49. package/dist/esm/services/use-plugins/index.js +49 -94
  50. package/dist/esm/services/use-plugins/reducer.js +43 -0
  51. package/dist/esm/services/use-plugins/utils.js +111 -0
  52. package/dist/esm/services/use-search-query/index.js +1 -1
  53. package/dist/esm/services/with-link-picker-analytics/index.js +17 -0
  54. package/dist/esm/ui/link-picker/form-footer/index.js +53 -0
  55. package/dist/esm/ui/link-picker/form-footer/styled.js +6 -0
  56. package/dist/esm/ui/link-picker/index.js +29 -74
  57. package/dist/esm/ui/link-picker/link-search-error/index.js +41 -5
  58. package/dist/esm/ui/link-picker/link-search-list/index.js +67 -13
  59. package/dist/esm/ui/link-picker/link-search-list/link-search-no-results/index.js +37 -0
  60. package/dist/esm/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/index.js +0 -0
  61. package/dist/esm/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/styled.js +0 -0
  62. package/dist/esm/ui/link-picker/link-search-list/link-search-no-results/styled.js +6 -0
  63. package/dist/esm/ui/link-picker/link-search-list/styled.js +11 -5
  64. package/dist/esm/ui/link-picker/messages.js +0 -50
  65. package/dist/esm/ui/link-picker/styled.js +14 -11
  66. package/dist/esm/ui/link-picker/text-input/styled.js +1 -1
  67. package/dist/esm/version.json +1 -1
  68. package/dist/types/analytics.codegen.d.ts +7 -4
  69. package/dist/types/{ui/link-picker → common/utils}/url.d.ts +0 -0
  70. package/dist/types/controllers/use-fix-height/index.d.ts +8 -0
  71. package/dist/types/services/use-plugins/reducer.d.ts +30 -0
  72. package/dist/types/services/use-plugins/utils.d.ts +18 -0
  73. package/dist/types/services/with-link-picker-analytics/index.d.ts +4 -0
  74. package/dist/types/ui/link-picker/form-footer/index.d.ts +13 -0
  75. package/dist/types/ui/link-picker/form-footer/styled.d.ts +1 -0
  76. package/dist/types/ui/link-picker/index.d.ts +19 -19
  77. package/dist/types/ui/link-picker/link-search-error/index.d.ts +19 -3
  78. package/dist/types/ui/link-picker/link-search-list/index.d.ts +30 -5
  79. package/dist/types/ui/link-picker/link-search-list/link-search-no-results/index.d.ts +19 -0
  80. package/dist/types/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/index.d.ts +0 -0
  81. package/dist/types/ui/link-picker/{link-search-no-results → link-search-list/link-search-no-results}/no-results-svg/styled.d.ts +0 -0
  82. package/dist/types/ui/link-picker/link-search-list/link-search-no-results/styled.d.ts +1 -0
  83. package/dist/types/ui/link-picker/link-search-list/styled.d.ts +1 -0
  84. package/dist/types/ui/link-picker/messages.d.ts +0 -50
  85. package/dist/types/ui/link-picker/styled.d.ts +5 -1
  86. package/package.json +12 -12
  87. package/report.api.md +2 -0
  88. package/dist/cjs/ui/link-picker/link-search-no-results/index.js +0 -27
  89. package/dist/es2019/ui/link-picker/link-search-no-results/index.js +0 -10
  90. package/dist/esm/ui/link-picker/link-search-no-results/index.js +0 -14
  91. package/dist/types/ui/link-picker/link-search-no-results/index.d.ts +0 -4
@@ -23,10 +23,6 @@ var _reactIntlNext = require("react-intl-next");
23
23
 
24
24
  var _analyticsNext = require("@atlaskit/analytics-next");
25
25
 
26
- var _button = _interopRequireWildcard(require("@atlaskit/button"));
27
-
28
- var _form = require("@atlaskit/form");
29
-
30
26
  var _search = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/search"));
31
27
 
32
28
  var _tabs = _interopRequireWildcard(require("@atlaskit/tabs"));
@@ -41,13 +37,15 @@ var _usePlugins2 = require("../../services/use-plugins");
41
37
 
42
38
  var _useSearchQuery = require("../../services/use-search-query");
43
39
 
40
+ var _withLinkPickerAnalytics = require("../../services/with-link-picker-analytics");
41
+
44
42
  var _messages = require("./messages");
45
43
 
46
44
  var _textInput = _interopRequireDefault(require("./text-input"));
47
45
 
48
- var _linkSearchList = _interopRequireDefault(require("./link-search-list"));
46
+ var _url2 = require("../../common/utils/url");
49
47
 
50
- var _url2 = require("./url");
48
+ var _useFixHeight = _interopRequireDefault(require("../../controllers/use-fix-height"));
51
49
 
52
50
  var _styled = require("./styled");
53
51
 
@@ -55,11 +53,13 @@ var _browser = require("./browser");
55
53
 
56
54
  var _announcer = _interopRequireDefault(require("./announcer"));
57
55
 
58
- var _linkSearchNoResults = _interopRequireDefault(require("./link-search-no-results"));
59
-
60
56
  var _transformTimeStamp = require("./transformTimeStamp");
61
57
 
62
- var _linkSearchError = _interopRequireDefault(require("./link-search-error"));
58
+ var _linkSearchList = _interopRequireWildcard(require("./link-search-list"));
59
+
60
+ var _linkSearchError = _interopRequireWildcard(require("./link-search-error"));
61
+
62
+ var _formFooter = _interopRequireWildcard(require("./form-footer"));
63
63
 
64
64
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
65
65
 
@@ -73,24 +73,19 @@ var RECENT_SEARCH_LIST_SIZE = 5;
73
73
  exports.RECENT_SEARCH_LIST_SIZE = RECENT_SEARCH_LIST_SIZE;
74
74
  var CONTACT_SUPPORT_LINK = 'https://support.atlassian.com/contact/';
75
75
  exports.CONTACT_SUPPORT_LINK = CONTACT_SUPPORT_LINK;
76
- var testIds = {
76
+
77
+ var testIds = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
77
78
  linkPicker: 'link-picker',
78
79
  urlInputField: 'link-url',
79
80
  textInputField: 'link-text',
80
- searchIcon: 'link-picker-search-icon',
81
- insertButton: 'link-picker-insert-button',
82
- cancelButton: 'link-picker-cancel-button',
81
+ searchIcon: 'link-picker-search-icon'
82
+ }, _formFooter.testIds), _linkSearchError.testIds), _linkSearchList.testIds), {}, {
83
83
  clearUrlButton: 'clear-text',
84
- resultListTitle: 'link-picker-list-title',
85
- emptyResultPage: 'link-search-no-results',
86
- searchResultList: 'link-search-list',
87
- searchResultItem: 'link-search-list-item',
88
- searchResultLoadingIndicator: 'link-picker.results-loading-indicator',
89
84
  urlError: 'link-error',
90
85
  tabList: 'link-picker-tabs',
91
- tabItem: 'link-picker-tab',
92
- searchError: 'link-search-error'
93
- };
86
+ tabItem: 'link-picker-tab'
87
+ });
88
+
94
89
  exports.testIds = testIds;
95
90
  var initState = {
96
91
  url: '',
@@ -113,7 +108,7 @@ function reducer(state, payload) {
113
108
  }
114
109
 
115
110
  function LinkPicker(_ref) {
116
- var _queryState$query, _items$length, _errorFallback;
111
+ var _errorFallback;
117
112
 
118
113
  var onSubmit = _ref.onSubmit,
119
114
  onCancel = _ref.onCancel,
@@ -151,6 +146,7 @@ function LinkPicker(_ref) {
151
146
  retry = _usePlugins.retry,
152
147
  errorFallback = _usePlugins.errorFallback;
153
148
 
149
+ var fixListHeightProps = (0, _useFixHeight.default)(isLoading);
154
150
  var isEditing = !!initUrl;
155
151
  var selectedItem = items === null || items === void 0 ? void 0 : items[selectedIndex];
156
152
  var isSelectedItem = (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.url) === url;
@@ -279,9 +275,6 @@ function LinkPicker(_ref) {
279
275
  });
280
276
  }, [handleInsert, isSelectedItem, selectedItem, url]);
281
277
  var linkPlaceHolder = isActivePlugin ? _messages.messages.placeholder : _messages.messages.linkPlaceholder;
282
- var linkListTitle = (queryState === null || queryState === void 0 ? void 0 : (_queryState$query = queryState.query) === null || _queryState$query === void 0 ? void 0 : _queryState$query.length) !== 0 ? _messages.messages.titleResults : _messages.messages.titleRecentlyViewed;
283
- var insertButtonMsg = isEditing ? _messages.messages.saveButton : _messages.messages.insertButton;
284
- var noResults = (items === null || items === void 0 ? void 0 : items.length) === 0 && !error;
285
278
  var screenReaderDescriptionId = 'search-recent-links-field-description';
286
279
  var linkSearchListId = 'link-picker-search-list';
287
280
  var ariaActiveDescendant = selectedIndex > -1 ? "link-search-list-item-".concat(selectedIndex) : ''; // Added workaround with a screen reader Announcer specifically for VoiceOver + Safari
@@ -339,7 +332,7 @@ function LinkPicker(_ref) {
339
332
  onClear: handleClear,
340
333
  onKeyDown: handleKeyDown,
341
334
  onChange: handleChangeText
342
- }), queryState && (0, _react2.jsx)(_react.Fragment, null, tabs.length > 0 && (0, _react2.jsx)("div", {
335
+ }), isActivePlugin && !!queryState && (0, _react2.jsx)(_react.Fragment, null, tabs.length > 0 && (0, _react2.jsx)("div", {
343
336
  css: _styled.tabsWrapperStyles
344
337
  }, (0, _react2.jsx)(_tabs.default, {
345
338
  id: testIds.tabList,
@@ -357,64 +350,29 @@ function LinkPicker(_ref) {
357
350
  key: tab.tabTitle,
358
351
  testId: testIds.tabItem
359
352
  }, tab.tabTitle);
360
- })))), !!(items !== null && items !== void 0 && items.length) && (0, _react2.jsx)("div", {
361
- css: _styled.listTitleStyles,
362
- id: testIds.resultListTitle,
363
- "data-testid": testIds.resultListTitle
364
- }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, linkListTitle)), (0, _react2.jsx)(_visuallyHidden.default, {
365
- id: "fabric.smartcard.linkpicker.suggested.results"
366
- }, url && (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.messages.searchLinkResults, {
367
- values: {
368
- count: (_items$length = items === null || items === void 0 ? void 0 : items.length) !== null && _items$length !== void 0 ? _items$length : 0
369
- },
370
- "aria-live": "polite",
371
- "aria-atomic": "true"
372
- }))), (0, _react2.jsx)(_linkSearchList.default, {
373
- ariaLabelledBy: testIds.resultListTitle,
374
- ariaControls: "fabric.smartcard.linkpicker.suggested.results",
353
+ })))), (0, _react2.jsx)("div", (0, _extends2.default)({
354
+ css: _styled.flexColumnStyles
355
+ }, fixListHeightProps), !error && (0, _react2.jsx)(_linkSearchList.default, {
375
356
  id: linkSearchListId,
376
357
  role: "listbox",
377
- items: items !== null && items !== void 0 ? items : [],
358
+ items: items,
378
359
  isLoading: isLoading,
379
360
  selectedIndex: selectedIndex,
380
361
  activeIndex: activeIndex,
381
362
  onSelect: handleSelected,
382
363
  onMouseEnter: handleMouseEnterResultItem,
383
- onMouseLeave: handleMouseLeaveResultItem
384
- }), error && ((_errorFallback = errorFallback === null || errorFallback === void 0 ? void 0 : errorFallback(error, retry)) !== null && _errorFallback !== void 0 ? _errorFallback : (0, _react2.jsx)(_linkSearchError.default, {
385
- testId: testIds.searchError,
386
- header: intl.formatMessage(_messages.messages.searchErrorHeader),
387
- description: (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, _messages.messages.searchErrorDescription, {
388
- values: {
389
- a: function a(label) {
390
- return (0, _react2.jsx)(_button.default, {
391
- appearance: "link",
392
- spacing: "none",
393
- href: CONTACT_SUPPORT_LINK,
394
- target: "_blank",
395
- rel: "noopener noreferrer"
396
- }, label);
397
- }
398
- }
399
- }))
400
- })), noResults && (0, _react2.jsx)(_linkSearchNoResults.default, {
401
- testId: testIds.emptyResultPage,
402
- header: intl.formatMessage(_messages.messages.noResults),
403
- description: intl.formatMessage(_messages.messages.noResultsDescription)
404
- })), (0, _react2.jsx)(_form.FormFooter, {
405
- align: "end"
406
- }, (0, _react2.jsx)(_button.ButtonGroup, null, (0, _react2.jsx)(_button.default, {
407
- appearance: "default",
408
- onClick: onCancel,
409
- testId: testIds.cancelButton
410
- }, intl.formatMessage(_messages.messages.cancelButton)), (0, _react2.jsx)(_button.default, {
411
- type: "submit",
412
- appearance: "primary",
413
- testId: testIds.insertButton
414
- }, intl.formatMessage(insertButtonMsg)))));
364
+ onMouseLeave: handleMouseLeaveResultItem,
365
+ error: error,
366
+ hasSearchTerm: !!(queryState !== null && queryState !== void 0 && queryState.query.length)
367
+ }), error && ((_errorFallback = errorFallback === null || errorFallback === void 0 ? void 0 : errorFallback(error, retry)) !== null && _errorFallback !== void 0 ? _errorFallback : (0, _react2.jsx)(_linkSearchError.default, null)))), (0, _react2.jsx)(_formFooter.default, {
368
+ css: !queryState || !(plugins !== null && plugins !== void 0 && plugins.length) ? _styled.formFooterMargin : undefined,
369
+ isEditing: isEditing,
370
+ onCancel: onCancel
371
+ }));
415
372
  }
416
373
 
417
- var _default = LinkPicker;
374
+ var _default = (0, _withLinkPickerAnalytics.withLinkPickerAnalyticsContext)( /*#__PURE__*/(0, _react.memo)(LinkPicker));
375
+
418
376
  exports.default = _default;
419
377
 
420
378
  function getScreenReaderText(items, selectedIndex, intl) {
@@ -5,22 +5,63 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = void 0;
8
+ exports.testIds = exports.messages = exports.default = exports.CONTACT_SUPPORT_LINK = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
12
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = require("@emotion/react");
13
+
14
+ var _reactIntlNext = require("react-intl-next");
15
+
16
+ var _button = _interopRequireDefault(require("@atlaskit/button"));
13
17
 
14
18
  var _emptyState = _interopRequireDefault(require("@atlaskit/empty-state"));
15
19
 
16
20
  var _genericErrorSvg = _interopRequireDefault(require("../../../common/generic-error-svg"));
17
21
 
18
- var LinkSearchError = function LinkSearchError(props) {
19
- return /*#__PURE__*/_react.default.createElement(_emptyState.default, (0, _extends2.default)({}, props, {
22
+ /** @jsx jsx */
23
+ var CONTACT_SUPPORT_LINK = 'https://support.atlassian.com/contact/';
24
+ exports.CONTACT_SUPPORT_LINK = CONTACT_SUPPORT_LINK;
25
+ var messages = (0, _reactIntlNext.defineMessages)({
26
+ searchErrorHeader: {
27
+ id: 'fabric.linkPicker.search.error.heading',
28
+ defaultMessage: 'We’re having trouble loading data.',
29
+ description: 'Heading message shown when a search throws an error'
30
+ },
31
+ searchErrorDescription: {
32
+ id: 'fabric.linkPicker.search.error.description',
33
+ defaultMessage: 'Refresh the page, or contact <a>Atlassian Support</a> if this keeps happening.',
34
+ description: 'Describes possible actions when search throws an error'
35
+ }
36
+ });
37
+ exports.messages = messages;
38
+ var testIds = {
39
+ searchError: 'link-search-error'
40
+ };
41
+ exports.testIds = testIds;
42
+
43
+ var LinkSearchError = function LinkSearchError() {
44
+ var intl = (0, _reactIntlNext.useIntl)();
45
+ return (0, _react.jsx)(_emptyState.default, {
46
+ testId: testIds.searchError,
47
+ header: intl.formatMessage(messages.searchErrorHeader),
48
+ description: (0, _react.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, messages.searchErrorDescription, {
49
+ values: {
50
+ a: function a(label) {
51
+ return (0, _react.jsx)(_button.default, {
52
+ appearance: "link",
53
+ spacing: "none",
54
+ href: CONTACT_SUPPORT_LINK,
55
+ target: "_blank",
56
+ rel: "noopener noreferrer"
57
+ }, label);
58
+ }
59
+ }
60
+ })),
20
61
  renderImage: function renderImage() {
21
- return /*#__PURE__*/_react.default.createElement(_genericErrorSvg.default, null);
62
+ return (0, _react.jsx)(_genericErrorSvg.default, null);
22
63
  }
23
- }));
64
+ });
24
65
  };
25
66
 
26
67
  var _default = LinkSearchError;
@@ -2,23 +2,73 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
- exports.default = void 0;
10
+ exports.testIds = exports.messages = exports.default = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _react = require("react");
19
+
20
+ var _react2 = require("@emotion/react");
9
21
 
10
- var _react = require("@emotion/react");
22
+ var _reactIntlNext = require("react-intl-next");
11
23
 
12
24
  var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
13
25
 
26
+ var _visuallyHidden = _interopRequireDefault(require("@atlaskit/visually-hidden"));
27
+
14
28
  var _listItem = _interopRequireDefault(require("../list-item"));
15
29
 
16
30
  var _styled = require("./styled");
17
31
 
18
- var _ = require("../");
32
+ var _linkSearchNoResults = _interopRequireWildcard(require("./link-search-no-results"));
33
+
34
+ var _excluded = ["onSelect", "onMouseEnter", "onMouseLeave", "items", "activeIndex", "selectedIndex", "isLoading", "ariaControls", "ariaLabelledBy", "role", "id", "hasSearchTerm"];
35
+
36
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
37
+
38
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
39
+
40
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
41
 
20
- /** @jsx jsx */
21
- var LinkSearchList = function LinkSearchList(_ref) {
42
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
43
+
44
+ var messages = (0, _reactIntlNext.defineMessages)({
45
+ titleRecentlyViewed: {
46
+ id: 'fabric.linkPicker.listTitle.recentlyViewed',
47
+ defaultMessage: 'Recently Viewed',
48
+ description: 'Describes type of items shown in the list for screen-reader users'
49
+ },
50
+ titleResults: {
51
+ id: 'fabric.linkPicker.listTitle.results',
52
+ defaultMessage: 'Results',
53
+ description: 'Describes type of items shown in the list for screen-reader users'
54
+ },
55
+ searchLinkResults: {
56
+ id: 'fabric.linkPicker.hyperlink.searchLinkResults',
57
+ defaultMessage: '{count, plural, =0 {no results} one {# result} other {# results}} found',
58
+ description: 'Announce search results for screen-reader users.'
59
+ }
60
+ });
61
+ exports.messages = messages;
62
+
63
+ var testIds = _objectSpread(_objectSpread({}, _linkSearchNoResults.testIds), {}, {
64
+ resultListTitle: 'link-picker-list-title',
65
+ searchResultItem: 'link-search-list-item',
66
+ searchResultList: 'link-search-list',
67
+ searchResultLoadingIndicator: 'link-picker.results-loading-indicator'
68
+ });
69
+
70
+ exports.testIds = testIds;
71
+ var LinkSearchList = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
22
72
  var onSelect = _ref.onSelect,
23
73
  onMouseEnter = _ref.onMouseEnter,
24
74
  onMouseLeave = _ref.onMouseLeave,
@@ -29,21 +79,40 @@ var LinkSearchList = function LinkSearchList(_ref) {
29
79
  ariaControls = _ref.ariaControls,
30
80
  ariaLabelledBy = _ref.ariaLabelledBy,
31
81
  role = _ref.role,
32
- id = _ref.id;
82
+ id = _ref.id,
83
+ hasSearchTerm = _ref.hasSearchTerm,
84
+ restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
33
85
  var itemsContent;
34
86
  var loadingContent;
87
+ var linkListTitle = hasSearchTerm ? messages.titleResults : messages.titleRecentlyViewed;
88
+
89
+ if ((items === null || items === void 0 ? void 0 : items.length) === 0) {
90
+ return (0, _react2.jsx)(_linkSearchNoResults.default, null);
91
+ }
35
92
 
36
93
  if (items && items.length > 0) {
37
- itemsContent = (0, _react.jsx)("ul", {
94
+ itemsContent = (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)("div", {
95
+ css: _styled.listTitleStyles,
96
+ id: testIds.resultListTitle,
97
+ "data-testid": testIds.resultListTitle
98
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, linkListTitle)), (0, _react2.jsx)(_visuallyHidden.default, {
99
+ id: "fabric.smartcard.linkpicker.suggested.results"
100
+ }, hasSearchTerm && (0, _react2.jsx)(_reactIntlNext.FormattedMessage, (0, _extends2.default)({}, messages.searchLinkResults, {
101
+ values: {
102
+ count: items.length
103
+ },
104
+ "aria-live": "polite",
105
+ "aria-atomic": "true"
106
+ }))), (0, _react2.jsx)("ul", {
38
107
  id: id,
39
108
  role: role,
40
109
  css: _styled.listStyles,
41
- "aria-controls": ariaControls,
42
- "aria-labelledby": ariaLabelledBy,
43
- "data-testid": _.testIds.searchResultList
110
+ "aria-controls": "fabric.smartcard.linkpicker.suggested.results",
111
+ "aria-labelledby": testIds.resultListTitle,
112
+ "data-testid": testIds.searchResultList
44
113
  }, items.map(function (item, index) {
45
- return (0, _react.jsx)(_listItem.default, {
46
- id: "".concat(_.testIds.searchResultItem, "-").concat(index),
114
+ return (0, _react2.jsx)(_listItem.default, {
115
+ id: "".concat(testIds.searchResultItem, "-").concat(index),
47
116
  role: role && 'option',
48
117
  item: item,
49
118
  selected: selectedIndex === index,
@@ -53,22 +122,22 @@ var LinkSearchList = function LinkSearchList(_ref) {
53
122
  onSelect: onSelect,
54
123
  key: item.objectId
55
124
  });
56
- }));
125
+ })));
57
126
  }
58
127
 
59
128
  if (isLoading) {
60
- loadingContent = (0, _react.jsx)("div", {
129
+ loadingContent = (0, _react2.jsx)("div", {
61
130
  css: _styled.spinnerContainerStyles
62
- }, (0, _react.jsx)(_spinner.default, {
63
- testId: _.testIds.searchResultLoadingIndicator,
131
+ }, (0, _react2.jsx)(_spinner.default, {
132
+ testId: testIds.searchResultLoadingIndicator,
64
133
  size: "medium"
65
134
  }));
66
135
  }
67
136
 
68
- return (0, _react.jsx)("div", {
137
+ return (0, _react2.jsx)("div", (0, _extends2.default)({
138
+ ref: ref,
69
139
  css: _styled.listContainerStyles
70
- }, itemsContent, loadingContent);
71
- };
72
-
140
+ }, restProps), itemsContent, loadingContent);
141
+ });
73
142
  var _default = LinkSearchList;
74
143
  exports.default = _default;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.testIds = exports.messages = exports.default = void 0;
9
+
10
+ var _react = require("@emotion/react");
11
+
12
+ var _emptyState = _interopRequireDefault(require("@atlaskit/empty-state"));
13
+
14
+ var _reactIntlNext = require("react-intl-next");
15
+
16
+ var _noResultsSvg = _interopRequireDefault(require("./no-results-svg"));
17
+
18
+ var _styled = require("./styled");
19
+
20
+ /** @jsx jsx */
21
+ var messages = (0, _reactIntlNext.defineMessages)({
22
+ noResults: {
23
+ id: 'fabric.linkPicker.search.noResults.heading',
24
+ defaultMessage: 'We couldn’t find anything matching your search.',
25
+ description: 'Heading message shown when a search has no results'
26
+ },
27
+ noResultsDescription: {
28
+ id: 'fabric.linkPicker.search.noResults.description',
29
+ defaultMessage: 'Try again with a different term.',
30
+ description: 'Describes possible action when a search returns no results'
31
+ }
32
+ });
33
+ exports.messages = messages;
34
+ var testIds = {
35
+ emptyResultPage: 'link-search-no-results'
36
+ };
37
+ exports.testIds = testIds;
38
+
39
+ var NoResults = function NoResults() {
40
+ var intl = (0, _reactIntlNext.useIntl)();
41
+ return (0, _react.jsx)("div", {
42
+ css: _styled.emptyStateWrapperStyles
43
+ }, (0, _react.jsx)(_emptyState.default, {
44
+ testId: testIds.emptyResultPage,
45
+ header: intl.formatMessage(messages.noResults),
46
+ description: intl.formatMessage(messages.noResultsDescription),
47
+ renderImage: function renderImage() {
48
+ return (0, _react.jsx)(_noResultsSvg.default, null);
49
+ }
50
+ }));
51
+ };
52
+
53
+ var _default = NoResults;
54
+ exports.default = _default;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.emptyStateWrapperStyles = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+
12
+ var _react = require("@emotion/react");
13
+
14
+ var _templateObject;
15
+
16
+ var emptyStateWrapperStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n & p {\n margin: 0;\n }\n"])));
17
+ exports.emptyStateWrapperStyles = emptyStateWrapperStyles;
@@ -5,17 +5,24 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.spinnerContainerStyles = exports.listStyles = exports.listContainerStyles = void 0;
8
+ exports.spinnerContainerStyles = exports.listTitleStyles = exports.listStyles = exports.listContainerStyles = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
12
12
  var _react = require("@emotion/react");
13
13
 
14
- var _templateObject, _templateObject2, _templateObject3;
14
+ var _theme = require("@atlaskit/theme");
15
15
 
16
- var listContainerStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n padding-top: 0;\n"])));
16
+ var _constants = require("@atlaskit/theme/constants");
17
+
18
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
19
+
20
+ var gridSize = (0, _constants.gridSize)();
21
+ var listContainerStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n padding-top: 0;\n min-height: 80px;\n margin-top: ", "px;\n margin-bottom: ", "px;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n"])), gridSize * 2, gridSize * 2);
17
22
  exports.listContainerStyles = listContainerStyles;
18
- var spinnerContainerStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n text-align: center;\n min-height: 80px;\n margin-top: 30px;\n"])));
23
+ var spinnerContainerStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n text-align: center;\n min-height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-grow: 1;\n"])));
19
24
  exports.spinnerContainerStyles = spinnerContainerStyles;
20
- var listStyles = (0, _react.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n padding: 0;\n list-style: none;\n"])));
21
- exports.listStyles = listStyles;
25
+ var listStyles = (0, _react.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n padding: 0;\n margin: 0;\n list-style: none;\n"])));
26
+ exports.listStyles = listStyles;
27
+ var listTitleStyles = (0, _react.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n text-transform: uppercase;\n margin-top: 0;\n margin-bottom: ", "px;\n"])), _theme.typography.h100(), gridSize / 2);
28
+ exports.listTitleStyles = listTitleStyles;
@@ -53,11 +53,6 @@ var messages = (0, _reactIntlNext.defineMessages)({
53
53
  defaultMessage: 'Suggestions will appear below as you type into the field',
54
54
  description: 'Describes what the search field does for screen reader users.'
55
55
  },
56
- searchLinkResults: {
57
- id: 'fabric.linkPicker.hyperlink.searchLinkResults',
58
- defaultMessage: '{count, plural, =0 {no results} one {# result} other {# results}} found',
59
- description: 'Announce search results for screen-reader users.'
60
- },
61
56
  linkAriaLabel: {
62
57
  id: 'fabric.linkPicker.hyperlink.linkAriaLabel',
63
58
  defaultMessage: 'Link label',
@@ -77,51 +72,6 @@ var messages = (0, _reactIntlNext.defineMessages)({
77
72
  id: 'fabric.linkPicker.time.ago',
78
73
  defaultMessage: 'ago',
79
74
  description: 'Some time ago'
80
- },
81
- titleRecentlyViewed: {
82
- id: 'fabric.linkPicker.listTitle.recentlyViewed',
83
- defaultMessage: 'Recently Viewed',
84
- description: 'Describes type of items shown in the list for screen-reader users'
85
- },
86
- titleResults: {
87
- id: 'fabric.linkPicker.listTitle.results',
88
- defaultMessage: 'Results',
89
- description: 'Describes type of items shown in the list for screen-reader users'
90
- },
91
- cancelButton: {
92
- id: 'fabric.linkPicker.button.cancel',
93
- defaultMessage: 'Cancel',
94
- description: 'Button to cancel and dismiss the link picker'
95
- },
96
- insertButton: {
97
- id: 'fabric.linkPicker.button.insert',
98
- defaultMessage: 'Insert',
99
- description: 'Button to insert searched or selected link'
100
- },
101
- noResults: {
102
- id: 'fabric.linkPicker.search.noResults.heading',
103
- defaultMessage: 'We couldn’t find anything matching your search.',
104
- description: 'Heading message shown when a search has no results'
105
- },
106
- noResultsDescription: {
107
- id: 'fabric.linkPicker.search.noResults.description',
108
- defaultMessage: 'Try again with a different term.',
109
- description: 'Describes possible action when a search returns no results'
110
- },
111
- saveButton: {
112
- id: 'fabric.linkPicker.button.save',
113
- defaultMessage: 'Save',
114
- description: 'Button to save edited link'
115
- },
116
- searchErrorHeader: {
117
- id: 'fabric.linkPicker.search.error.heading',
118
- defaultMessage: 'We’re having trouble loading data.',
119
- description: 'Heading message shown when a search throws an error'
120
- },
121
- searchErrorDescription: {
122
- id: 'fabric.linkPicker.search.error.description',
123
- defaultMessage: 'Refresh the page, or contact <a>Atlassian Support</a> if this keeps happening.',
124
- description: 'Describes possible actions when search throws an error'
125
75
  }
126
76
  });
127
77
  exports.messages = messages;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.tabsWrapperStyles = exports.searchIconStyles = exports.rootContainerStylesForLoader = exports.rootContainerStyles = exports.listTitleStyles = void 0;
8
+ exports.tabsWrapperStyles = exports.searchIconStyles = exports.rootContainerStylesForLoader = exports.rootContainerStyles = exports.formFooterMargin = exports.flexColumnStyles = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
@@ -15,21 +15,26 @@ var _react = require("@emotion/react");
15
15
 
16
16
  var _colors = require("@atlaskit/theme/colors");
17
17
 
18
- var _theme = require("@atlaskit/theme");
19
-
20
18
  var _constants = require("@atlaskit/theme/constants");
21
19
 
22
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
20
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
23
21
 
24
22
  var LINK_PICKER_WIDTH_IN_PX = 342;
25
- var LINK_PICKER_MIN_HEIGHT_IN_PX = 234;
26
- var rootContainerStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: ", "px;\n padding: ", "px;\n box-sizing: border-box;\n line-height: initial;\n min-height: ", "px;\n"])), LINK_PICKER_WIDTH_IN_PX, (0, _constants.gridSize)() * 2, LINK_PICKER_MIN_HEIGHT_IN_PX);
23
+ var LINK_PICKER_MIN_HEIGHT_IN_PX = 220;
24
+ var gridSize = (0, _constants.gridSize)();
25
+ /**
26
+ * Half padding on the top as the form field has a `gridSize()` margin top that cannot be overridden
27
+ */
28
+
29
+ var rootContainerStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: ", "px;\n padding: ", "px ", "px ", "px;\n box-sizing: border-box;\n line-height: initial;\n min-height: ", "px;\n"])), LINK_PICKER_WIDTH_IN_PX, gridSize, gridSize * 2, gridSize * 2, LINK_PICKER_MIN_HEIGHT_IN_PX);
27
30
  exports.rootContainerStyles = rootContainerStyles;
28
31
  var rootContainerStylesForLoader = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n display: flex;\n align-items: center;\n justify-content: center;\n"])), rootContainerStyles);
29
32
  exports.rootContainerStylesForLoader = rootContainerStylesForLoader;
30
- var searchIconStyles = (0, _react.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n margin-left: ", "px;\n color: ", ";\n cursor: default;\n"])), (0, _constants.gridSize)() / 2, (0, _tokens.token)('color.icon', _colors.N500));
33
+ var searchIconStyles = (0, _react.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n margin-left: ", "px;\n color: ", ";\n cursor: default;\n"])), gridSize / 2, (0, _tokens.token)('color.icon', _colors.N500));
31
34
  exports.searchIconStyles = searchIconStyles;
32
- var listTitleStyles = (0, _react.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n text-transform: uppercase;\n margin-bottom: ", "px;\n"])), _theme.typography.h100(), (0, _constants.gridSize)() / 2);
33
- exports.listTitleStyles = listTitleStyles;
34
- var tabsWrapperStyles = (0, _react.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n margin-left: -", "px;\n margin-right: -", "px;\n"])), (0, _constants.gridSize)(), (0, _constants.gridSize)());
35
- exports.tabsWrapperStyles = tabsWrapperStyles;
35
+ var tabsWrapperStyles = (0, _react.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", "px;\n margin-left: -", "px;\n margin-right: -", "px;\n"])), gridSize * 1.5, gridSize, gridSize);
36
+ exports.tabsWrapperStyles = tabsWrapperStyles;
37
+ var flexColumnStyles = (0, _react.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex-direction: column;\n"])));
38
+ exports.flexColumnStyles = flexColumnStyles;
39
+ var formFooterMargin = (0, _react.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n margin-top: ", "px;\n"])), gridSize * 2);
40
+ exports.formFooterMargin = formFooterMargin;
@@ -21,5 +21,5 @@ var _templateObject, _templateObject2;
21
21
 
22
22
  var clearTextButtonStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n padding: 0;\n margin-right: ", "px;\n color: ", ";\n background: transparent;\n border: none;\n cursor: pointer;\n"])), (0, _constants.gridSize)() / 2, (0, _tokens.token)('color.icon.subtle', _colors.N500));
23
23
  exports.clearTextButtonStyles = clearTextButtonStyles;
24
- var fieldStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n margin-bottom: ", "px;\n"])), (0, _constants.gridSize)() * 2);
24
+ var fieldStyles = (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n & + & {\n margin-top: ", "px;\n }\n"])), (0, _constants.gridSize)() * 2);
25
25
  exports.fieldStyles = fieldStyles;