@atlaskit/editor-plugin-quick-insert 16.2.7 → 16.3.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 (38) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/cjs/quickInsertPlugin.js +1 -1
  3. package/dist/cjs/ui/RegistryElementBrowser/NotFoundIllustration.js +76 -0
  4. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowser.compiled.css +7 -2
  5. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowser.js +61 -9
  6. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserCategories.compiled.css +3 -1
  7. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserCategories.js +12 -9
  8. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserFooter.js +28 -10
  9. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.compiled.css +20 -2
  10. package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +23 -31
  11. package/dist/cjs/ui/RegistryElementBrowser/model.js +9 -2
  12. package/dist/es2019/quickInsertPlugin.js +1 -1
  13. package/dist/es2019/ui/RegistryElementBrowser/NotFoundIllustration.js +69 -0
  14. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowser.compiled.css +7 -2
  15. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowser.js +61 -9
  16. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserCategories.compiled.css +3 -1
  17. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserCategories.js +11 -8
  18. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserFooter.js +28 -10
  19. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.compiled.css +20 -2
  20. package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +24 -32
  21. package/dist/es2019/ui/RegistryElementBrowser/model.js +10 -2
  22. package/dist/esm/quickInsertPlugin.js +1 -1
  23. package/dist/esm/ui/RegistryElementBrowser/NotFoundIllustration.js +69 -0
  24. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowser.compiled.css +7 -2
  25. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowser.js +61 -9
  26. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserCategories.compiled.css +3 -1
  27. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserCategories.js +12 -9
  28. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserFooter.js +28 -10
  29. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.compiled.css +20 -2
  30. package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +24 -32
  31. package/dist/esm/ui/RegistryElementBrowser/model.js +9 -2
  32. package/dist/types/quickInsertPluginType.d.ts +9 -1
  33. package/dist/types/ui/RegistryElementBrowser/NotFoundIllustration.d.ts +1 -0
  34. package/dist/types/ui/RegistryElementBrowser/RegistryElementBrowserCategories.d.ts +1 -2
  35. package/dist/types/ui/RegistryElementBrowser/RegistryElementBrowserFooter.d.ts +2 -1
  36. package/dist/types/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.d.ts +1 -2
  37. package/dist/types/ui/RegistryElementBrowser/model.d.ts +1 -0
  38. package/package.json +3 -3
@@ -4,21 +4,29 @@ import "./RegistryElementBrowser.compiled.css";
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { useIntl } from 'react-intl';
7
+ import IconButton from '@atlaskit/button/icon/button';
7
8
  import Heading from '@atlaskit/heading/heading';
8
9
  import { MENU, RECOMMENDED_SECTION } from '@atlaskit/editor-common/quick-insert/keys';
9
10
  import { getMenuFooterSectionKey } from '@atlaskit/editor-common/type-ahead-get-menu-footer-section-key';
10
11
  import { getSectionOverflowItemKey } from '@atlaskit/editor-common/type-ahead-get-section-overflow-item-key';
12
+ import CrossIcon from '@atlaskit/icon/core/cross';
11
13
  import Modal from '@atlaskit/modal-dialog/modal-dialog';
12
14
  import ModalBody from '@atlaskit/modal-dialog/modal-body';
13
15
  import ModalFooter from '@atlaskit/modal-dialog/modal-footer';
14
16
  import ModalHeader from '@atlaskit/modal-dialog/modal-header';
15
17
  import ModalTransition from '@atlaskit/modal-dialog/modal-transition';
18
+ import Textfield from '@atlaskit/textfield/text-field';
16
19
  import { createRegistryElementBrowserModel, getInitialRegistryElementBrowserSection, getRegistryElementBrowserItems } from './model';
17
20
  import { RegistryElementBrowserCategories } from './RegistryElementBrowserCategories';
18
21
  import { RegistryElementBrowserFooter } from './RegistryElementBrowserFooter';
19
22
  import { RegistryElementBrowserSearchResults } from './RegistryElementBrowserSearchResults';
23
+ var browserGridTemplateColumns = '182px minmax(0, 1fr)';
24
+ var categoryColumnGap = "calc(".concat("var(--ds-space-200, 16px)", " + ", "var(--ds-space-150, 12px)", ")");
20
25
  var browserLayoutStyles = null;
26
+ var headerContentStyles = null;
27
+ var headerSearchStyles = null;
21
28
  var resultsId = 'registry-element-browser-results';
29
+ var modalTestId = 'registry-element-browser-modal';
22
30
  export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
23
31
  var components = _ref.components,
24
32
  emptyStateHandler = _ref.emptyStateHandler,
@@ -60,6 +68,7 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
60
68
  _useState6 = _slicedToArray(_useState5, 2),
61
69
  selectedKey = _useState6[0],
62
70
  setSelectedKey = _useState6[1];
71
+ var searchInputRef = useRef(null);
63
72
  var wasOpen = useRef(false);
64
73
  var previousIsOffline = useRef(isOffline);
65
74
  useEffect(function () {
@@ -78,7 +87,7 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
78
87
  formatMessage: formatMessage,
79
88
  model: model,
80
89
  query: query,
81
- section: query ? undefined : section
90
+ section: section
82
91
  });
83
92
  }, [formatMessage, model, query, section]);
84
93
  useEffect(function () {
@@ -90,7 +99,6 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
90
99
  }, [isOffline, onClearSelection]);
91
100
  var onSearchChange = useCallback(function (event) {
92
101
  setQuery(event.currentTarget.value);
93
- setSection(undefined);
94
102
  setSelectedKey(undefined);
95
103
  onClearSelection();
96
104
  }, [onClearSelection]);
@@ -100,10 +108,26 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
100
108
  setSelectedKey(undefined);
101
109
  onClearSelection();
102
110
  }, [onClearSelection]);
111
+ var onClearSearch = useCallback(function () {
112
+ var _searchInputRef$curre;
113
+ setQuery('');
114
+ setSelectedKey(undefined);
115
+ onClearSelection();
116
+ (_searchInputRef$curre = searchInputRef.current) === null || _searchInputRef$curre === void 0 || _searchInputRef$curre.focus();
117
+ }, [onClearSelection]);
103
118
  var onRegistrySelect = useCallback(function (key, handler) {
104
119
  setSelectedKey(key);
105
120
  onSelect(handler);
106
121
  }, [onSelect]);
122
+ var onModalOpenComplete = useCallback(function (node) {
123
+ node.style.borderRadius = "var(--ds-radius-large, 8px)";
124
+ var footer = node.querySelector("[data-testid=\"".concat(modalTestId, "--footer\"]"));
125
+ footer === null || footer === void 0 || footer.style.setProperty('box-sizing', 'border-box');
126
+ footer === null || footer === void 0 || footer.style.setProperty('height', '64px');
127
+ footer === null || footer === void 0 || footer.style.setProperty('padding-block', "var(--ds-space-200, 16px)");
128
+ var scrollableBody = node.querySelector("[data-testid=\"".concat(modalTestId, "--scrollable\"]"));
129
+ scrollableBody === null || scrollableBody === void 0 || scrollableBody.style.setProperty('border-block-end', 'none');
130
+ }, []);
107
131
  var onKeyDown = useCallback(function (event) {
108
132
  if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
109
133
  var _resultCollection$que;
@@ -135,18 +159,46 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
135
159
  defaultMessage: 'Insert elements',
136
160
  id: 'editor.quick-insert.title'
137
161
  }),
162
+ height: "664px",
138
163
  onClose: onClose,
139
164
  onCloseComplete: onCloseComplete,
140
- width: "x-large"
141
- }, /*#__PURE__*/React.createElement(ModalHeader, null, /*#__PURE__*/React.createElement(Heading, {
165
+ onOpenComplete: onModalOpenComplete,
166
+ testId: modalTestId,
167
+ width: "min(968px, calc(100vw - 32px))"
168
+ }, /*#__PURE__*/React.createElement(ModalHeader, null, /*#__PURE__*/React.createElement("div", {
169
+ className: ax(["_zulp1fka _1e0c11p5 _yv0e1xuv _1bsb1osq _lk4ji47z"])
170
+ }, /*#__PURE__*/React.createElement(Heading, {
142
171
  size: "medium"
143
172
  }, formatMessage({
144
173
  defaultMessage: 'Insert elements',
145
174
  id: 'editor.quick-insert.title'
146
- }))), /*#__PURE__*/React.createElement(ModalBody, null, /*#__PURE__*/React.createElement("div", {
147
- className: ax(["_zulp1ejb _1e0c11p5 _yv0eo9bh"])
175
+ })), /*#__PURE__*/React.createElement("div", {
176
+ className: ax(["_zulp1ejb _4cvr1h6o _1e0c11p5 _yv0ehpfy _1bsb1osq"])
177
+ }, /*#__PURE__*/React.createElement(Textfield, {
178
+ autoFocus: true,
179
+ "aria-controls": resultsId,
180
+ "aria-label": formatMessage({
181
+ defaultMessage: 'Search elements',
182
+ id: 'editor.quick-insert.search'
183
+ }),
184
+ isCompact: true,
185
+ name: "registry-element-browser-search",
186
+ onChange: onSearchChange,
187
+ onKeyDown: onKeyDown,
188
+ ref: searchInputRef,
189
+ value: query
190
+ }), /*#__PURE__*/React.createElement(IconButton, {
191
+ appearance: "subtle",
192
+ icon: CrossIcon,
193
+ label: formatMessage({
194
+ defaultMessage: 'Clear search',
195
+ id: 'editor.quick-insert.clear-search'
196
+ }),
197
+ onClick: onClearSearch,
198
+ spacing: "compact"
199
+ })))), /*#__PURE__*/React.createElement(ModalBody, null, /*#__PURE__*/React.createElement("div", {
200
+ className: ax(["_zulp1fka _1e0c11p5 _yv0e1xuv _lk4ji47z"])
148
201
  }, /*#__PURE__*/React.createElement(RegistryElementBrowserCategories, {
149
- query: query,
150
202
  section: section,
151
203
  sections: model.sections,
152
204
  onSectionClick: onSectionClick
@@ -160,12 +212,12 @@ export var RegistryElementBrowser = function RegistryElementBrowser(_ref) {
160
212
  section: section,
161
213
  selectedKey: selectedKey,
162
214
  onKeyDown: onKeyDown,
163
- onSearchChange: onSearchChange,
164
215
  onSelect: onRegistrySelect
165
216
  }))), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement(RegistryElementBrowserFooter, {
166
217
  helpUrl: helpUrl,
167
218
  isInsertEnabled: Boolean(selectedKey),
168
219
  onClose: onClose,
169
- onConfirmInsert: onConfirmInsert
220
+ onConfirmInsert: onConfirmInsert,
221
+ resultCount: items.length
170
222
  }))));
171
223
  };
@@ -1,2 +1,4 @@
1
1
  ._zulpu2gc{gap:var(--ds-space-100,8px)}._1e0c11p5{display:grid}
2
- ._yv0e9sye{grid-template-columns:repeat(2,minmax(0,1fr))}
2
+ ._ae4vv2br{align-content:start}
3
+ ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
4
+ @media (max-width:599px){._1w2e1ris{grid-auto-columns:max-content}._1ato1bp4{grid-auto-flow:column}._lk4jglyw{grid-template-columns:none}._1cgyi47z{grid-template-rows:minmax(0,1fr)}._1s8e1wug{overflow-x:auto}._pevy15vq{overflow-y:hidden}}
@@ -10,36 +10,39 @@ import { messages } from '@atlaskit/editor-common/quick-insert/messages';
10
10
  var sectionMessages = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, BLOCK_TEMPLATES_SECTION.key, messages.categoryBlockTemplates), DATA_AND_CHARTS_SECTION.key, messages.categoryDataAndCharts), EMBED_SECTION.key, messages.categoryEmbed), MEDIA_SECTION.key, messages.categoryMedia), OTHER_SECTION.key, messages.categoryOther), ROVO_SECTION.key, messages.categoryRovo), STRUCTURE_SECTION.key, messages.categoryStructure), TEXT_FORMATTING_SECTION.key, messages.categoryTextFormatting);
11
11
  var categoryGridStyles = null;
12
12
  export var RegistryElementBrowserCategories = function RegistryElementBrowserCategories(_ref) {
13
- var query = _ref.query,
14
- section = _ref.section,
13
+ var section = _ref.section,
15
14
  sections = _ref.sections,
16
15
  onSectionClick = _ref.onSectionClick;
17
16
  var _useIntl = useIntl(),
18
17
  formatMessage = _useIntl.formatMessage;
19
- var isAllSelected = section === undefined && !query;
18
+ var isAllSelected = section === undefined;
20
19
  return /*#__PURE__*/React.createElement("div", {
21
20
  "aria-label": formatMessage({
22
21
  defaultMessage: 'Element categories',
23
22
  id: 'editor.quick-insert.categories-label'
24
23
  }),
25
24
  "data-testid": "registry-element-browser-categories",
26
- className: ax(["_zulpu2gc _1e0c11p5 _yv0e9sye"])
25
+ className: ax(["_zulpu2gc _ae4vv2br _1e0c11p5 _yv0ei47z _1w2e1ris _1ato1bp4 _lk4jglyw _1cgyi47z _1s8e1wug _pevy15vq"])
27
26
  }, /*#__PURE__*/React.createElement(Button, {
28
- appearance: isAllSelected ? 'primary' : 'subtle',
27
+ appearance: 'subtle',
29
28
  "aria-pressed": isAllSelected,
30
29
  "data-section": "",
31
- onClick: onSectionClick
30
+ onClick: onSectionClick,
31
+ isSelected: isAllSelected,
32
+ shouldFitContainer: true
32
33
  }, formatMessage({
33
34
  defaultMessage: 'All',
34
35
  id: 'editor.quick-insert.all'
35
36
  })), sections.map(function (entry) {
36
37
  var _sectionMessages2;
37
38
  return /*#__PURE__*/React.createElement(Button, {
38
- appearance: section === entry.key && !query ? 'primary' : 'subtle',
39
- "aria-pressed": section === entry.key && !query,
39
+ appearance: 'subtle',
40
+ "aria-pressed": section === entry.key,
40
41
  "data-section": entry.key,
41
42
  key: entry.key,
42
- onClick: onSectionClick
43
+ onClick: onSectionClick,
44
+ isSelected: section === entry.key,
45
+ shouldFitContainer: true
43
46
  }, formatMessage((_sectionMessages2 = sectionMessages[entry.key]) !== null && _sectionMessages2 !== void 0 ? _sectionMessages2 : messages.categoryOther));
44
47
  }));
45
48
  };
@@ -2,32 +2,50 @@ import React from 'react';
2
2
  import { useIntl } from 'react-intl';
3
3
  import Button from '@atlaskit/button/default/button';
4
4
  import LinkButton from '@atlaskit/button/link';
5
+ import { Inline, Text } from '@atlaskit/primitives/compiled';
5
6
  export var RegistryElementBrowserFooter = function RegistryElementBrowserFooter(_ref) {
6
7
  var helpUrl = _ref.helpUrl,
7
8
  isInsertEnabled = _ref.isInsertEnabled,
8
9
  onClose = _ref.onClose,
9
- onConfirmInsert = _ref.onConfirmInsert;
10
+ onConfirmInsert = _ref.onConfirmInsert,
11
+ resultCount = _ref.resultCount;
10
12
  var _useIntl = useIntl(),
11
13
  formatMessage = _useIntl.formatMessage;
12
- return /*#__PURE__*/React.createElement(React.Fragment, null, helpUrl && /*#__PURE__*/React.createElement(LinkButton, {
14
+ return /*#__PURE__*/React.createElement(Inline, {
15
+ alignBlock: "center",
16
+ grow: "fill",
17
+ spread: "space-between"
18
+ }, /*#__PURE__*/React.createElement(Inline, {
19
+ alignBlock: "center",
20
+ space: "space.100"
21
+ }, /*#__PURE__*/React.createElement(Text, {
22
+ color: "color.text.subtlest"
23
+ }, formatMessage({
24
+ defaultMessage: '{count, plural, one {# result available} other {# results available}}',
25
+ id: 'editor.quick-insert.results-available'
26
+ }, {
27
+ count: resultCount
28
+ })), helpUrl && /*#__PURE__*/React.createElement(LinkButton, {
13
29
  appearance: "subtle",
14
30
  href: helpUrl,
15
31
  target: "_blank"
16
32
  }, formatMessage({
17
33
  defaultMessage: 'Help',
18
34
  id: 'editor.quick-insert.help'
19
- })), /*#__PURE__*/React.createElement(Button, {
20
- appearance: "subtle",
21
- onClick: onClose
22
- }, formatMessage({
23
- defaultMessage: 'Close',
24
- id: 'editor.quick-insert.close'
25
- })), /*#__PURE__*/React.createElement(Button, {
35
+ }))), /*#__PURE__*/React.createElement(Inline, {
36
+ space: "space.100"
37
+ }, /*#__PURE__*/React.createElement(Button, {
26
38
  appearance: "primary",
27
39
  isDisabled: !isInsertEnabled,
28
40
  onClick: onConfirmInsert
29
41
  }, formatMessage({
30
42
  defaultMessage: 'Insert',
31
43
  id: 'editor.quick-insert.insert'
32
- })));
44
+ })), /*#__PURE__*/React.createElement(Button, {
45
+ appearance: "subtle",
46
+ onClick: onClose
47
+ }, formatMessage({
48
+ defaultMessage: 'Close',
49
+ id: 'editor.quick-insert.close'
50
+ }))));
33
51
  };
@@ -1,2 +1,20 @@
1
- ._zulpu2gc{gap:var(--ds-space-100,8px)}._1e0c11p5{display:grid}
2
- ._yv0e13mt{grid-template-columns:repeat(3,minmax(0,1fr))}
1
+ ._11c81af2{font:var(--ds-font-heading-medium,normal 653 20px/24px "Atlassian Sans",ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",Ubuntu,"Helvetica Neue",sans-serif)}
2
+ ._zulpu2gc{gap:var(--ds-space-100,8px)}
3
+ ._yyhyjvu9{grid-column:1/-1}
4
+ ._19pk1ejb{margin-top:var(--ds-space-300,24px)}
5
+ ._19pkpxbi{margin-top:var(--ds-space-200,1pc)}
6
+ ._19pkutpp{margin-top:var(--ds-space-150,9pt)}
7
+ ._1bah1h6o{justify-content:center}
8
+ ._1bsb1osq{width:100%}
9
+ ._1e0c11p5{display:grid}
10
+ ._1e0c1txw{display:flex}
11
+ ._2lx21bp4{flex-direction:column}
12
+ ._4cvr1h6o{align-items:center}
13
+ ._4cvrv2br{align-items:start}
14
+ ._ae4vv2br{align-content:start}
15
+ ._p12f1kdj{max-width:25pc}
16
+ ._syazi7uo{color:var(--ds-text,#292a2e)}
17
+ ._y3gn1h6o{text-align:center}
18
+ ._yv0ei47z{grid-template-columns:minmax(0,1fr)}
19
+ @media (min-width:550px) and (max-width:1023px){._16409sye{grid-template-columns:repeat(2,minmax(0,1fr))}}
20
+ @media (min-width:1024px){._g98o1koq{grid-template-columns:repeat(3,232px)}}
@@ -5,9 +5,13 @@ import React, { useMemo } from 'react';
5
5
  import { useIntl } from 'react-intl';
6
6
  import LinkButton from '@atlaskit/button/link';
7
7
  import { QuickInsertProvider } from '@atlaskit/editor-common/quick-insert/provider';
8
- import { Stack, Text } from '@atlaskit/primitives/compiled';
9
- import Textfield from '@atlaskit/textfield/text-field';
8
+ import { Text } from '@atlaskit/primitives/compiled';
9
+ import NotFoundIllustration from './NotFoundIllustration';
10
10
  var resultsGridStyles = null;
11
+ var emptyStateWrapperStyles = null;
12
+ var emptyStateHeadingStyles = null;
13
+ var emptyStateSubheadingStyles = null;
14
+ var emptyStateLinkStyles = null;
11
15
  var RegistryElementBrowserItem = function RegistryElementBrowserItem(_ref) {
12
16
  var editorView = _ref.editorView,
13
17
  isOffline = _ref.isOffline,
@@ -22,6 +26,7 @@ var RegistryElementBrowserItem = function RegistryElementBrowserItem(_ref) {
22
26
  editorView: editorView,
23
27
  isOffline: isOffline,
24
28
  item: {
29
+ description: item.description,
25
30
  id: key,
26
31
  isSelected: isSelected
27
32
  },
@@ -30,7 +35,7 @@ var RegistryElementBrowserItem = function RegistryElementBrowserItem(_ref) {
30
35
  },
31
36
  surface: 'element-browser'
32
37
  };
33
- }, [editorView, isOffline, isSelected, key, onSelect]);
38
+ }, [editorView, isOffline, isSelected, item.description, key, onSelect]);
34
39
  if (!Component) {
35
40
  return null;
36
41
  }
@@ -49,31 +54,10 @@ export var RegistryElementBrowserSearchResults = function RegistryElementBrowser
49
54
  section = _ref2.section,
50
55
  selectedKey = _ref2.selectedKey,
51
56
  onKeyDown = _ref2.onKeyDown,
52
- onSearchChange = _ref2.onSearchChange,
53
57
  onSelect = _ref2.onSelect;
54
58
  var _useIntl = useIntl(),
55
59
  formatMessage = _useIntl.formatMessage;
56
- return /*#__PURE__*/React.createElement(Stack, {
57
- space: "space.200"
58
- }, /*#__PURE__*/React.createElement(Textfield, {
59
- autoFocus: true,
60
- "aria-controls": resultsId,
61
- "aria-label": formatMessage({
62
- defaultMessage: 'Search elements',
63
- id: 'editor.quick-insert.search'
64
- }),
65
- name: "registry-element-browser-search",
66
- onChange: onSearchChange,
67
- onKeyDown: onKeyDown,
68
- value: query
69
- }), /*#__PURE__*/React.createElement(Text, {
70
- "aria-live": "polite"
71
- }, formatMessage({
72
- defaultMessage: '{count} results',
73
- id: 'editor.quick-insert.results'
74
- }, {
75
- count: items.length
76
- })), /*#__PURE__*/React.createElement("div", {
60
+ return /*#__PURE__*/React.createElement("div", {
77
61
  "aria-label": formatMessage({
78
62
  defaultMessage: 'Element results',
79
63
  id: 'editor.quick-insert.results-label'
@@ -83,7 +67,7 @@ export var RegistryElementBrowserSearchResults = function RegistryElementBrowser
83
67
  onKeyDown: onKeyDown,
84
68
  tabIndex: -1,
85
69
  role: items.length ? 'listbox' : undefined,
86
- className: ax(["_zulpu2gc _1e0c11p5 _yv0e13mt"])
70
+ className: ax(["_zulpu2gc _ae4vv2br _4cvrv2br _1e0c11p5 _yv0ei47z _16409sye _g98o1koq"])
87
71
  }, items.length ? items.map(function (item) {
88
72
  return /*#__PURE__*/React.createElement(RegistryElementBrowserItem, {
89
73
  editorView: editorView,
@@ -97,18 +81,26 @@ export var RegistryElementBrowserSearchResults = function RegistryElementBrowser
97
81
  mode: 'full',
98
82
  searchTerm: query,
99
83
  selectedCategory: section
100
- })) !== null && _emptyStateHandler !== void 0 ? _emptyStateHandler : /*#__PURE__*/React.createElement(Stack, {
101
- alignInline: "center",
102
- space: "space.100"
103
- }, /*#__PURE__*/React.createElement(Text, null, formatMessage({
84
+ })) !== null && _emptyStateHandler !== void 0 ? _emptyStateHandler : /*#__PURE__*/React.createElement("div", {
85
+ className: ax(["_yyhyjvu9 _4cvr1h6o _1e0c1txw _2lx21bp4 _1bah1h6o _1bsb1osq"])
86
+ }, /*#__PURE__*/React.createElement(NotFoundIllustration, null), /*#__PURE__*/React.createElement("div", {
87
+ className: ax(["_11c81af2 _syazi7uo _19pk1ejb"])
88
+ }, formatMessage({
104
89
  defaultMessage: 'Nothing matches your search',
105
90
  id: 'editor.quick-insert.empty'
106
- })), /*#__PURE__*/React.createElement(LinkButton, {
91
+ })), /*#__PURE__*/React.createElement("div", {
92
+ className: ax(["_19pkpxbi _p12f1kdj _y3gn1h6o"])
93
+ }, /*#__PURE__*/React.createElement(Text, null, formatMessage({
94
+ defaultMessage: 'Try searching with a different term or discover new apps for Atlassian products.',
95
+ id: 'editor.quick-insert.empty-description'
96
+ })), /*#__PURE__*/React.createElement("div", {
97
+ className: ax(["_19pkutpp"])
98
+ }, /*#__PURE__*/React.createElement(LinkButton, {
107
99
  appearance: "primary",
108
100
  href: "https://marketplace.atlassian.com/search?category=Macros&hosting=cloud&product=confluence",
109
101
  target: "_blank"
110
102
  }, formatMessage({
111
103
  defaultMessage: 'Explore Atlassian Marketplace',
112
104
  id: 'editor.quick-insert.explore-marketplace'
113
- })))));
105
+ }))))));
114
106
  };
@@ -2,6 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
3
  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; }
4
4
  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) { _defineProperty(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; }
5
+ import { createQuickInsertMatcher } from '@atlaskit/editor-common/quick-insert/create-quick-insert-matcher';
5
6
  var compareRanks = function compareRanks(left, right) {
6
7
  for (var index = 0; index < Math.max(left.length, right.length); index++) {
7
8
  var _left$index, _right$index;
@@ -104,10 +105,16 @@ export var getRegistryElementBrowserItems = function getRegistryElementBrowserIt
104
105
  var items = section ? model.items.filter(function (item) {
105
106
  return item.sectionKeys.includes(section);
106
107
  }) : model.items;
108
+ var itemsWithDescriptions = items.map(function (item) {
109
+ var _createQuickInsertMat;
110
+ return _objectSpread(_objectSpread({}, item), {}, {
111
+ description: (_createQuickInsertMat = createQuickInsertMatcher.getDescription) === null || _createQuickInsertMat === void 0 ? void 0 : _createQuickInsertMat.call(createQuickInsertMatcher, item.registration.match, formatMessage)
112
+ });
113
+ });
107
114
  if (!normalizedQuery) {
108
- return items;
115
+ return itemsWithDescriptions;
109
116
  }
110
- return items.flatMap(function (item) {
117
+ return itemsWithDescriptions.flatMap(function (item) {
111
118
  var _item$registration$ma, _item$registration;
112
119
  var result = (_item$registration$ma = (_item$registration = item.registration).match) === null || _item$registration$ma === void 0 ? void 0 : _item$registration$ma.call(_item$registration, {
113
120
  formatMessage: formatMessage,
@@ -9,7 +9,15 @@ import type { UiControlRegistryPlugin } from '@atlaskit/editor-plugin-ui-control
9
9
  export type QuickInsertSharedState = CommonQuickInsertSharedState & {
10
10
  typeAheadHandler: TypeAheadHandler;
11
11
  };
12
- export type QuickInsertPluginOptions = CommonQuickInsertPluginOptions;
12
+ export type QuickInsertPluginOptions = CommonQuickInsertPluginOptions & {
13
+ /**
14
+ * Enables the floating quick insert button, which appears inline alongside content in the editor.
15
+ *
16
+ * Warning: This option replaces the current block control plugin config `blockControls.quickInsertButtonEnabled`
17
+ * and is only available when `platform_editor_block_control_migration` experiment is enabled.
18
+ */
19
+ blockControlButtonEnabled?: boolean;
20
+ };
13
21
  export type OpenElementBrowserOptions = {
14
22
  category?: string;
15
23
  };
@@ -0,0 +1 @@
1
+ export default function NotFoundIllustration(): JSX.Element;
@@ -6,9 +6,8 @@ import React from 'react';
6
6
  import type { RegistryElementBrowserSection } from './model';
7
7
  type Props = {
8
8
  onSectionClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
9
- query: string;
10
9
  section?: string;
11
10
  sections: RegistryElementBrowserSection[];
12
11
  };
13
- export declare const RegistryElementBrowserCategories: ({ query, section, sections, onSectionClick, }: Props) => React.JSX.Element;
12
+ export declare const RegistryElementBrowserCategories: ({ section, sections, onSectionClick, }: Props) => React.JSX.Element;
14
13
  export {};
@@ -4,6 +4,7 @@ type Props = {
4
4
  isInsertEnabled: boolean;
5
5
  onClose: () => void;
6
6
  onConfirmInsert: () => void;
7
+ resultCount: number;
7
8
  };
8
- export declare const RegistryElementBrowserFooter: ({ helpUrl, isInsertEnabled, onClose, onConfirmInsert, }: Props) => React.JSX.Element;
9
+ export declare const RegistryElementBrowserFooter: ({ helpUrl, isInsertEnabled, onClose, onConfirmInsert, resultCount, }: Props) => React.JSX.Element;
9
10
  export {};
@@ -13,7 +13,6 @@ type Props = {
13
13
  isOffline: boolean;
14
14
  items: RegistryElementBrowserItem[];
15
15
  onKeyDown: (event: React.KeyboardEvent) => void;
16
- onSearchChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
17
16
  onSelect: (key: string, handler: QuickInsertSelectionHandler) => void;
18
17
  query: string;
19
18
  resultsId: string;
@@ -27,5 +26,5 @@ declare const RegistryElementBrowserItem: ({ editorView, isOffline, isSelected,
27
26
  item: RegistryElementBrowserItem;
28
27
  onSelect: (key: string, handler: QuickInsertSelectionHandler) => void;
29
28
  }) => React.JSX.Element | null;
30
- export declare const RegistryElementBrowserSearchResults: ({ editorView, emptyStateHandler, isOffline, items, query, resultsId, section, selectedKey, onKeyDown, onSearchChange, onSelect, }: Props) => React.JSX.Element;
29
+ export declare const RegistryElementBrowserSearchResults: ({ editorView, emptyStateHandler, isOffline, items, query, resultsId, section, selectedKey, onKeyDown, onSelect, }: Props) => React.JSX.Element;
31
30
  export {};
@@ -4,6 +4,7 @@ export type RegistryElementBrowserSection = {
4
4
  rank: number;
5
5
  };
6
6
  export type RegistryElementBrowserItem = {
7
+ description?: string;
7
8
  ranks: number[];
8
9
  registration: RegisterMenuItem;
9
10
  sectionKeys: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-quick-insert",
3
- "version": "16.2.7",
3
+ "version": "16.3.1",
4
4
  "description": "Quick insert plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -38,7 +38,7 @@
38
38
  "@atlaskit/platform-feature-flags": "^2.2.0",
39
39
  "@atlaskit/primitives": "^22.5.0",
40
40
  "@atlaskit/textfield": "^10.2.0",
41
- "@atlaskit/tmp-editor-statsig": "^174.0.0",
41
+ "@atlaskit/tmp-editor-statsig": "^176.0.0",
42
42
  "@atlaskit/tokens": "^16.11.0",
43
43
  "@atlaskit/tooltip": "^24.3.0",
44
44
  "@babel/runtime": "^7.0.0",
@@ -46,7 +46,7 @@
46
46
  "@emotion/react": "^11.7.1"
47
47
  },
48
48
  "peerDependencies": {
49
- "@atlaskit/editor-common": "^120.12.0",
49
+ "@atlaskit/editor-common": "^120.16.0",
50
50
  "react": "^18.2.0 || ^19.2.0",
51
51
  "react-dom": "^18.2.0 || ^19.2.0",
52
52
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"