@atlaskit/renderer 81.1.1 → 82.0.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 +18 -0
- package/dist/cjs/react/index.js +8 -0
- package/dist/cjs/react/nodes/heading-anchor.js +1 -2
- package/dist/cjs/react/nodes/heading.js +3 -5
- package/dist/cjs/react/nodes/index.js +15 -1
- package/dist/cjs/react/nodes/mediaInline.js +104 -0
- package/dist/cjs/react/nodes/panel.js +1 -1
- package/dist/cjs/ui/Renderer/index.js +1 -1
- package/dist/cjs/ui/Renderer/style.js +5 -5
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/react/index.js +8 -0
- package/dist/es2019/react/nodes/heading-anchor.js +1 -2
- package/dist/es2019/react/nodes/heading.js +3 -5
- package/dist/es2019/react/nodes/index.js +8 -1
- package/dist/es2019/react/nodes/mediaInline.js +53 -0
- package/dist/es2019/react/nodes/panel.js +1 -1
- package/dist/es2019/ui/Renderer/index.js +1 -1
- package/dist/es2019/ui/Renderer/style.js +47 -81
- package/dist/es2019/version.json +1 -1
- package/dist/esm/react/index.js +8 -0
- package/dist/esm/react/nodes/heading-anchor.js +1 -2
- package/dist/esm/react/nodes/heading.js +3 -5
- package/dist/esm/react/nodes/index.js +14 -1
- package/dist/esm/react/nodes/mediaInline.js +80 -0
- package/dist/esm/react/nodes/panel.js +1 -1
- package/dist/esm/ui/Renderer/index.js +1 -1
- package/dist/esm/ui/Renderer/style.js +5 -6
- package/dist/esm/version.json +1 -1
- package/dist/types/react/index.d.ts +1 -0
- package/dist/types/react/nodes/index.d.ts +2 -1
- package/dist/types/react/nodes/mediaInline.d.ts +17 -0
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 82.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [`3c5548e50da`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3c5548e50da) - [ux] Introducing new Media Inline component to renderer
|
|
8
|
+
|
|
9
|
+
### Minor Changes
|
|
10
|
+
|
|
11
|
+
- [`971845eac0d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/971845eac0d) - CETI-96 Added new rule to emoji to solve the duplicate icon issue when we copy from renderer
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [`f897443ad45`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f897443ad45) - Revert AK-279
|
|
16
|
+
- [`87865d3284f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/87865d3284f) - CETI-122 Fix Rendering of hybrid renderer when the prop UNSAFE_allowCustomPanels changed.
|
|
17
|
+
- [`a554946e674`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a554946e674) - Skipping flakey tests to unblock the weasal release
|
|
18
|
+
- [`33bca2a18bb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/33bca2a18bb) - Skipping a flaky test to unblock the weasal release
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
|
|
3
21
|
## 81.1.1
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/dist/cjs/react/index.js
CHANGED
|
@@ -220,6 +220,9 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
220
220
|
case 'mediaGroup':
|
|
221
221
|
return this.getMediaGroupProps(node);
|
|
222
222
|
|
|
223
|
+
case 'mediaInline':
|
|
224
|
+
return this.getMediaInlineProps(node);
|
|
225
|
+
|
|
223
226
|
case 'mediaSingle':
|
|
224
227
|
return this.getMediaSingleProps(node, path);
|
|
225
228
|
|
|
@@ -478,6 +481,11 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
478
481
|
enableDownloadButton: (_this$media = this.media) === null || _this$media === void 0 ? void 0 : _this$media.enableDownloadButton
|
|
479
482
|
});
|
|
480
483
|
}
|
|
484
|
+
}, {
|
|
485
|
+
key: "getMediaInlineProps",
|
|
486
|
+
value: function getMediaInlineProps(node) {
|
|
487
|
+
return _objectSpread({}, this.getProps(node));
|
|
488
|
+
}
|
|
481
489
|
}, {
|
|
482
490
|
key: "getTaskItemProps",
|
|
483
491
|
value: function getTaskItemProps(node) {
|
|
@@ -135,8 +135,7 @@ var HeadingAnchor = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
135
135
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderAnchorButton", function () {
|
|
136
136
|
return /*#__PURE__*/_react.default.createElement(CopyAnchorButton, {
|
|
137
137
|
onMouseLeave: _this.resetMessage,
|
|
138
|
-
onClick: _this.copyToClipboard
|
|
139
|
-
"aria-label": _this.state.tooltipMessage
|
|
138
|
+
onClick: _this.copyToClipboard
|
|
140
139
|
}, /*#__PURE__*/_react.default.createElement(_link.default, {
|
|
141
140
|
label: "copy",
|
|
142
141
|
size: _this.props.level > 3 ? 'small' : 'medium',
|
|
@@ -55,11 +55,9 @@ function Heading(props) {
|
|
|
55
55
|
var showAnchorLink = !!props.showAnchorLink;
|
|
56
56
|
var isRightAligned = hasRightAlignmentMark(marks);
|
|
57
57
|
var enableNestedHeaderLinks = allowHeadingAnchorLinks && allowHeadingAnchorLinks.allowNestedHeaderLinks;
|
|
58
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
59
|
-
className: "heading-wrapper ".concat(HX)
|
|
60
|
-
}, /*#__PURE__*/_react.default.createElement(HX, (0, _extends2.default)({
|
|
58
|
+
return /*#__PURE__*/_react.default.createElement(HX, (0, _extends2.default)({
|
|
61
59
|
id: headingId
|
|
62
|
-
}, dataAttributes), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children
|
|
60
|
+
}, dataAttributes), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children, showAnchorLink && /*#__PURE__*/_react.default.createElement(_copyTextProvider.CopyTextConsumer, null, function (_ref) {
|
|
63
61
|
var copyTextToClipboard = _ref.copyTextToClipboard;
|
|
64
62
|
return headingId && /*#__PURE__*/_react.default.createElement(_analyticsContext.default.Consumer, null, function (_ref2) {
|
|
65
63
|
var fireAnalyticsEvent = _ref2.fireAnalyticsEvent;
|
|
@@ -77,7 +75,7 @@ function Heading(props) {
|
|
|
77
75
|
}
|
|
78
76
|
});
|
|
79
77
|
});
|
|
80
|
-
}));
|
|
78
|
+
})));
|
|
81
79
|
}
|
|
82
80
|
|
|
83
81
|
var _default = Heading;
|
|
@@ -162,7 +162,7 @@ Object.defineProperty(exports, "EmbedCard", {
|
|
|
162
162
|
return _embedCard.default;
|
|
163
163
|
}
|
|
164
164
|
});
|
|
165
|
-
exports.TaskItem = exports.Status = exports.Mention = exports.MediaGroup = exports.Media = exports.InlineCard = exports.Expand = exports.Emoji = exports.DecisionItem = exports.Date = exports.CodeBlock = exports.BlockCard = exports.isEmojiDoc = exports.isTextWrapper = exports.isText = exports.mergeTextNodes = exports.toReact = exports.nodeToReact = void 0;
|
|
165
|
+
exports.TaskItem = exports.Status = exports.Mention = exports.MediaInline = exports.MediaGroup = exports.Media = exports.InlineCard = exports.Expand = exports.Emoji = exports.DecisionItem = exports.Date = exports.CodeBlock = exports.BlockCard = exports.isEmojiDoc = exports.isTextWrapper = exports.isText = exports.mergeTextNodes = exports.toReact = exports.nodeToReact = void 0;
|
|
166
166
|
|
|
167
167
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
168
168
|
|
|
@@ -354,6 +354,19 @@ var MediaGroup = (0, _reactLoadable.default)({
|
|
|
354
354
|
}
|
|
355
355
|
});
|
|
356
356
|
exports.MediaGroup = MediaGroup;
|
|
357
|
+
var MediaInline = (0, _reactLoadable.default)({
|
|
358
|
+
loader: function loader() {
|
|
359
|
+
return Promise.resolve().then(function () {
|
|
360
|
+
return _interopRequireWildcard(require('./mediaInline'));
|
|
361
|
+
}).then(function (mod) {
|
|
362
|
+
return mod.default;
|
|
363
|
+
});
|
|
364
|
+
},
|
|
365
|
+
loading: function loading() {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
exports.MediaInline = MediaInline;
|
|
357
370
|
var Mention = (0, _reactLoadable.default)({
|
|
358
371
|
loader: function loader() {
|
|
359
372
|
return Promise.resolve().then(function () {
|
|
@@ -402,6 +415,7 @@ var nodeToReact = {
|
|
|
402
415
|
listItem: _listItem.default,
|
|
403
416
|
media: Media,
|
|
404
417
|
mediaGroup: MediaGroup,
|
|
418
|
+
mediaInline: MediaInline,
|
|
405
419
|
mediaSingle: _mediaSingle.default,
|
|
406
420
|
mention: Mention,
|
|
407
421
|
orderedList: _orderedList.default,
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = exports.RenderMediaInline = void 0;
|
|
11
|
+
|
|
12
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
+
|
|
20
|
+
var _mediaCard = require("@atlaskit/media-card");
|
|
21
|
+
|
|
22
|
+
var _editorCommon = require("@atlaskit/editor-common");
|
|
23
|
+
|
|
24
|
+
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); }
|
|
25
|
+
|
|
26
|
+
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; }
|
|
27
|
+
|
|
28
|
+
var RenderMediaInline = function RenderMediaInline(props) {
|
|
29
|
+
var mediaProvider = props.mediaProvider;
|
|
30
|
+
|
|
31
|
+
var _useState = (0, _react.useState)({}),
|
|
32
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
33
|
+
viewMediaClientConfigState = _useState2[0],
|
|
34
|
+
setViewMediaClientConfigState = _useState2[1];
|
|
35
|
+
|
|
36
|
+
(0, _react.useEffect)(function () {
|
|
37
|
+
updateViewMediaClientConfigState(mediaProvider);
|
|
38
|
+
}, [mediaProvider]);
|
|
39
|
+
|
|
40
|
+
var updateViewMediaClientConfigState = /*#__PURE__*/function () {
|
|
41
|
+
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(mediaProvider) {
|
|
42
|
+
var mediaClientConfig;
|
|
43
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
44
|
+
while (1) {
|
|
45
|
+
switch (_context.prev = _context.next) {
|
|
46
|
+
case 0:
|
|
47
|
+
if (!mediaProvider) {
|
|
48
|
+
_context.next = 5;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
_context.next = 3;
|
|
53
|
+
return mediaProvider;
|
|
54
|
+
|
|
55
|
+
case 3:
|
|
56
|
+
mediaClientConfig = _context.sent;
|
|
57
|
+
setViewMediaClientConfigState(mediaClientConfig.viewMediaClientConfig);
|
|
58
|
+
|
|
59
|
+
case 5:
|
|
60
|
+
case "end":
|
|
61
|
+
return _context.stop();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, _callee);
|
|
65
|
+
}));
|
|
66
|
+
|
|
67
|
+
return function updateViewMediaClientConfigState(_x) {
|
|
68
|
+
return _ref.apply(this, arguments);
|
|
69
|
+
};
|
|
70
|
+
}();
|
|
71
|
+
|
|
72
|
+
return /*#__PURE__*/_react.default.createElement(_mediaCard.MediaInlineCard, {
|
|
73
|
+
identifier: props.identifier,
|
|
74
|
+
shouldOpenMediaViewer: true,
|
|
75
|
+
mediaClientConfig: viewMediaClientConfigState
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
exports.RenderMediaInline = RenderMediaInline;
|
|
80
|
+
|
|
81
|
+
var MediaInline = function MediaInline(props) {
|
|
82
|
+
var collection = props.collection,
|
|
83
|
+
id = props.id,
|
|
84
|
+
providers = props.providers;
|
|
85
|
+
var identifier = {
|
|
86
|
+
id: id,
|
|
87
|
+
mediaItemType: 'file',
|
|
88
|
+
collectionName: collection
|
|
89
|
+
};
|
|
90
|
+
return /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_editorCommon.WithProviders, {
|
|
91
|
+
providers: ['mediaProvider'],
|
|
92
|
+
providerFactory: providers,
|
|
93
|
+
renderNode: function renderNode(providers) {
|
|
94
|
+
var mediaProvider = providers.mediaProvider;
|
|
95
|
+
return /*#__PURE__*/_react.default.createElement(RenderMediaInline, {
|
|
96
|
+
identifier: identifier,
|
|
97
|
+
mediaProvider: mediaProvider
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}));
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
var _default = MediaInline;
|
|
104
|
+
exports.default = _default;
|
|
@@ -93,7 +93,7 @@ var Panel = function Panel(props) {
|
|
|
93
93
|
var icon = getIcon();
|
|
94
94
|
|
|
95
95
|
if (icon) {
|
|
96
|
-
return /*#__PURE__*/_react.default.createElement("
|
|
96
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
97
97
|
className: _editorCommon.PanelSharedCssClassName.icon
|
|
98
98
|
}, icon);
|
|
99
99
|
}
|
|
@@ -223,7 +223,7 @@ var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
223
223
|
var nextMedia = nextProps.media || {};
|
|
224
224
|
var media = this.props.media || {};
|
|
225
225
|
|
|
226
|
-
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
226
|
+
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.UNSAFE_allowCustomPanels !== this.props.UNSAFE_allowCustomPanels || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
227
227
|
this.serializer = new _.ReactSerializer(this.deriveSerializerProps(nextProps));
|
|
228
228
|
}
|
|
229
229
|
}
|
|
@@ -65,7 +65,7 @@ var headingSizes = {
|
|
|
65
65
|
exports.headingSizes = headingSizes;
|
|
66
66
|
|
|
67
67
|
var headingAnchorStyle = function headingAnchorStyle(headingTag) {
|
|
68
|
-
return (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n /**\n * The copy link button doesn't reserve space in the DOM so that\n * the text alignment isn't impacted by the button/icon's space.\n */\n
|
|
68
|
+
return (0, _styledComponents.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n /**\n * The copy link button doesn't reserve space in the DOM so that\n * the text alignment isn't impacted by the button/icon's space.\n */\n .", " {\n position: absolute;\n height: ", "em;\n\n margin-left: 6px;\n\n button {\n padding-left: 0;\n padding-right: 0;\n }\n }\n\n /**\n * Applies hover effects to the heading anchor link button\n * to fade in when the user rolls over the heading.\n *\n * The link is persistent on mobile, so we use feature detection\n * to enable hover effects for systems that support it (desktop).\n *\n * @see https://caniuse.com/mdn-css_at-rules_media_hover\n */\n @media (hover: hover) and (pointer: fine) {\n .", " {\n > button {\n opacity: 0;\n transform: translate(-8px, 0px);\n transition: opacity 0.2s ease 0s, transform 0.2s ease 0s;\n }\n }\n\n &:hover {\n .", " > button {\n opacity: 1;\n transform: none !important;\n }\n }\n }\n "])), _headingAnchor.HeadingAnchorWrapperClassName, headingSizes[headingTag].lineHeight, _headingAnchor.HeadingAnchorWrapperClassName, _headingAnchor.HeadingAnchorWrapperClassName);
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
var alignedHeadingAnchorStyle = function alignedHeadingAnchorStyle(_ref) {
|
|
@@ -75,7 +75,7 @@ var alignedHeadingAnchorStyle = function alignedHeadingAnchorStyle(_ref) {
|
|
|
75
75
|
return '';
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
return "\n .fabric-editor-block-mark[data-align] > {\n h1, h2, h3, h4, h5, h6 {\n position: relative;\n }\n }\n\n /**\n * For right-alignment we flip the link to be before the heading\n * text so that the text is flush up against the edge of the editor's\n * container edge.\n */\n .fabric-editor-block-mark:not([data-align='center'])[data-align] {\n
|
|
78
|
+
return "\n .fabric-editor-block-mark[data-align] > {\n h1, h2, h3, h4, h5, h6 {\n position: relative;\n }\n }\n\n /**\n * For right-alignment we flip the link to be before the heading\n * text so that the text is flush up against the edge of the editor's\n * container edge.\n */\n .fabric-editor-block-mark:not([data-align='center'])[data-align] {\n > {\n h1, h2, h3, h4, h5, h6 {\n // Using right to left text to achieve the inverse effect\n // of where the copy link button icon sits for left/center\n // alignment.\n // Although this is unorthodox it's the only approach which\n // allows the button to sit flush against the left edge of\n // bottom line of text.\n direction: rtl;\n\n // By default RTL will negatively impact the layout of special\n // characters within the heading text, and potentially other\n // nested inline nodes. To prevent this we insert pseudo elements\n // containing HTML entities to retain LTR for all heading content\n // except for the copy link button.\n > *:not(.".concat(_headingAnchor.HeadingAnchorWrapperClassName, "):not(br) {\n ::before {\n // Open LTR: https://www.fileformat.info/info/unicode/char/202a/index.htm\n content: '\u202A';\n }\n ::after {\n // Close LTR: https://www.fileformat.info/info/unicode/char/202c/index.htm\n content: '\u202C';\n }\n }\n }\n }\n .").concat(_headingAnchor.HeadingAnchorWrapperClassName, " {\n margin: 0 6px 0 0;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .").concat(_headingAnchor.HeadingAnchorWrapperClassName, " > button {\n transform: translate(8px, 0px);\n }\n }\n }\n }\n ");
|
|
79
79
|
};
|
|
80
80
|
|
|
81
81
|
var tableSortableColumnStyle = function tableSortableColumnStyle(_ref2) {
|
|
@@ -89,7 +89,7 @@ var tableSortableColumnStyle = function tableSortableColumnStyle(_ref2) {
|
|
|
89
89
|
var headingsCss = '';
|
|
90
90
|
|
|
91
91
|
if (allowNestedHeaderLinks) {
|
|
92
|
-
headingsCss = "\n /**\n * When the sort button is enabled we want the heading's copy link button\n * to reserve space so that it can prematurely wrap to avoid the button\n * being displayed underneath the sort button (hidden or obscured).\n *\n * The two buttons fight each other since the sort button is displayed\n * on hover of the <th /> and the copy link button is displayed on hover\n * of the heading.\n *\n * Note that this can break the WYSIWYG experience in the case where\n * a heading fills the width of the table cell and the only thing which\n * wraps is the copy link button. This is hopefully a rare fringe case.\n */\n .".concat(_headingAnchor.HeadingAnchorWrapperClassName, " {\n position: unset;\n }\n
|
|
92
|
+
headingsCss = "\n /**\n * When the sort button is enabled we want the heading's copy link button\n * to reserve space so that it can prematurely wrap to avoid the button\n * being displayed underneath the sort button (hidden or obscured).\n *\n * The two buttons fight each other since the sort button is displayed\n * on hover of the <th /> and the copy link button is displayed on hover\n * of the heading.\n *\n * Note that this can break the WYSIWYG experience in the case where\n * a heading fills the width of the table cell and the only thing which\n * wraps is the copy link button. This is hopefully a rare fringe case.\n */\n .".concat(_headingAnchor.HeadingAnchorWrapperClassName, " {\n position: unset;\n }\n > {\n h1, h2, h3, h4, h5, h6 {\n margin-right: 30px;\n }\n }\n ");
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
return "\n .".concat(_consts.RendererCssClassName.SORTABLE_COLUMN, " {\n padding: 0;\n\n .").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_BUTTON, " {\n width: 100%;\n height: 100%;\n cursor: pointer;\n padding: ").concat(_editorCommon.tableCellPadding, "px;\n border-width: 1.5px;\n border-style: solid;\n border-color: transparent;\n\n > *:first-child {\n margin-top: 0;\n }\n\n > .ProseMirror-gapcursor.-right:first-child + * {\n margin-top: 0;\n }\n\n > .ProseMirror-gapcursor:first-child + span + * {\n margin-top: 0;\n }\n\n @supports selector(:focus-visible) {\n &:focus {\n outline: unset;\n }\n &:focus-visible {\n border-color: ").concat(colors.B300, ";\n }\n }\n\n ").concat(headingsCss, "\n }\n\n &.").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_NOT_ALLOWED, " .").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_BUTTON, " {\n cursor: default;\n }\n\n .").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_ICON, " {\n margin: 0;\n opacity: 1;\n transition: opacity 0.2s ease-in-out;\n }\n\n .").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_NO_ORDER, " {\n opacity: 0;\n }\n\n &:hover {\n .").concat(_consts.RendererCssClassName.SORTABLE_COLUMN_NO_ORDER, " {\n opacity: 1;\n }\n }\n }\n ");
|
|
@@ -117,10 +117,10 @@ var fullWidthStyles = function fullWidthStyles(_ref4) {
|
|
|
117
117
|
}; // prettier-ignore
|
|
118
118
|
|
|
119
119
|
|
|
120
|
-
var Wrapper = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n font-size: ", "px;\n line-height: 1.5rem;\n color: ", ";\n\n ", "\n ", "\n\n
|
|
120
|
+
var Wrapper = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n font-size: ", "px;\n line-height: 1.5rem;\n color: ", ";\n\n ", "\n ", "\n\n & h1 {\n ", "\n }\n\n & h2 {\n ", "\n }\n\n & h3 {\n ", "\n }\n\n & h4 {\n ", "\n }\n\n & h5 {\n ", "\n }\n\n & h6 {\n ", "\n }\n\n & span.akActionMark {\n color: ", ";\n text-decoration: none;\n\n &:hover {\n color: ", ";\n text-decoration: underline;\n }\n }\n\n & span.akActionMark {\n cursor: pointer;\n }\n\n & span[data-placeholder] {\n color: ", ";\n }\n\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", "\n\n & .UnknownBlock {\n font-family: ", ";\n font-size: ", ";\n font-weight: 400;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n & span.date-node {\n background: ", ";\n border-radius: ", "px;\n color: ", ";\n padding: 2px 4px;\n margin: 0 1px;\n transition: background 0.3s;\n }\n\n & span.date-node-highlighted {\n background: ", ";\n color: ", ";\n }\n\n & .renderer-image {\n max-width: 100%;\n display: block;\n margin: ", "px 0;\n }\n\n .", ".rich-media-wrapped + .", ":not(.rich-media-wrapped) {\n clear: both;\n }\n\n & .code-block,\n & blockquote,\n & hr,\n & > div > div:not(.rich-media-wrapped),\n .", ".rich-media-wrapped + .rich-media-wrapped + *:not(.rich-media-wrapped),\n .", ".rich-media-wrapped + div:not(.rich-media-wrapped),\n .", ".image-align-start,\n .", ".image-center,\n .", ".image-align-end {\n clear: both;\n }\n\n & .rich-media-wrapped {\n & + h1,\n & + h2,\n & + h3,\n & + h4,\n & + h5,\n & + h6 {\n margin-top: 8px;\n }\n }\n\n ", "\n\n ", " &\n div[class^='image-wrap-'] + div[class^='image-wrap-'] {\n margin-left: 0;\n margin-right: 0;\n }\n\n /* Breakout for tables and extensions */\n .", " > {\n * .", " {\n width: 100% !important;\n left: 0 !important;\n }\n\n * .", " {\n overflow-x: auto;\n }\n\n & .", ":first-child {\n margin-top: 0;\n }\n }\n\n .", " {\n margin-top: ", ";\n }\n\n .", " {\n margin-left: 50%;\n transform: translateX(-50%);\n }\n\n .", " {\n overflow-x: auto;\n }\n\n ", "\n\n .", " {\n z-index: 0;\n transition: all 0.1s linear;\n display: flex; /* needed to avoid position: fixed jumpiness in Chrome */\n\n /** Shadow overrides */\n &.", "::after, &.", "::before {\n top: ", "px;\n height: calc(100% - ", "px);\n z-index: ", ";\n }\n\n /**\n * A hack for making all the <th /> heights equal in case some have shorter\n * content than others.\n *\n * This is done to make sort buttons fill entire <th />.\n */\n table {\n height: 1px; /* will be ignored */\n ", ";\n margin-left: 0;\n margin-right: 0;\n }\n\n table tr:first-child {\n height: 100%;\n\n td, th {\n position: relative;\n }\n }\n\n table[data-number-column='true'] {\n .", " {\n background-color: ", ";\n border-right: 1px solid ", ";\n width: ", "px;\n text-align: center;\n color: ", ";\n font-size: ", ";\n }\n\n .fixed .", " {\n border-right: 0px none;\n }\n }\n }\n\n tr[data-header-row].fixed {\n position: fixed !important;\n display: flex;\n overflow: hidden;\n z-index: ", ";\n\n border-right: 1px solid ", ";\n border-bottom: 1px solid ", ";\n\n /* this is to compensate for the table border */\n transform: translateX(-1px);\n }\n\n .sticky > th {\n z-index: ", ";\n position: sticky !important;\n top: 0;\n }\n\n /* Make the number column header sticky */\n .sticky > td {\n position: sticky !important;\n top: 0;\n }\n\n /* add border for position: sticky\n and work around background-clip: padding-box\n bug for FF causing box-shadow bug in Chrome */\n .sticky th, .sticky td {\n box-shadow: 0px 1px ", ", 0px -0.5px ", ", inset -1px 0px ", ", 0px -1px ", ";\n }\n\n /* this will remove jumpiness caused in Chrome for sticky headers */\n .fixed + tr {\n min-height: 0px;\n }\n\n /*\n * We wrap CodeBlock in a grid to prevent it from overflowing the container of the renderer.\n * See ED-4159.\n */\n & .code-block {\n max-width: 100%;\n /* -ms- properties are necessary until MS supports the latest version of the grid spec */\n /* stylelint-disable value-no-vendor-prefix, declaration-block-no-duplicate-properties */\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: auto 1fr;\n /* stylelint-enable */\n\n grid-template-columns: minmax(0, 1fr);\n position: relative;\n border-radius: ", "px;\n\n /*\n * The overall renderer has word-wrap: break; which causes issues with\n * code block line numbers in Safari / iOS.\n */\n word-wrap: normal;\n\n & > span {\n /* stylelint-disable value-no-vendor-prefix */\n -ms-grid-row: 1;\n -ms-grid-column: 2;\n /* stylelint-enable */\n grid-column: 1;\n }\n }\n\n & .MediaGroup,\n & .code-block {\n margin-top: ", ";\n\n &:first-child {\n margin-top: 0;\n }\n\n &:hover button.copy-to-clipboard{\n opacity: 1;\n position: absolute;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n }\n }\n\n ", ";\n & [data-layout-section] {\n margin-top: ", "px;\n & > div + div {\n margin-left: ", "px;\n }\n\n @media screen and (max-width: ", "px) {\n & > div + div {\n margin-left: 0;\n }\n }\n }\n"])), _editorSharedStyles.editorFontSize, (0, _components.themed)({
|
|
121
121
|
light: colors.N800,
|
|
122
122
|
dark: '#B8C7E0'
|
|
123
|
-
}), fullPageStyles, fullWidthStyles,
|
|
123
|
+
}), fullPageStyles, fullWidthStyles, headingAnchorStyle('h1'), headingAnchorStyle('h2'), headingAnchorStyle('h3'), headingAnchorStyle('h4'), headingAnchorStyle('h5'), headingAnchorStyle('h6'), colors.B400, colors.B300, colors.placeholderText, _editorCommon.whitespaceSharedStyles, _editorCommon.blockquoteSharedStyles, _editorCommon.headingsSharedStyles, _editorCommon.panelSharedStyles, _editorCommon.ruleSharedStyles, _editorCommon.paragraphSharedStyles, _editorCommon.listsSharedStyles, _editorCommon.indentationSharedStyles, _editorCommon.blockMarksSharedStyles, _editorCommon.codeMarkSharedStyles, _editorCommon.shadowSharedStyle, _editorCommon.dateSharedStyle, _editorCommon.tasksAndDecisionsStyles, _editorCommon.smartCardSharedStyles, (0, _constants.fontFamily)(), (0, _editorSharedStyles.relativeFontSizeToBase16)((0, _constants.fontSize)()), (0, _components.themed)({
|
|
124
124
|
light: colors.N30A,
|
|
125
125
|
dark: colors.DN70
|
|
126
126
|
}), (0, _constants.borderRadius)(), (0, _components.themed)({
|
package/dist/cjs/version.json
CHANGED
|
@@ -192,6 +192,9 @@ export default class ReactSerializer {
|
|
|
192
192
|
case 'mediaGroup':
|
|
193
193
|
return this.getMediaGroupProps(node);
|
|
194
194
|
|
|
195
|
+
case 'mediaInline':
|
|
196
|
+
return this.getMediaInlineProps(node);
|
|
197
|
+
|
|
195
198
|
case 'mediaSingle':
|
|
196
199
|
return this.getMediaSingleProps(node, path);
|
|
197
200
|
|
|
@@ -410,6 +413,11 @@ export default class ReactSerializer {
|
|
|
410
413
|
};
|
|
411
414
|
}
|
|
412
415
|
|
|
416
|
+
getMediaInlineProps(node) {
|
|
417
|
+
return { ...this.getProps(node)
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
|
|
413
421
|
getTaskItemProps(node, path = []) {
|
|
414
422
|
return { ...this.getProps(node, path),
|
|
415
423
|
disabled: this.disableActions
|
|
@@ -66,8 +66,7 @@ class HeadingAnchor extends React.PureComponent {
|
|
|
66
66
|
_defineProperty(this, "renderAnchorButton", () => {
|
|
67
67
|
return /*#__PURE__*/React.createElement(CopyAnchorButton, {
|
|
68
68
|
onMouseLeave: this.resetMessage,
|
|
69
|
-
onClick: this.copyToClipboard
|
|
70
|
-
"aria-label": this.state.tooltipMessage
|
|
69
|
+
onClick: this.copyToClipboard
|
|
71
70
|
}, /*#__PURE__*/React.createElement(LinkIcon, {
|
|
72
71
|
label: "copy",
|
|
73
72
|
size: this.props.level > 3 ? 'small' : 'medium',
|
|
@@ -39,11 +39,9 @@ function Heading(props) {
|
|
|
39
39
|
const showAnchorLink = !!props.showAnchorLink;
|
|
40
40
|
const isRightAligned = hasRightAlignmentMark(marks);
|
|
41
41
|
const enableNestedHeaderLinks = allowHeadingAnchorLinks && allowHeadingAnchorLinks.allowNestedHeaderLinks;
|
|
42
|
-
return /*#__PURE__*/React.createElement(
|
|
43
|
-
className: `heading-wrapper ${HX}`
|
|
44
|
-
}, /*#__PURE__*/React.createElement(HX, _extends({
|
|
42
|
+
return /*#__PURE__*/React.createElement(HX, _extends({
|
|
45
43
|
id: headingId
|
|
46
|
-
}, dataAttributes), /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children
|
|
44
|
+
}, dataAttributes), /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children, showAnchorLink && /*#__PURE__*/React.createElement(CopyTextConsumer, null, ({
|
|
47
45
|
copyTextToClipboard
|
|
48
46
|
}) => {
|
|
49
47
|
return headingId && /*#__PURE__*/React.createElement(AnalyticsContext.Consumer, null, ({
|
|
@@ -61,7 +59,7 @@ function Heading(props) {
|
|
|
61
59
|
return copyTextToClipboard(getCurrentUrlWithHash(headingId));
|
|
62
60
|
}
|
|
63
61
|
}));
|
|
64
|
-
}));
|
|
62
|
+
})));
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
export default Heading;
|
|
@@ -85,6 +85,12 @@ const MediaGroup = Loadable({
|
|
|
85
85
|
'./mediaGroup').then(mod => mod.default),
|
|
86
86
|
loading: () => null
|
|
87
87
|
});
|
|
88
|
+
const MediaInline = Loadable({
|
|
89
|
+
loader: () => import(
|
|
90
|
+
/* webpackChunkName: "@atlaskit-internal_renderer-node_MediaInline" */
|
|
91
|
+
'./mediaInline').then(mod => mod.default),
|
|
92
|
+
loading: () => null
|
|
93
|
+
});
|
|
88
94
|
const Mention = Loadable({
|
|
89
95
|
loader: () => import(
|
|
90
96
|
/* webpackChunkName: "@atlaskit-internal_renderer-node_Mention" */
|
|
@@ -119,6 +125,7 @@ export const nodeToReact = {
|
|
|
119
125
|
listItem: ListItem,
|
|
120
126
|
media: Media,
|
|
121
127
|
mediaGroup: MediaGroup,
|
|
128
|
+
mediaInline: MediaInline,
|
|
122
129
|
mediaSingle: MediaSingle,
|
|
123
130
|
mention: Mention,
|
|
124
131
|
orderedList: OrderedList,
|
|
@@ -278,4 +285,4 @@ const isEmojiBlock = pnode => {
|
|
|
278
285
|
return emojiCount > 0;
|
|
279
286
|
};
|
|
280
287
|
|
|
281
|
-
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard };
|
|
288
|
+
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaInline, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { MediaInlineCard } from '@atlaskit/media-card';
|
|
3
|
+
import { WithProviders } from '@atlaskit/editor-common';
|
|
4
|
+
export const RenderMediaInline = props => {
|
|
5
|
+
const {
|
|
6
|
+
mediaProvider
|
|
7
|
+
} = props;
|
|
8
|
+
const [viewMediaClientConfigState, setViewMediaClientConfigState] = useState({});
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
updateViewMediaClientConfigState(mediaProvider);
|
|
11
|
+
}, [mediaProvider]);
|
|
12
|
+
|
|
13
|
+
const updateViewMediaClientConfigState = async mediaProvider => {
|
|
14
|
+
if (mediaProvider) {
|
|
15
|
+
const mediaClientConfig = await mediaProvider;
|
|
16
|
+
setViewMediaClientConfigState(mediaClientConfig.viewMediaClientConfig);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
return /*#__PURE__*/React.createElement(MediaInlineCard, {
|
|
21
|
+
identifier: props.identifier,
|
|
22
|
+
shouldOpenMediaViewer: true,
|
|
23
|
+
mediaClientConfig: viewMediaClientConfigState
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const MediaInline = props => {
|
|
28
|
+
const {
|
|
29
|
+
collection,
|
|
30
|
+
id,
|
|
31
|
+
providers
|
|
32
|
+
} = props;
|
|
33
|
+
const identifier = {
|
|
34
|
+
id,
|
|
35
|
+
mediaItemType: 'file',
|
|
36
|
+
collectionName: collection
|
|
37
|
+
};
|
|
38
|
+
return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(WithProviders, {
|
|
39
|
+
providers: ['mediaProvider'],
|
|
40
|
+
providerFactory: providers,
|
|
41
|
+
renderNode: providers => {
|
|
42
|
+
const {
|
|
43
|
+
mediaProvider
|
|
44
|
+
} = providers;
|
|
45
|
+
return /*#__PURE__*/React.createElement(RenderMediaInline, {
|
|
46
|
+
identifier: identifier,
|
|
47
|
+
mediaProvider: mediaProvider
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default MediaInline;
|
|
@@ -147,7 +147,7 @@ export class Renderer extends PureComponent {
|
|
|
147
147
|
const nextMedia = nextProps.media || {};
|
|
148
148
|
const media = this.props.media || {};
|
|
149
149
|
|
|
150
|
-
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
150
|
+
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.UNSAFE_allowCustomPanels !== this.props.UNSAFE_allowCustomPanels || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
151
151
|
this.serializer = new ReactSerializer(this.deriveSerializerProps(nextProps));
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -7,7 +7,6 @@ import { tableSharedStyle, columnLayoutSharedStyle, blockquoteSharedStyles, head
|
|
|
7
7
|
import { editorFontSize, blockNodesVerticalMargin, akEditorTableToolbar, akEditorTableToolbarDark, akEditorTableBorder, akEditorTableBorderDark, akEditorTableNumberColumnWidth, gridMediumMaxWidth, akEditorFullWidthLayoutWidth, akEditorStickyHeaderZIndex, relativeFontSizeToBase16 } from '@atlaskit/editor-shared-styles';
|
|
8
8
|
import { RendererCssClassName } from '../../consts';
|
|
9
9
|
import { HeadingAnchorWrapperClassName } from '../../react/nodes/heading-anchor';
|
|
10
|
-
import { h100, h300, h400, h500, h600, h700 } from '@atlaskit/theme/typography';
|
|
11
10
|
export const FullPagePadding = 32;
|
|
12
11
|
|
|
13
12
|
const getLineHeight = fontCode => headingSizesImport[fontCode].lineHeight / headingSizesImport[fontCode].size;
|
|
@@ -38,10 +37,12 @@ const headingAnchorStyle = headingTag => css`
|
|
|
38
37
|
* The copy link button doesn't reserve space in the DOM so that
|
|
39
38
|
* the text alignment isn't impacted by the button/icon's space.
|
|
40
39
|
*/
|
|
41
|
-
|
|
42
|
-
& + .${HeadingAnchorWrapperClassName} {
|
|
40
|
+
.${HeadingAnchorWrapperClassName} {
|
|
43
41
|
position: absolute;
|
|
42
|
+
height: ${headingSizes[headingTag].lineHeight}em;
|
|
43
|
+
|
|
44
44
|
margin-left: 6px;
|
|
45
|
+
|
|
45
46
|
button {
|
|
46
47
|
padding-left: 0;
|
|
47
48
|
padding-right: 0;
|
|
@@ -58,16 +59,18 @@ const headingAnchorStyle = headingTag => css`
|
|
|
58
59
|
* @see https://caniuse.com/mdn-css_at-rules_media_hover
|
|
59
60
|
*/
|
|
60
61
|
@media (hover: hover) and (pointer: fine) {
|
|
61
|
-
|
|
62
|
+
.${HeadingAnchorWrapperClassName} {
|
|
62
63
|
> button {
|
|
63
64
|
opacity: 0;
|
|
64
65
|
transform: translate(-8px, 0px);
|
|
65
66
|
transition: opacity 0.2s ease 0s, transform 0.2s ease 0s;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
&:hover {
|
|
71
|
+
.${HeadingAnchorWrapperClassName} > button {
|
|
72
|
+
opacity: 1;
|
|
73
|
+
transform: none !important;
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
}
|
|
@@ -93,39 +96,41 @@ const alignedHeadingAnchorStyle = ({
|
|
|
93
96
|
* container edge.
|
|
94
97
|
*/
|
|
95
98
|
.fabric-editor-block-mark:not([data-align='center'])[data-align] {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
99
|
+
> {
|
|
100
|
+
h1, h2, h3, h4, h5, h6 {
|
|
101
|
+
// Using right to left text to achieve the inverse effect
|
|
102
|
+
// of where the copy link button icon sits for left/center
|
|
103
|
+
// alignment.
|
|
104
|
+
// Although this is unorthodox it's the only approach which
|
|
105
|
+
// allows the button to sit flush against the left edge of
|
|
106
|
+
// bottom line of text.
|
|
107
|
+
direction: rtl;
|
|
108
|
+
|
|
109
|
+
// By default RTL will negatively impact the layout of special
|
|
110
|
+
// characters within the heading text, and potentially other
|
|
111
|
+
// nested inline nodes. To prevent this we insert pseudo elements
|
|
112
|
+
// containing HTML entities to retain LTR for all heading content
|
|
113
|
+
// except for the copy link button.
|
|
114
|
+
> *:not(.${HeadingAnchorWrapperClassName}):not(br) {
|
|
115
|
+
::before {
|
|
116
|
+
// Open LTR: https://www.fileformat.info/info/unicode/char/202a/index.htm
|
|
117
|
+
content: '\u202A';
|
|
118
|
+
}
|
|
119
|
+
::after {
|
|
120
|
+
// Close LTR: https://www.fileformat.info/info/unicode/char/202c/index.htm
|
|
121
|
+
content: '\u202C';
|
|
122
|
+
}
|
|
118
123
|
}
|
|
119
124
|
}
|
|
120
125
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
126
|
+
.${HeadingAnchorWrapperClassName} {
|
|
127
|
+
margin: 0 6px 0 0;
|
|
128
|
+
}
|
|
125
129
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
130
|
+
@media (hover: hover) and (pointer: fine) {
|
|
131
|
+
.${HeadingAnchorWrapperClassName} > button {
|
|
132
|
+
transform: translate(8px, 0px);
|
|
133
|
+
}
|
|
129
134
|
}
|
|
130
135
|
}
|
|
131
136
|
}
|
|
@@ -160,8 +165,10 @@ const tableSortableColumnStyle = ({
|
|
|
160
165
|
.${HeadingAnchorWrapperClassName} {
|
|
161
166
|
position: unset;
|
|
162
167
|
}
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
> {
|
|
169
|
+
h1, h2, h3, h4, h5, h6 {
|
|
170
|
+
margin-right: 30px;
|
|
171
|
+
}
|
|
165
172
|
}
|
|
166
173
|
`;
|
|
167
174
|
}
|
|
@@ -272,47 +279,6 @@ export const Wrapper = styled.div`
|
|
|
272
279
|
${fullPageStyles}
|
|
273
280
|
${fullWidthStyles}
|
|
274
281
|
|
|
275
|
-
div.heading-wrapper{
|
|
276
|
-
position: relative;
|
|
277
|
-
h1, h2, h3, h4, h5, h6{
|
|
278
|
-
margin-top: 0;
|
|
279
|
-
font-size: inherit;
|
|
280
|
-
}
|
|
281
|
-
&.h1 {
|
|
282
|
-
${h700};
|
|
283
|
-
margin-top: 1.667em;
|
|
284
|
-
}
|
|
285
|
-
&.h2 {
|
|
286
|
-
${h600};
|
|
287
|
-
margin-top: 1.8em;
|
|
288
|
-
}
|
|
289
|
-
&.h3 {
|
|
290
|
-
${h500};
|
|
291
|
-
margin-top: 2em;
|
|
292
|
-
}
|
|
293
|
-
&.h4 {
|
|
294
|
-
${h400};
|
|
295
|
-
margin-top: 1.357em;
|
|
296
|
-
}
|
|
297
|
-
&.h5 {
|
|
298
|
-
${h300};
|
|
299
|
-
margin-top: 1.667em;
|
|
300
|
-
}
|
|
301
|
-
&.h6 {
|
|
302
|
-
${h100};
|
|
303
|
-
margin-top: 1.455em;
|
|
304
|
-
}
|
|
305
|
-
/* show copy button on heading wrapper hover */
|
|
306
|
-
@media (hover: hover) and (pointer: fine) {
|
|
307
|
-
&:hover {
|
|
308
|
-
.${HeadingAnchorWrapperClassName} > button{
|
|
309
|
-
opacity: 1;
|
|
310
|
-
transform: none !important;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
282
|
& h1 {
|
|
317
283
|
${headingAnchorStyle('h1')}
|
|
318
284
|
}
|
package/dist/es2019/version.json
CHANGED
package/dist/esm/react/index.js
CHANGED
|
@@ -212,6 +212,9 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
212
212
|
case 'mediaGroup':
|
|
213
213
|
return this.getMediaGroupProps(node);
|
|
214
214
|
|
|
215
|
+
case 'mediaInline':
|
|
216
|
+
return this.getMediaInlineProps(node);
|
|
217
|
+
|
|
215
218
|
case 'mediaSingle':
|
|
216
219
|
return this.getMediaSingleProps(node, path);
|
|
217
220
|
|
|
@@ -470,6 +473,11 @@ var ReactSerializer = /*#__PURE__*/function () {
|
|
|
470
473
|
enableDownloadButton: (_this$media = this.media) === null || _this$media === void 0 ? void 0 : _this$media.enableDownloadButton
|
|
471
474
|
});
|
|
472
475
|
}
|
|
476
|
+
}, {
|
|
477
|
+
key: "getMediaInlineProps",
|
|
478
|
+
value: function getMediaInlineProps(node) {
|
|
479
|
+
return _objectSpread({}, this.getProps(node));
|
|
480
|
+
}
|
|
473
481
|
}, {
|
|
474
482
|
key: "getTaskItemProps",
|
|
475
483
|
value: function getTaskItemProps(node) {
|
|
@@ -111,8 +111,7 @@ var HeadingAnchor = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
111
111
|
_defineProperty(_assertThisInitialized(_this), "renderAnchorButton", function () {
|
|
112
112
|
return /*#__PURE__*/React.createElement(CopyAnchorButton, {
|
|
113
113
|
onMouseLeave: _this.resetMessage,
|
|
114
|
-
onClick: _this.copyToClipboard
|
|
115
|
-
"aria-label": _this.state.tooltipMessage
|
|
114
|
+
onClick: _this.copyToClipboard
|
|
116
115
|
}, /*#__PURE__*/React.createElement(LinkIcon, {
|
|
117
116
|
label: "copy",
|
|
118
117
|
size: _this.props.level > 3 ? 'small' : 'medium',
|
|
@@ -40,11 +40,9 @@ function Heading(props) {
|
|
|
40
40
|
var showAnchorLink = !!props.showAnchorLink;
|
|
41
41
|
var isRightAligned = hasRightAlignmentMark(marks);
|
|
42
42
|
var enableNestedHeaderLinks = allowHeadingAnchorLinks && allowHeadingAnchorLinks.allowNestedHeaderLinks;
|
|
43
|
-
return /*#__PURE__*/React.createElement(
|
|
44
|
-
className: "heading-wrapper ".concat(HX)
|
|
45
|
-
}, /*#__PURE__*/React.createElement(HX, _extends({
|
|
43
|
+
return /*#__PURE__*/React.createElement(HX, _extends({
|
|
46
44
|
id: headingId
|
|
47
|
-
}, dataAttributes), /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children
|
|
45
|
+
}, dataAttributes), /*#__PURE__*/React.createElement(React.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children, showAnchorLink && /*#__PURE__*/React.createElement(CopyTextConsumer, null, function (_ref) {
|
|
48
46
|
var copyTextToClipboard = _ref.copyTextToClipboard;
|
|
49
47
|
return headingId && /*#__PURE__*/React.createElement(AnalyticsContext.Consumer, null, function (_ref2) {
|
|
50
48
|
var fireAnalyticsEvent = _ref2.fireAnalyticsEvent;
|
|
@@ -62,7 +60,7 @@ function Heading(props) {
|
|
|
62
60
|
}
|
|
63
61
|
});
|
|
64
62
|
});
|
|
65
|
-
}));
|
|
63
|
+
})));
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
export default Heading;
|
|
@@ -145,6 +145,18 @@ var MediaGroup = Loadable({
|
|
|
145
145
|
return null;
|
|
146
146
|
}
|
|
147
147
|
});
|
|
148
|
+
var MediaInline = Loadable({
|
|
149
|
+
loader: function loader() {
|
|
150
|
+
return import(
|
|
151
|
+
/* webpackChunkName: "@atlaskit-internal_renderer-node_MediaInline" */
|
|
152
|
+
'./mediaInline').then(function (mod) {
|
|
153
|
+
return mod.default;
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
loading: function loading() {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
});
|
|
148
160
|
var Mention = Loadable({
|
|
149
161
|
loader: function loader() {
|
|
150
162
|
return import(
|
|
@@ -191,6 +203,7 @@ export var nodeToReact = {
|
|
|
191
203
|
listItem: ListItem,
|
|
192
204
|
media: Media,
|
|
193
205
|
mediaGroup: MediaGroup,
|
|
206
|
+
mediaInline: MediaInline,
|
|
194
207
|
mediaSingle: MediaSingle,
|
|
195
208
|
mention: Mention,
|
|
196
209
|
orderedList: OrderedList,
|
|
@@ -354,4 +367,4 @@ var isEmojiBlock = function isEmojiBlock(pnode) {
|
|
|
354
367
|
return emojiCount > 0;
|
|
355
368
|
};
|
|
356
369
|
|
|
357
|
-
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard };
|
|
370
|
+
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaInline, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard };
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
2
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
+
import React, { useEffect, useState } from 'react';
|
|
5
|
+
import { MediaInlineCard } from '@atlaskit/media-card';
|
|
6
|
+
import { WithProviders } from '@atlaskit/editor-common';
|
|
7
|
+
export var RenderMediaInline = function RenderMediaInline(props) {
|
|
8
|
+
var mediaProvider = props.mediaProvider;
|
|
9
|
+
|
|
10
|
+
var _useState = useState({}),
|
|
11
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
12
|
+
viewMediaClientConfigState = _useState2[0],
|
|
13
|
+
setViewMediaClientConfigState = _useState2[1];
|
|
14
|
+
|
|
15
|
+
useEffect(function () {
|
|
16
|
+
updateViewMediaClientConfigState(mediaProvider);
|
|
17
|
+
}, [mediaProvider]);
|
|
18
|
+
|
|
19
|
+
var updateViewMediaClientConfigState = /*#__PURE__*/function () {
|
|
20
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(mediaProvider) {
|
|
21
|
+
var mediaClientConfig;
|
|
22
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
23
|
+
while (1) {
|
|
24
|
+
switch (_context.prev = _context.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
if (!mediaProvider) {
|
|
27
|
+
_context.next = 5;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
_context.next = 3;
|
|
32
|
+
return mediaProvider;
|
|
33
|
+
|
|
34
|
+
case 3:
|
|
35
|
+
mediaClientConfig = _context.sent;
|
|
36
|
+
setViewMediaClientConfigState(mediaClientConfig.viewMediaClientConfig);
|
|
37
|
+
|
|
38
|
+
case 5:
|
|
39
|
+
case "end":
|
|
40
|
+
return _context.stop();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}, _callee);
|
|
44
|
+
}));
|
|
45
|
+
|
|
46
|
+
return function updateViewMediaClientConfigState(_x) {
|
|
47
|
+
return _ref.apply(this, arguments);
|
|
48
|
+
};
|
|
49
|
+
}();
|
|
50
|
+
|
|
51
|
+
return /*#__PURE__*/React.createElement(MediaInlineCard, {
|
|
52
|
+
identifier: props.identifier,
|
|
53
|
+
shouldOpenMediaViewer: true,
|
|
54
|
+
mediaClientConfig: viewMediaClientConfigState
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
var MediaInline = function MediaInline(props) {
|
|
59
|
+
var collection = props.collection,
|
|
60
|
+
id = props.id,
|
|
61
|
+
providers = props.providers;
|
|
62
|
+
var identifier = {
|
|
63
|
+
id: id,
|
|
64
|
+
mediaItemType: 'file',
|
|
65
|
+
collectionName: collection
|
|
66
|
+
};
|
|
67
|
+
return /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(WithProviders, {
|
|
68
|
+
providers: ['mediaProvider'],
|
|
69
|
+
providerFactory: providers,
|
|
70
|
+
renderNode: function renderNode(providers) {
|
|
71
|
+
var mediaProvider = providers.mediaProvider;
|
|
72
|
+
return /*#__PURE__*/React.createElement(RenderMediaInline, {
|
|
73
|
+
identifier: identifier,
|
|
74
|
+
mediaProvider: mediaProvider
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}));
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default MediaInline;
|
|
@@ -174,7 +174,7 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
174
174
|
var nextMedia = nextProps.media || {};
|
|
175
175
|
var media = this.props.media || {};
|
|
176
176
|
|
|
177
|
-
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
177
|
+
if (nextProps.portal !== this.props.portal || nextProps.appearance !== this.props.appearance || nextProps.stickyHeaders !== this.props.stickyHeaders || nextProps.disableActions !== this.props.disableActions || nextProps.UNSAFE_allowCustomPanels !== this.props.UNSAFE_allowCustomPanels || nextProps.allowHeadingAnchorLinks !== this.props.allowHeadingAnchorLinks || nextMedia.allowLinking !== media.allowLinking) {
|
|
178
178
|
this.serializer = new ReactSerializer(this.deriveSerializerProps(nextProps));
|
|
179
179
|
}
|
|
180
180
|
}
|
|
@@ -11,7 +11,6 @@ import { tableSharedStyle, columnLayoutSharedStyle, blockquoteSharedStyles, head
|
|
|
11
11
|
import { editorFontSize, blockNodesVerticalMargin, akEditorTableToolbar, akEditorTableToolbarDark, akEditorTableBorder, akEditorTableBorderDark, akEditorTableNumberColumnWidth, gridMediumMaxWidth, akEditorFullWidthLayoutWidth, akEditorStickyHeaderZIndex, relativeFontSizeToBase16 } from '@atlaskit/editor-shared-styles';
|
|
12
12
|
import { RendererCssClassName } from '../../consts';
|
|
13
13
|
import { HeadingAnchorWrapperClassName } from '../../react/nodes/heading-anchor';
|
|
14
|
-
import { h100, h300, h400, h500, h600, h700 } from '@atlaskit/theme/typography';
|
|
15
14
|
export var FullPagePadding = 32;
|
|
16
15
|
|
|
17
16
|
var getLineHeight = function getLineHeight(fontCode) {
|
|
@@ -40,7 +39,7 @@ export var headingSizes = {
|
|
|
40
39
|
};
|
|
41
40
|
|
|
42
41
|
var headingAnchorStyle = function headingAnchorStyle(headingTag) {
|
|
43
|
-
return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /**\n * The copy link button doesn't reserve space in the DOM so that\n * the text alignment isn't impacted by the button/icon's space.\n */\n
|
|
42
|
+
return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n /**\n * The copy link button doesn't reserve space in the DOM so that\n * the text alignment isn't impacted by the button/icon's space.\n */\n .", " {\n position: absolute;\n height: ", "em;\n\n margin-left: 6px;\n\n button {\n padding-left: 0;\n padding-right: 0;\n }\n }\n\n /**\n * Applies hover effects to the heading anchor link button\n * to fade in when the user rolls over the heading.\n *\n * The link is persistent on mobile, so we use feature detection\n * to enable hover effects for systems that support it (desktop).\n *\n * @see https://caniuse.com/mdn-css_at-rules_media_hover\n */\n @media (hover: hover) and (pointer: fine) {\n .", " {\n > button {\n opacity: 0;\n transform: translate(-8px, 0px);\n transition: opacity 0.2s ease 0s, transform 0.2s ease 0s;\n }\n }\n\n &:hover {\n .", " > button {\n opacity: 1;\n transform: none !important;\n }\n }\n }\n "])), HeadingAnchorWrapperClassName, headingSizes[headingTag].lineHeight, HeadingAnchorWrapperClassName, HeadingAnchorWrapperClassName);
|
|
44
43
|
};
|
|
45
44
|
|
|
46
45
|
var alignedHeadingAnchorStyle = function alignedHeadingAnchorStyle(_ref) {
|
|
@@ -50,7 +49,7 @@ var alignedHeadingAnchorStyle = function alignedHeadingAnchorStyle(_ref) {
|
|
|
50
49
|
return '';
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
return "\n .fabric-editor-block-mark[data-align] > {\n h1, h2, h3, h4, h5, h6 {\n position: relative;\n }\n }\n\n /**\n * For right-alignment we flip the link to be before the heading\n * text so that the text is flush up against the edge of the editor's\n * container edge.\n */\n .fabric-editor-block-mark:not([data-align='center'])[data-align] {\n
|
|
52
|
+
return "\n .fabric-editor-block-mark[data-align] > {\n h1, h2, h3, h4, h5, h6 {\n position: relative;\n }\n }\n\n /**\n * For right-alignment we flip the link to be before the heading\n * text so that the text is flush up against the edge of the editor's\n * container edge.\n */\n .fabric-editor-block-mark:not([data-align='center'])[data-align] {\n > {\n h1, h2, h3, h4, h5, h6 {\n // Using right to left text to achieve the inverse effect\n // of where the copy link button icon sits for left/center\n // alignment.\n // Although this is unorthodox it's the only approach which\n // allows the button to sit flush against the left edge of\n // bottom line of text.\n direction: rtl;\n\n // By default RTL will negatively impact the layout of special\n // characters within the heading text, and potentially other\n // nested inline nodes. To prevent this we insert pseudo elements\n // containing HTML entities to retain LTR for all heading content\n // except for the copy link button.\n > *:not(.".concat(HeadingAnchorWrapperClassName, "):not(br) {\n ::before {\n // Open LTR: https://www.fileformat.info/info/unicode/char/202a/index.htm\n content: '\u202A';\n }\n ::after {\n // Close LTR: https://www.fileformat.info/info/unicode/char/202c/index.htm\n content: '\u202C';\n }\n }\n }\n }\n .").concat(HeadingAnchorWrapperClassName, " {\n margin: 0 6px 0 0;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .").concat(HeadingAnchorWrapperClassName, " > button {\n transform: translate(8px, 0px);\n }\n }\n }\n }\n ");
|
|
54
53
|
};
|
|
55
54
|
|
|
56
55
|
var tableSortableColumnStyle = function tableSortableColumnStyle(_ref2) {
|
|
@@ -64,7 +63,7 @@ var tableSortableColumnStyle = function tableSortableColumnStyle(_ref2) {
|
|
|
64
63
|
var headingsCss = '';
|
|
65
64
|
|
|
66
65
|
if (allowNestedHeaderLinks) {
|
|
67
|
-
headingsCss = "\n /**\n * When the sort button is enabled we want the heading's copy link button\n * to reserve space so that it can prematurely wrap to avoid the button\n * being displayed underneath the sort button (hidden or obscured).\n *\n * The two buttons fight each other since the sort button is displayed\n * on hover of the <th /> and the copy link button is displayed on hover\n * of the heading.\n *\n * Note that this can break the WYSIWYG experience in the case where\n * a heading fills the width of the table cell and the only thing which\n * wraps is the copy link button. This is hopefully a rare fringe case.\n */\n .".concat(HeadingAnchorWrapperClassName, " {\n position: unset;\n }\n
|
|
66
|
+
headingsCss = "\n /**\n * When the sort button is enabled we want the heading's copy link button\n * to reserve space so that it can prematurely wrap to avoid the button\n * being displayed underneath the sort button (hidden or obscured).\n *\n * The two buttons fight each other since the sort button is displayed\n * on hover of the <th /> and the copy link button is displayed on hover\n * of the heading.\n *\n * Note that this can break the WYSIWYG experience in the case where\n * a heading fills the width of the table cell and the only thing which\n * wraps is the copy link button. This is hopefully a rare fringe case.\n */\n .".concat(HeadingAnchorWrapperClassName, " {\n position: unset;\n }\n > {\n h1, h2, h3, h4, h5, h6 {\n margin-right: 30px;\n }\n }\n ");
|
|
68
67
|
}
|
|
69
68
|
|
|
70
69
|
return "\n .".concat(RendererCssClassName.SORTABLE_COLUMN, " {\n padding: 0;\n\n .").concat(RendererCssClassName.SORTABLE_COLUMN_BUTTON, " {\n width: 100%;\n height: 100%;\n cursor: pointer;\n padding: ").concat(tableCellPadding, "px;\n border-width: 1.5px;\n border-style: solid;\n border-color: transparent;\n\n > *:first-child {\n margin-top: 0;\n }\n\n > .ProseMirror-gapcursor.-right:first-child + * {\n margin-top: 0;\n }\n\n > .ProseMirror-gapcursor:first-child + span + * {\n margin-top: 0;\n }\n\n @supports selector(:focus-visible) {\n &:focus {\n outline: unset;\n }\n &:focus-visible {\n border-color: ").concat(colors.B300, ";\n }\n }\n\n ").concat(headingsCss, "\n }\n\n &.").concat(RendererCssClassName.SORTABLE_COLUMN_NOT_ALLOWED, " .").concat(RendererCssClassName.SORTABLE_COLUMN_BUTTON, " {\n cursor: default;\n }\n\n .").concat(RendererCssClassName.SORTABLE_COLUMN_ICON, " {\n margin: 0;\n opacity: 1;\n transition: opacity 0.2s ease-in-out;\n }\n\n .").concat(RendererCssClassName.SORTABLE_COLUMN_NO_ORDER, " {\n opacity: 0;\n }\n\n &:hover {\n .").concat(RendererCssClassName.SORTABLE_COLUMN_NO_ORDER, " {\n opacity: 1;\n }\n }\n }\n ");
|
|
@@ -92,10 +91,10 @@ var fullWidthStyles = function fullWidthStyles(_ref4) {
|
|
|
92
91
|
}; // prettier-ignore
|
|
93
92
|
|
|
94
93
|
|
|
95
|
-
export var Wrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n font-size: ", "px;\n line-height: 1.5rem;\n color: ", ";\n\n ", "\n ", "\n\n
|
|
94
|
+
export var Wrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n font-size: ", "px;\n line-height: 1.5rem;\n color: ", ";\n\n ", "\n ", "\n\n & h1 {\n ", "\n }\n\n & h2 {\n ", "\n }\n\n & h3 {\n ", "\n }\n\n & h4 {\n ", "\n }\n\n & h5 {\n ", "\n }\n\n & h6 {\n ", "\n }\n\n & span.akActionMark {\n color: ", ";\n text-decoration: none;\n\n &:hover {\n color: ", ";\n text-decoration: underline;\n }\n }\n\n & span.akActionMark {\n cursor: pointer;\n }\n\n & span[data-placeholder] {\n color: ", ";\n }\n\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", ";\n ", "\n\n & .UnknownBlock {\n font-family: ", ";\n font-size: ", ";\n font-weight: 400;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n & span.date-node {\n background: ", ";\n border-radius: ", "px;\n color: ", ";\n padding: 2px 4px;\n margin: 0 1px;\n transition: background 0.3s;\n }\n\n & span.date-node-highlighted {\n background: ", ";\n color: ", ";\n }\n\n & .renderer-image {\n max-width: 100%;\n display: block;\n margin: ", "px 0;\n }\n\n .", ".rich-media-wrapped + .", ":not(.rich-media-wrapped) {\n clear: both;\n }\n\n & .code-block,\n & blockquote,\n & hr,\n & > div > div:not(.rich-media-wrapped),\n .", ".rich-media-wrapped + .rich-media-wrapped + *:not(.rich-media-wrapped),\n .", ".rich-media-wrapped + div:not(.rich-media-wrapped),\n .", ".image-align-start,\n .", ".image-center,\n .", ".image-align-end {\n clear: both;\n }\n\n & .rich-media-wrapped {\n & + h1,\n & + h2,\n & + h3,\n & + h4,\n & + h5,\n & + h6 {\n margin-top: 8px;\n }\n }\n\n ", "\n\n ", " &\n div[class^='image-wrap-'] + div[class^='image-wrap-'] {\n margin-left: 0;\n margin-right: 0;\n }\n\n /* Breakout for tables and extensions */\n .", " > {\n * .", " {\n width: 100% !important;\n left: 0 !important;\n }\n\n * .", " {\n overflow-x: auto;\n }\n\n & .", ":first-child {\n margin-top: 0;\n }\n }\n\n .", " {\n margin-top: ", ";\n }\n\n .", " {\n margin-left: 50%;\n transform: translateX(-50%);\n }\n\n .", " {\n overflow-x: auto;\n }\n\n ", "\n\n .", " {\n z-index: 0;\n transition: all 0.1s linear;\n display: flex; /* needed to avoid position: fixed jumpiness in Chrome */\n\n /** Shadow overrides */\n &.", "::after, &.", "::before {\n top: ", "px;\n height: calc(100% - ", "px);\n z-index: ", ";\n }\n\n /**\n * A hack for making all the <th /> heights equal in case some have shorter\n * content than others.\n *\n * This is done to make sort buttons fill entire <th />.\n */\n table {\n height: 1px; /* will be ignored */\n ", ";\n margin-left: 0;\n margin-right: 0;\n }\n\n table tr:first-child {\n height: 100%;\n\n td, th {\n position: relative;\n }\n }\n\n table[data-number-column='true'] {\n .", " {\n background-color: ", ";\n border-right: 1px solid ", ";\n width: ", "px;\n text-align: center;\n color: ", ";\n font-size: ", ";\n }\n\n .fixed .", " {\n border-right: 0px none;\n }\n }\n }\n\n tr[data-header-row].fixed {\n position: fixed !important;\n display: flex;\n overflow: hidden;\n z-index: ", ";\n\n border-right: 1px solid ", ";\n border-bottom: 1px solid ", ";\n\n /* this is to compensate for the table border */\n transform: translateX(-1px);\n }\n\n .sticky > th {\n z-index: ", ";\n position: sticky !important;\n top: 0;\n }\n\n /* Make the number column header sticky */\n .sticky > td {\n position: sticky !important;\n top: 0;\n }\n\n /* add border for position: sticky\n and work around background-clip: padding-box\n bug for FF causing box-shadow bug in Chrome */\n .sticky th, .sticky td {\n box-shadow: 0px 1px ", ", 0px -0.5px ", ", inset -1px 0px ", ", 0px -1px ", ";\n }\n\n /* this will remove jumpiness caused in Chrome for sticky headers */\n .fixed + tr {\n min-height: 0px;\n }\n\n /*\n * We wrap CodeBlock in a grid to prevent it from overflowing the container of the renderer.\n * See ED-4159.\n */\n & .code-block {\n max-width: 100%;\n /* -ms- properties are necessary until MS supports the latest version of the grid spec */\n /* stylelint-disable value-no-vendor-prefix, declaration-block-no-duplicate-properties */\n display: -ms-grid;\n display: grid;\n -ms-grid-columns: auto 1fr;\n /* stylelint-enable */\n\n grid-template-columns: minmax(0, 1fr);\n position: relative;\n border-radius: ", "px;\n\n /*\n * The overall renderer has word-wrap: break; which causes issues with\n * code block line numbers in Safari / iOS.\n */\n word-wrap: normal;\n\n & > span {\n /* stylelint-disable value-no-vendor-prefix */\n -ms-grid-row: 1;\n -ms-grid-column: 2;\n /* stylelint-enable */\n grid-column: 1;\n }\n }\n\n & .MediaGroup,\n & .code-block {\n margin-top: ", ";\n\n &:first-child {\n margin-top: 0;\n }\n\n &:hover button.copy-to-clipboard{\n opacity: 1;\n position: absolute;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n }\n }\n\n ", ";\n & [data-layout-section] {\n margin-top: ", "px;\n & > div + div {\n margin-left: ", "px;\n }\n\n @media screen and (max-width: ", "px) {\n & > div + div {\n margin-left: 0;\n }\n }\n }\n"])), editorFontSize, themed({
|
|
96
95
|
light: colors.N800,
|
|
97
96
|
dark: '#B8C7E0'
|
|
98
|
-
}), fullPageStyles, fullWidthStyles,
|
|
97
|
+
}), fullPageStyles, fullWidthStyles, headingAnchorStyle('h1'), headingAnchorStyle('h2'), headingAnchorStyle('h3'), headingAnchorStyle('h4'), headingAnchorStyle('h5'), headingAnchorStyle('h6'), colors.B400, colors.B300, colors.placeholderText, whitespaceSharedStyles, blockquoteSharedStyles, headingsSharedStyles, panelSharedStyles, ruleSharedStyles, paragraphSharedStyles, listsSharedStyles, indentationSharedStyles, blockMarksSharedStyles, codeMarkSharedStyles, shadowSharedStyle, dateSharedStyle, tasksAndDecisionsStyles, smartCardSharedStyles, fontFamily(), relativeFontSizeToBase16(fontSize()), themed({
|
|
99
98
|
light: colors.N30A,
|
|
100
99
|
dark: colors.DN70
|
|
101
100
|
}), borderRadius(), themed({
|
package/dist/esm/version.json
CHANGED
|
@@ -88,6 +88,7 @@ export default class ReactSerializer implements Serializer<JSX.Element> {
|
|
|
88
88
|
private getMediaProps;
|
|
89
89
|
private getEmbedCardProps;
|
|
90
90
|
private getMediaGroupProps;
|
|
91
|
+
private getMediaInlineProps;
|
|
91
92
|
private getTaskItemProps;
|
|
92
93
|
private getHardBreakProps;
|
|
93
94
|
private getCodeBlockProps;
|
|
@@ -60,6 +60,7 @@ declare const BlockCard: (React.ComponentClass<{
|
|
|
60
60
|
}> & Loadable.LoadableComponent);
|
|
61
61
|
declare const Media: (React.ComponentClass<import("./media").MediaProps, any> & Loadable.LoadableComponent) | (React.FunctionComponent<import("./media").MediaProps> & Loadable.LoadableComponent);
|
|
62
62
|
declare const MediaGroup: (React.ComponentClass<import("./mediaGroup").MediaGroupProps, any> & Loadable.LoadableComponent) | (React.FunctionComponent<import("./mediaGroup").MediaGroupProps> & Loadable.LoadableComponent);
|
|
63
|
+
declare const MediaInline: (React.ComponentClass<import("./mediaInline").MediaInlineProps, any> & Loadable.LoadableComponent) | (React.FunctionComponent<import("./mediaInline").MediaInlineProps> & Loadable.LoadableComponent);
|
|
63
64
|
declare const Mention: (React.ComponentClass<import("./mention").Props, any> & Loadable.LoadableComponent) | (React.FunctionComponent<import("./mention").Props> & Loadable.LoadableComponent);
|
|
64
65
|
declare const Expand: (React.ComponentClass<import("../../ui/Expand").ExpandProps, any> & Loadable.LoadableComponent) | (React.FunctionComponent<import("../../ui/Expand").ExpandProps> & Loadable.LoadableComponent);
|
|
65
66
|
export declare const nodeToReact: {
|
|
@@ -93,5 +94,5 @@ export declare function isTextNode(node: Node | Mark): node is Node;
|
|
|
93
94
|
* whose content satisfies the condition for an emoji block
|
|
94
95
|
*/
|
|
95
96
|
export declare const isEmojiDoc: (doc: Fragment) => boolean;
|
|
96
|
-
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard, };
|
|
97
|
+
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaInline, MediaSingle, Mention, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard, };
|
|
97
98
|
export type { BodiedExtensionProps, ExtensionProps, InlineExtensionProps };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ProviderFactory } from '@atlaskit/editor-common';
|
|
3
|
+
import { FileIdentifier } from '@atlaskit/media-client';
|
|
4
|
+
import { MediaProvider } from '../../ui/MediaCard';
|
|
5
|
+
export declare type RenderMediaInlineProps = {
|
|
6
|
+
identifier: FileIdentifier;
|
|
7
|
+
mediaProvider?: Promise<MediaProvider>;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare type MediaInlineProps = {
|
|
11
|
+
id: string;
|
|
12
|
+
collection?: string;
|
|
13
|
+
providers: ProviderFactory;
|
|
14
|
+
};
|
|
15
|
+
export declare const RenderMediaInline: React.FC<RenderMediaInlineProps>;
|
|
16
|
+
declare const MediaInline: React.FC<MediaInlineProps>;
|
|
17
|
+
export default MediaInline;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "82.0.0",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -24,19 +24,19 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@atlaskit/adf-schema": "^19.
|
|
27
|
+
"@atlaskit/adf-schema": "^19.3.0",
|
|
28
28
|
"@atlaskit/adf-utils": "^14.3.0",
|
|
29
29
|
"@atlaskit/analytics-listeners": "^8.0.0",
|
|
30
30
|
"@atlaskit/analytics-namespaced-context": "^6.3.0",
|
|
31
31
|
"@atlaskit/analytics-next": "^8.2.0",
|
|
32
32
|
"@atlaskit/button": "^16.1.0",
|
|
33
33
|
"@atlaskit/code": "^14.1.0",
|
|
34
|
-
"@atlaskit/editor-common": "^60.
|
|
34
|
+
"@atlaskit/editor-common": "^60.2.0",
|
|
35
35
|
"@atlaskit/editor-json-transformer": "^8.6.0",
|
|
36
36
|
"@atlaskit/editor-shared-styles": "^1.6.0",
|
|
37
37
|
"@atlaskit/icon": "^21.9.0",
|
|
38
|
-
"@atlaskit/media-card": "^
|
|
39
|
-
"@atlaskit/media-client": "^14.
|
|
38
|
+
"@atlaskit/media-card": "^72.0.0",
|
|
39
|
+
"@atlaskit/media-client": "^14.3.0",
|
|
40
40
|
"@atlaskit/media-common": "^2.9.0",
|
|
41
41
|
"@atlaskit/media-filmstrip": "^42.1.0",
|
|
42
42
|
"@atlaskit/media-viewer": "^45.8.0",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"@atlaskit/media-core": "^32.2.0",
|
|
61
|
-
"@atlaskit/smart-card": "^16.
|
|
61
|
+
"@atlaskit/smart-card": "^16.2.0",
|
|
62
62
|
"react": "^16.8.0",
|
|
63
63
|
"react-dom": "^16.8.0",
|
|
64
64
|
"styled-components": "^3.2.6"
|
|
@@ -67,10 +67,10 @@
|
|
|
67
67
|
"@atlaskit/analytics-gas-types": "^5.0.5",
|
|
68
68
|
"@atlaskit/avatar": "^20.5.0",
|
|
69
69
|
"@atlaskit/build-utils": "^2.6.2",
|
|
70
|
-
"@atlaskit/css-reset": "^6.
|
|
70
|
+
"@atlaskit/css-reset": "^6.2.0",
|
|
71
71
|
"@atlaskit/docs": "*",
|
|
72
|
-
"@atlaskit/editor-core": "^
|
|
73
|
-
"@atlaskit/editor-test-helpers": "^15.
|
|
72
|
+
"@atlaskit/editor-core": "^151.0.0",
|
|
73
|
+
"@atlaskit/editor-test-helpers": "^15.5.0",
|
|
74
74
|
"@atlaskit/field-range": "^9.0.0",
|
|
75
75
|
"@atlaskit/logo": "^13.5.0",
|
|
76
76
|
"@atlaskit/media-core": "^32.2.0",
|
|
@@ -78,9 +78,9 @@
|
|
|
78
78
|
"@atlaskit/media-test-helpers": "^28.8.0",
|
|
79
79
|
"@atlaskit/mention": "^19.7.0",
|
|
80
80
|
"@atlaskit/navigation-next": "^9.0.0",
|
|
81
|
-
"@atlaskit/profilecard": "^15.
|
|
81
|
+
"@atlaskit/profilecard": "^15.8.0",
|
|
82
82
|
"@atlaskit/radio": "^5.3.0",
|
|
83
|
-
"@atlaskit/smart-card": "^16.
|
|
83
|
+
"@atlaskit/smart-card": "^16.2.0",
|
|
84
84
|
"@atlaskit/ssr": "^0.2.0",
|
|
85
85
|
"@atlaskit/util-data-test": "^16.0.0",
|
|
86
86
|
"@atlaskit/visual-regression": "*",
|