@atlaskit/editor-common 125.2.1 → 125.4.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 (95) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/cjs/element-browser/components/ElementBrowserLoader.js +8 -31
  3. package/dist/cjs/extensions/buildMenuItem.js +6 -3
  4. package/dist/cjs/extensions/extension-handlers.js +17 -96
  5. package/dist/cjs/floating-toolbar/DropdownMenuExtensionItems.js +4 -25
  6. package/dist/cjs/icons/index.js +10 -33
  7. package/dist/cjs/monitoring/error.js +1 -1
  8. package/dist/cjs/quick-insert/CompactQuickInsertMenuItem.compiled.css +0 -1
  9. package/dist/cjs/quick-insert/CompactQuickInsertMenuItem.js +22 -28
  10. package/dist/cjs/quick-insert/QuickInsertHoverPreview.compiled.css +42 -1
  11. package/dist/cjs/quick-insert/QuickInsertHoverPreview.js +147 -68
  12. package/dist/cjs/quick-insert/QuickInsertMenuItem.js +4 -0
  13. package/dist/cjs/quick-insert/QuickInsertMenuSection.js +11 -4
  14. package/dist/cjs/quick-insert/assets/index.js +257 -888
  15. package/dist/cjs/quick-insert/confluence-attribution-icon.js +18 -0
  16. package/dist/cjs/quick-insert/jira-attribution-icon.js +18 -0
  17. package/dist/cjs/quick-insert/messages.js +30 -0
  18. package/dist/cjs/quick-insert/preview.js +5 -0
  19. package/dist/cjs/quick-insert/snippetPreviewImageUrls.js +43 -43
  20. package/dist/cjs/quick-insert/use-menu-list-height.js +58 -0
  21. package/dist/cjs/quick-insert/use-menu-popup-sizing.js +60 -0
  22. package/dist/cjs/toolbar-flag-check.js +2 -2
  23. package/dist/cjs/ui/DropList/index.js +1 -1
  24. package/dist/cjs/ui/Mention/mention-with-profilecard.js +19 -30
  25. package/dist/cjs/ui/Popup/index.js +101 -17
  26. package/dist/es2019/element-browser/components/ElementBrowserLoader.js +2 -16
  27. package/dist/es2019/extensions/buildMenuItem.js +5 -1
  28. package/dist/es2019/extensions/extension-handlers.js +15 -70
  29. package/dist/es2019/floating-toolbar/DropdownMenuExtensionItems.js +2 -16
  30. package/dist/es2019/icons/index.js +3 -17
  31. package/dist/es2019/monitoring/error.js +1 -1
  32. package/dist/es2019/quick-insert/CompactQuickInsertMenuItem.compiled.css +0 -1
  33. package/dist/es2019/quick-insert/CompactQuickInsertMenuItem.js +20 -29
  34. package/dist/es2019/quick-insert/QuickInsertHoverPreview.compiled.css +42 -1
  35. package/dist/es2019/quick-insert/QuickInsertHoverPreview.js +130 -55
  36. package/dist/es2019/quick-insert/QuickInsertMenuItem.js +4 -0
  37. package/dist/es2019/quick-insert/QuickInsertMenuSection.js +11 -4
  38. package/dist/es2019/quick-insert/assets/index.js +66 -386
  39. package/dist/es2019/quick-insert/confluence-attribution-icon.js +10 -0
  40. package/dist/es2019/quick-insert/jira-attribution-icon.js +10 -0
  41. package/dist/es2019/quick-insert/messages.js +30 -0
  42. package/dist/es2019/quick-insert/preview.js +1 -0
  43. package/dist/es2019/quick-insert/snippetPreviewImageUrls.js +43 -43
  44. package/dist/es2019/quick-insert/use-menu-list-height.js +37 -0
  45. package/dist/es2019/quick-insert/use-menu-popup-sizing.js +49 -0
  46. package/dist/es2019/toolbar-flag-check.js +2 -2
  47. package/dist/es2019/ui/DropList/index.js +1 -1
  48. package/dist/es2019/ui/Mention/mention-with-profilecard.js +12 -15
  49. package/dist/es2019/ui/Popup/index.js +89 -7
  50. package/dist/esm/element-browser/components/ElementBrowserLoader.js +6 -28
  51. package/dist/esm/extensions/buildMenuItem.js +6 -3
  52. package/dist/esm/extensions/extension-handlers.js +17 -97
  53. package/dist/esm/floating-toolbar/DropdownMenuExtensionItems.js +4 -24
  54. package/dist/esm/icons/index.js +7 -29
  55. package/dist/esm/monitoring/error.js +1 -1
  56. package/dist/esm/quick-insert/CompactQuickInsertMenuItem.compiled.css +0 -1
  57. package/dist/esm/quick-insert/CompactQuickInsertMenuItem.js +23 -29
  58. package/dist/esm/quick-insert/QuickInsertHoverPreview.compiled.css +42 -1
  59. package/dist/esm/quick-insert/QuickInsertHoverPreview.js +150 -68
  60. package/dist/esm/quick-insert/QuickInsertMenuItem.js +4 -0
  61. package/dist/esm/quick-insert/QuickInsertMenuSection.js +11 -4
  62. package/dist/esm/quick-insert/assets/index.js +194 -764
  63. package/dist/esm/quick-insert/confluence-attribution-icon.js +12 -0
  64. package/dist/esm/quick-insert/jira-attribution-icon.js +12 -0
  65. package/dist/esm/quick-insert/messages.js +30 -0
  66. package/dist/esm/quick-insert/preview.js +1 -0
  67. package/dist/esm/quick-insert/snippetPreviewImageUrls.js +43 -43
  68. package/dist/esm/quick-insert/use-menu-list-height.js +51 -0
  69. package/dist/esm/quick-insert/use-menu-popup-sizing.js +53 -0
  70. package/dist/esm/toolbar-flag-check.js +2 -2
  71. package/dist/esm/ui/DropList/index.js +1 -1
  72. package/dist/esm/ui/Mention/mention-with-profilecard.js +16 -25
  73. package/dist/esm/ui/Popup/index.js +101 -17
  74. package/dist/types/extensions/types/extension-manifest.d.ts +5 -0
  75. package/dist/types/extensions/types/utils.d.ts +2 -0
  76. package/dist/types/icons/index.d.ts +3 -5
  77. package/dist/types/provider-factory/profile-card-provider.d.ts +14 -1
  78. package/dist/types/provider-factory/quick-insert-provider.d.ts +3 -0
  79. package/dist/types/quick-insert/CompactQuickInsertMenuItem.d.ts +1 -1
  80. package/dist/types/quick-insert/QuickInsertHoverPreview.d.ts +7 -6
  81. package/dist/types/quick-insert/QuickInsertMenuItem.d.ts +7 -2
  82. package/dist/types/quick-insert/assets/index.d.ts +32 -34
  83. package/dist/types/quick-insert/confluence-attribution-icon.d.ts +3 -0
  84. package/dist/types/quick-insert/jira-attribution-icon.d.ts +3 -0
  85. package/dist/types/quick-insert/messages.d.ts +5 -2
  86. package/dist/types/quick-insert/preview.d.ts +16 -0
  87. package/dist/types/quick-insert/use-menu-list-height.d.ts +6 -0
  88. package/dist/types/quick-insert/use-menu-popup-sizing.d.ts +11 -0
  89. package/dist/types/ui/Popup/index.d.ts +11 -0
  90. package/package.json +6 -6
  91. package/quick-insert/confluence-attribution-icon/package.json +10 -0
  92. package/quick-insert/jira-attribution-icon/package.json +10 -0
  93. package/quick-insert/preview/package.json +10 -0
  94. package/quick-insert/use-menu-list-height/package.json +10 -0
  95. package/quick-insert/use-menu-popup-sizing/package.json +10 -0
@@ -11,93 +11,172 @@ require("./QuickInsertHoverPreview.compiled.css");
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var React = _react;
13
13
  var _runtime = require("@compiled/react/runtime");
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
15
  var _reactDom = require("react-dom");
17
- var _main = require("@atlaskit/popper/main");
16
+ var _reactIntl = require("react-intl");
17
+ var _reactPopper = require("@atlaskit/popper/react-popper");
18
+ var _text = require("@atlaskit/primitives/compiled/text");
18
19
  var _useThemeObserver2 = require("@atlaskit/tokens/use-theme-observer");
20
+ var _messages = require("./messages");
19
21
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
- var PREVIEW_WIDTH = 294;
23
- var PREVIEW_OFFSET = [-4, 4];
22
+ // Viewport calculations and multiline clamping require styles outside @atlaskit/css's schema.
23
+ // Viewport clamping requires modifiers, which the top-layer adapter does not support.
24
24
  var PREVIEW_MODIFIERS = [{
25
+ name: 'offset',
26
+ options: {
27
+ offset: [0, 4]
28
+ }
29
+ }, {
30
+ name: 'flip',
31
+ options: {
32
+ fallbackPlacements: ['left-start'],
33
+ // Choose the side by horizontal space; vertical overflow is shifted into view.
34
+ altAxis: false,
35
+ padding: 8,
36
+ rootBoundary: 'viewport'
37
+ }
38
+ }, {
25
39
  name: 'preventOverflow',
26
40
  options: {
27
- mainAxis: false
41
+ mainAxis: true,
42
+ altAxis: true,
43
+ tether: false,
44
+ padding: 8,
45
+ rootBoundary: 'viewport'
28
46
  }
29
47
  }];
30
48
  var styles = {
31
- image: "_1e0c1ule _1pby16oo",
32
- hidden: "_3um015vq",
33
- visible: "_3um0ewfl"
49
+ positioner: "_c71lk6is _p12f1oec _1pby16oo",
50
+ panel: "_2rko1qi0 _1reo15vq _18m915vq _1rjcutpp _18zrutpp _vchhusvi _bfhk1bhr _16qs130s _c71l1kw7 _p12f1osq _1bsbncxg",
51
+ content: "_zulpu2gc _1e0c1txw _2lx21bp4",
52
+ title: "_11c81qyo _1reo15vq _18m915vq _syazazsu _1i4qfg65 _1e0ccj1k _sudp1e54 _1yyjcs5v",
53
+ description: "_11c8fhey _1reo15vq _18m915vq _syazi7uo _1e0ccj1k _1i4qfg65 _sudp1e54 _1yyjegat",
54
+ imageArea: "_2rko12b0 _1reo15vq _18m915vq _bfhkhfxm _4t3i68cl _6rthu2gc _p12f1osq _1bsbp3fh",
55
+ image: "_1e0c1ule _4t3i1osq _5ral1f51 _1bsb1osq",
56
+ imageHidden: "_3um015vq",
57
+ attribution: "_11c8wadc _zulp1b66 _4cvr1h6o _syazazsu _1e0c1txw _1i4qfg65",
58
+ attributionIcon: "_16jlidpf _1o9zidpf _i0dlexct _4cvr1h6o _1e0c1txw _4t3i7vkz _1bah1h6o _1bsb7vkz"
34
59
  };
35
60
 
36
- /** A non-interactive visual preview: keep focus and keyboard handling in the editor. */
61
+ /** The selected item's description and attribution are announced through its aria-describedby. */
37
62
  var QuickInsertHoverPreview = exports.QuickInsertHoverPreview = function QuickInsertHoverPreview(_ref) {
38
- var previewImageUrls = _ref.previewImageUrls,
39
- referenceElement = _ref.referenceElement;
63
+ var description = _ref.description,
64
+ id = _ref.id,
65
+ preview = _ref.preview,
66
+ referenceElement = _ref.referenceElement,
67
+ title = _ref.title;
40
68
  var _useThemeObserver = (0, _useThemeObserver2.useThemeObserver)(),
41
69
  colorMode = _useThemeObserver.colorMode;
42
- var previewImageUrl = colorMode === 'dark' && previewImageUrls.dark ? previewImageUrls.dark : previewImageUrls.light;
43
- return /*#__PURE__*/React.createElement(QuickInsertHoverPreviewImage, {
44
- key: previewImageUrl,
45
- previewImageUrl: previewImageUrl,
46
- referenceElement: referenceElement
47
- });
48
- };
49
- var QuickInsertHoverPreviewImage = function QuickInsertHoverPreviewImage(_ref2) {
50
- var previewImageUrl = _ref2.previewImageUrl,
51
- referenceElement = _ref2.referenceElement;
52
- var _useState = (0, _react.useState)(false),
53
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
54
- hasFailed = _useState2[0],
55
- setHasFailed = _useState2[1];
56
- var _useState3 = (0, _react.useState)(),
57
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
58
- dimensions = _useState4[0],
59
- setDimensions = _useState4[1];
60
- if (hasFailed) {
61
- return null;
62
- }
63
-
64
- // Unlike a dialog popup, this decorative preview must not introduce focus or ARIA ownership.
65
- return /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/React.createElement(_main.Popper, {
66
- offset: PREVIEW_OFFSET,
70
+ var imageUrl = preview.image ? colorMode === 'dark' && preview.image.dark ? preview.image.dark : preview.image.light : undefined;
71
+ var hasAccessibleContent = Boolean(description || preview.attribution);
72
+ return /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/React.createElement(_reactPopper.Popper, {
67
73
  placement: "right-start",
68
74
  referenceElement: referenceElement,
69
75
  strategy: "fixed",
70
- shouldFitViewport: true,
71
76
  modifiers: PREVIEW_MODIFIERS
72
- }, function (_ref3) {
73
- var ref = _ref3.ref,
74
- style = _ref3.style;
75
- return /*#__PURE__*/React.createElement("img", {
77
+ }, function (_ref2) {
78
+ var ref = _ref2.ref,
79
+ style = _ref2.style,
80
+ update = _ref2.update;
81
+ return /*#__PURE__*/React.createElement("div", {
76
82
  ref: ref,
77
- style: _objectSpread(_objectSpread({}, style), {}, {
78
- height: dimensions === null || dimensions === void 0 ? void 0 : dimensions.height,
79
- width: dimensions === null || dimensions === void 0 ? void 0 : dimensions.width
80
- }),
81
- "aria-hidden": "true",
82
- "data-testid": "quick-insert-hover-preview",
83
- src: previewImageUrl,
84
- alt: "",
85
- onLoad: function onLoad(event) {
86
- var _event$currentTarget = event.currentTarget,
87
- naturalHeight = _event$currentTarget.naturalHeight,
88
- naturalWidth = _event$currentTarget.naturalWidth;
89
- if (naturalWidth === 0) {
90
- return;
91
- }
92
- setDimensions({
93
- height: naturalHeight / naturalWidth * PREVIEW_WIDTH,
94
- width: PREVIEW_WIDTH
95
- });
96
- },
97
- onError: function onError() {
98
- return setHasFailed(true);
99
- },
100
- className: (0, _runtime.ax)([styles.image, dimensions ? styles.visible : styles.hidden])
101
- });
83
+ style: style,
84
+ className: (0, _runtime.ax)([styles.positioner])
85
+ }, /*#__PURE__*/React.createElement(QuickInsertPreviewPanel, {
86
+ description: description,
87
+ id: hasAccessibleContent ? id : undefined,
88
+ imageUrl: imageUrl,
89
+ preview: preview,
90
+ referenceElement: referenceElement,
91
+ title: title,
92
+ update: update
93
+ }));
102
94
  }), referenceElement.ownerDocument.body);
95
+ };
96
+ var QuickInsertPreviewPanel = function QuickInsertPreviewPanel(_ref3) {
97
+ var _preview$attribution;
98
+ var description = _ref3.description,
99
+ id = _ref3.id,
100
+ imageUrl = _ref3.imageUrl,
101
+ preview = _ref3.preview,
102
+ referenceElement = _ref3.referenceElement,
103
+ title = _ref3.title,
104
+ update = _ref3.update;
105
+ var _useIntl = (0, _reactIntl.useIntl)(),
106
+ formatMessage = _useIntl.formatMessage;
107
+ var _useState = (0, _react.useState)(null),
108
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
109
+ panelElement = _useState2[0],
110
+ setPanelElement = _useState2[1];
111
+ var AttributionIcon = (_preview$attribution = preview.attribution) === null || _preview$attribution === void 0 ? void 0 : _preview$attribution.icon;
112
+ (0, _react.useLayoutEffect)(function () {
113
+ var _referenceElement$own;
114
+ void update();
115
+ var ResizeObserverConstructor = (_referenceElement$own = referenceElement.ownerDocument.defaultView) === null || _referenceElement$own === void 0 ? void 0 : _referenceElement$own.ResizeObserver;
116
+ if (!panelElement || !ResizeObserverConstructor) {
117
+ return;
118
+ }
119
+ var observer = new ResizeObserverConstructor(function () {
120
+ return void update();
121
+ });
122
+ observer.observe(panelElement);
123
+ return function () {
124
+ return observer.disconnect();
125
+ };
126
+ }, [panelElement, referenceElement, update]);
127
+ return /*#__PURE__*/React.createElement("div", {
128
+ ref: setPanelElement,
129
+ id: id,
130
+ role: id ? 'tooltip' : undefined,
131
+ "data-testid": "quick-insert-preview-panel",
132
+ className: (0, _runtime.ax)([styles.panel])
133
+ }, imageUrl && /*#__PURE__*/React.createElement(PreviewImage, {
134
+ key: imageUrl,
135
+ imageUrl: imageUrl
136
+ }), /*#__PURE__*/React.createElement("div", {
137
+ className: (0, _runtime.ax)([styles.content])
138
+ }, /*#__PURE__*/React.createElement("div", {
139
+ "aria-hidden": "true",
140
+ className: (0, _runtime.ax)([styles.title])
141
+ }, title), description && /*#__PURE__*/React.createElement("div", {
142
+ className: (0, _runtime.ax)([styles.description])
143
+ }, description), preview.attribution && /*#__PURE__*/React.createElement("div", {
144
+ className: (0, _runtime.ax)([styles.attribution])
145
+ }, AttributionIcon && /*#__PURE__*/React.createElement("span", {
146
+ "aria-hidden": "true",
147
+ className: (0, _runtime.ax)([styles.attributionIcon])
148
+ }, /*#__PURE__*/React.createElement(AttributionIcon, null)), /*#__PURE__*/React.createElement(_text.Text, {
149
+ size: "small",
150
+ color: "color.text.subtle"
151
+ }, AttributionIcon ? preview.attribution.name : formatMessage(_messages.messages.previewAttributionBy, {
152
+ name: preview.attribution.name
153
+ })))));
154
+ };
155
+ var PreviewImage = function PreviewImage(_ref4) {
156
+ var imageUrl = _ref4.imageUrl;
157
+ var _useState3 = (0, _react.useState)(false),
158
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
159
+ hasFailed = _useState4[0],
160
+ setHasFailed = _useState4[1];
161
+ var _useState5 = (0, _react.useState)(false),
162
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
163
+ hasLoaded = _useState6[0],
164
+ setHasLoaded = _useState6[1];
165
+ return /*#__PURE__*/React.createElement("div", {
166
+ "aria-hidden": "true",
167
+ "data-testid": "quick-insert-preview-image-area",
168
+ className: (0, _runtime.ax)([styles.imageArea])
169
+ }, !hasFailed && /*#__PURE__*/React.createElement("img", {
170
+ "aria-hidden": "true",
171
+ "data-testid": "quick-insert-hover-preview",
172
+ src: imageUrl,
173
+ alt: "",
174
+ onLoad: function onLoad() {
175
+ return setHasLoaded(true);
176
+ },
177
+ onError: function onError() {
178
+ return setHasFailed(true);
179
+ },
180
+ className: (0, _runtime.ax)([styles.image, !hasLoaded && styles.imageHidden])
181
+ }));
103
182
  };
@@ -15,8 +15,10 @@ var QuickInsertMenuItem = exports.QuickInsertMenuItem = function QuickInsertMenu
15
15
  iconBefore = _ref.iconBefore,
16
16
  isDisabled = _ref.isDisabled,
17
17
  onSelect = _ref.onSelect,
18
+ preview = _ref.preview,
18
19
  previewImageUrls = _ref.previewImageUrls,
19
20
  shortcut = _ref.shortcut,
21
+ shouldShowPreview = _ref.shouldShowPreview,
20
22
  shouldWrapIcon = _ref.shouldWrapIcon,
21
23
  title = _ref.title;
22
24
  var _useQuickInsertContex = (0, _useQuickInsertContext.useQuickInsertContext)(),
@@ -36,8 +38,10 @@ var QuickInsertMenuItem = exports.QuickInsertMenuItem = function QuickInsertMenu
36
38
  iconBefore: iconBefore,
37
39
  isDisabled: isDisabled,
38
40
  onSelect: onSelect,
41
+ preview: preview,
39
42
  previewImageUrls: previewImageUrls,
40
43
  shortcut: shortcut,
44
+ shouldShowPreview: shouldShowPreview,
41
45
  shouldWrapIcon: shouldWrapIcon,
42
46
  title: title
43
47
  });
@@ -6,11 +6,18 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.QuickInsertMenuSection = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
- var _section = _interopRequireDefault(require("@atlaskit/menu/section"));
9
+ var _headingItem = _interopRequireDefault(require("@atlaskit/menu/heading-item"));
10
+ var _box = require("@atlaskit/primitives/compiled/box");
10
11
  var QuickInsertMenuSection = exports.QuickInsertMenuSection = function QuickInsertMenuSection(_ref) {
11
12
  var children = _ref.children,
12
13
  title = _ref.title;
13
- return /*#__PURE__*/_react.default.createElement(_section.default, {
14
- title: title
15
- }, children);
14
+ return /*#__PURE__*/_react.default.createElement(_box.Box, {
15
+ role: "group",
16
+ "aria-label": title
17
+ }, /*#__PURE__*/_react.default.createElement(_box.Box, {
18
+ paddingBlockStart: "space.150",
19
+ paddingBlockEnd: "space.050"
20
+ }, /*#__PURE__*/_react.default.createElement(_headingItem.default, {
21
+ "aria-hidden": true
22
+ }, title)), children);
16
23
  };