@atlaskit/editor-plugin-quick-insert 0.1.0

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/.eslintrc.js +14 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE.md +13 -0
  4. package/README.md +30 -0
  5. package/dist/cjs/commands.js +44 -0
  6. package/dist/cjs/index.js +12 -0
  7. package/dist/cjs/plugin-key.js +9 -0
  8. package/dist/cjs/plugin.js +188 -0
  9. package/dist/cjs/search.js +33 -0
  10. package/dist/cjs/ui/ModalElementBrowser/ModalElementBrowser.js +159 -0
  11. package/dist/cjs/ui/ModalElementBrowser/categories.js +100 -0
  12. package/dist/cjs/ui/ModalElementBrowser/index.js +61 -0
  13. package/dist/cjs/ui/ModalElementBrowser/messages.js +15 -0
  14. package/dist/es2019/commands.js +29 -0
  15. package/dist/es2019/index.js +1 -0
  16. package/dist/es2019/plugin-key.js +2 -0
  17. package/dist/es2019/plugin.js +150 -0
  18. package/dist/es2019/search.js +16 -0
  19. package/dist/es2019/ui/ModalElementBrowser/ModalElementBrowser.js +136 -0
  20. package/dist/es2019/ui/ModalElementBrowser/categories.js +94 -0
  21. package/dist/es2019/ui/ModalElementBrowser/index.js +51 -0
  22. package/dist/es2019/ui/ModalElementBrowser/messages.js +8 -0
  23. package/dist/esm/commands.js +35 -0
  24. package/dist/esm/index.js +1 -0
  25. package/dist/esm/plugin-key.js +2 -0
  26. package/dist/esm/plugin.js +180 -0
  27. package/dist/esm/search.js +25 -0
  28. package/dist/esm/ui/ModalElementBrowser/ModalElementBrowser.js +146 -0
  29. package/dist/esm/ui/ModalElementBrowser/categories.js +94 -0
  30. package/dist/esm/ui/ModalElementBrowser/index.js +50 -0
  31. package/dist/esm/ui/ModalElementBrowser/messages.js +8 -0
  32. package/dist/types/commands.d.ts +5 -0
  33. package/dist/types/index.d.ts +2 -0
  34. package/dist/types/plugin-key.d.ts +3 -0
  35. package/dist/types/plugin.d.ts +15 -0
  36. package/dist/types/search.d.ts +5 -0
  37. package/dist/types/ui/ModalElementBrowser/ModalElementBrowser.d.ts +18 -0
  38. package/dist/types/ui/ModalElementBrowser/categories.d.ts +5 -0
  39. package/dist/types/ui/ModalElementBrowser/index.d.ts +11 -0
  40. package/dist/types/ui/ModalElementBrowser/messages.d.ts +7 -0
  41. package/dist/types-ts4.5/commands.d.ts +5 -0
  42. package/dist/types-ts4.5/index.d.ts +2 -0
  43. package/dist/types-ts4.5/plugin-key.d.ts +3 -0
  44. package/dist/types-ts4.5/plugin.d.ts +15 -0
  45. package/dist/types-ts4.5/search.d.ts +5 -0
  46. package/dist/types-ts4.5/ui/ModalElementBrowser/ModalElementBrowser.d.ts +18 -0
  47. package/dist/types-ts4.5/ui/ModalElementBrowser/categories.d.ts +5 -0
  48. package/dist/types-ts4.5/ui/ModalElementBrowser/index.d.ts +11 -0
  49. package/dist/types-ts4.5/ui/ModalElementBrowser/messages.d.ts +7 -0
  50. package/package.json +99 -0
  51. package/report.api.md +63 -0
  52. package/tmp/api-report-tmp.d.ts +33 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,14 @@
1
+ module.exports = {
2
+ rules: {
3
+ '@typescript-eslint/no-duplicate-imports': 'error',
4
+ '@typescript-eslint/no-explicit-any': 'error',
5
+ },
6
+ overrides: [
7
+ {
8
+ files: ['**/__tests__/**/*.{js,ts,tsx}', '**/examples/**/*.{js,ts,tsx}'],
9
+ rules: {
10
+ '@typescript-eslint/no-explicit-any': 'warn',
11
+ },
12
+ },
13
+ ],
14
+ };
package/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ # @atlaskit/editor-plugin-quick-insert
package/LICENSE.md ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Atlassian Pty Ltd
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # Editor plugin quick insert
2
+
3
+ Quick insert plugin for @atlaskit/editor-core
4
+
5
+ **Note:** This component is designed for internal Atlassian development.
6
+ External contributors will be able to use this component but will not be able to submit issues.
7
+
8
+ ## Install
9
+ ---
10
+ - **Install** - *yarn add @atlaskit/editor-plugin-quick-insert*
11
+ - **npm** - [@atlaskit/editor-plugin-quick-insert](https://www.npmjs.com/package/@atlaskit/editor-plugin-quick-insert)
12
+ - **Source** - [Bitbucket](https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/editor/editor-plugin-quick-insert)
13
+ - **Bundle** - [unpkg.com](https://unpkg.com/@atlaskit/editor-plugin-quick-insert/dist/)
14
+
15
+ ## Usage
16
+ ---
17
+ **Internal use only**
18
+
19
+ @atlaskit/editor-plugin-quick-insert is intended for internal use by the @atlaskit/editor-core and as a plugin dependency of the Editor within your product.
20
+
21
+ Direct use of this component is not supported.
22
+
23
+ Please see [Atlaskit - Editor plugin quick insert](https://atlaskit.atlassian.com/packages/editor/editor-plugin-quick-insert) for documentation and examples for this package.
24
+
25
+ ## Support
26
+ ---
27
+ For internal Atlassian, visit the slack channel [#help-editor](https://atlassian.slack.com/archives/CFG3PSQ9E) for support or visit [go/editor-help](https://go/editor-help) to submit a bug.
28
+ ## License
29
+ ---
30
+ Please see [Atlassian Frontend - License](https://developer.atlassian.com/cloud/framework/atlassian-frontend/#license) for more licensing information.
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.openElementBrowserModal = exports.insertItem = exports.closeElementBrowserModal = void 0;
7
+ var _insert = require("@atlaskit/editor-common/insert");
8
+ var _pluginKey = require("./plugin-key");
9
+ var openElementBrowserModal = function openElementBrowserModal(_ref) {
10
+ var tr = _ref.tr;
11
+ return tr.setMeta(_pluginKey.pluginKey, {
12
+ isElementBrowserModalOpen: true
13
+ });
14
+ };
15
+ exports.openElementBrowserModal = openElementBrowserModal;
16
+ var closeElementBrowserModal = function closeElementBrowserModal() {
17
+ return function (state, dispatch) {
18
+ if (dispatch) {
19
+ dispatch(state.tr.setMeta(_pluginKey.pluginKey, {
20
+ isElementBrowserModalOpen: false
21
+ }));
22
+ }
23
+ return true;
24
+ };
25
+ };
26
+
27
+ // this method was adapted from the typeahead plugin so we respect the API for quick insert items
28
+ exports.closeElementBrowserModal = closeElementBrowserModal;
29
+ var insertItem = function insertItem(item) {
30
+ return function (state, dispatch) {
31
+ var insert = function insert(maybeNode) {
32
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
33
+ return (0, _insert.insertSelectedItem)(maybeNode, opts)(state, state.tr, state.selection.head);
34
+ };
35
+ var tr = item.action(insert, state);
36
+
37
+ /** @note There is no transaction when called without a search currently (different insert) */
38
+ if (tr && dispatch) {
39
+ dispatch(tr);
40
+ }
41
+ return true;
42
+ };
43
+ };
44
+ exports.insertItem = insertItem;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "quickInsertPlugin", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _plugin.quickInsertPlugin;
10
+ }
11
+ });
12
+ var _plugin = require("./plugin");
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pluginKey = void 0;
7
+ var _state = require("@atlaskit/editor-prosemirror/state");
8
+ var pluginKey = new _state.PluginKey('quickInsertPluginKey');
9
+ exports.pluginKey = pluginKey;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.quickInsertPlugin = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
13
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
14
+ var _typeAhead = require("@atlaskit/editor-common/type-ahead");
15
+ var _commands = require("./commands");
16
+ var _pluginKey = require("./plugin-key");
17
+ var _search = require("./search");
18
+ var _ModalElementBrowser = _interopRequireDefault(require("./ui/ModalElementBrowser"));
19
+ 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; }
20
+ 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; }
21
+ var quickInsertPlugin = function quickInsertPlugin(_ref) {
22
+ var options = _ref.config,
23
+ api = _ref.api;
24
+ return {
25
+ name: 'quickInsert',
26
+ pmPlugins: function pmPlugins(defaultItems) {
27
+ return [{
28
+ name: 'quickInsert',
29
+ // It's important that this plugin is above TypeAheadPlugin
30
+ plugin: function plugin(_ref2) {
31
+ var providerFactory = _ref2.providerFactory,
32
+ getIntl = _ref2.getIntl,
33
+ dispatch = _ref2.dispatch;
34
+ return quickInsertPluginFactory(defaultItems, providerFactory, getIntl, dispatch, options === null || options === void 0 ? void 0 : options.emptyStateHandler);
35
+ }
36
+ }];
37
+ },
38
+ pluginsOptions: {
39
+ typeAhead: {
40
+ id: _typeAhead.TypeAheadAvailableNodes.QUICK_INSERT,
41
+ trigger: '/',
42
+ headless: options === null || options === void 0 ? void 0 : options.headless,
43
+ getItems: function getItems(_ref3) {
44
+ var query = _ref3.query,
45
+ editorState = _ref3.editorState;
46
+ var quickInsertState = _pluginKey.pluginKey.getState(editorState);
47
+ return Promise.resolve((0, _search.getQuickInsertSuggestions)({
48
+ query: query,
49
+ disableDefaultItems: options === null || options === void 0 ? void 0 : options.disableDefaultItems
50
+ }, quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.lazyDefaultItems, quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.providedItems));
51
+ },
52
+ selectItem: function selectItem(state, item, insert) {
53
+ return item.action(insert, state);
54
+ }
55
+ }
56
+ },
57
+ contentComponent: function contentComponent(_ref4) {
58
+ var editorView = _ref4.editorView;
59
+ if (options !== null && options !== void 0 && options.enableElementBrowser) {
60
+ return /*#__PURE__*/_react.default.createElement(_ModalElementBrowser.default, {
61
+ editorView: editorView,
62
+ helpUrl: options === null || options === void 0 ? void 0 : options.elementBrowserHelpUrl,
63
+ pluginInjectionAPI: api
64
+ });
65
+ }
66
+ return null;
67
+ },
68
+ getSharedState: function getSharedState(editorState) {
69
+ if (!editorState) {
70
+ return null;
71
+ }
72
+ var quickInsertState = _pluginKey.pluginKey.getState(editorState);
73
+ if (!quickInsertState) {
74
+ return null;
75
+ }
76
+ return {
77
+ lazyDefaultItems: quickInsertState.lazyDefaultItems,
78
+ emptyStateHandler: quickInsertState.emptyStateHandler,
79
+ providedItems: quickInsertState.providedItems,
80
+ isElementBrowserModalOpen: quickInsertState.isElementBrowserModalOpen
81
+ };
82
+ },
83
+ actions: {
84
+ insertItem: _commands.insertItem,
85
+ getSuggestions: function getSuggestions(searchOptions) {
86
+ var _api$quickInsert$shar;
87
+ var _ref5 = (_api$quickInsert$shar = api === null || api === void 0 ? void 0 : api.quickInsert.sharedState.currentState()) !== null && _api$quickInsert$shar !== void 0 ? _api$quickInsert$shar : {},
88
+ lazyDefaultItems = _ref5.lazyDefaultItems,
89
+ providedItems = _ref5.providedItems;
90
+ return (0, _search.getQuickInsertSuggestions)(searchOptions, lazyDefaultItems, providedItems);
91
+ }
92
+ },
93
+ commands: {
94
+ openElementBrowserModal: _commands.openElementBrowserModal
95
+ }
96
+ };
97
+ };
98
+ exports.quickInsertPlugin = quickInsertPlugin;
99
+ var setProviderState = function setProviderState(providerState) {
100
+ return function (state, dispatch) {
101
+ if (dispatch) {
102
+ dispatch(state.tr.setMeta(_pluginKey.pluginKey, providerState));
103
+ }
104
+ return true;
105
+ };
106
+ };
107
+ function quickInsertPluginFactory(defaultItems, providerFactory, getIntl, dispatch, emptyStateHandler) {
108
+ return new _safePlugin.SafePlugin({
109
+ key: _pluginKey.pluginKey,
110
+ state: {
111
+ init: function init() {
112
+ return {
113
+ isElementBrowserModalOpen: false,
114
+ emptyStateHandler: emptyStateHandler,
115
+ // lazy so it doesn't run on editor initialization
116
+ // memo here to avoid using a singleton cache, avoids editor
117
+ // getting confused when two editors exist within the same page.
118
+ lazyDefaultItems: function lazyDefaultItems() {
119
+ return (0, _quickInsert.memoProcessQuickInsertItems)(defaultItems || [], getIntl());
120
+ }
121
+ };
122
+ },
123
+ apply: function apply(tr, pluginState) {
124
+ var meta = tr.getMeta(_pluginKey.pluginKey);
125
+ if (meta) {
126
+ var keys = Object.keys(meta);
127
+ var changed = keys.some(function (key) {
128
+ return pluginState[key] !== meta[key];
129
+ });
130
+ if (changed) {
131
+ var newState = _objectSpread(_objectSpread({}, pluginState), meta);
132
+ dispatch(_pluginKey.pluginKey, newState);
133
+ return newState;
134
+ }
135
+ }
136
+ return pluginState;
137
+ }
138
+ },
139
+ view: function view(editorView) {
140
+ var providerHandler = /*#__PURE__*/function () {
141
+ var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(_name, providerPromise) {
142
+ var provider, providedItems;
143
+ return _regenerator.default.wrap(function _callee$(_context) {
144
+ while (1) switch (_context.prev = _context.next) {
145
+ case 0:
146
+ if (!providerPromise) {
147
+ _context.next = 14;
148
+ break;
149
+ }
150
+ _context.prev = 1;
151
+ _context.next = 4;
152
+ return providerPromise;
153
+ case 4:
154
+ provider = _context.sent;
155
+ _context.next = 7;
156
+ return provider.getItems();
157
+ case 7:
158
+ providedItems = _context.sent;
159
+ setProviderState({
160
+ provider: provider,
161
+ providedItems: providedItems
162
+ })(editorView.state, editorView.dispatch);
163
+ _context.next = 14;
164
+ break;
165
+ case 11:
166
+ _context.prev = 11;
167
+ _context.t0 = _context["catch"](1);
168
+ // eslint-disable-next-line no-console
169
+ console.error('Error getting items from quick insert provider', _context.t0);
170
+ case 14:
171
+ case "end":
172
+ return _context.stop();
173
+ }
174
+ }, _callee, null, [[1, 11]]);
175
+ }));
176
+ return function providerHandler(_x, _x2) {
177
+ return _ref6.apply(this, arguments);
178
+ };
179
+ }();
180
+ providerFactory.subscribe('quickInsertProvider', providerHandler);
181
+ return {
182
+ destroy: function destroy() {
183
+ providerFactory.unsubscribe('quickInsertProvider', providerHandler);
184
+ }
185
+ };
186
+ }
187
+ });
188
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getQuickInsertSuggestions = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _quickInsert = require("@atlaskit/editor-common/quick-insert");
10
+ var _utils = require("@atlaskit/editor-common/utils");
11
+ var getQuickInsertSuggestions = function getQuickInsertSuggestions(searchOptions) {
12
+ var lazyDefaultItems = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
13
+ return [];
14
+ };
15
+ var providedItems = arguments.length > 2 ? arguments[2] : undefined;
16
+ var query = searchOptions.query,
17
+ category = searchOptions.category,
18
+ disableDefaultItems = searchOptions.disableDefaultItems,
19
+ featuredItems = searchOptions.featuredItems;
20
+ var defaultItems = disableDefaultItems ? [] : lazyDefaultItems();
21
+ var items = providedItems ? (0, _utils.dedupe)([].concat((0, _toConsumableArray2.default)(defaultItems), (0, _toConsumableArray2.default)(providedItems)), function (item) {
22
+ return item.title;
23
+ }) : defaultItems;
24
+ if (featuredItems) {
25
+ return items.filter(function (item) {
26
+ return item.featured;
27
+ });
28
+ }
29
+ return (0, _quickInsert.find)(query || '', category === 'all' || !category ? items : items.filter(function (item) {
30
+ return item.categories && item.categories.includes(category);
31
+ }));
32
+ };
33
+ exports.getQuickInsertSuggestions = getQuickInsertSuggestions;
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = exports.MODAL_WRAPPER_PADDING = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _react2 = require("@emotion/react");
12
+ var _reactIntlNext = require("react-intl-next");
13
+ var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
14
+ var _elementBrowser = require("@atlaskit/editor-common/element-browser");
15
+ var _questionCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/question-circle"));
16
+ var _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
17
+ var _colors = require("@atlaskit/theme/colors");
18
+ var _components = require("@atlaskit/theme/components");
19
+ var _constants = require("@atlaskit/theme/constants");
20
+ var _categories = require("./categories");
21
+ var _messages = require("./messages");
22
+ 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); }
23
+ 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; }
24
+ /** @jsx jsx */
25
+
26
+ var MODAL_WRAPPER_PADDING = 16;
27
+ exports.MODAL_WRAPPER_PADDING = MODAL_WRAPPER_PADDING;
28
+ var actionsStyles = (0, _react2.css)({
29
+ display: 'inline-flex',
30
+ margin: "0 ".concat("var(--ds-space-negative-050, -4px)")
31
+ });
32
+ var actionItemStyles = (0, _react2.css)({
33
+ flex: '1 0 auto',
34
+ margin: "0 ".concat("var(--ds-space-050, 4px)")
35
+ });
36
+ var wrapperStyles = (0, _react2.css)({
37
+ display: 'flex',
38
+ flex: '1 1 auto',
39
+ boxSizing: 'border-box',
40
+ padding: "var(--ds-space-200, 16px)".concat(" ", "var(--ds-space-200, 16px)", " 0 10px"),
41
+ overflow: 'hidden',
42
+ backgroundColor: "".concat((0, _components.themed)({
43
+ light: "var(--ds-surface-overlay, ".concat(_colors.N0, ")"),
44
+ dark: "var(--ds-surface-overlay, ".concat(_colors.DN50, ")")
45
+ })()),
46
+ borderRadius: "".concat((0, _constants.borderRadius)(), "px")
47
+ });
48
+ var modalFooterStyles = (0, _react2.css)({
49
+ display: 'flex',
50
+ padding: "var(--ds-space-200, 16px)",
51
+ position: 'relative',
52
+ alignItems: 'center',
53
+ justifyContent: 'space-between'
54
+ });
55
+ var ModalElementBrowser = function ModalElementBrowser(props) {
56
+ var _useState = (0, _react.useState)(),
57
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
58
+ selectedItem = _useState2[0],
59
+ setSelectedItem = _useState2[1];
60
+ var helpUrl = props.helpUrl,
61
+ intl = props.intl,
62
+ onClose = props.onClose,
63
+ onInsertItemFn = props.onInsertItem;
64
+ var onSelectItem = (0, _react.useCallback)(function (item) {
65
+ setSelectedItem(item);
66
+ }, [setSelectedItem]);
67
+ var onInsertItem = (0, _react.useCallback)(function (item) {
68
+ onInsertItemFn(item);
69
+ }, [onInsertItemFn]);
70
+ var RenderFooter = (0, _react.useCallback)(function () {
71
+ return (0, _react2.jsx)(Footer, {
72
+ onInsert: function onInsert() {
73
+ return onInsertItem(selectedItem);
74
+ },
75
+ beforeElement: helpUrl ? HelpLink(helpUrl, intl.formatMessage(_messages.messages.help)) : undefined
76
+ });
77
+ }, [onInsertItem, selectedItem, helpUrl, intl]);
78
+
79
+ // Since Modal uses stackIndex it's shouldCloseOnEscapePress prop doesn't work.
80
+ var onKeyDown = (0, _react.useCallback)(function (e) {
81
+ if (e.key === 'Escape') {
82
+ onClose();
83
+ }
84
+ }, [onClose]);
85
+ var RenderBody = (0, _react.useCallback)(function () {
86
+ return (0, _react2.jsx)("div", {
87
+ css: wrapperStyles
88
+ }, (0, _react2.jsx)(_elementBrowser.ElementBrowser, {
89
+ categories: (0, _categories.getCategories)(props.intl),
90
+ getItems: props.getItems,
91
+ showSearch: true,
92
+ showCategories: true,
93
+ mode: "full",
94
+ onSelectItem: onSelectItem,
95
+ onInsertItem: onInsertItem,
96
+ emptyStateHandler: props.emptyStateHandler
97
+ }));
98
+ }, [props.intl, props.getItems, onSelectItem, onInsertItem, props.emptyStateHandler]);
99
+ return (0, _react2.jsx)("div", {
100
+ "data-editor-popup": true,
101
+ onClick: onModalClick,
102
+ onKeyDown: onKeyDown
103
+ }, (0, _react2.jsx)(_modalDialog.ModalTransition, null, props.isOpen && (0, _react2.jsx)(_modalDialog.default, {
104
+ testId: "element-browser-modal-dialog",
105
+ stackIndex: 0,
106
+ key: "element-browser-modal",
107
+ onClose: props.onClose,
108
+ height: "664px",
109
+ width: "x-large",
110
+ autoFocus: false
111
+ // defaults to true and doesn't work along with stackIndex=1.
112
+ // packages/design-system/modal-dialog/src/components/Content.tsx Line 287
113
+ ,
114
+ shouldCloseOnEscapePress: false
115
+ }, (0, _react2.jsx)(RenderBody, null), (0, _react2.jsx)(RenderFooter, null))));
116
+ };
117
+ ModalElementBrowser.displayName = 'ModalElementBrowser';
118
+
119
+ // Prevent ModalElementBrowser click propagation through to the editor.
120
+ var onModalClick = function onModalClick(e) {
121
+ return e.stopPropagation();
122
+ };
123
+ var Footer = function Footer(_ref) {
124
+ var onInsert = _ref.onInsert,
125
+ beforeElement = _ref.beforeElement;
126
+ var _useModal = (0, _modalDialog.useModal)(),
127
+ onClose = _useModal.onClose;
128
+ return (0, _react2.jsx)("div", {
129
+ css: modalFooterStyles
130
+ }, beforeElement ? beforeElement : (0, _react2.jsx)("span", null), (0, _react2.jsx)("div", {
131
+ css: actionsStyles
132
+ }, (0, _react2.jsx)("div", {
133
+ css: actionItemStyles
134
+ }, (0, _react2.jsx)(_customThemeButton.default, {
135
+ appearance: "primary",
136
+ onClick: onInsert,
137
+ testId: "ModalElementBrowser__insert-button"
138
+ }, "Insert")), (0, _react2.jsx)("div", {
139
+ css: actionItemStyles
140
+ }, (0, _react2.jsx)(_customThemeButton.default, {
141
+ appearance: "subtle",
142
+ onClick: onClose,
143
+ testId: "ModalElementBrowser__close-button"
144
+ }, "Close"))));
145
+ };
146
+ var HelpLink = function HelpLink(url, helpText) {
147
+ return (0, _react2.jsx)(_customThemeButton.default, {
148
+ iconBefore: (0, _react2.jsx)(_questionCircle.default, {
149
+ label: "",
150
+ size: "medium"
151
+ }),
152
+ appearance: "subtle-link",
153
+ href: url,
154
+ target: "_blank",
155
+ testId: "ModalElementBrowser__help-button"
156
+ }, helpText);
157
+ };
158
+ var _default = (0, _reactIntlNext.injectIntl)(ModalElementBrowser);
159
+ exports.default = _default;
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCategories = getCategories;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ function getCategories(intl) {
9
+ return [{
10
+ title: intl.formatMessage(messages.all),
11
+ name: 'all'
12
+ }, {
13
+ title: intl.formatMessage(messages.formatting),
14
+ name: 'formatting'
15
+ }, {
16
+ title: intl.formatMessage(messages['confluence-content']),
17
+ name: 'confluence-content'
18
+ }, {
19
+ title: intl.formatMessage(messages.media),
20
+ name: 'media'
21
+ }, {
22
+ title: intl.formatMessage(messages.visuals),
23
+ name: 'visuals'
24
+ }, {
25
+ title: intl.formatMessage(messages.navigation),
26
+ name: 'navigation'
27
+ }, {
28
+ title: intl.formatMessage(messages['external-content']),
29
+ name: 'external-content'
30
+ }, {
31
+ title: intl.formatMessage(messages.communication),
32
+ name: 'communication'
33
+ }, {
34
+ title: intl.formatMessage(messages.reporting),
35
+ name: 'reporting'
36
+ }, {
37
+ title: intl.formatMessage(messages.admin),
38
+ name: 'admin'
39
+ }, {
40
+ title: intl.formatMessage(messages.development),
41
+ name: 'development'
42
+ }];
43
+ }
44
+ var messages = (0, _reactIntlNext.defineMessages)({
45
+ all: {
46
+ id: 'fabric.editor.elementbrowser.categorylist.category-all',
47
+ defaultMessage: 'All',
48
+ description: 'all'
49
+ },
50
+ formatting: {
51
+ id: 'fabric.editor.elementbrowser.categorylist.category-formatting',
52
+ defaultMessage: 'Formatting',
53
+ description: 'formatting'
54
+ },
55
+ 'confluence-content': {
56
+ id: 'fabric.editor.elementbrowser.categorylist.category-confluence-content',
57
+ defaultMessage: 'Confluence content',
58
+ description: 'confluence-content'
59
+ },
60
+ media: {
61
+ id: 'fabric.editor.elementbrowser.categorylist.category-media',
62
+ defaultMessage: 'Media',
63
+ description: 'media'
64
+ },
65
+ visuals: {
66
+ id: 'fabric.editor.elementbrowser.categorylist.category-visuals',
67
+ defaultMessage: 'Visuals & images',
68
+ description: 'visuals'
69
+ },
70
+ navigation: {
71
+ id: 'fabric.editor.elementbrowser.categorylist.category-navigation',
72
+ defaultMessage: 'Navigation',
73
+ description: 'navigation'
74
+ },
75
+ 'external-content': {
76
+ id: 'fabric.editor.elementbrowser.categorylist.category-external-content',
77
+ defaultMessage: 'External content',
78
+ description: 'external-content'
79
+ },
80
+ communication: {
81
+ id: 'fabric.editor.elementbrowser.categorylist.category-communication',
82
+ defaultMessage: 'Communication',
83
+ description: 'communication'
84
+ },
85
+ reporting: {
86
+ id: 'fabric.editor.elementbrowser.categorylist.category-reporting',
87
+ defaultMessage: 'Reporting',
88
+ description: 'reporting'
89
+ },
90
+ admin: {
91
+ id: 'fabric.editor.elementbrowser.categorylist.category-admin',
92
+ defaultMessage: 'Administration',
93
+ description: 'admin'
94
+ },
95
+ development: {
96
+ id: 'fabric.editor.elementbrowser.categorylist.category-development',
97
+ defaultMessage: 'Development',
98
+ description: 'development'
99
+ }
100
+ });
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _hooks = require("@atlaskit/editor-common/hooks");
11
+ var _commands = require("../../commands");
12
+ var _search = require("../../search");
13
+ var _ModalElementBrowser = _interopRequireDefault(require("./ModalElementBrowser"));
14
+ 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); }
15
+ 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; }
16
+ var Modal = function Modal(_ref) {
17
+ var quickInsertState = _ref.quickInsertState,
18
+ editorView = _ref.editorView,
19
+ helpUrl = _ref.helpUrl;
20
+ var getItems = (0, _react.useCallback)(function (query, category) {
21
+ return (0, _search.getQuickInsertSuggestions)({
22
+ query: query,
23
+ category: category
24
+ }, quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.lazyDefaultItems, quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.providedItems);
25
+ }, [quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.lazyDefaultItems, quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.providedItems]);
26
+ var focusInEditor = (0, _react.useCallback)(function () {
27
+ if (!editorView.hasFocus()) {
28
+ editorView.focus();
29
+ }
30
+ }, [editorView]);
31
+ var onInsertItem = (0, _react.useCallback)(function (item) {
32
+ (0, _commands.closeElementBrowserModal)()(editorView.state, editorView.dispatch);
33
+ focusInEditor();
34
+ (0, _commands.insertItem)(item)(editorView.state, editorView.dispatch);
35
+ }, [editorView, focusInEditor]);
36
+ var onClose = (0, _react.useCallback)(function () {
37
+ (0, _commands.closeElementBrowserModal)()(editorView.state, editorView.dispatch);
38
+ focusInEditor();
39
+ }, [editorView, focusInEditor]);
40
+ return /*#__PURE__*/_react.default.createElement(_ModalElementBrowser.default, {
41
+ getItems: getItems,
42
+ onInsertItem: onInsertItem,
43
+ helpUrl: helpUrl,
44
+ isOpen: (quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.isElementBrowserModalOpen) || false,
45
+ emptyStateHandler: quickInsertState === null || quickInsertState === void 0 ? void 0 : quickInsertState.emptyStateHandler,
46
+ onClose: onClose
47
+ });
48
+ };
49
+ var _default = function _default(_ref2) {
50
+ var editorView = _ref2.editorView,
51
+ helpUrl = _ref2.helpUrl,
52
+ pluginInjectionAPI = _ref2.pluginInjectionAPI;
53
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(pluginInjectionAPI, ['quickInsert']),
54
+ quickInsertState = _useSharedPluginState.quickInsertState;
55
+ return /*#__PURE__*/_react.default.createElement(Modal, {
56
+ quickInsertState: quickInsertState !== null && quickInsertState !== void 0 ? quickInsertState : undefined,
57
+ editorView: editorView,
58
+ helpUrl: helpUrl
59
+ });
60
+ };
61
+ exports.default = _default;