@atlaskit/editor-common 93.1.5 → 93.2.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.
- package/CHANGELOG.md +39 -0
- package/afm-cc/tsconfig.json +3 -0
- package/afm-jira/tsconfig.json +3 -0
- package/afm-post-office/tsconfig.json +3 -0
- package/dist/cjs/analytics/types/engagement-platform-events.js +5 -0
- package/dist/cjs/analytics/types/enums.js +2 -0
- package/dist/cjs/element-browser/components/StatelessElementBrowser.js +1 -2
- package/dist/cjs/extensibility/ExtensionComponent.js +263 -10
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/cjs/ui/FloatingToolbar/Button.js +6 -2
- package/dist/cjs/ui/Mention/index.js +15 -3
- package/dist/cjs/ui/Mention/mention-with-providers.js +58 -8
- package/dist/cjs/ui/Pulse/Pulse.js +36 -0
- package/dist/cjs/ui-menu/ArrowKeyNavigationProvider/MenuArrowKeyNavigationProvider/index.js +2 -11
- package/dist/cjs/ui-menu/DropdownMenu/index.js +5 -20
- package/dist/cjs/ui-menu/ToolbarArrowKeyNavigationProvider/index.js +5 -9
- package/dist/es2019/analytics/types/engagement-platform-events.js +1 -0
- package/dist/es2019/analytics/types/enums.js +2 -0
- package/dist/es2019/element-browser/components/StatelessElementBrowser.js +1 -2
- package/dist/es2019/extensibility/ExtensionComponent.js +231 -3
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/es2019/ui/FloatingToolbar/Button.js +6 -2
- package/dist/es2019/ui/Mention/index.js +15 -2
- package/dist/es2019/ui/Mention/mention-with-providers.js +49 -2
- package/dist/es2019/ui/Pulse/Pulse.js +29 -0
- package/dist/es2019/ui-menu/ArrowKeyNavigationProvider/MenuArrowKeyNavigationProvider/index.js +2 -11
- package/dist/es2019/ui-menu/DropdownMenu/index.js +5 -20
- package/dist/es2019/ui-menu/ToolbarArrowKeyNavigationProvider/index.js +5 -9
- package/dist/esm/analytics/types/engagement-platform-events.js +1 -0
- package/dist/esm/analytics/types/enums.js +2 -0
- package/dist/esm/element-browser/components/StatelessElementBrowser.js +1 -2
- package/dist/esm/extensibility/ExtensionComponent.js +266 -9
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/esm/ui/FloatingToolbar/Button.js +6 -2
- package/dist/esm/ui/Mention/index.js +15 -2
- package/dist/esm/ui/Mention/mention-with-providers.js +59 -10
- package/dist/esm/ui/Pulse/Pulse.js +29 -0
- package/dist/esm/ui-menu/ArrowKeyNavigationProvider/MenuArrowKeyNavigationProvider/index.js +2 -11
- package/dist/esm/ui-menu/DropdownMenu/index.js +5 -20
- package/dist/esm/ui-menu/ToolbarArrowKeyNavigationProvider/index.js +5 -9
- package/dist/types/analytics/types/engagement-platform-events.d.ts +20 -0
- package/dist/types/analytics/types/enums.d.ts +3 -1
- package/dist/types/analytics/types/events.d.ts +2 -1
- package/dist/types/analytics/types/general-events.d.ts +7 -1
- package/dist/types/extensibility/ExtensionComponent.d.ts +7 -1
- package/dist/types/types/floating-toolbar.d.ts +4 -0
- package/dist/types/ui/FloatingToolbar/Button.d.ts +3 -1
- package/dist/types/ui/Mention/mention-with-providers.d.ts +2 -1
- package/dist/types/ui/Pulse/Pulse.d.ts +18 -0
- package/dist/types-ts4.5/analytics/types/engagement-platform-events.d.ts +20 -0
- package/dist/types-ts4.5/analytics/types/enums.d.ts +3 -1
- package/dist/types-ts4.5/analytics/types/events.d.ts +2 -1
- package/dist/types-ts4.5/analytics/types/general-events.d.ts +7 -1
- package/dist/types-ts4.5/extensibility/ExtensionComponent.d.ts +7 -1
- package/dist/types-ts4.5/types/floating-toolbar.d.ts +4 -0
- package/dist/types-ts4.5/ui/FloatingToolbar/Button.d.ts +3 -1
- package/dist/types-ts4.5/ui/Mention/mention-with-providers.d.ts +2 -1
- package/dist/types-ts4.5/ui/Pulse/Pulse.d.ts +18 -0
- package/package.json +11 -10
|
@@ -195,9 +195,9 @@ export default class DropdownMenuWrapper extends PureComponent {
|
|
|
195
195
|
shouldFitContainer: true,
|
|
196
196
|
isTriggerNotTabbable: true,
|
|
197
197
|
handleClickOutside: this.handleClose,
|
|
198
|
-
handleEscapeKeydown:
|
|
198
|
+
handleEscapeKeydown: handleEscapeKeydown || this.handleCloseAndFocus,
|
|
199
199
|
handleEnterKeydown: e => {
|
|
200
|
-
if (fg('platform_editor_a11y_table_context_menu')
|
|
200
|
+
if (fg('platform_editor_a11y_table_context_menu')) {
|
|
201
201
|
if (!allowEnterDefaultBehavior) {
|
|
202
202
|
e.preventDefault();
|
|
203
203
|
}
|
|
@@ -305,27 +305,12 @@ export function DropdownMenuItem({
|
|
|
305
305
|
const _handleSubmenuActive = event => {
|
|
306
306
|
setSubmenuActive(Boolean(event.target instanceof HTMLElement && event.target.closest(`.${DropdownMenuSharedCssClassName.SUBMENU}`)));
|
|
307
307
|
};
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
ariaLabel = item['aria-label'] === '' ? undefined : item['aria-label'] || String(item.content);
|
|
311
|
-
} else {
|
|
312
|
-
ariaLabel = item['aria-label'] || String(item.content);
|
|
313
|
-
}
|
|
314
|
-
let testId;
|
|
315
|
-
if (fg('platform-editor-a11y-image-border-options-dropdown')) {
|
|
316
|
-
testId = item['data-testid'] || `dropdown-item__${item.content}`;
|
|
317
|
-
} else {
|
|
318
|
-
testId = `dropdown-item__${String(item.content)}`;
|
|
319
|
-
}
|
|
308
|
+
const ariaLabel = item['aria-label'] === '' ? undefined : item['aria-label'] || String(item.content);
|
|
309
|
+
const testId = item['data-testid'] || `dropdown-item__${item.content}`;
|
|
320
310
|
|
|
321
311
|
// From time to time we don't want to have any tabIndex on item wrapper
|
|
322
312
|
// especially when we pass any interactive element as a item.content
|
|
323
|
-
|
|
324
|
-
if (fg('platform-editor-a11y-image-border-options-dropdown')) {
|
|
325
|
-
tabIndex = item.wrapperTabIndex === null ? undefined : item.wrapperTabIndex || -1;
|
|
326
|
-
} else {
|
|
327
|
-
tabIndex = -1;
|
|
328
|
-
}
|
|
313
|
+
const tabIndex = item.wrapperTabIndex === null ? undefined : item.wrapperTabIndex || -1;
|
|
329
314
|
const dropListItem = jsx("div", {
|
|
330
315
|
css: () => buttonStyles(item.isActive, submenuActive),
|
|
331
316
|
tabIndex: tabIndex,
|
|
@@ -8,7 +8,6 @@ import React, { useCallback, useLayoutEffect, useRef } from 'react';
|
|
|
8
8
|
|
|
9
9
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
10
10
|
import { css, jsx } from '@emotion/react';
|
|
11
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
12
11
|
import { ELEMENT_BROWSER_ID } from '../../element-browser';
|
|
13
12
|
import { fullPageMessages as messages } from '../../messages';
|
|
14
13
|
import { EDIT_AREA_ID } from '../../ui';
|
|
@@ -115,7 +114,7 @@ export const ToolbarArrowKeyNavigationProvider = ({
|
|
|
115
114
|
* @param event
|
|
116
115
|
*/
|
|
117
116
|
const handleKeyDown = event => {
|
|
118
|
-
var _document$querySelect, _document$querySelect2, _wrapperRef$current2;
|
|
117
|
+
var _document$querySelect, _document$querySelect2, _wrapperRef$current, _wrapperRef$current2;
|
|
119
118
|
// To trap the focus inside the horizontal toolbar for left and right arrow keys
|
|
120
119
|
const targetElement = event.target;
|
|
121
120
|
if (targetElement instanceof HTMLElement && !targetElement.closest(`${childComponentSelector}`)) {
|
|
@@ -129,13 +128,10 @@ export const ToolbarArrowKeyNavigationProvider = ({
|
|
|
129
128
|
// if menu wrapper exists, then a menu is open and arrow keys will be handled by MenuArrowKeyNavigationProvider
|
|
130
129
|
return;
|
|
131
130
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
// if element browser is open, then arrow keys will be handled by MenuArrowKeyNavigationProvider
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
131
|
+
const elementBrowser = wrapperRef === null || wrapperRef === void 0 ? void 0 : (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.querySelector(`#${ELEMENT_BROWSER_ID}`);
|
|
132
|
+
if (elementBrowser) {
|
|
133
|
+
// if element browser is open, then arrow keys will be handled by MenuArrowKeyNavigationProvider
|
|
134
|
+
return;
|
|
139
135
|
}
|
|
140
136
|
const filteredFocusableElements = getFilteredFocusableElements(wrapperRef === null || wrapperRef === void 0 ? void 0 : wrapperRef.current);
|
|
141
137
|
if (!filteredFocusableElements || (filteredFocusableElements === null || filteredFocusableElements === void 0 ? void 0 : filteredFocusableElements.length) === 0) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -253,6 +253,7 @@ export var ACTION_SUBJECT = /*#__PURE__*/function (ACTION_SUBJECT) {
|
|
|
253
253
|
ACTION_SUBJECT["ELEMENT"] = "element";
|
|
254
254
|
ACTION_SUBJECT["CONTEXT_MENU"] = "contextMenu";
|
|
255
255
|
ACTION_SUBJECT["INLINE_DIALOG"] = "inlineDialog";
|
|
256
|
+
ACTION_SUBJECT["ENGAGEMENT_PLATFORM"] = "engagementPlatform";
|
|
256
257
|
return ACTION_SUBJECT;
|
|
257
258
|
}({});
|
|
258
259
|
export var ACTION_SUBJECT_ID = /*#__PURE__*/function (ACTION_SUBJECT_ID) {
|
|
@@ -274,6 +275,7 @@ export var ACTION_SUBJECT_ID = /*#__PURE__*/function (ACTION_SUBJECT_ID) {
|
|
|
274
275
|
ACTION_SUBJECT_ID["CODE_BLOCK"] = "codeBlock";
|
|
275
276
|
ACTION_SUBJECT_ID["CODEBLOCK_COPY"] = "codeBlockCopy";
|
|
276
277
|
ACTION_SUBJECT_ID["CODEBLOCK_WRAP"] = "codeBlockWrap";
|
|
278
|
+
ACTION_SUBJECT_ID["COPY_LINK_TO_ANCHOR"] = "copyLinkToAnchor";
|
|
277
279
|
ACTION_SUBJECT_ID["CREATE_INLINE_COMMENT_FROM_HIGHLIGHT_ACTIONS_MENU"] = "createInlineCommentFromHighlightActionsMenu";
|
|
278
280
|
ACTION_SUBJECT_ID["DATE"] = "date";
|
|
279
281
|
ACTION_SUBJECT_ID["DATE_DAY"] = "day";
|
|
@@ -11,7 +11,6 @@ import { css, jsx } from '@emotion/react';
|
|
|
11
11
|
import { FormattedMessage } from 'react-intl-next';
|
|
12
12
|
import withAnalyticsContext from '@atlaskit/analytics-next/withAnalyticsContext';
|
|
13
13
|
import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
|
|
14
|
-
import { fg } from '@atlaskit/platform-feature-flags';
|
|
15
14
|
import { ACTION, ACTION_SUBJECT, EVENT_TYPE, fireAnalyticsEvent } from '../../analytics';
|
|
16
15
|
import { DEVICE_BREAKPOINT_NUMBERS, ELEMENT_BROWSER_ID, GRID_SIZE, INLINE_SIDEBAR_HEIGHT, SIDEBAR_HEADING_WRAPPER_HEIGHT, SIDEBAR_WIDTH } from '../constants';
|
|
17
16
|
import useContainerWidth from '../hooks/use-container-width';
|
|
@@ -215,7 +214,7 @@ function StatelessElementBrowser(props) {
|
|
|
215
214
|
return jsx("div", {
|
|
216
215
|
css: wrapper,
|
|
217
216
|
"data-testid": "element-browser",
|
|
218
|
-
id:
|
|
217
|
+
id: ELEMENT_BROWSER_ID
|
|
219
218
|
}, jsx(ContainerWidthMonitor, null), containerWidth < DEVICE_BREAKPOINT_NUMBERS.medium ? jsx(MobileBrowser, _extends({}, props, {
|
|
220
219
|
selectedItemIndex: selectedItemIndex,
|
|
221
220
|
focusedItemIndex: focusedItemIndex,
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
1
4
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
5
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
6
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
@@ -6,23 +9,31 @@ import _inherits from "@babel/runtime/helpers/inherits";
|
|
|
6
9
|
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
7
10
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
8
11
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
12
|
+
var _excluded = ["extensionProvider"];
|
|
9
13
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
10
14
|
function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
|
|
11
15
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
12
|
-
|
|
16
|
+
/* eslint-disable @repo/internal/react/no-class-components */
|
|
17
|
+
import React, { Component, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
13
18
|
import memoizeOne from 'memoize-one';
|
|
14
19
|
import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
|
|
20
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
15
21
|
import { getExtensionModuleNodePrivateProps, getNodeRenderer } from '../extensions';
|
|
16
22
|
import { getExtensionRenderer } from '../utils';
|
|
17
23
|
import Extension from './Extension/Extension';
|
|
18
24
|
import InlineExtension from './Extension/InlineExtension';
|
|
19
25
|
import MultiBodiedExtension from './MultiBodiedExtension';
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
|
|
27
|
+
/* temporary type until FG cleaned up */
|
|
28
|
+
|
|
29
|
+
/* temporary type until FG cleaned up */
|
|
30
|
+
|
|
31
|
+
export var ExtensionComponentOld = /*#__PURE__*/function (_Component) {
|
|
32
|
+
_inherits(ExtensionComponentOld, _Component);
|
|
33
|
+
var _super = _createSuper(ExtensionComponentOld);
|
|
34
|
+
function ExtensionComponentOld() {
|
|
24
35
|
var _this;
|
|
25
|
-
_classCallCheck(this,
|
|
36
|
+
_classCallCheck(this, ExtensionComponentOld);
|
|
26
37
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
27
38
|
args[_key] = arguments[_key];
|
|
28
39
|
}
|
|
@@ -146,7 +157,7 @@ export var ExtensionComponent = /*#__PURE__*/function (_Component) {
|
|
|
146
157
|
});
|
|
147
158
|
return _this;
|
|
148
159
|
}
|
|
149
|
-
_createClass(
|
|
160
|
+
_createClass(ExtensionComponentOld, [{
|
|
150
161
|
key: "UNSAFE_componentWillMount",
|
|
151
162
|
value: function UNSAFE_componentWillMount() {
|
|
152
163
|
this.mounted = true;
|
|
@@ -264,5 +275,251 @@ export var ExtensionComponent = /*#__PURE__*/function (_Component) {
|
|
|
264
275
|
return null;
|
|
265
276
|
}
|
|
266
277
|
}]);
|
|
267
|
-
return
|
|
268
|
-
}(Component);
|
|
278
|
+
return ExtensionComponentOld;
|
|
279
|
+
}(Component);
|
|
280
|
+
export var ExtensionComponentNew = function ExtensionComponentNew(props) {
|
|
281
|
+
var extensionProviderResolver = props.extensionProvider,
|
|
282
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
283
|
+
var _useState = useState(undefined),
|
|
284
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
285
|
+
extensionProvider = _useState2[0],
|
|
286
|
+
setExtensionProvider = _useState2[1];
|
|
287
|
+
var mountedRef = useRef(true);
|
|
288
|
+
useLayoutEffect(function () {
|
|
289
|
+
mountedRef.current = true;
|
|
290
|
+
return function () {
|
|
291
|
+
mountedRef.current = false;
|
|
292
|
+
};
|
|
293
|
+
}, []);
|
|
294
|
+
useEffect(function () {
|
|
295
|
+
extensionProviderResolver === null || extensionProviderResolver === void 0 || extensionProviderResolver.then(function (provider) {
|
|
296
|
+
if (mountedRef.current) {
|
|
297
|
+
setExtensionProvider(provider);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}, [extensionProviderResolver]);
|
|
301
|
+
return /*#__PURE__*/React.createElement(ExtensionComponentInner, _extends({}, restProps, {
|
|
302
|
+
extensionProvider: extensionProvider
|
|
303
|
+
}));
|
|
304
|
+
};
|
|
305
|
+
var ExtensionComponentInner = /*#__PURE__*/function (_Component2) {
|
|
306
|
+
_inherits(ExtensionComponentInner, _Component2);
|
|
307
|
+
var _super2 = _createSuper(ExtensionComponentInner);
|
|
308
|
+
function ExtensionComponentInner() {
|
|
309
|
+
var _this2;
|
|
310
|
+
_classCallCheck(this, ExtensionComponentInner);
|
|
311
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
312
|
+
args[_key2] = arguments[_key2];
|
|
313
|
+
}
|
|
314
|
+
_this2 = _super2.call.apply(_super2, [this].concat(args));
|
|
315
|
+
_defineProperty(_assertThisInitialized(_this2), "privatePropsParsed", false);
|
|
316
|
+
_defineProperty(_assertThisInitialized(_this2), "state", {});
|
|
317
|
+
// memoized to avoid rerender on extension state changes
|
|
318
|
+
_defineProperty(_assertThisInitialized(_this2), "getNodeRenderer", memoizeOne(getNodeRenderer));
|
|
319
|
+
_defineProperty(_assertThisInitialized(_this2), "getExtensionModuleNodePrivateProps", memoizeOne(getExtensionModuleNodePrivateProps));
|
|
320
|
+
_defineProperty(_assertThisInitialized(_this2), "setIsNodeHovered", function (isHovered) {
|
|
321
|
+
_this2.setState({
|
|
322
|
+
isNodeHovered: isHovered
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
/**
|
|
326
|
+
* Parses any private nodes once an extension provider is available.
|
|
327
|
+
*
|
|
328
|
+
* We do this separately from resolving a node renderer component since the
|
|
329
|
+
* private props come from extension provider, rather than an extension
|
|
330
|
+
* handler which only handles `render`/component concerns.
|
|
331
|
+
*/
|
|
332
|
+
_defineProperty(_assertThisInitialized(_this2), "parsePrivateNodePropsIfNeeded", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
333
|
+
var _this2$props$node$att, extensionType, extensionKey, privateProps;
|
|
334
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
335
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
336
|
+
case 0:
|
|
337
|
+
if (!(_this2.privatePropsParsed || !_this2.props.extensionProvider)) {
|
|
338
|
+
_context2.next = 2;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
return _context2.abrupt("return");
|
|
342
|
+
case 2:
|
|
343
|
+
_this2.privatePropsParsed = true;
|
|
344
|
+
_this2$props$node$att = _this2.props.node.attrs, extensionType = _this2$props$node$att.extensionType, extensionKey = _this2$props$node$att.extensionKey;
|
|
345
|
+
/**
|
|
346
|
+
* getExtensionModuleNodePrivateProps can throw if there are issues in the
|
|
347
|
+
* manifest
|
|
348
|
+
*/
|
|
349
|
+
_context2.prev = 4;
|
|
350
|
+
_context2.next = 7;
|
|
351
|
+
return _this2.getExtensionModuleNodePrivateProps(_this2.props.extensionProvider, extensionType, extensionKey);
|
|
352
|
+
case 7:
|
|
353
|
+
privateProps = _context2.sent;
|
|
354
|
+
_this2.setState({
|
|
355
|
+
_privateProps: privateProps
|
|
356
|
+
});
|
|
357
|
+
_context2.next = 14;
|
|
358
|
+
break;
|
|
359
|
+
case 11:
|
|
360
|
+
_context2.prev = 11;
|
|
361
|
+
_context2.t0 = _context2["catch"](4);
|
|
362
|
+
// eslint-disable-next-line no-console
|
|
363
|
+
console.error('Provided extension handler has thrown an error\n', _context2.t0);
|
|
364
|
+
/** We don't want this error to block renderer */
|
|
365
|
+
/** We keep rendering the default content */
|
|
366
|
+
case 14:
|
|
367
|
+
case "end":
|
|
368
|
+
return _context2.stop();
|
|
369
|
+
}
|
|
370
|
+
}, _callee2, null, [[4, 11]]);
|
|
371
|
+
})));
|
|
372
|
+
_defineProperty(_assertThisInitialized(_this2), "handleExtension", function (pmNode, actions) {
|
|
373
|
+
var _pmNode$marks2;
|
|
374
|
+
var _this2$props = _this2.props,
|
|
375
|
+
extensionHandlers = _this2$props.extensionHandlers,
|
|
376
|
+
editorView = _this2$props.editorView;
|
|
377
|
+
var _pmNode$attrs2 = pmNode.attrs,
|
|
378
|
+
extensionType = _pmNode$attrs2.extensionType,
|
|
379
|
+
extensionKey = _pmNode$attrs2.extensionKey,
|
|
380
|
+
parameters = _pmNode$attrs2.parameters,
|
|
381
|
+
text = _pmNode$attrs2.text;
|
|
382
|
+
var isBodiedExtension = pmNode.type.name === 'bodiedExtension';
|
|
383
|
+
if (isBodiedExtension) {
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
var fragmentLocalId = pmNode === null || pmNode === void 0 || (_pmNode$marks2 = pmNode.marks) === null || _pmNode$marks2 === void 0 || (_pmNode$marks2 = _pmNode$marks2.find(function (m) {
|
|
387
|
+
return m.type.name === 'fragment';
|
|
388
|
+
})) === null || _pmNode$marks2 === void 0 || (_pmNode$marks2 = _pmNode$marks2.attrs) === null || _pmNode$marks2 === void 0 ? void 0 : _pmNode$marks2.localId;
|
|
389
|
+
var node = {
|
|
390
|
+
type: pmNode.type.name,
|
|
391
|
+
extensionType: extensionType,
|
|
392
|
+
extensionKey: extensionKey,
|
|
393
|
+
parameters: parameters,
|
|
394
|
+
content: text,
|
|
395
|
+
localId: pmNode.attrs.localId,
|
|
396
|
+
fragmentLocalId: fragmentLocalId
|
|
397
|
+
};
|
|
398
|
+
var result;
|
|
399
|
+
if (extensionHandlers && extensionHandlers[extensionType]) {
|
|
400
|
+
var render = getExtensionRenderer(extensionHandlers[extensionType]);
|
|
401
|
+
result = render(node, editorView.state.doc, actions);
|
|
402
|
+
}
|
|
403
|
+
if (!result) {
|
|
404
|
+
var extensionHandlerFromProvider = _this2.props.extensionProvider && _this2.getNodeRenderer(_this2.props.extensionProvider, extensionType, extensionKey);
|
|
405
|
+
if (extensionHandlerFromProvider) {
|
|
406
|
+
var NodeRenderer = extensionHandlerFromProvider;
|
|
407
|
+
if (node.type === 'multiBodiedExtension') {
|
|
408
|
+
return /*#__PURE__*/React.createElement(NodeRenderer, {
|
|
409
|
+
node: node,
|
|
410
|
+
references: _this2.props.references,
|
|
411
|
+
actions: actions
|
|
412
|
+
});
|
|
413
|
+
} else {
|
|
414
|
+
return /*#__PURE__*/React.createElement(NodeRenderer, {
|
|
415
|
+
node: node,
|
|
416
|
+
references: _this2.props.references
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return result;
|
|
422
|
+
});
|
|
423
|
+
return _this2;
|
|
424
|
+
}
|
|
425
|
+
_createClass(ExtensionComponentInner, [{
|
|
426
|
+
key: "componentDidUpdate",
|
|
427
|
+
value: function componentDidUpdate() {
|
|
428
|
+
this.parsePrivateNodePropsIfNeeded();
|
|
429
|
+
}
|
|
430
|
+
}, {
|
|
431
|
+
key: "render",
|
|
432
|
+
value: function render() {
|
|
433
|
+
var _this$state$_privateP2;
|
|
434
|
+
var _this$props3 = this.props,
|
|
435
|
+
node = _this$props3.node,
|
|
436
|
+
handleContentDOMRef = _this$props3.handleContentDOMRef,
|
|
437
|
+
editorView = _this$props3.editorView,
|
|
438
|
+
references = _this$props3.references,
|
|
439
|
+
editorAppearance = _this$props3.editorAppearance,
|
|
440
|
+
pluginInjectionApi = _this$props3.pluginInjectionApi,
|
|
441
|
+
getPos = _this$props3.getPos,
|
|
442
|
+
eventDispatcher = _this$props3.eventDispatcher,
|
|
443
|
+
macroInteractionDesignFeatureFlags = _this$props3.macroInteractionDesignFeatureFlags,
|
|
444
|
+
extensionProvider = _this$props3.extensionProvider;
|
|
445
|
+
var selection = editorView.state.selection;
|
|
446
|
+
var selectedNode = selection instanceof NodeSelection && selection.node;
|
|
447
|
+
var position = typeof getPos === 'function' && getPos();
|
|
448
|
+
var resolvedPosition = position && editorView.state.doc.resolve(position);
|
|
449
|
+
var isNodeNested = !!(resolvedPosition && resolvedPosition.depth > 0);
|
|
450
|
+
if (node.type.name === 'multiBodiedExtension') {
|
|
451
|
+
return /*#__PURE__*/React.createElement(MultiBodiedExtension, {
|
|
452
|
+
node: node,
|
|
453
|
+
editorView: editorView,
|
|
454
|
+
getPos: getPos,
|
|
455
|
+
handleContentDOMRef: handleContentDOMRef,
|
|
456
|
+
tryExtensionHandler: this.tryExtensionHandler.bind(this),
|
|
457
|
+
eventDispatcher: eventDispatcher,
|
|
458
|
+
pluginInjectionApi: pluginInjectionApi,
|
|
459
|
+
editorAppearance: editorAppearance,
|
|
460
|
+
macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
|
|
461
|
+
isNodeSelected: selectedNode === node,
|
|
462
|
+
isNodeNested: isNodeNested,
|
|
463
|
+
isNodeHovered: this.state.isNodeHovered,
|
|
464
|
+
setIsNodeHovered: this.setIsNodeHovered
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
var extensionHandlerResult = this.tryExtensionHandler(undefined);
|
|
468
|
+
switch (node.type.name) {
|
|
469
|
+
case 'extension':
|
|
470
|
+
case 'bodiedExtension':
|
|
471
|
+
return /*#__PURE__*/React.createElement(Extension, {
|
|
472
|
+
node: node,
|
|
473
|
+
getPos: this.props.getPos,
|
|
474
|
+
references: references,
|
|
475
|
+
extensionProvider: extensionProvider,
|
|
476
|
+
handleContentDOMRef: handleContentDOMRef,
|
|
477
|
+
view: editorView,
|
|
478
|
+
editorAppearance: editorAppearance,
|
|
479
|
+
hideFrame: (_this$state$_privateP2 = this.state._privateProps) === null || _this$state$_privateP2 === void 0 ? void 0 : _this$state$_privateP2.__hideFrame,
|
|
480
|
+
pluginInjectionApi: pluginInjectionApi,
|
|
481
|
+
macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
|
|
482
|
+
isNodeSelected: selectedNode === node,
|
|
483
|
+
isNodeHovered: this.state.isNodeHovered,
|
|
484
|
+
isNodeNested: isNodeNested,
|
|
485
|
+
setIsNodeHovered: this.setIsNodeHovered
|
|
486
|
+
}, extensionHandlerResult);
|
|
487
|
+
case 'inlineExtension':
|
|
488
|
+
return /*#__PURE__*/React.createElement(InlineExtension, {
|
|
489
|
+
node: node,
|
|
490
|
+
macroInteractionDesignFeatureFlags: macroInteractionDesignFeatureFlags,
|
|
491
|
+
isNodeSelected: selectedNode === node,
|
|
492
|
+
pluginInjectionApi: pluginInjectionApi,
|
|
493
|
+
isNodeHovered: this.state.isNodeHovered,
|
|
494
|
+
setIsNodeHovered: this.setIsNodeHovered
|
|
495
|
+
}, extensionHandlerResult);
|
|
496
|
+
default:
|
|
497
|
+
return null;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}, {
|
|
501
|
+
key: "tryExtensionHandler",
|
|
502
|
+
value: function tryExtensionHandler(actions) {
|
|
503
|
+
var node = this.props.node;
|
|
504
|
+
try {
|
|
505
|
+
var extensionContent = this.handleExtension(node, actions);
|
|
506
|
+
if (extensionContent && /*#__PURE__*/React.isValidElement(extensionContent)) {
|
|
507
|
+
return extensionContent;
|
|
508
|
+
}
|
|
509
|
+
} catch (e) {
|
|
510
|
+
// eslint-disable-next-line no-console
|
|
511
|
+
console.error('Provided extension handler has thrown an error\n', e);
|
|
512
|
+
/** We don't want this error to block renderer */
|
|
513
|
+
/** We keep rendering the default content */
|
|
514
|
+
}
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
}]);
|
|
518
|
+
return ExtensionComponentInner;
|
|
519
|
+
}(Component);
|
|
520
|
+
export var ExtensionComponent = function ExtensionComponent(props) {
|
|
521
|
+
if (fg('platform_editor_react18_extension_component')) {
|
|
522
|
+
return /*#__PURE__*/React.createElement(ExtensionComponentNew, props);
|
|
523
|
+
}
|
|
524
|
+
return /*#__PURE__*/React.createElement(ExtensionComponentOld, props);
|
|
525
|
+
};
|
|
@@ -7,7 +7,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
7
7
|
import { isFedRamp } from './environment';
|
|
8
8
|
var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
|
|
9
9
|
var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
|
|
10
|
-
var packageVersion = "93.
|
|
10
|
+
var packageVersion = "93.2.0";
|
|
11
11
|
var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
|
|
12
12
|
// Remove URL as it has UGC
|
|
13
13
|
// TODO: Sanitise the URL instead of just removing it
|
|
@@ -21,7 +21,7 @@ import withAnalyticsContext from '@atlaskit/analytics-next/withAnalyticsContext'
|
|
|
21
21
|
import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
|
|
22
22
|
import Layer from '../Layer';
|
|
23
23
|
var packageName = "@atlaskit/editor-common";
|
|
24
|
-
var packageVersion = "93.
|
|
24
|
+
var packageVersion = "93.2.0";
|
|
25
25
|
var halfFocusRing = 1;
|
|
26
26
|
var dropOffset = '0, 8';
|
|
27
27
|
var DropList = /*#__PURE__*/function (_Component) {
|
|
@@ -6,6 +6,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
6
6
|
import React, { useEffect } from 'react';
|
|
7
7
|
import Button from '@atlaskit/button/custom-theme-button';
|
|
8
8
|
import Tooltip from '@atlaskit/tooltip';
|
|
9
|
+
import { Pulse } from '../Pulse/Pulse';
|
|
9
10
|
import { getButtonStyles, iconOnlySpacing } from './styles';
|
|
10
11
|
export default (function (_ref) {
|
|
11
12
|
var title = _ref.title,
|
|
@@ -35,7 +36,8 @@ export default (function (_ref) {
|
|
|
35
36
|
tabIndex = _ref.tabIndex,
|
|
36
37
|
areaControls = _ref.areaControls,
|
|
37
38
|
ariaLabel = _ref.ariaLabel,
|
|
38
|
-
isRadioButton = _ref.isRadioButton
|
|
39
|
+
isRadioButton = _ref.isRadioButton,
|
|
40
|
+
pulse = _ref.pulse;
|
|
39
41
|
// Check if there's only an icon and add additional styles
|
|
40
42
|
var iconOnly = (icon || iconAfter) && !children;
|
|
41
43
|
var customSpacing = iconOnly ? iconOnlySpacing : {};
|
|
@@ -58,6 +60,8 @@ export default (function (_ref) {
|
|
|
58
60
|
}, /*#__PURE__*/React.createElement("div", {
|
|
59
61
|
onMouseEnter: onMouseEnter,
|
|
60
62
|
onMouseLeave: onMouseLeave
|
|
63
|
+
}, /*#__PURE__*/React.createElement(Pulse, {
|
|
64
|
+
pulse: pulse
|
|
61
65
|
}, /*#__PURE__*/React.createElement(Button
|
|
62
66
|
// eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
|
|
63
67
|
, {
|
|
@@ -100,5 +104,5 @@ export default (function (_ref) {
|
|
|
100
104
|
// should be fixed here https://a11y-internal.atlassian.net/browse/DST-287
|
|
101
105
|
,
|
|
102
106
|
tabIndex: tabIndex
|
|
103
|
-
}, children)));
|
|
107
|
+
}, children))));
|
|
104
108
|
});
|
|
@@ -7,9 +7,11 @@ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
|
7
7
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
8
8
|
function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
|
|
9
9
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
10
|
+
/* eslint-disable @repo/internal/react/no-class-components */
|
|
10
11
|
import React, { PureComponent } from 'react';
|
|
12
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
11
13
|
import { ProviderFactory, WithProviders } from '../../provider-factory';
|
|
12
|
-
import MentionWithProviders from './mention-with-providers';
|
|
14
|
+
import { MentionWithProviders, MentionWithProvidersOld } from './mention-with-providers';
|
|
13
15
|
var Mention = /*#__PURE__*/function (_PureComponent) {
|
|
14
16
|
_inherits(Mention, _PureComponent);
|
|
15
17
|
var _super = _createSuper(Mention);
|
|
@@ -26,7 +28,18 @@ var Mention = /*#__PURE__*/function (_PureComponent) {
|
|
|
26
28
|
localId = _this$props.localId;
|
|
27
29
|
var mentionProvider = providers.mentionProvider,
|
|
28
30
|
profilecardProvider = providers.profilecardProvider;
|
|
29
|
-
|
|
31
|
+
if (fg('platform_editor_react18_mention_with_provider')) {
|
|
32
|
+
return /*#__PURE__*/React.createElement(MentionWithProviders, {
|
|
33
|
+
id: id,
|
|
34
|
+
text: text,
|
|
35
|
+
accessLevel: accessLevel,
|
|
36
|
+
localId: localId,
|
|
37
|
+
eventHandlers: eventHandlers,
|
|
38
|
+
mentionProvider: mentionProvider,
|
|
39
|
+
profilecardProvider: profilecardProvider
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/React.createElement(MentionWithProvidersOld, {
|
|
30
43
|
id: id,
|
|
31
44
|
text: text,
|
|
32
45
|
accessLevel: accessLevel,
|
|
@@ -6,19 +6,69 @@ import _inherits from "@babel/runtime/helpers/inherits";
|
|
|
6
6
|
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
7
7
|
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
8
8
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
9
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
9
10
|
function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
|
|
10
11
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
11
|
-
import React, { PureComponent } from 'react';
|
|
12
|
+
import React, { PureComponent, useLayoutEffect, useRef, useState } from 'react';
|
|
12
13
|
import { ResourcedMention } from '@atlaskit/mention/element';
|
|
13
14
|
import ResourcedMentionWithProfilecard from './mention-with-profilecard';
|
|
14
15
|
var GENERIC_USER_IDS = ['HipChat', 'all', 'here'];
|
|
15
16
|
var noop = function noop() {};
|
|
16
|
-
var MentionWithProviders =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
export var MentionWithProviders = function MentionWithProviders(_ref) {
|
|
18
|
+
var accessLevel = _ref.accessLevel,
|
|
19
|
+
eventHandlers = _ref.eventHandlers,
|
|
20
|
+
id = _ref.id,
|
|
21
|
+
mentionProvider = _ref.mentionProvider,
|
|
22
|
+
profilecardProviderResolver = _ref.profilecardProvider,
|
|
23
|
+
text = _ref.text,
|
|
24
|
+
localId = _ref.localId;
|
|
25
|
+
var _useState = useState(null),
|
|
26
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
27
|
+
profilecardProvider = _useState2[0],
|
|
28
|
+
setProfilecardProvider = _useState2[1];
|
|
29
|
+
var mountedRef = useRef(true);
|
|
30
|
+
useLayoutEffect(function () {
|
|
31
|
+
mountedRef.current = true;
|
|
32
|
+
return function () {
|
|
33
|
+
mountedRef.current = false;
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
useLayoutEffect(function () {
|
|
37
|
+
// We are not using async/await here to avoid having an intermediate Promise
|
|
38
|
+
// introduced by the transpiler.
|
|
39
|
+
// This will allow consumer to use a SynchronousPromise.resolve and avoid useless
|
|
40
|
+
// rerendering
|
|
41
|
+
profilecardProviderResolver === null || profilecardProviderResolver === void 0 || profilecardProviderResolver.then(function (result) {
|
|
42
|
+
if (mountedRef.current) {
|
|
43
|
+
setProfilecardProvider(result);
|
|
44
|
+
}
|
|
45
|
+
}).catch(function () {
|
|
46
|
+
if (mountedRef.current) {
|
|
47
|
+
setProfilecardProvider(null);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}, [profilecardProviderResolver]);
|
|
51
|
+
var MentionComponent = profilecardProviderResolver && GENERIC_USER_IDS.indexOf(id) === -1 ? ResourcedMentionWithProfilecard : ResourcedMention;
|
|
52
|
+
return /*#__PURE__*/React.createElement(MentionComponent, {
|
|
53
|
+
id: id,
|
|
54
|
+
text: text,
|
|
55
|
+
accessLevel: accessLevel,
|
|
56
|
+
localId: localId,
|
|
57
|
+
mentionProvider: mentionProvider,
|
|
58
|
+
profilecardProvider: profilecardProvider,
|
|
59
|
+
onClick: eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.onClick,
|
|
60
|
+
onMouseEnter: eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.onMouseEnter,
|
|
61
|
+
onMouseLeave: eventHandlers === null || eventHandlers === void 0 ? void 0 : eventHandlers.onMouseLeave
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// eslint-disable-next-line @repo/internal/react/no-class-components
|
|
66
|
+
export var MentionWithProvidersOld = /*#__PURE__*/function (_PureComponent) {
|
|
67
|
+
_inherits(MentionWithProvidersOld, _PureComponent);
|
|
68
|
+
var _super = _createSuper(MentionWithProvidersOld);
|
|
69
|
+
function MentionWithProvidersOld() {
|
|
20
70
|
var _this;
|
|
21
|
-
_classCallCheck(this,
|
|
71
|
+
_classCallCheck(this, MentionWithProvidersOld);
|
|
22
72
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
23
73
|
args[_key] = arguments[_key];
|
|
24
74
|
}
|
|
@@ -28,7 +78,7 @@ var MentionWithProviders = /*#__PURE__*/function (_PureComponent) {
|
|
|
28
78
|
});
|
|
29
79
|
return _this;
|
|
30
80
|
}
|
|
31
|
-
_createClass(
|
|
81
|
+
_createClass(MentionWithProvidersOld, [{
|
|
32
82
|
key: "UNSAFE_componentWillMount",
|
|
33
83
|
value: function UNSAFE_componentWillMount() {
|
|
34
84
|
this.updateProfilecardProvider(this.props);
|
|
@@ -90,6 +140,5 @@ var MentionWithProviders = /*#__PURE__*/function (_PureComponent) {
|
|
|
90
140
|
}, actionHandlers));
|
|
91
141
|
}
|
|
92
142
|
}]);
|
|
93
|
-
return
|
|
94
|
-
}(PureComponent);
|
|
95
|
-
export { MentionWithProviders as default };
|
|
143
|
+
return MentionWithProvidersOld;
|
|
144
|
+
}(PureComponent);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { SpotlightPulse } from '@atlaskit/onboarding';
|
|
3
|
+
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
4
|
+
/**
|
|
5
|
+
* Wraps children with {@link SpotlightPulse} component.
|
|
6
|
+
*
|
|
7
|
+
* It adds pulse effect to children if `pulse` is `true`.
|
|
8
|
+
*
|
|
9
|
+
* This custom component exists because the {@link SpotlightPulse} with `pulse={false}` renders extra `div` around `children`.
|
|
10
|
+
* We want to keep `children` as it is if there is no `pulse`.
|
|
11
|
+
*/
|
|
12
|
+
export function Pulse(_ref) {
|
|
13
|
+
var pulse = _ref.pulse,
|
|
14
|
+
_ref$radius = _ref.radius,
|
|
15
|
+
radius = _ref$radius === void 0 ? 3 : _ref$radius,
|
|
16
|
+
children = _ref.children;
|
|
17
|
+
if (editorExperiment('platform_editor_ai_onboarding', 'test') && pulse) {
|
|
18
|
+
return (
|
|
19
|
+
/*#__PURE__*/
|
|
20
|
+
// SpotlightPulse shows pulse effect if `pulse` is `undefined`.
|
|
21
|
+
// That's why we need to cast `pulse` to `false` if it's `undefined`.
|
|
22
|
+
React.createElement(SpotlightPulse, {
|
|
23
|
+
radius: radius,
|
|
24
|
+
pulse: pulse !== null && pulse !== void 0 ? pulse : false
|
|
25
|
+
}, children)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
29
|
+
}
|