@atlaskit/renderer 103.0.2 → 104.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 +14 -0
- package/dist/cjs/react/marks/textColor.js +8 -2
- package/dist/cjs/react/nodes/codeBlock/components/codeBlockContainer.js +8 -5
- package/dist/cjs/react/nodes/codeBlockCopyButton.js +3 -3
- package/dist/cjs/ui/Renderer/index.js +11 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/react/marks/textColor.js +7 -2
- package/dist/es2019/react/nodes/codeBlock/components/codeBlockContainer.js +10 -7
- package/dist/es2019/react/nodes/codeBlockCopyButton.js +16 -7
- package/dist/es2019/ui/Renderer/index.js +11 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/react/marks/textColor.js +7 -2
- package/dist/esm/react/nodes/codeBlock/components/codeBlockContainer.js +7 -6
- package/dist/esm/react/nodes/codeBlockCopyButton.js +2 -2
- package/dist/esm/ui/Renderer/index.js +13 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/analytics/events.d.ts +1 -0
- package/dist/types/ui/Renderer/index.d.ts +5 -0
- package/package.json +12 -11
- package/report.api.md +38 -30
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 104.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [`2df5ab17c10`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2df5ab17c10) - DSP-6459: Adds a background to code blocks in the editor to remove transparency. E.g. prevents table cell background colors from affecting code blocks. Also modifies code blocks in table headers to have a border instead of a different color when design tokens are enabled.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [`c472a1eed2f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c472a1eed2f) - DSP-3443 Updates tokens used for floating buttons; updated appearances only visible in applications configured to use the new Tokens API (currently in alpha).
|
|
12
|
+
- [`34f8542468b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/34f8542468b) - [ED-12592] Updates the renderer rendered measurement to indicate when the measurement is distorted. Re uses distorted measurement identification logic from other render measurements.
|
|
13
|
+
- [`977ac74443c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/977ac74443c) - DSP-7235: Fixes issue with overflow shadows on code blocks due to layered transparent colors.
|
|
14
|
+
- [`c2510fa261f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c2510fa261f) - [ux] ED-15961 [ux] Updates the presentation of text color to use dark and light mode colors when those modes are enabled
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
|
|
3
17
|
## 103.0.2
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -15,14 +15,20 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
15
15
|
|
|
16
16
|
var _react = _interopRequireWildcard(require("react"));
|
|
17
17
|
|
|
18
|
+
var _editorPalette = require("@atlaskit/editor-palette");
|
|
19
|
+
|
|
18
20
|
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); }
|
|
19
21
|
|
|
20
22
|
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; }
|
|
21
23
|
|
|
22
24
|
function TextColor(props) {
|
|
25
|
+
// Note -- while there is no way to create custom colors using default tooling
|
|
26
|
+
// the editor does supported ad hoc color values -- and there may be content
|
|
27
|
+
// which has been migrated or created via apis which use such values.
|
|
28
|
+
var paletteColorValue = (0, _editorPalette.hexToEditorTextPaletteColor)(props.color) || props.color;
|
|
23
29
|
var style = (0, _react.useMemo)(function () {
|
|
24
|
-
return (0, _defineProperty2.default)({}, '--custom-
|
|
25
|
-
}, [
|
|
30
|
+
return (0, _defineProperty2.default)({}, '--custom-palette-color', paletteColorValue);
|
|
31
|
+
}, [paletteColorValue]);
|
|
26
32
|
return /*#__PURE__*/_react.default.createElement("span", (0, _extends2.default)({}, props.dataAttributes, {
|
|
27
33
|
"data-text-custom-color": props.color,
|
|
28
34
|
className: "fabric-text-color-mark",
|
|
@@ -23,16 +23,19 @@ var _styles = require("@atlaskit/editor-common/styles");
|
|
|
23
23
|
|
|
24
24
|
var _codeBlockCopyButton = _interopRequireDefault(require("../../codeBlockCopyButton"));
|
|
25
25
|
|
|
26
|
+
var _tokens = require("@atlaskit/tokens");
|
|
27
|
+
|
|
26
28
|
var _templateObject;
|
|
27
29
|
|
|
28
30
|
// TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
|
|
29
|
-
|
|
30
|
-
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
|
|
31
31
|
var codeBlockStyleOverrides = function codeBlockStyleOverrides(props) {
|
|
32
|
-
return (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n tab-size: 4;\n ", " {\n font-size: ", ";\n line-height: 1.5rem;\n background-image: ", ";\n background-attachment: local, scroll, scroll;\n background-position: 100% 0, 100% 0, 0 0;\n }\n "])),
|
|
32
|
+
return (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n tab-size: 4;\n background-color: ", ";\n\n ", " {\n font-size: ", ";\n line-height: 1.5rem;\n background-image: ", ";\n background-attachment: local, local, local, local, scroll, scroll;\n background-position: 0 0, 0 0, 100% 0, 100% 0, 100% 0, 0 0;\n }\n "])), (0, _components.themed)({
|
|
33
|
+
light: (0, _tokens.token)('elevation.surface.raised', _colors.N20),
|
|
34
|
+
dark: (0, _tokens.token)('elevation.surface.raised', _colors.DN50)
|
|
35
|
+
})(props), _styles.CodeBlockSharedCssClassName.DS_CODEBLOCK, (0, _editorSharedStyles.relativeFontSizeToBase16)((0, _constants.fontSize)()), (0, _editorSharedStyles.overflowShadow)({
|
|
33
36
|
background: (0, _components.themed)({
|
|
34
|
-
light: _colors.N20,
|
|
35
|
-
dark: _colors.DN50
|
|
37
|
+
light: (0, _tokens.token)('color.background.neutral', _colors.N20),
|
|
38
|
+
dark: (0, _tokens.token)('color.background.neutral', _colors.DN50)
|
|
36
39
|
})(props),
|
|
37
40
|
width: "".concat((0, _constants.gridSize)(), "px")
|
|
38
41
|
}));
|
|
@@ -21,7 +21,7 @@ var _reactIntlNext = require("react-intl-next");
|
|
|
21
21
|
|
|
22
22
|
var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _button = _interopRequireDefault(require("@atlaskit/button"));
|
|
25
25
|
|
|
26
26
|
var _copy = _interopRequireDefault(require("@atlaskit/icon/glyph/copy"));
|
|
27
27
|
|
|
@@ -39,7 +39,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
39
39
|
|
|
40
40
|
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; }
|
|
41
41
|
|
|
42
|
-
var copyButtonWrapperStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n position: sticky;\n justify-content: flex-end;\n top: 0;\n\n button {\n position: absolute;\n display: flex;\n justify-content: center;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n opacity: 0;\n transition: opacity 0.2s ease 0s;\n border: 2px solid ", ";\n border-radius: 4px;\n background-color: ", ";\n color: ", ";\n }\n\n button:hover {\n background-color: ", ";\n }\n\n button.clicked {\n background-color: ", ";\n color: ", " !important;\n }\n"])), (0, _tokens.token)('color.border
|
|
42
|
+
var copyButtonWrapperStyles = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n position: sticky;\n justify-content: flex-end;\n top: 0;\n\n button {\n position: absolute;\n display: flex;\n justify-content: center;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n opacity: 0;\n transition: opacity 0.2s ease 0s;\n border: 2px solid ", ";\n border-radius: 4px;\n background-color: ", ";\n color: ", " !important;\n }\n\n button:hover {\n border: 2px solid ", ";\n background-color: ", ";\n }\n\n button:active {\n border: 2px solid ", ";\n background-color: ", ";\n }\n\n button.clicked {\n background-color: ", ";\n color: ", " !important;\n }\n button.clicked:hover {\n background-color: ", ";\n }\n"])), (0, _tokens.token)('color.border', '#fff'), (0, _tokens.token)('elevation.surface.overlay', _colors.N20), (0, _tokens.token)('color.text', 'rgb(66, 82, 110)'), (0, _tokens.token)('color.border', 'transparent'), (0, _tokens.token)('elevation.surface.overlay.hovered', _colors.N30), (0, _tokens.token)('color.border', 'transparent'), (0, _tokens.token)('elevation.surface.overlay.pressed', _colors.N30), (0, _tokens.token)('elevation.surface.overlay', _colors.N700), (0, _tokens.token)('color.text', '#fff'), (0, _tokens.token)('elevation.surface.overlay.hovered', _colors.N700));
|
|
43
43
|
|
|
44
44
|
var CopyButton = function CopyButton(_ref) {
|
|
45
45
|
var content = _ref.content,
|
|
@@ -68,7 +68,7 @@ var CopyButton = function CopyButton(_ref) {
|
|
|
68
68
|
position: "top"
|
|
69
69
|
}, (0, _react.jsx)("div", {
|
|
70
70
|
onMouseLeave: onMouseLeave
|
|
71
|
-
}, (0, _react.jsx)(
|
|
71
|
+
}, (0, _react.jsx)(_button.default, {
|
|
72
72
|
className: className,
|
|
73
73
|
"aria-label": tooltip,
|
|
74
74
|
spacing: "compact",
|
|
@@ -102,18 +102,23 @@ exports.NORMAL_SEVERITY_THRESHOLD = NORMAL_SEVERITY_THRESHOLD;
|
|
|
102
102
|
var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
103
103
|
exports.DEGRADED_SEVERITY_THRESHOLD = DEGRADED_SEVERITY_THRESHOLD;
|
|
104
104
|
var packageName = "@atlaskit/renderer";
|
|
105
|
-
var packageVersion = "
|
|
105
|
+
var packageVersion = "104.0.0";
|
|
106
106
|
|
|
107
107
|
var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
108
108
|
(0, _inherits2.default)(Renderer, _PureComponent);
|
|
109
109
|
|
|
110
110
|
var _super = _createSuper(Renderer);
|
|
111
111
|
|
|
112
|
+
/**
|
|
113
|
+
* This is used in measuring the Renderer Mount time and is then
|
|
114
|
+
* deleted once that measurement occurs.
|
|
115
|
+
*/
|
|
112
116
|
function Renderer(props) {
|
|
113
117
|
var _this;
|
|
114
118
|
|
|
115
119
|
(0, _classCallCheck2.default)(this, Renderer);
|
|
116
120
|
_this = _super.call(this, props);
|
|
121
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderedMeasurementDistortedDurationMonitor", (0, _utils.getDistortedDurationMonitor)());
|
|
117
122
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "featureFlags", (0, _memoizeOne.default)(function (featureFlags) {
|
|
118
123
|
var normalizedFeatureFlags = (0, _normalizeFeatureFlags.normalizeFeatureFlags)(featureFlags, {
|
|
119
124
|
objectFlagKeys: ['rendererRenderTracking']
|
|
@@ -277,6 +282,7 @@ var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
277
282
|
attributes: {
|
|
278
283
|
platform: _events.PLATFORM.WEB,
|
|
279
284
|
duration: duration,
|
|
285
|
+
distortedDuration: _this2.renderedMeasurementDistortedDurationMonitor.distortedDuration,
|
|
280
286
|
ttfb: (0, _utils.getResponseEndTime)(),
|
|
281
287
|
nodes: (0, _traverse.reduce)(_this2.props.document, function (acc, node) {
|
|
282
288
|
acc[node.type] = (acc[node.type] || 0) + 1;
|
|
@@ -286,6 +292,10 @@ var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
286
292
|
},
|
|
287
293
|
eventType: _enums.EVENT_TYPE.OPERATIONAL
|
|
288
294
|
});
|
|
295
|
+
|
|
296
|
+
_this2.renderedMeasurementDistortedDurationMonitor.cleanup();
|
|
297
|
+
|
|
298
|
+
delete _this2.renderedMeasurementDistortedDurationMonitor;
|
|
289
299
|
});
|
|
290
300
|
|
|
291
301
|
_this2.anchorLinkAnalytics();
|
package/dist/cjs/version.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React, { useMemo } from 'react';
|
|
3
|
+
import { hexToEditorTextPaletteColor } from '@atlaskit/editor-palette';
|
|
3
4
|
export default function TextColor(props) {
|
|
5
|
+
// Note -- while there is no way to create custom colors using default tooling
|
|
6
|
+
// the editor does supported ad hoc color values -- and there may be content
|
|
7
|
+
// which has been migrated or created via apis which use such values.
|
|
8
|
+
const paletteColorValue = hexToEditorTextPaletteColor(props.color) || props.color;
|
|
4
9
|
const style = useMemo(() => ({
|
|
5
|
-
['--custom-
|
|
6
|
-
}), [
|
|
10
|
+
['--custom-palette-color']: paletteColorValue
|
|
11
|
+
}), [paletteColorValue]);
|
|
7
12
|
return /*#__PURE__*/React.createElement("span", _extends({}, props.dataAttributes, {
|
|
8
13
|
"data-text-custom-color": props.color,
|
|
9
14
|
className: "fabric-text-color-mark",
|
|
@@ -6,24 +6,27 @@ import { themed } from '@atlaskit/theme/components';
|
|
|
6
6
|
import { fontSize, gridSize } from '@atlaskit/theme/constants';
|
|
7
7
|
import { CodeBlockSharedCssClassName } from '@atlaskit/editor-common/styles';
|
|
8
8
|
import CopyButton from '../../codeBlockCopyButton';
|
|
9
|
+
import { token } from '@atlaskit/tokens'; // TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
|
|
9
10
|
|
|
10
|
-
// TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
|
|
11
|
-
|
|
12
|
-
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
|
|
13
11
|
const codeBlockStyleOverrides = props => css`
|
|
14
12
|
tab-size: 4;
|
|
13
|
+
background-color: ${themed({
|
|
14
|
+
light: token('elevation.surface.raised', N20),
|
|
15
|
+
dark: token('elevation.surface.raised', DN50)
|
|
16
|
+
})(props)};
|
|
17
|
+
|
|
15
18
|
${CodeBlockSharedCssClassName.DS_CODEBLOCK} {
|
|
16
19
|
font-size: ${relativeFontSizeToBase16(fontSize())};
|
|
17
20
|
line-height: 1.5rem;
|
|
18
21
|
background-image: ${overflowShadow({
|
|
19
22
|
background: themed({
|
|
20
|
-
light: N20,
|
|
21
|
-
dark: DN50
|
|
23
|
+
light: token('color.background.neutral', N20),
|
|
24
|
+
dark: token('color.background.neutral', DN50)
|
|
22
25
|
})(props),
|
|
23
26
|
width: `${gridSize()}px`
|
|
24
27
|
})};
|
|
25
|
-
background-attachment: local, scroll, scroll;
|
|
26
|
-
background-position: 100% 0, 100% 0, 0 0;
|
|
28
|
+
background-attachment: local, local, local, local, scroll, scroll;
|
|
29
|
+
background-position: 0 0, 0 0, 100% 0, 100% 0, 100% 0, 0 0;
|
|
27
30
|
}
|
|
28
31
|
`;
|
|
29
32
|
|
|
@@ -3,7 +3,7 @@ import { css, jsx } from '@emotion/react';
|
|
|
3
3
|
import React, { useState } from 'react';
|
|
4
4
|
import { injectIntl } from 'react-intl-next';
|
|
5
5
|
import Tooltip from '@atlaskit/tooltip';
|
|
6
|
-
import Button from '@atlaskit/button
|
|
6
|
+
import Button from '@atlaskit/button';
|
|
7
7
|
import CopyIcon from '@atlaskit/icon/glyph/copy';
|
|
8
8
|
import { N20, N30, N700 } from '@atlaskit/theme/colors';
|
|
9
9
|
import { copyTextToClipboard } from '../utils/clipboard';
|
|
@@ -26,19 +26,28 @@ const copyButtonWrapperStyles = css`
|
|
|
26
26
|
padding: 2px;
|
|
27
27
|
opacity: 0;
|
|
28
28
|
transition: opacity 0.2s ease 0s;
|
|
29
|
-
border: 2px solid ${token('color.border
|
|
29
|
+
border: 2px solid ${token('color.border', '#fff')};
|
|
30
30
|
border-radius: 4px;
|
|
31
|
-
background-color: ${token('
|
|
32
|
-
color: ${token('color.
|
|
31
|
+
background-color: ${token('elevation.surface.overlay', N20)};
|
|
32
|
+
color: ${token('color.text', 'rgb(66, 82, 110)')} !important;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
button:hover {
|
|
36
|
-
|
|
36
|
+
border: 2px solid ${token('color.border', 'transparent')};
|
|
37
|
+
background-color: ${token('elevation.surface.overlay.hovered', N30)};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
button:active {
|
|
41
|
+
border: 2px solid ${token('color.border', 'transparent')};
|
|
42
|
+
background-color: ${token('elevation.surface.overlay.pressed', N30)};
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
button.clicked {
|
|
40
|
-
background-color: ${token('
|
|
41
|
-
color: ${token('color.
|
|
46
|
+
background-color: ${token('elevation.surface.overlay', N700)};
|
|
47
|
+
color: ${token('color.text', '#fff')} !important;
|
|
48
|
+
}
|
|
49
|
+
button.clicked:hover {
|
|
50
|
+
background-color: ${token('elevation.surface.overlay.hovered', N700)};
|
|
42
51
|
}
|
|
43
52
|
`;
|
|
44
53
|
|
|
@@ -9,7 +9,7 @@ import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
|
|
|
9
9
|
import { reduce } from '@atlaskit/adf-utils/traverse';
|
|
10
10
|
import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
11
11
|
import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
|
|
12
|
-
import { getAnalyticsAppearance, getAnalyticsEventSeverity, getResponseEndTime, startMeasure, stopMeasure, shouldForceTracking, measureTTI, browser } from '@atlaskit/editor-common/utils';
|
|
12
|
+
import { getAnalyticsAppearance, getAnalyticsEventSeverity, getResponseEndTime, startMeasure, stopMeasure, shouldForceTracking, measureTTI, getDistortedDurationMonitor, browser } from '@atlaskit/editor-common/utils';
|
|
13
13
|
import { normalizeFeatureFlags } from '@atlaskit/editor-common/normalize-feature-flags';
|
|
14
14
|
import { akEditorFullPageDefaultFontSize } from '@atlaskit/editor-shared-styles';
|
|
15
15
|
import { FabricChannel } from '@atlaskit/analytics-listeners';
|
|
@@ -36,11 +36,17 @@ import { RenderTracking } from '../../react/utils/performance/RenderTracking';
|
|
|
36
36
|
export const NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
37
37
|
export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
38
38
|
const packageName = "@atlaskit/renderer";
|
|
39
|
-
const packageVersion = "
|
|
39
|
+
const packageVersion = "104.0.0";
|
|
40
40
|
export class Renderer extends PureComponent {
|
|
41
|
+
/**
|
|
42
|
+
* This is used in measuring the Renderer Mount time and is then
|
|
43
|
+
* deleted once that measurement occurs.
|
|
44
|
+
*/
|
|
41
45
|
constructor(props) {
|
|
42
46
|
super(props);
|
|
43
47
|
|
|
48
|
+
_defineProperty(this, "renderedMeasurementDistortedDurationMonitor", getDistortedDurationMonitor());
|
|
49
|
+
|
|
44
50
|
_defineProperty(this, "featureFlags", memoizeOne(featureFlags => {
|
|
45
51
|
const normalizedFeatureFlags = normalizeFeatureFlags(featureFlags, {
|
|
46
52
|
objectFlagKeys: ['rendererRenderTracking']
|
|
@@ -208,6 +214,7 @@ export class Renderer extends PureComponent {
|
|
|
208
214
|
attributes: {
|
|
209
215
|
platform: PLATFORM.WEB,
|
|
210
216
|
duration,
|
|
217
|
+
distortedDuration: this.renderedMeasurementDistortedDurationMonitor.distortedDuration,
|
|
211
218
|
ttfb: getResponseEndTime(),
|
|
212
219
|
nodes: reduce(this.props.document, (acc, node) => {
|
|
213
220
|
acc[node.type] = (acc[node.type] || 0) + 1;
|
|
@@ -217,6 +224,8 @@ export class Renderer extends PureComponent {
|
|
|
217
224
|
},
|
|
218
225
|
eventType: EVENT_TYPE.OPERATIONAL
|
|
219
226
|
});
|
|
227
|
+
this.renderedMeasurementDistortedDurationMonitor.cleanup();
|
|
228
|
+
delete this.renderedMeasurementDistortedDurationMonitor;
|
|
220
229
|
});
|
|
221
230
|
this.anchorLinkAnalytics();
|
|
222
231
|
});
|
package/dist/es2019/version.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
3
|
import React, { useMemo } from 'react';
|
|
4
|
+
import { hexToEditorTextPaletteColor } from '@atlaskit/editor-palette';
|
|
4
5
|
export default function TextColor(props) {
|
|
6
|
+
// Note -- while there is no way to create custom colors using default tooling
|
|
7
|
+
// the editor does supported ad hoc color values -- and there may be content
|
|
8
|
+
// which has been migrated or created via apis which use such values.
|
|
9
|
+
var paletteColorValue = hexToEditorTextPaletteColor(props.color) || props.color;
|
|
5
10
|
var style = useMemo(function () {
|
|
6
|
-
return _defineProperty({}, '--custom-
|
|
7
|
-
}, [
|
|
11
|
+
return _defineProperty({}, '--custom-palette-color', paletteColorValue);
|
|
12
|
+
}, [paletteColorValue]);
|
|
8
13
|
return /*#__PURE__*/React.createElement("span", _extends({}, props.dataAttributes, {
|
|
9
14
|
"data-text-custom-color": props.color,
|
|
10
15
|
className: "fabric-text-color-mark",
|
|
@@ -10,15 +10,16 @@ import { themed } from '@atlaskit/theme/components';
|
|
|
10
10
|
import { fontSize, gridSize } from '@atlaskit/theme/constants';
|
|
11
11
|
import { CodeBlockSharedCssClassName } from '@atlaskit/editor-common/styles';
|
|
12
12
|
import CopyButton from '../../codeBlockCopyButton';
|
|
13
|
+
import { token } from '@atlaskit/tokens'; // TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
|
|
13
14
|
|
|
14
|
-
// TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
|
|
15
|
-
|
|
16
|
-
/* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
|
|
17
15
|
var codeBlockStyleOverrides = function codeBlockStyleOverrides(props) {
|
|
18
|
-
return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n tab-size: 4;\n ", " {\n font-size: ", ";\n line-height: 1.5rem;\n background-image: ", ";\n background-attachment: local, scroll, scroll;\n background-position: 100% 0, 100% 0, 0 0;\n }\n "])),
|
|
16
|
+
return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n tab-size: 4;\n background-color: ", ";\n\n ", " {\n font-size: ", ";\n line-height: 1.5rem;\n background-image: ", ";\n background-attachment: local, local, local, local, scroll, scroll;\n background-position: 0 0, 0 0, 100% 0, 100% 0, 100% 0, 0 0;\n }\n "])), themed({
|
|
17
|
+
light: token('elevation.surface.raised', N20),
|
|
18
|
+
dark: token('elevation.surface.raised', DN50)
|
|
19
|
+
})(props), CodeBlockSharedCssClassName.DS_CODEBLOCK, relativeFontSizeToBase16(fontSize()), overflowShadow({
|
|
19
20
|
background: themed({
|
|
20
|
-
light: N20,
|
|
21
|
-
dark: DN50
|
|
21
|
+
light: token('color.background.neutral', N20),
|
|
22
|
+
dark: token('color.background.neutral', DN50)
|
|
22
23
|
})(props),
|
|
23
24
|
width: "".concat(gridSize(), "px")
|
|
24
25
|
}));
|
|
@@ -8,13 +8,13 @@ import { css, jsx } from '@emotion/react';
|
|
|
8
8
|
import React, { useState } from 'react';
|
|
9
9
|
import { injectIntl } from 'react-intl-next';
|
|
10
10
|
import Tooltip from '@atlaskit/tooltip';
|
|
11
|
-
import Button from '@atlaskit/button
|
|
11
|
+
import Button from '@atlaskit/button';
|
|
12
12
|
import CopyIcon from '@atlaskit/icon/glyph/copy';
|
|
13
13
|
import { N20, N30, N700 } from '@atlaskit/theme/colors';
|
|
14
14
|
import { copyTextToClipboard } from '../utils/clipboard';
|
|
15
15
|
import { codeBlockCopyButtonMessages } from '@atlaskit/editor-common/messages';
|
|
16
16
|
import { token } from '@atlaskit/tokens';
|
|
17
|
-
var copyButtonWrapperStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n position: sticky;\n justify-content: flex-end;\n top: 0;\n\n button {\n position: absolute;\n display: flex;\n justify-content: center;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n opacity: 0;\n transition: opacity 0.2s ease 0s;\n border: 2px solid ", ";\n border-radius: 4px;\n background-color: ", ";\n color: ", ";\n }\n\n button:hover {\n background-color: ", ";\n }\n\n button.clicked {\n background-color: ", ";\n color: ", " !important;\n }\n"])), token('color.border
|
|
17
|
+
var copyButtonWrapperStyles = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n position: sticky;\n justify-content: flex-end;\n top: 0;\n\n button {\n position: absolute;\n display: flex;\n justify-content: center;\n height: 32px;\n width: 32px;\n right: 6px;\n top: 4px;\n padding: 2px;\n opacity: 0;\n transition: opacity 0.2s ease 0s;\n border: 2px solid ", ";\n border-radius: 4px;\n background-color: ", ";\n color: ", " !important;\n }\n\n button:hover {\n border: 2px solid ", ";\n background-color: ", ";\n }\n\n button:active {\n border: 2px solid ", ";\n background-color: ", ";\n }\n\n button.clicked {\n background-color: ", ";\n color: ", " !important;\n }\n button.clicked:hover {\n background-color: ", ";\n }\n"])), token('color.border', '#fff'), token('elevation.surface.overlay', N20), token('color.text', 'rgb(66, 82, 110)'), token('color.border', 'transparent'), token('elevation.surface.overlay.hovered', N30), token('color.border', 'transparent'), token('elevation.surface.overlay.pressed', N30), token('elevation.surface.overlay', N700), token('color.text', '#fff'), token('elevation.surface.overlay.hovered', N700));
|
|
18
18
|
|
|
19
19
|
var CopyButton = function CopyButton(_ref) {
|
|
20
20
|
var content = _ref.content,
|
|
@@ -23,7 +23,7 @@ import { getSchemaBasedOnStage } from '@atlaskit/adf-schema/schema-default';
|
|
|
23
23
|
import { reduce } from '@atlaskit/adf-utils/traverse';
|
|
24
24
|
import { ProviderFactory } from '@atlaskit/editor-common/provider-factory';
|
|
25
25
|
import { UnsupportedBlock, BaseTheme, WidthProvider, WithCreateAnalyticsEvent, IntlErrorBoundary } from '@atlaskit/editor-common/ui';
|
|
26
|
-
import { getAnalyticsAppearance, getAnalyticsEventSeverity, getResponseEndTime, startMeasure, stopMeasure, shouldForceTracking, measureTTI, browser } from '@atlaskit/editor-common/utils';
|
|
26
|
+
import { getAnalyticsAppearance, getAnalyticsEventSeverity, getResponseEndTime, startMeasure, stopMeasure, shouldForceTracking, measureTTI, getDistortedDurationMonitor, browser } from '@atlaskit/editor-common/utils';
|
|
27
27
|
import { normalizeFeatureFlags } from '@atlaskit/editor-common/normalize-feature-flags';
|
|
28
28
|
import { akEditorFullPageDefaultFontSize } from '@atlaskit/editor-shared-styles';
|
|
29
29
|
import { FabricChannel } from '@atlaskit/analytics-listeners';
|
|
@@ -50,12 +50,16 @@ import { RenderTracking } from '../../react/utils/performance/RenderTracking';
|
|
|
50
50
|
export var NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
51
51
|
export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
52
52
|
var packageName = "@atlaskit/renderer";
|
|
53
|
-
var packageVersion = "
|
|
53
|
+
var packageVersion = "104.0.0";
|
|
54
54
|
export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
55
55
|
_inherits(Renderer, _PureComponent);
|
|
56
56
|
|
|
57
57
|
var _super = _createSuper(Renderer);
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* This is used in measuring the Renderer Mount time and is then
|
|
61
|
+
* deleted once that measurement occurs.
|
|
62
|
+
*/
|
|
59
63
|
function Renderer(props) {
|
|
60
64
|
var _this;
|
|
61
65
|
|
|
@@ -63,6 +67,8 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
63
67
|
|
|
64
68
|
_this = _super.call(this, props);
|
|
65
69
|
|
|
70
|
+
_defineProperty(_assertThisInitialized(_this), "renderedMeasurementDistortedDurationMonitor", getDistortedDurationMonitor());
|
|
71
|
+
|
|
66
72
|
_defineProperty(_assertThisInitialized(_this), "featureFlags", memoizeOne(function (featureFlags) {
|
|
67
73
|
var normalizedFeatureFlags = normalizeFeatureFlags(featureFlags, {
|
|
68
74
|
objectFlagKeys: ['rendererRenderTracking']
|
|
@@ -231,6 +237,7 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
231
237
|
attributes: {
|
|
232
238
|
platform: PLATFORM.WEB,
|
|
233
239
|
duration: duration,
|
|
240
|
+
distortedDuration: _this2.renderedMeasurementDistortedDurationMonitor.distortedDuration,
|
|
234
241
|
ttfb: getResponseEndTime(),
|
|
235
242
|
nodes: reduce(_this2.props.document, function (acc, node) {
|
|
236
243
|
acc[node.type] = (acc[node.type] || 0) + 1;
|
|
@@ -240,6 +247,10 @@ export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
|
240
247
|
},
|
|
241
248
|
eventType: EVENT_TYPE.OPERATIONAL
|
|
242
249
|
});
|
|
250
|
+
|
|
251
|
+
_this2.renderedMeasurementDistortedDurationMonitor.cleanup();
|
|
252
|
+
|
|
253
|
+
delete _this2.renderedMeasurementDistortedDurationMonitor;
|
|
243
254
|
});
|
|
244
255
|
|
|
245
256
|
_this2.anchorLinkAnalytics();
|
package/dist/esm/version.json
CHANGED
|
@@ -17,6 +17,7 @@ declare type RendererStartAEP = AEP<ACTION.STARTED, ACTION_SUBJECT.RENDERER, und
|
|
|
17
17
|
declare type RendererRenderedAEP = AEP<ACTION.RENDERED, ACTION_SUBJECT.RENDERER, undefined, {
|
|
18
18
|
platform: PLATFORM.WEB;
|
|
19
19
|
duration: number;
|
|
20
|
+
distortedDuration: boolean;
|
|
20
21
|
ttfb?: number;
|
|
21
22
|
nodes: Record<string, number>;
|
|
22
23
|
severity?: SEVERITY;
|
|
@@ -16,6 +16,11 @@ export declare class Renderer extends PureComponent<RendererProps> {
|
|
|
16
16
|
private editorRef;
|
|
17
17
|
private mouseDownSelection?;
|
|
18
18
|
private id?;
|
|
19
|
+
/**
|
|
20
|
+
* This is used in measuring the Renderer Mount time and is then
|
|
21
|
+
* deleted once that measurement occurs.
|
|
22
|
+
*/
|
|
23
|
+
private renderedMeasurementDistortedDurationMonitor?;
|
|
19
24
|
constructor(props: RendererProps);
|
|
20
25
|
private anchorLinkAnalytics;
|
|
21
26
|
componentDidMount(): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "104.0.0",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -29,19 +29,20 @@
|
|
|
29
29
|
"@atlaskit/analytics-listeners": "^8.3.0",
|
|
30
30
|
"@atlaskit/analytics-namespaced-context": "^6.5.0",
|
|
31
31
|
"@atlaskit/analytics-next": "^8.2.0",
|
|
32
|
-
"@atlaskit/button": "^16.
|
|
32
|
+
"@atlaskit/button": "^16.5.0",
|
|
33
33
|
"@atlaskit/code": "^14.4.0",
|
|
34
|
-
"@atlaskit/editor-common": "^
|
|
34
|
+
"@atlaskit/editor-common": "^71.0.0",
|
|
35
35
|
"@atlaskit/editor-json-transformer": "^8.8.0",
|
|
36
|
+
"@atlaskit/editor-palette": "0.1.0",
|
|
36
37
|
"@atlaskit/editor-shared-styles": "^2.2.0",
|
|
37
38
|
"@atlaskit/icon": "^21.11.0",
|
|
38
|
-
"@atlaskit/media-card": "^74.
|
|
39
|
-
"@atlaskit/media-client": "^
|
|
39
|
+
"@atlaskit/media-card": "^74.3.0",
|
|
40
|
+
"@atlaskit/media-client": "^19.0.0",
|
|
40
41
|
"@atlaskit/media-common": "^2.17.0",
|
|
41
|
-
"@atlaskit/media-filmstrip": "^46.
|
|
42
|
-
"@atlaskit/media-ui": "^22.
|
|
43
|
-
"@atlaskit/media-viewer": "^47.
|
|
44
|
-
"@atlaskit/smart-card": "^23.
|
|
42
|
+
"@atlaskit/media-filmstrip": "^46.1.0",
|
|
43
|
+
"@atlaskit/media-ui": "^22.2.0",
|
|
44
|
+
"@atlaskit/media-viewer": "^47.2.0",
|
|
45
|
+
"@atlaskit/smart-card": "^23.7.0",
|
|
45
46
|
"@atlaskit/status": "^1.2.0",
|
|
46
47
|
"@atlaskit/task-decision": "^17.5.0",
|
|
47
48
|
"@atlaskit/theme": "^12.2.0",
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
"@atlaskit/avatar": "^21.1.0",
|
|
70
71
|
"@atlaskit/css-reset": "^6.3.0",
|
|
71
72
|
"@atlaskit/docs": "*",
|
|
72
|
-
"@atlaskit/editor-core": "^
|
|
73
|
+
"@atlaskit/editor-core": "^176.0.0",
|
|
73
74
|
"@atlaskit/editor-test-helpers": "^17.2.0",
|
|
74
75
|
"@atlaskit/link-provider": "^1.3.0",
|
|
75
76
|
"@atlaskit/logo": "^13.10.0",
|
|
@@ -78,7 +79,7 @@
|
|
|
78
79
|
"@atlaskit/media-test-helpers": "^30.0.0",
|
|
79
80
|
"@atlaskit/mention": "^21.0.0",
|
|
80
81
|
"@atlaskit/navigation-next": "^9.0.0",
|
|
81
|
-
"@atlaskit/profilecard": "^17.
|
|
82
|
+
"@atlaskit/profilecard": "^17.3.0",
|
|
82
83
|
"@atlaskit/radio": "^5.4.0",
|
|
83
84
|
"@atlaskit/range": "^7.0.0",
|
|
84
85
|
"@atlaskit/ssr": "*",
|
package/report.api.md
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
<!-- API Report Version: 2.2 -->
|
|
2
|
+
|
|
1
3
|
## API Report File for "@atlaskit/renderer"
|
|
2
4
|
|
|
3
|
-
> Do not edit this file.
|
|
5
|
+
> Do not edit this file. This report is auto-generated using [API Extractor](https://api-extractor.com/).
|
|
6
|
+
> [Learn more about API reports](https://hello.atlassian.net/wiki/spaces/UR/pages/1825484529/Package+API+Reports)
|
|
7
|
+
|
|
8
|
+
### Table of contents
|
|
9
|
+
|
|
10
|
+
- [Main Entry Types](#main-entry-types)
|
|
4
11
|
|
|
5
|
-
|
|
6
|
-
Generated API Report version: 2.0
|
|
7
|
-
-->
|
|
12
|
+
### Main Entry Types
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
<!--SECTION START: Main Entry Types-->
|
|
10
15
|
|
|
11
16
|
```ts
|
|
12
17
|
/// <reference types="react" />
|
|
@@ -139,28 +144,28 @@ type AEP<Action, ActionSubject, ActionSubjectID, Attributes, EventType> = {
|
|
|
139
144
|
|
|
140
145
|
// @public (undocumented)
|
|
141
146
|
type AnalyticsEventPayload<T = void> =
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
147
|
+
| AnchorLinkAEP
|
|
148
|
+
| AnnotationAEP
|
|
149
|
+
| AnnotationDeleteAEP
|
|
145
150
|
| ComponentCrashErrorAEP
|
|
146
|
-
|
|
|
147
|
-
|
|
|
151
|
+
| ExpandAEP
|
|
152
|
+
| HeadingAnchorLinkButtonAEP
|
|
153
|
+
| InvalidProsemirrorDocumentErrorAEP
|
|
154
|
+
| MediaLnkTransformedAEP
|
|
155
|
+
| RendererReRenderedAEP<T>
|
|
156
|
+
| RendererRenderedAEP
|
|
148
157
|
| RendererSelectAllCaughtAEP
|
|
149
158
|
| RendererSelectAllEscapedAEP
|
|
150
|
-
|
|
|
151
|
-
|
|
|
152
|
-
|
|
|
159
|
+
| RendererStartAEP
|
|
160
|
+
| RendererTTIAEP
|
|
161
|
+
| RendererUnsupportedContentLevelsTrackingErrored
|
|
162
|
+
| RendererUnsupportedContentLevelsTrackingSucceeded
|
|
153
163
|
| TableSortColumnAEP
|
|
154
|
-
|
|
|
155
|
-
| VisitMediaLinkAEP
|
|
156
|
-
| ExpandAEP
|
|
164
|
+
| TableSortColumnNotAllowedAEP
|
|
157
165
|
| UnsupportedContentPayload
|
|
158
166
|
| UnsupportedContentTooltipPayload
|
|
159
|
-
|
|
|
160
|
-
|
|
|
161
|
-
| MediaLnkTransformedAEP
|
|
162
|
-
| InvalidProsemirrorDocumentErrorAEP
|
|
163
|
-
| RendererTTIAEP;
|
|
167
|
+
| VisitLinkAEP
|
|
168
|
+
| VisitMediaLinkAEP;
|
|
164
169
|
|
|
165
170
|
// @public (undocumented)
|
|
166
171
|
type AnchorLinkAEP = UIAEP<
|
|
@@ -175,14 +180,14 @@ type AnchorLinkAEP = UIAEP<
|
|
|
175
180
|
|
|
176
181
|
// @public (undocumented)
|
|
177
182
|
type AnnotationActionType =
|
|
178
|
-
| ACTION.INSERTED
|
|
179
183
|
| ACTION.CLOSED
|
|
180
|
-
| ACTION.
|
|
184
|
+
| ACTION.CREATE_NOT_ALLOWED
|
|
181
185
|
| ACTION.DELETED
|
|
186
|
+
| ACTION.EDITED
|
|
187
|
+
| ACTION.INSERTED
|
|
182
188
|
| ACTION.OPENED
|
|
183
189
|
| ACTION.RESOLVED
|
|
184
|
-
| ACTION.VIEWED
|
|
185
|
-
| ACTION.CREATE_NOT_ALLOWED;
|
|
190
|
+
| ACTION.VIEWED;
|
|
186
191
|
|
|
187
192
|
// @public (undocumented)
|
|
188
193
|
type AnnotationAEP = AEP<
|
|
@@ -281,7 +286,7 @@ type HeadingAnchorLinksConfig = {
|
|
|
281
286
|
};
|
|
282
287
|
|
|
283
288
|
// @public (undocumented)
|
|
284
|
-
export type HeadingAnchorLinksProps =
|
|
289
|
+
export type HeadingAnchorLinksProps = HeadingAnchorLinksConfig | boolean;
|
|
285
290
|
|
|
286
291
|
// @public (undocumented)
|
|
287
292
|
type InvalidProsemirrorDocumentErrorAEP = AEP<
|
|
@@ -525,10 +530,10 @@ export interface RendererProps {
|
|
|
525
530
|
// (undocumented)
|
|
526
531
|
fadeOutHeight?: number;
|
|
527
532
|
featureFlags?:
|
|
533
|
+
| Partial<RawObjectFeatureFlags>
|
|
528
534
|
| {
|
|
529
535
|
[featureFlag: string]: boolean;
|
|
530
|
-
}
|
|
531
|
-
| Partial<RawObjectFeatureFlags>;
|
|
536
|
+
};
|
|
532
537
|
// (undocumented)
|
|
533
538
|
innerRef?: React.RefObject<HTMLDivElement>;
|
|
534
539
|
// (undocumented)
|
|
@@ -569,6 +574,7 @@ type RendererRenderedAEP = AEP<
|
|
|
569
574
|
{
|
|
570
575
|
platform: PLATFORM.WEB;
|
|
571
576
|
duration: number;
|
|
577
|
+
distortedDuration: boolean;
|
|
572
578
|
ttfb?: number;
|
|
573
579
|
nodes: Record<string, number>;
|
|
574
580
|
severity?: SEVERITY;
|
|
@@ -717,10 +723,10 @@ type StickyHeaderConfig = {
|
|
|
717
723
|
|
|
718
724
|
// @public (undocumented)
|
|
719
725
|
type StickyHeaderProps =
|
|
720
|
-
| boolean
|
|
721
726
|
| ({
|
|
722
727
|
show?: boolean;
|
|
723
|
-
} & StickyHeaderConfig)
|
|
728
|
+
} & StickyHeaderConfig)
|
|
729
|
+
| boolean;
|
|
724
730
|
|
|
725
731
|
// @public (undocumented)
|
|
726
732
|
type TableSortColumnAEP = AEP<
|
|
@@ -807,3 +813,5 @@ type VisitMediaLinkAEP = AEP<
|
|
|
807
813
|
|
|
808
814
|
// (No @packageDocumentation comment for this package)
|
|
809
815
|
```
|
|
816
|
+
|
|
817
|
+
<!--SECTION END: Main Entry Types-->
|