@atlaskit/renderer 96.0.2 → 98.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/cjs/react/hooks/use-bidi-warnings.js +45 -0
  3. package/dist/cjs/react/hooks/use-in-viewport.js +63 -0
  4. package/dist/cjs/react/index.js +5 -2
  5. package/dist/cjs/react/nodes/codeBlock/codeBlock.js +49 -0
  6. package/dist/cjs/react/nodes/codeBlock/components/codeBlockContainer.js +55 -0
  7. package/dist/cjs/react/nodes/codeBlock/components/lightWeightCodeBlock.js +82 -0
  8. package/dist/cjs/react/nodes/codeBlock/windowedCodeBlock.js +103 -0
  9. package/dist/cjs/react/nodes/codeBlockCopyButton.js +24 -27
  10. package/dist/cjs/react/nodes/heading.js +15 -18
  11. package/dist/cjs/react/nodes/index.js +34 -5
  12. package/dist/cjs/react/nodes/layoutColumn.js +7 -2
  13. package/dist/cjs/react/utils/clipboard.js +24 -0
  14. package/dist/cjs/ui/Renderer/index.js +12 -7
  15. package/dist/cjs/ui/Renderer/style.js +4 -2
  16. package/dist/cjs/version.json +1 -1
  17. package/dist/es2019/react/hooks/use-bidi-warnings.js +28 -0
  18. package/dist/es2019/react/hooks/use-in-viewport.js +25 -0
  19. package/dist/es2019/react/index.js +5 -2
  20. package/dist/es2019/react/nodes/codeBlock/codeBlock.js +33 -0
  21. package/dist/es2019/react/nodes/codeBlock/components/codeBlockContainer.js +44 -0
  22. package/dist/es2019/react/nodes/codeBlock/components/lightWeightCodeBlock.js +58 -0
  23. package/dist/es2019/react/nodes/codeBlock/windowedCodeBlock.js +58 -0
  24. package/dist/es2019/react/nodes/codeBlockCopyButton.js +24 -28
  25. package/dist/es2019/react/nodes/heading.js +16 -20
  26. package/dist/es2019/react/nodes/index.js +22 -5
  27. package/dist/es2019/react/nodes/layoutColumn.js +7 -3
  28. package/dist/es2019/react/utils/clipboard.js +9 -0
  29. package/dist/es2019/ui/Renderer/index.js +9 -4
  30. package/dist/es2019/ui/Renderer/style.js +3 -0
  31. package/dist/es2019/version.json +1 -1
  32. package/dist/esm/react/hooks/use-bidi-warnings.js +29 -0
  33. package/dist/esm/react/hooks/use-in-viewport.js +51 -0
  34. package/dist/esm/react/index.js +5 -2
  35. package/dist/esm/react/nodes/codeBlock/codeBlock.js +32 -0
  36. package/dist/esm/react/nodes/codeBlock/components/codeBlockContainer.js +40 -0
  37. package/dist/esm/react/nodes/codeBlock/components/lightWeightCodeBlock.js +57 -0
  38. package/dist/esm/react/nodes/codeBlock/windowedCodeBlock.js +80 -0
  39. package/dist/esm/react/nodes/codeBlockCopyButton.js +24 -27
  40. package/dist/esm/react/nodes/heading.js +15 -18
  41. package/dist/esm/react/nodes/index.js +33 -5
  42. package/dist/esm/react/nodes/layoutColumn.js +8 -3
  43. package/dist/esm/react/utils/clipboard.js +15 -0
  44. package/dist/esm/ui/Renderer/index.js +12 -6
  45. package/dist/esm/ui/Renderer/style.js +3 -2
  46. package/dist/esm/version.json +1 -1
  47. package/dist/types/react/hooks/use-bidi-warnings.d.ts +10 -0
  48. package/dist/types/react/hooks/use-in-viewport.d.ts +5 -0
  49. package/dist/types/react/index.d.ts +5 -1
  50. package/dist/types/react/nodes/{codeBlock.d.ts → codeBlock/codeBlock.d.ts} +1 -1
  51. package/dist/types/react/nodes/codeBlock/components/codeBlockContainer.d.ts +12 -0
  52. package/dist/types/react/nodes/codeBlock/components/lightWeightCodeBlock.d.ts +9 -0
  53. package/dist/types/react/nodes/codeBlock/windowedCodeBlock.d.ts +4 -0
  54. package/dist/types/react/nodes/index.d.ts +8 -5
  55. package/dist/types/react/utils/clipboard.d.ts +1 -0
  56. package/dist/types/ui/Renderer/types.d.ts +4 -0
  57. package/dist/types/ui/renderer-props.d.ts +2 -1
  58. package/package.json +18 -17
  59. package/report.api.md +590 -119
  60. package/dist/cjs/react/nodes/codeBlock.js +0 -74
  61. package/dist/cjs/react/nodes/copy-text-provider.js +0 -174
  62. package/dist/es2019/react/nodes/codeBlock.js +0 -59
  63. package/dist/es2019/react/nodes/copy-text-provider.js +0 -93
  64. package/dist/esm/react/nodes/codeBlock.js +0 -55
  65. package/dist/esm/react/nodes/copy-text-provider.js +0 -140
  66. package/dist/types/react/nodes/copy-text-provider.d.ts +0 -20
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 98.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`ab4f37635d9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ab4f37635d9) - Modified the renderer package to include a prop 'nodeComponents' that will override the nodes the renderer provides and allow us to render our own custom nodes
8
+ - [`2d979ce9877`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2d979ce9877) - [ux] ED-14945: Add windowed codeblock support in renderer (This feature sits behind a flag in the featureFlags prop 'allow-windowed-code-block')
9
+
10
+ ### Patch Changes
11
+
12
+ - [`153b80fdcda`](https://bitbucket.org/atlassian/atlassian-frontend/commits/153b80fdcda) - [ux] ED-15111: Fix aligned text and headings margin-top values in layouts in Renderer (by clearing them)
13
+ - [`07e38f1e753`](https://bitbucket.org/atlassian/atlassian-frontend/commits/07e38f1e753) - [ux] ED-14419: removed CopyTextProvider in favour of util function copyTextToClipboard()
14
+
15
+ This removes workarounds for unsupported browsers such as Internet Explorer and Safari releases before v12.
16
+
17
+ - Updated dependencies
18
+
19
+ ## 98.0.0
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies
24
+
25
+ ## 97.0.0
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies
30
+
3
31
  ## 96.0.2
4
32
 
5
33
  ### Patch Changes
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useBidiWarnings = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _reactIntlNext = require("react-intl-next");
13
+
14
+ var _bidiWarning = _interopRequireDefault(require("@atlaskit/code/bidi-warning"));
15
+
16
+ var _messages = require("@atlaskit/editor-common/messages");
17
+
18
+ var _bidiWarningDecorator = _interopRequireDefault(require("@atlaskit/code/bidi-warning-decorator"));
19
+
20
+ var useBidiWarnings = function useBidiWarnings(_ref) {
21
+ var _ref$enableWarningToo = _ref.enableWarningTooltip,
22
+ enableWarningTooltip = _ref$enableWarningToo === void 0 ? true : _ref$enableWarningToo;
23
+ var intl = (0, _reactIntlNext.useIntl)();
24
+ var warningLabel = intl.formatMessage(_messages.codeBidiWarningMessages.label);
25
+
26
+ var renderBidiWarnings = function renderBidiWarnings(text) {
27
+ return (0, _bidiWarningDecorator.default)(text, function (_ref2) {
28
+ var bidiCharacter = _ref2.bidiCharacter,
29
+ index = _ref2.index;
30
+ return /*#__PURE__*/_react.default.createElement(_bidiWarning.default, {
31
+ bidiCharacter: bidiCharacter,
32
+ key: index,
33
+ label: warningLabel,
34
+ tooltipEnabled: enableWarningTooltip
35
+ });
36
+ });
37
+ };
38
+
39
+ return {
40
+ renderBidiWarnings: renderBidiWarnings,
41
+ warningLabel: warningLabel
42
+ };
43
+ };
44
+
45
+ exports.useBidiWarnings = useBidiWarnings;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useInViewport = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _react = require("react");
13
+
14
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15
+
16
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
+
18
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
19
+
20
+ var useInViewport = function useInViewport() {
21
+ var trackingRef = (0, _react.useRef)(null);
22
+
23
+ var _useState = (0, _react.useState)(false),
24
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
25
+ isInViewport = _useState2[0],
26
+ setIsInViewport = _useState2[1];
27
+
28
+ (0, _react.useEffect)(function () {
29
+ if (!trackingRef || !(trackingRef !== null && trackingRef !== void 0 && trackingRef.current)) {
30
+ return;
31
+ }
32
+
33
+ var target = trackingRef.current;
34
+ var observer = new IntersectionObserver(function (entries) {
35
+ var _iterator = _createForOfIteratorHelper(entries),
36
+ _step;
37
+
38
+ try {
39
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
40
+ var entry = _step.value;
41
+
42
+ if (entry.isIntersecting) {
43
+ setIsInViewport(true);
44
+ }
45
+ }
46
+ } catch (err) {
47
+ _iterator.e(err);
48
+ } finally {
49
+ _iterator.f();
50
+ }
51
+ });
52
+ observer.observe(target);
53
+ return function () {
54
+ return observer.disconnect();
55
+ };
56
+ }, [trackingRef]);
57
+ return {
58
+ isInViewport: isInViewport,
59
+ trackingRef: trackingRef
60
+ };
61
+ };
62
+
63
+ exports.useInViewport = useInViewport;
@@ -93,8 +93,9 @@ var ReactSerializer = /*#__PURE__*/function () {
93
93
  var nodeKey = "".concat(node.type.name, "__").concat(_this.startPos);
94
94
 
95
95
  var serializedContent = _this.serializeFragment(node.content, _this.getNodeProps(node, parentInfo), (0, _nodes.toReact)(node, {
96
- allowSelectAllTrap: _this.allowSelectAllTrap
97
- }), nodeKey, {
96
+ allowSelectAllTrap: _this.allowSelectAllTrap,
97
+ allowWindowedCodeBlock: _this.allowWindowedCodeBlock
98
+ }, _this.nodeComponents), nodeKey, {
98
99
  parentIsIncompleteTask: parentIsIncompleteTask,
99
100
  path: [].concat((0, _toConsumableArray2.default)(currentPath), [node]),
100
101
  pos: _this.startPos
@@ -205,6 +206,8 @@ var ReactSerializer = /*#__PURE__*/function () {
205
206
  this.media = init.media;
206
207
  this.smartLinks = init.smartLinks;
207
208
  this.allowSelectAllTrap = init.allowSelectAllTrap;
209
+ this.nodeComponents = init.nodeComponents;
210
+ this.allowWindowedCodeBlock = init.allowWindowedCodeBlock;
208
211
  }
209
212
 
210
213
  (0, _createClass2.default)(ReactSerializer, [{
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = require("@emotion/react");
11
+
12
+ var _reactIntlNext = require("react-intl-next");
13
+
14
+ var _styles = require("@atlaskit/editor-common/styles");
15
+
16
+ var _code = require("@atlaskit/code");
17
+
18
+ var _messages = require("@atlaskit/editor-common/messages");
19
+
20
+ var _useFeatureFlags = require("../../../use-feature-flags");
21
+
22
+ var _codeBlockContainer = _interopRequireDefault(require("./components/codeBlockContainer"));
23
+
24
+ /** @jsx jsx */
25
+ function CodeBlock(props) {
26
+ var text = props.text,
27
+ language = props.language,
28
+ _props$allowCopyToCli = props.allowCopyToClipboard,
29
+ allowCopyToClipboard = _props$allowCopyToCli === void 0 ? false : _props$allowCopyToCli,
30
+ codeBidiWarningTooltipEnabled = props.codeBidiWarningTooltipEnabled;
31
+ var featureFlags = (0, _useFeatureFlags.useFeatureFlags)();
32
+ var codeBidiWarningLabel = props.intl.formatMessage(_messages.codeBidiWarningMessages.label);
33
+ var className = [_styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER, props.className].join(' ');
34
+ return (0, _react.jsx)(_codeBlockContainer.default, {
35
+ text: text,
36
+ className: className,
37
+ allowCopyToClipboard: allowCopyToClipboard
38
+ }, (0, _react.jsx)(_code.CodeBlock, {
39
+ language: language,
40
+ text: text,
41
+ codeBidiWarnings: featureFlags === null || featureFlags === void 0 ? void 0 : featureFlags.codeBidiWarnings,
42
+ codeBidiWarningLabel: codeBidiWarningLabel,
43
+ codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled
44
+ }));
45
+ }
46
+
47
+ var _default = (0, _reactIntlNext.injectIntl)(CodeBlock);
48
+
49
+ exports.default = _default;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+
12
+ var _react = require("@emotion/react");
13
+
14
+ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
15
+
16
+ var _colors = require("@atlaskit/theme/colors");
17
+
18
+ var _components = require("@atlaskit/theme/components");
19
+
20
+ var _constants = require("@atlaskit/theme/constants");
21
+
22
+ var _styles = require("@atlaskit/editor-common/styles");
23
+
24
+ var _codeBlockCopyButton = _interopRequireDefault(require("../../codeBlockCopyButton"));
25
+
26
+ var _templateObject;
27
+
28
+ // TODO: Quality ticket https://product-fabric.atlassian.net/browse/DSP-4118
29
+
30
+ /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
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 "])), _styles.CodeBlockSharedCssClassName.DS_CODEBLOCK, (0, _editorSharedStyles.relativeFontSizeToBase16)((0, _constants.fontSize)()), (0, _editorSharedStyles.overflowShadow)({
33
+ background: (0, _components.themed)({
34
+ light: _colors.N20,
35
+ dark: _colors.DN50
36
+ })(props),
37
+ width: "".concat((0, _constants.gridSize)(), "px")
38
+ }));
39
+ };
40
+
41
+ var CodeBlockContainer = function CodeBlockContainer(_ref) {
42
+ var text = _ref.text,
43
+ className = _ref.className,
44
+ allowCopyToClipboard = _ref.allowCopyToClipboard,
45
+ children = _ref.children;
46
+ return (0, _react.jsx)("div", {
47
+ className: className,
48
+ css: codeBlockStyleOverrides
49
+ }, allowCopyToClipboard ? (0, _react.jsx)(_codeBlockCopyButton.default, {
50
+ content: text
51
+ }) : null, children);
52
+ };
53
+
54
+ var _default = CodeBlockContainer;
55
+ exports.default = _default;
@@ -0,0 +1,82 @@
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.getLightWeightCodeBlockStylesForRootRendererStyleSheet = exports.default = exports.LightWeightCodeBlockCssClassName = void 0;
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _react2 = require("@emotion/react");
17
+
18
+ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
19
+
20
+ var _styles = require("@atlaskit/editor-common/styles");
21
+
22
+ var _useBidiWarnings2 = require("../../../hooks/use-bidi-warnings");
23
+
24
+ var _consts = require("../../../../consts");
25
+
26
+ var _templateObject, _templateObject2;
27
+
28
+ 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); }
29
+
30
+ 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; }
31
+
32
+ var lightWeightCodeBlockStyles = (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n .", " {\n cursor: text;\n }\n"])), _styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER);
33
+ var LightWeightCodeBlockCssClassName = {
34
+ CONTAINER: 'light-weight-code-block'
35
+ };
36
+ exports.LightWeightCodeBlockCssClassName = LightWeightCodeBlockCssClassName;
37
+
38
+ var getLightWeightCodeBlockStylesForRootRendererStyleSheet = function getLightWeightCodeBlockStylesForRootRendererStyleSheet() {
39
+ // We overwrite the rule that clears margin-top for first nested codeblocks, as
40
+ // our lightweight codeblock dom structure will always nest the codeblock inside
41
+ // an extra container div which would constantly be targeted. Now, top-level
42
+ // lightweight codeblock containers will not be targeted.
43
+ // NOTE: This must be added after other .code-block styles in the root
44
+ // Renderer stylesheet.
45
+ return (0, _react2.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n .", "\n > .", "\n .", " {\n margin-top: ", ";\n }\n "])), _consts.RendererCssClassName.DOCUMENT, LightWeightCodeBlockCssClassName.CONTAINER, _styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER, _editorSharedStyles.blockNodesVerticalMargin);
46
+ };
47
+
48
+ exports.getLightWeightCodeBlockStylesForRootRendererStyleSheet = getLightWeightCodeBlockStylesForRootRendererStyleSheet;
49
+ var LightWeightCodeBlock = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
50
+ var text = _ref.text,
51
+ _ref$codeBidiWarningT = _ref.codeBidiWarningTooltipEnabled,
52
+ codeBidiWarningTooltipEnabled = _ref$codeBidiWarningT === void 0 ? true : _ref$codeBidiWarningT,
53
+ className = _ref.className;
54
+ var theme = (0, _react2.useTheme)();
55
+ var textRows = (0, _react.useMemo)(function () {
56
+ return (text !== null && text !== void 0 ? text : '').split('\n');
57
+ }, [text]);
58
+
59
+ var _useBidiWarnings = (0, _useBidiWarnings2.useBidiWarnings)({
60
+ enableWarningTooltip: codeBidiWarningTooltipEnabled
61
+ }),
62
+ renderBidiWarnings = _useBidiWarnings.renderBidiWarnings;
63
+
64
+ var classNames = [LightWeightCodeBlockCssClassName.CONTAINER, className].join(' ');
65
+ return (0, _react2.jsx)("div", {
66
+ className: classNames,
67
+ ref: ref,
68
+ css: [(0, _styles.codeBlockSharedStyles)(theme), lightWeightCodeBlockStyles]
69
+ }, (0, _react2.jsx)("div", {
70
+ className: _styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER
71
+ }, (0, _react2.jsx)("div", {
72
+ className: _styles.CodeBlockSharedCssClassName.CODEBLOCK_LINE_NUMBER_GUTTER
73
+ }, textRows.map(function (_, index) {
74
+ return (0, _react2.jsx)("span", {
75
+ key: index
76
+ });
77
+ })), (0, _react2.jsx)("div", {
78
+ className: _styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTENT
79
+ }, (0, _react2.jsx)("code", null, renderBidiWarnings(text)))));
80
+ });
81
+ var _default = LightWeightCodeBlock;
82
+ exports.default = _default;
@@ -0,0 +1,103 @@
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 = void 0;
11
+
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
16
+ var _react = require("react");
17
+
18
+ var _react2 = require("@emotion/react");
19
+
20
+ var _styles = require("@atlaskit/editor-common/styles");
21
+
22
+ var _useFeatureFlags = require("../../../use-feature-flags");
23
+
24
+ var _useInViewport2 = require("../../hooks/use-in-viewport");
25
+
26
+ var _useBidiWarnings2 = require("../../hooks/use-bidi-warnings");
27
+
28
+ var _lightWeightCodeBlock = _interopRequireDefault(require("./components/lightWeightCodeBlock"));
29
+
30
+ var _codeBlockContainer = _interopRequireDefault(require("./components/codeBlockContainer"));
31
+
32
+ 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); }
33
+
34
+ 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; }
35
+
36
+ var LazyAkCodeBlock = /*#__PURE__*/(0, _react.lazy)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
37
+ return _regenerator.default.wrap(function _callee$(_context) {
38
+ while (1) {
39
+ switch (_context.prev = _context.next) {
40
+ case 0:
41
+ return _context.abrupt("return", Promise.resolve().then(function () {
42
+ return _interopRequireWildcard(require('@atlaskit/code/block'));
43
+ }));
44
+
45
+ case 1:
46
+ case "end":
47
+ return _context.stop();
48
+ }
49
+ }
50
+ }, _callee);
51
+ })));
52
+
53
+ var joinWithSpaces = function joinWithSpaces() {
54
+ for (var _len = arguments.length, strs = new Array(_len), _key = 0; _key < _len; _key++) {
55
+ strs[_key] = arguments[_key];
56
+ }
57
+
58
+ return strs.join(' ');
59
+ };
60
+
61
+ var MemoizedLightWeightCodeBlock = /*#__PURE__*/(0, _react.memo)(_lightWeightCodeBlock.default);
62
+
63
+ var WindowedCodeBlock = function WindowedCodeBlock(_ref2) {
64
+ var text = _ref2.text,
65
+ language = _ref2.language,
66
+ allowCopyToClipboard = _ref2.allowCopyToClipboard,
67
+ codeBidiWarningTooltipEnabled = _ref2.codeBidiWarningTooltipEnabled,
68
+ rootClassName = _ref2.className;
69
+ var featureFlags = (0, _useFeatureFlags.useFeatureFlags)();
70
+
71
+ var _useBidiWarnings = (0, _useBidiWarnings2.useBidiWarnings)({
72
+ enableWarningTooltip: codeBidiWarningTooltipEnabled
73
+ }),
74
+ warningLabel = _useBidiWarnings.warningLabel;
75
+
76
+ var _useInViewport = (0, _useInViewport2.useInViewport)(),
77
+ isInViewport = _useInViewport.isInViewport,
78
+ trackingRef = _useInViewport.trackingRef;
79
+
80
+ var className = joinWithSpaces(_styles.CodeBlockSharedCssClassName.CODEBLOCK_CONTAINER, rootClassName);
81
+ var memoizedLightWeightCodeBlock = (0, _react2.jsx)(MemoizedLightWeightCodeBlock, {
82
+ ref: trackingRef,
83
+ text: text,
84
+ codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled,
85
+ className: rootClassName
86
+ });
87
+ return isInViewport ? (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(_react.Suspense, {
88
+ fallback: memoizedLightWeightCodeBlock
89
+ }, (0, _react2.jsx)(_codeBlockContainer.default, {
90
+ className: className,
91
+ text: text,
92
+ allowCopyToClipboard: allowCopyToClipboard
93
+ }, (0, _react2.jsx)(LazyAkCodeBlock, {
94
+ language: language,
95
+ text: text,
96
+ codeBidiWarnings: featureFlags === null || featureFlags === void 0 ? void 0 : featureFlags.codeBidiWarnings,
97
+ codeBidiWarningLabel: warningLabel,
98
+ codeBidiWarningTooltipEnabled: codeBidiWarningTooltipEnabled
99
+ })))) : memoizedLightWeightCodeBlock;
100
+ };
101
+
102
+ var _default = WindowedCodeBlock;
103
+ exports.default = _default;
@@ -27,7 +27,7 @@ var _copy = _interopRequireDefault(require("@atlaskit/icon/glyph/copy"));
27
27
 
28
28
  var _colors = require("@atlaskit/theme/colors");
29
29
 
30
- var _copyTextProvider = require("./copy-text-provider");
30
+ var _clipboard = require("../utils/clipboard");
31
31
 
32
32
  var _messages = require("../../messages");
33
33
 
@@ -60,32 +60,29 @@ var CopyButton = function CopyButton(_ref) {
60
60
  setClassName('copy-to-clipboard');
61
61
  };
62
62
 
63
- return (0, _react.jsx)(_copyTextProvider.CopyTextConsumer, null, function (_ref2) {
64
- var copyTextToClipboard = _ref2.copyTextToClipboard;
65
- return (0, _react.jsx)("span", {
66
- css: copyButtonWrapperStyles
67
- }, (0, _react.jsx)(_tooltip.default, {
68
- content: tooltip,
69
- hideTooltipOnClick: false,
70
- position: "top"
71
- }, (0, _react.jsx)("div", {
72
- onMouseLeave: onMouseLeave
73
- }, (0, _react.jsx)(_customThemeButton.default, {
74
- className: className,
75
- "aria-label": tooltip,
76
- spacing: "compact",
77
- appearance: "subtle",
78
- "aria-haspopup": true,
79
- iconBefore: (0, _react.jsx)(_copy.default, {
80
- label: tooltip
81
- }),
82
- onClick: function onClick() {
83
- copyTextToClipboard(content);
84
- setTooltip(intl.formatMessage(_messages.codeBlockCopyButtonMessages.copiedCodeToClipboard));
85
- setClassName('copy-to-clipboard clicked');
86
- }
87
- }))));
88
- });
63
+ return (0, _react.jsx)("span", {
64
+ css: copyButtonWrapperStyles
65
+ }, (0, _react.jsx)(_tooltip.default, {
66
+ content: tooltip,
67
+ hideTooltipOnClick: false,
68
+ position: "top"
69
+ }, (0, _react.jsx)("div", {
70
+ onMouseLeave: onMouseLeave
71
+ }, (0, _react.jsx)(_customThemeButton.default, {
72
+ className: className,
73
+ "aria-label": tooltip,
74
+ spacing: "compact",
75
+ appearance: "subtle",
76
+ "aria-haspopup": true,
77
+ iconBefore: (0, _react.jsx)(_copy.default, {
78
+ label: tooltip
79
+ }),
80
+ onClick: function onClick() {
81
+ (0, _clipboard.copyTextToClipboard)(content);
82
+ setTooltip(intl.formatMessage(_messages.codeBlockCopyButtonMessages.copiedCodeToClipboard));
83
+ setClassName('copy-to-clipboard clicked');
84
+ }
85
+ }))));
89
86
  };
90
87
 
91
88
  var _default = (0, _reactIntlNext.injectIntl)(CopyButton);
@@ -17,7 +17,7 @@ var _enums = require("../../analytics/enums");
17
17
 
18
18
  var _analyticsContext = _interopRequireDefault(require("../../analytics/analyticsContext"));
19
19
 
20
- var _copyTextProvider = require("./copy-text-provider");
20
+ var _clipboard = require("../utils/clipboard");
21
21
 
22
22
  var getCurrentUrlWithHash = function getCurrentUrlWithHash() {
23
23
  var hash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
@@ -57,23 +57,20 @@ function Heading(props) {
57
57
  var headingIdToUse = invisible ? undefined : headingId;
58
58
  return /*#__PURE__*/_react.default.createElement(HX, (0, _extends2.default)({
59
59
  id: headingIdToUse
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) {
61
- var copyTextToClipboard = _ref.copyTextToClipboard;
62
- return headingId && /*#__PURE__*/_react.default.createElement(_analyticsContext.default.Consumer, null, function (_ref2) {
63
- var fireAnalyticsEvent = _ref2.fireAnalyticsEvent;
64
- return /*#__PURE__*/_react.default.createElement(_headingAnchor.default, {
65
- enableNestedHeaderLinks: enableNestedHeaderLinks,
66
- level: props.level,
67
- onCopyText: function onCopyText() {
68
- fireAnalyticsEvent({
69
- action: _enums.ACTION.CLICKED,
70
- actionSubject: _enums.ACTION_SUBJECT.BUTTON,
71
- actionSubjectId: _enums.ACTION_SUBJECT_ID.HEADING_ANCHOR_LINK,
72
- eventType: _enums.EVENT_TYPE.UI
73
- });
74
- return copyTextToClipboard(getCurrentUrlWithHash(headingId));
75
- }
76
- });
60
+ }, dataAttributes), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, showAnchorLink && isRightAligned ? WrapChildTextInSpan(props.children) : props.children, showAnchorLink && headingId && /*#__PURE__*/_react.default.createElement(_analyticsContext.default.Consumer, null, function (_ref) {
61
+ var fireAnalyticsEvent = _ref.fireAnalyticsEvent;
62
+ return /*#__PURE__*/_react.default.createElement(_headingAnchor.default, {
63
+ enableNestedHeaderLinks: enableNestedHeaderLinks,
64
+ level: props.level,
65
+ onCopyText: function onCopyText() {
66
+ fireAnalyticsEvent({
67
+ action: _enums.ACTION.CLICKED,
68
+ actionSubject: _enums.ACTION_SUBJECT.BUTTON,
69
+ actionSubjectId: _enums.ACTION_SUBJECT_ID.HEADING_ANCHOR_LINK,
70
+ eventType: _enums.EVENT_TYPE.UI
71
+ });
72
+ return (0, _clipboard.copyTextToClipboard)(getCurrentUrlWithHash(headingId));
73
+ }
77
74
  });
78
75
  })));
79
76
  }
@@ -139,12 +139,14 @@ Object.defineProperty(exports, "UnknownBlock", {
139
139
  return _unknownBlock.default;
140
140
  }
141
141
  });
142
- exports.isText = exports.isEmojiDoc = void 0;
142
+ exports.isText = exports.isEmojiDoc = exports.WindowedCodeBlock = void 0;
143
143
  exports.isTextNode = isTextNode;
144
144
  exports.toReact = exports.nodeToReact = exports.mergeTextNodes = exports.isTextWrapper = void 0;
145
145
 
146
146
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
147
147
 
148
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
149
+
148
150
  var _reactLoadable = _interopRequireDefault(require("react-loadable"));
149
151
 
150
152
  var _blockquote = _interopRequireDefault(require("./blockquote"));
@@ -189,14 +191,31 @@ var _unknownBlock = _interopRequireDefault(require("./unknownBlock"));
189
191
 
190
192
  var _ui = require("@atlaskit/editor-common/ui");
191
193
 
194
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
195
+
196
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
197
+
192
198
  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); }
193
199
 
194
200
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(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; }
195
201
 
202
+ var WindowedCodeBlock = (0, _reactLoadable.default)({
203
+ loader: function loader() {
204
+ return Promise.resolve().then(function () {
205
+ return _interopRequireWildcard(require('./codeBlock/windowedCodeBlock'));
206
+ }).then(function (mod) {
207
+ return mod.default;
208
+ });
209
+ },
210
+ loading: function loading() {
211
+ return null;
212
+ }
213
+ });
214
+ exports.WindowedCodeBlock = WindowedCodeBlock;
196
215
  var CodeBlock = (0, _reactLoadable.default)({
197
216
  loader: function loader() {
198
217
  return Promise.resolve().then(function () {
199
- return _interopRequireWildcard(require('./codeBlock'));
218
+ return _interopRequireWildcard(require('./codeBlock/codeBlock'));
200
219
  }).then(function (mod) {
201
220
  return mod.default;
202
221
  });
@@ -432,7 +451,6 @@ var nodeToReact = {
432
451
  bulletList: _bulletList.default,
433
452
  blockCard: BlockCard,
434
453
  caption: _caption.default,
435
- codeBlock: CodeBlock,
436
454
  date: Date,
437
455
  decisionItem: DecisionItem,
438
456
  decisionList: DecisionList,
@@ -473,12 +491,23 @@ var nodeToReact = {
473
491
  };
474
492
  exports.nodeToReact = nodeToReact;
475
493
 
476
- var toReact = function toReact(node, flags) {
494
+ var toReact = function toReact(node, flags, nodeComponents) {
477
495
  if (node.type.name === 'doc' && (flags === null || flags === void 0 ? void 0 : flags.allowSelectAllTrap) === true) {
478
496
  return _doc.DocWithSelectAllTrap;
479
497
  }
480
498
 
481
- return nodeToReact[node.type.name];
499
+ if (node.type.name === 'codeBlock') {
500
+ if ((flags === null || flags === void 0 ? void 0 : flags.allowWindowedCodeBlock) === true) {
501
+ return WindowedCodeBlock;
502
+ }
503
+
504
+ return CodeBlock;
505
+ } // Allowing custom components to override those provided in nodeToReact
506
+
507
+
508
+ var nodes = _objectSpread(_objectSpread({}, nodeToReact), nodeComponents);
509
+
510
+ return nodes[node.type.name];
482
511
  };
483
512
 
484
513
  exports.toReact = toReact;