@atlaskit/editor-common 95.4.0 → 95.6.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 (46) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/analytics/types/enums.js +1 -0
  3. package/dist/cjs/extensibility/Extension/Extension/index.js +8 -3
  4. package/dist/cjs/extensibility/Extension/Extension/styles.js +4 -0
  5. package/dist/cjs/extensibility/Extension/Lozenge/EditToggle.js +41 -14
  6. package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +16 -7
  7. package/dist/cjs/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
  8. package/dist/cjs/extensibility/Extension/Lozenge/index.js +6 -2
  9. package/dist/cjs/extensibility/ExtensionComponent.js +93 -32
  10. package/dist/cjs/monitoring/error.js +1 -1
  11. package/dist/cjs/ui/DropList/index.js +1 -1
  12. package/dist/es2019/analytics/types/enums.js +1 -0
  13. package/dist/es2019/extensibility/Extension/Extension/index.js +8 -3
  14. package/dist/es2019/extensibility/Extension/Extension/styles.js +4 -0
  15. package/dist/es2019/extensibility/Extension/Lozenge/EditToggle.js +35 -7
  16. package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +15 -6
  17. package/dist/es2019/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
  18. package/dist/es2019/extensibility/Extension/Lozenge/index.js +6 -2
  19. package/dist/es2019/extensibility/ExtensionComponent.js +68 -9
  20. package/dist/es2019/monitoring/error.js +1 -1
  21. package/dist/es2019/ui/DropList/index.js +1 -1
  22. package/dist/esm/analytics/types/enums.js +1 -0
  23. package/dist/esm/extensibility/Extension/Extension/index.js +8 -3
  24. package/dist/esm/extensibility/Extension/Extension/styles.js +4 -0
  25. package/dist/esm/extensibility/Extension/Lozenge/EditToggle.js +35 -7
  26. package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +15 -6
  27. package/dist/esm/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
  28. package/dist/esm/extensibility/Extension/Lozenge/index.js +6 -2
  29. package/dist/esm/extensibility/ExtensionComponent.js +91 -32
  30. package/dist/esm/monitoring/error.js +1 -1
  31. package/dist/esm/ui/DropList/index.js +1 -1
  32. package/dist/types/analytics/types/enums.d.ts +1 -0
  33. package/dist/types/extensibility/Extension/Extension/index.d.ts +2 -0
  34. package/dist/types/extensibility/Extension/Lozenge/EditToggle.d.ts +3 -1
  35. package/dist/types/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +3 -1
  36. package/dist/types/extensibility/Extension/Lozenge/LozengeComponent.d.ts +3 -1
  37. package/dist/types/extensibility/Extension/Lozenge/index.d.ts +2 -0
  38. package/dist/types/extensibility/ExtensionComponent.d.ts +5 -1
  39. package/dist/types-ts4.5/analytics/types/enums.d.ts +1 -0
  40. package/dist/types-ts4.5/extensibility/Extension/Extension/index.d.ts +2 -0
  41. package/dist/types-ts4.5/extensibility/Extension/Lozenge/EditToggle.d.ts +3 -1
  42. package/dist/types-ts4.5/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +3 -1
  43. package/dist/types-ts4.5/extensibility/Extension/Lozenge/LozengeComponent.d.ts +3 -1
  44. package/dist/types-ts4.5/extensibility/Extension/Lozenge/index.d.ts +2 -0
  45. package/dist/types-ts4.5/extensibility/ExtensionComponent.d.ts +5 -1
  46. package/package.json +1 -1
@@ -3,10 +3,13 @@
3
3
  * @jsx jsx
4
4
  */
5
5
 
6
+ import { useCallback } from 'react';
7
+
6
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
7
9
  import { css, jsx } from '@emotion/react';
8
10
  import { defineMessages, useIntl } from 'react-intl-next';
9
11
  import CheckMarkIcon from '@atlaskit/icon/core/check-mark';
12
+ import EditIcon from '@atlaskit/icon/core/edit';
10
13
  import { Flex, xcss } from '@atlaskit/primitives';
11
14
  const buttonContainerStyles = css({
12
15
  opacity: 0,
@@ -28,7 +31,10 @@ const buttonStyles = css({
28
31
  borderRadius: "var(--ds-border-radius, 4px)",
29
32
  paddingLeft: "var(--ds-space-150, 12px)",
30
33
  paddingRight: "var(--ds-space-150, 12px)",
31
- font: "var(--ds-font-body, normal 400 14px/20px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, system-ui, \"Helvetica Neue\", sans-serif)"
34
+ font: "var(--ds-font-body, normal 400 14px/20px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, system-ui, \"Helvetica Neue\", sans-serif)",
35
+ '&:hover': {
36
+ backgroundColor: "var(--ds-background-neutral-subtle-hovered, #091E420F)"
37
+ }
32
38
  });
33
39
  const showButtonContainerStyle = css({
34
40
  opacity: 1
@@ -41,15 +47,33 @@ const i18n = defineMessages({
41
47
  id: 'editor-common-extensibility-extension-lozenge-editToggle.done.editing',
42
48
  defaultMessage: 'Done editing',
43
49
  description: 'Text in button when on click switches back to view mode of a macro'
50
+ },
51
+ makeEdits: {
52
+ id: 'editor-common-extensibility-extension-lozenge-editToggle.make.edits',
53
+ defaultMessage: 'Make edits',
54
+ description: 'Text in button when on click switches back to edit mode of a macro'
44
55
  }
45
56
  });
46
57
  // Used to toggle between edit and renderer mode for bodied macros in live pages
47
58
  export const EditToggle = ({
48
59
  isNodeHovered,
49
60
  customContainerStyles,
50
- setIsNodeHovered
61
+ setIsNodeHovered,
62
+ showBodiedExtensionRendererView,
63
+ setShowBodiedExtensionRendererView
51
64
  }) => {
52
65
  const intl = useIntl();
66
+ const text = showBodiedExtensionRendererView ? intl.formatMessage(i18n.makeEdits) : intl.formatMessage(i18n.doneEditing);
67
+ const icon = showBodiedExtensionRendererView ? jsx(EditIcon, {
68
+ testId: "edit-icon",
69
+ label: ""
70
+ }) : jsx(CheckMarkIcon, {
71
+ testId: "check-mark-icon",
72
+ label: ""
73
+ });
74
+ const handleClick = useCallback(() => {
75
+ setShowBodiedExtensionRendererView === null || setShowBodiedExtensionRendererView === void 0 ? void 0 : setShowBodiedExtensionRendererView(!showBodiedExtensionRendererView);
76
+ }, [showBodiedExtensionRendererView, setShowBodiedExtensionRendererView]);
53
77
  return jsx("div", {
54
78
  "data-testid": "extension-edit-toggle-container"
55
79
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
@@ -64,12 +88,16 @@ export const EditToggle = ({
64
88
  onMouseOver: () => setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(true),
65
89
  onMouseLeave: () => setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false)
66
90
  }, jsx("span", {
67
- css: buttonStyles,
68
- className: "extension-edit-toggle"
91
+ "data-testid": "edit-toggle"
92
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
93
+ ,
94
+ css: buttonStyles
95
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
96
+ ,
97
+ className: "extension-edit-toggle",
98
+ onClick: handleClick
69
99
  }, jsx(Flex, {
70
100
  as: "span",
71
101
  xcss: iconStyles
72
- }, jsx(CheckMarkIcon, {
73
- label: ""
74
- })), intl.formatMessage(i18n.doneEditing)));
102
+ }, icon), text));
75
103
  };
@@ -115,6 +115,15 @@ const i18n = defineMessages({
115
115
  description: 'Text in tooltip that tells user they can configure the specific macro.'
116
116
  }
117
117
  });
118
+ export const getShouldShowBodiedMacroLabel = (isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView) => {
119
+ if (!isBodiedMacro) {
120
+ return isNodeHovered;
121
+ } // Bodied macros show the label by default
122
+ if (!showLivePagesBodiedMacrosRendererView) {
123
+ return true;
124
+ } // Keep showing labels as usual for default experience for bodied macros
125
+ return !!(isNodeHovered && !showBodiedExtensionRendererView); // For the new live pages bodied macro experience, we only show the label on hover in the "edit" view
126
+ };
118
127
  export const ExtensionLabel = ({
119
128
  text,
120
129
  extensionName,
@@ -124,24 +133,24 @@ export const ExtensionLabel = ({
124
133
  setIsNodeHovered,
125
134
  isBodiedMacro,
126
135
  showMacroButtonUpdates,
127
- showLivePagesBodiedMacrosRendererView
136
+ showLivePagesBodiedMacrosRendererView,
137
+ showBodiedExtensionRendererView
128
138
  }) => {
129
139
  const isInlineExtension = extensionName === 'inlineExtension';
130
140
  const showDefaultBodiedStyles = isBodiedMacro && !isNodeHovered;
141
+ const shouldShowBodiedMacroLabel = getShouldShowBodiedMacroLabel(isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView);
131
142
  const containerClassNames = classnames({
132
143
  bodied: isBodiedMacro
133
144
  });
134
-
135
- // For the new live pages bodied macro experience, we don't want to hide the label by default
136
- const showBodiedMacroLabel = isBodiedMacro ? !showLivePagesBodiedMacrosRendererView : false;
137
145
  const sharedLabelClassNames = classnames('extension-label', {
138
146
  nested: isNodeNested,
139
147
  inline: isInlineExtension,
140
148
  bodied: isBodiedMacro,
141
149
  'bodied-border': showDefaultBodiedStyles,
142
150
  'bodied-background': showDefaultBodiedStyles,
143
- 'show-label': isNodeHovered || showBodiedMacroLabel,
144
- 'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView
151
+ 'show-label': shouldShowBodiedMacroLabel,
152
+ 'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView,
153
+ 'always-hide-label': isBodiedMacro && showBodiedExtensionRendererView // Need this separate class since we don't ever want to show the label during view mode
145
154
  });
146
155
  const newButtonLabelClassNames = classnames({
147
156
  // For new button design, non-bodied macros should have a flush label. Inline macros don't need this since they never had the margin-left applied.
@@ -26,7 +26,9 @@ export const LozengeComponent = ({
26
26
  isNodeNested,
27
27
  setIsNodeHovered,
28
28
  isBodiedMacro,
29
- showLivePagesBodiedMacrosRendererView
29
+ showLivePagesBodiedMacrosRendererView,
30
+ showBodiedExtensionRendererView,
31
+ setShowBodiedExtensionRendererView
30
32
  }) => {
31
33
  const capitalizedTitle = capitalizeFirstLetter(title);
32
34
  if (showMacroInteractionDesignUpdates) {
@@ -39,11 +41,14 @@ export const LozengeComponent = ({
39
41
  setIsNodeHovered: setIsNodeHovered,
40
42
  isBodiedMacro: isBodiedMacro,
41
43
  showMacroButtonUpdates: showMacroButtonUpdates,
42
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
44
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
45
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView
43
46
  }), showLivePagesBodiedMacrosRendererView && isBodiedMacro && jsx(EditToggle, {
44
47
  isNodeHovered: isNodeHovered,
45
48
  setIsNodeHovered: setIsNodeHovered,
46
- customContainerStyles: customContainerStyles
49
+ customContainerStyles: customContainerStyles,
50
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
51
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
47
52
  }));
48
53
  }
49
54
  const isBlockExtension = extensionName === 'extension';
@@ -39,7 +39,9 @@ export default class ExtensionLozenge extends Component {
39
39
  customContainerStyles,
40
40
  setIsNodeHovered,
41
41
  isBodiedMacro,
42
- showLivePagesBodiedMacrosRendererView
42
+ showLivePagesBodiedMacrosRendererView,
43
+ showBodiedExtensionRendererView,
44
+ setShowBodiedExtensionRendererView
43
45
  } = this.props;
44
46
  const {
45
47
  parameters,
@@ -64,7 +66,9 @@ export default class ExtensionLozenge extends Component {
64
66
  customContainerStyles: customContainerStyles,
65
67
  setIsNodeHovered: setIsNodeHovered,
66
68
  isBodiedMacro: isBodiedMacro,
67
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
69
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
70
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
71
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
68
72
  });
69
73
  });
70
74
  }
@@ -15,6 +15,19 @@ import MultiBodiedExtension from './MultiBodiedExtension';
15
15
 
16
16
  /* temporary type until FG cleaned up */
17
17
 
18
+ const isEmptyBodiedMacro = node => {
19
+ var _node$content, _firstGrandChildNode$;
20
+ if (node.type.name !== 'bodiedExtension') {
21
+ return false;
22
+ }
23
+ const firstChildNode = node === null || node === void 0 ? void 0 : (_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.firstChild;
24
+ const firstGrandChildNode = firstChildNode === null || firstChildNode === void 0 ? void 0 : firstChildNode.firstChild;
25
+
26
+ // If firstChildNode?.childCount > 1 means there is content along with the placeholder.
27
+ const isEmptyWithPlacholder = (firstGrandChildNode === null || firstGrandChildNode === void 0 ? void 0 : (_firstGrandChildNode$ = firstGrandChildNode.type) === null || _firstGrandChildNode$ === void 0 ? void 0 : _firstGrandChildNode$.name) === 'placeholder' && (firstChildNode === null || firstChildNode === void 0 ? void 0 : firstChildNode.childCount) === 1;
28
+ const isEmptyWithNoContent = !firstGrandChildNode && node.childCount === 1;
29
+ return isEmptyWithPlacholder || isEmptyWithNoContent;
30
+ };
18
31
  export class ExtensionComponentOld extends Component {
19
32
  constructor(...args) {
20
33
  super(...args);
@@ -29,6 +42,11 @@ export class ExtensionComponentOld extends Component {
29
42
  isNodeHovered: isHovered
30
43
  });
31
44
  });
45
+ _defineProperty(this, "setShowBodiedExtensionRendererView", showRendererView => {
46
+ this.setState({
47
+ showBodiedExtensionRendererView: showRendererView
48
+ });
49
+ });
32
50
  _defineProperty(this, "setStateFromPromise", (stateKey, promise) => {
33
51
  promise && promise.then(p => {
34
52
  if (!this.mounted) {
@@ -78,6 +96,9 @@ export class ExtensionComponentOld extends Component {
78
96
  extensionHandlers,
79
97
  editorView
80
98
  } = this.props;
99
+ const {
100
+ showBodiedExtensionRendererView
101
+ } = this.state; // State will only be true if the gate is on and meets requirements
81
102
  const {
82
103
  extensionType,
83
104
  extensionKey,
@@ -85,16 +106,23 @@ export class ExtensionComponentOld extends Component {
85
106
  text
86
107
  } = pmNode.attrs;
87
108
  const isBodiedExtension = pmNode.type.name === 'bodiedExtension';
88
- if (isBodiedExtension) {
109
+ if (isBodiedExtension && !showBodiedExtensionRendererView) {
89
110
  return;
90
111
  }
91
112
  const fragmentLocalId = pmNode === null || pmNode === void 0 ? void 0 : (_pmNode$marks = pmNode.marks) === null || _pmNode$marks === void 0 ? void 0 : (_pmNode$marks$find = _pmNode$marks.find(m => m.type.name === 'fragment')) === null || _pmNode$marks$find === void 0 ? void 0 : (_pmNode$marks$find$at = _pmNode$marks$find.attrs) === null || _pmNode$marks$find$at === void 0 ? void 0 : _pmNode$marks$find$at.localId;
113
+ const nodeContent = [];
114
+ if (isBodiedExtension) {
115
+ var _pmNode$content;
116
+ pmNode === null || pmNode === void 0 ? void 0 : (_pmNode$content = pmNode.content) === null || _pmNode$content === void 0 ? void 0 : _pmNode$content.forEach(childNode => {
117
+ nodeContent.push(childNode);
118
+ });
119
+ }
92
120
  const node = {
93
121
  type: pmNode.type.name,
94
122
  extensionType,
95
123
  extensionKey,
96
124
  parameters,
97
- content: text,
125
+ content: isBodiedExtension ? nodeContent.length ? nodeContent : text : text,
98
126
  localId: pmNode.attrs.localId,
99
127
  fragmentLocalId
100
128
  };
@@ -126,6 +154,16 @@ export class ExtensionComponentOld extends Component {
126
154
  }
127
155
  UNSAFE_componentWillMount() {
128
156
  this.mounted = true;
157
+ const {
158
+ node,
159
+ showLivePagesBodiedMacrosRendererView
160
+ } = this.props;
161
+ // We only care about this empty state on first page load or insertion to determine the view
162
+ if (showLivePagesBodiedMacrosRendererView && !isEmptyBodiedMacro(node)) {
163
+ this.setState({
164
+ showBodiedExtensionRendererView: true
165
+ });
166
+ }
129
167
  }
130
168
  componentDidMount() {
131
169
  const {
@@ -206,7 +244,9 @@ export class ExtensionComponentOld extends Component {
206
244
  isNodeHovered: this.state.isNodeHovered,
207
245
  isNodeNested: isNodeNested,
208
246
  setIsNodeHovered: this.setIsNodeHovered,
209
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
247
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
248
+ showBodiedExtensionRendererView: this.state.showBodiedExtensionRendererView,
249
+ setShowBodiedExtensionRendererView: this.setShowBodiedExtensionRendererView
210
250
  }, extensionHandlerResult);
211
251
  case 'inlineExtension':
212
252
  return /*#__PURE__*/React.createElement(InlineExtension, {
@@ -242,9 +282,12 @@ export class ExtensionComponentOld extends Component {
242
282
  export const ExtensionComponentNew = props => {
243
283
  const {
244
284
  extensionProvider: extensionProviderResolver,
285
+ showLivePagesBodiedMacrosRendererView,
286
+ node,
245
287
  ...restProps
246
288
  } = props;
247
289
  const [extensionProvider, setExtensionProvider] = useState(undefined);
290
+ const [showBodiedExtensionRendererView, setShowBodiedExtensionRendererView] = useState(!!(showLivePagesBodiedMacrosRendererView && !isEmptyBodiedMacro(node)));
248
291
  const mountedRef = useRef(true);
249
292
  useLayoutEffect(() => {
250
293
  mountedRef.current = true;
@@ -260,7 +303,11 @@ export const ExtensionComponentNew = props => {
260
303
  });
261
304
  }, [extensionProviderResolver]);
262
305
  return /*#__PURE__*/React.createElement(ExtensionComponentInner, _extends({}, restProps, {
263
- extensionProvider: extensionProvider
306
+ extensionProvider: extensionProvider,
307
+ node: node,
308
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
309
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
310
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
264
311
  }));
265
312
  };
266
313
  class ExtensionComponentInner extends Component {
@@ -313,7 +360,8 @@ class ExtensionComponentInner extends Component {
313
360
  var _pmNode$marks2, _pmNode$marks2$find, _pmNode$marks2$find$a;
314
361
  const {
315
362
  extensionHandlers,
316
- editorView
363
+ editorView,
364
+ showBodiedExtensionRendererView
317
365
  } = this.props;
318
366
  const {
319
367
  extensionType,
@@ -322,16 +370,23 @@ class ExtensionComponentInner extends Component {
322
370
  text
323
371
  } = pmNode.attrs;
324
372
  const isBodiedExtension = pmNode.type.name === 'bodiedExtension';
325
- if (isBodiedExtension) {
373
+ if (isBodiedExtension && !showBodiedExtensionRendererView) {
326
374
  return;
327
375
  }
328
376
  const fragmentLocalId = pmNode === null || pmNode === void 0 ? void 0 : (_pmNode$marks2 = pmNode.marks) === null || _pmNode$marks2 === void 0 ? void 0 : (_pmNode$marks2$find = _pmNode$marks2.find(m => m.type.name === 'fragment')) === null || _pmNode$marks2$find === void 0 ? void 0 : (_pmNode$marks2$find$a = _pmNode$marks2$find.attrs) === null || _pmNode$marks2$find$a === void 0 ? void 0 : _pmNode$marks2$find$a.localId;
377
+ const nodeContent = [];
378
+ if (isBodiedExtension) {
379
+ var _pmNode$content2;
380
+ pmNode === null || pmNode === void 0 ? void 0 : (_pmNode$content2 = pmNode.content) === null || _pmNode$content2 === void 0 ? void 0 : _pmNode$content2.forEach(childNode => {
381
+ nodeContent.push(childNode);
382
+ });
383
+ }
329
384
  const node = {
330
385
  type: pmNode.type.name,
331
386
  extensionType,
332
387
  extensionKey,
333
388
  parameters,
334
- content: text,
389
+ content: isBodiedExtension ? nodeContent.length ? nodeContent : text : text,
335
390
  localId: pmNode.attrs.localId,
336
391
  fragmentLocalId
337
392
  };
@@ -377,7 +432,9 @@ class ExtensionComponentInner extends Component {
377
432
  eventDispatcher,
378
433
  macroInteractionDesignFeatureFlags,
379
434
  extensionProvider,
380
- showLivePagesBodiedMacrosRendererView
435
+ showLivePagesBodiedMacrosRendererView,
436
+ showBodiedExtensionRendererView,
437
+ setShowBodiedExtensionRendererView
381
438
  } = this.props;
382
439
  const {
383
440
  selection
@@ -422,7 +479,9 @@ class ExtensionComponentInner extends Component {
422
479
  isNodeHovered: this.state.isNodeHovered,
423
480
  isNodeNested: isNodeNested,
424
481
  setIsNodeHovered: this.setIsNodeHovered,
425
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
482
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
483
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
484
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
426
485
  }, extensionHandlerResult);
427
486
  case 'inlineExtension':
428
487
  return /*#__PURE__*/React.createElement(InlineExtension, {
@@ -1,7 +1,7 @@
1
1
  import { isFedRamp } from './environment';
2
2
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
3
3
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
4
- const packageVersion = "95.4.0";
4
+ const packageVersion = "95.6.0";
5
5
  const sanitiseSentryEvents = (data, _hint) => {
6
6
  // Remove URL as it has UGC
7
7
  // TODO: Sanitise the URL instead of just removing it
@@ -13,7 +13,7 @@ import withAnalyticsContext from '@atlaskit/analytics-next/withAnalyticsContext'
13
13
  import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import Layer from '../Layer';
15
15
  const packageName = "@atlaskit/editor-common";
16
- const packageVersion = "95.4.0";
16
+ const packageVersion = "95.6.0";
17
17
  const halfFocusRing = 1;
18
18
  const dropOffset = '0, 8';
19
19
  class DropList extends Component {
@@ -269,6 +269,7 @@ export var ACTION_SUBJECT_ID = /*#__PURE__*/function (ACTION_SUBJECT_ID) {
269
269
  ACTION_SUBJECT_ID["ACTION"] = "action";
270
270
  ACTION_SUBJECT_ID["AI_DEFINITIONS_DEFINE_BUTTON"] = "aiDefinitionsDefineButton";
271
271
  ACTION_SUBJECT_ID["AI_DEFINITIONS_AUTO_HIGHLIGHT"] = "aiDefinitionsAutoHighlight";
272
+ ACTION_SUBJECT_ID["AI_PANELS_BODIED_EXTENSION"] = "aiPanelsBodiedExtension";
272
273
  ACTION_SUBJECT_ID["ALL"] = "all";
273
274
  ACTION_SUBJECT_ID["ALT_TEXT"] = "altText";
274
275
  ACTION_SUBJECT_ID["ANNOTATE_BUTTON"] = "annotateButton";
@@ -37,7 +37,9 @@ function ExtensionWithPluginState(props) {
37
37
  isNodeHovered = props.isNodeHovered,
38
38
  isNodeNested = props.isNodeNested,
39
39
  setIsNodeHovered = props.setIsNodeHovered,
40
- showLivePagesBodiedMacrosRendererView = props.showLivePagesBodiedMacrosRendererView;
40
+ showLivePagesBodiedMacrosRendererView = props.showLivePagesBodiedMacrosRendererView,
41
+ showBodiedExtensionRendererView = props.showBodiedExtensionRendererView,
42
+ setShowBodiedExtensionRendererView = props.setShowBodiedExtensionRendererView;
41
43
  var _ref = macroInteractionDesignFeatureFlags || {},
42
44
  showMacroInteractionDesignUpdates = _ref.showMacroInteractionDesignUpdates,
43
45
  showMacroButtonUpdates = _ref.showMacroButtonUpdates;
@@ -79,7 +81,8 @@ function ExtensionWithPluginState(props) {
79
81
  'with-bodied-padding-styles': hasBody && showMacroInteractionDesignUpdates
80
82
  });
81
83
  var contentClassNames = classnames('extension-content', 'block', {
82
- 'remove-border': showMacroInteractionDesignUpdates
84
+ 'remove-border': showMacroInteractionDesignUpdates,
85
+ 'hide-content': showBodiedExtensionRendererView
83
86
  });
84
87
  var customContainerStyles = {
85
88
  width: '100%'
@@ -112,7 +115,9 @@ function ExtensionWithPluginState(props) {
112
115
  customContainerStyles: customContainerStyles,
113
116
  setIsNodeHovered: setIsNodeHovered,
114
117
  isBodiedMacro: hasBody,
115
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
118
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
119
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
120
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
116
121
  }), jsx("div", {
117
122
  ref: handleRef,
118
123
  "data-layout": node.attrs.layout
@@ -55,6 +55,10 @@ export var content = css({
55
55
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
56
56
  '&.remove-border': {
57
57
  border: 'none'
58
+ },
59
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-nested-selectors -- Ignored via go/DSP-18766
60
+ '&.hide-content': {
61
+ display: 'none'
58
62
  }
59
63
  });
60
64
 
@@ -3,10 +3,13 @@
3
3
  * @jsx jsx
4
4
  */
5
5
 
6
+ import { useCallback } from 'react';
7
+
6
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
7
9
  import { css, jsx } from '@emotion/react';
8
10
  import { defineMessages, useIntl } from 'react-intl-next';
9
11
  import CheckMarkIcon from '@atlaskit/icon/core/check-mark';
12
+ import EditIcon from '@atlaskit/icon/core/edit';
10
13
  import { Flex, xcss } from '@atlaskit/primitives';
11
14
  var buttonContainerStyles = css({
12
15
  opacity: 0,
@@ -28,7 +31,10 @@ var buttonStyles = css({
28
31
  borderRadius: "var(--ds-border-radius, 4px)",
29
32
  paddingLeft: "var(--ds-space-150, 12px)",
30
33
  paddingRight: "var(--ds-space-150, 12px)",
31
- font: "var(--ds-font-body, normal 400 14px/20px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, system-ui, \"Helvetica Neue\", sans-serif)"
34
+ font: "var(--ds-font-body, normal 400 14px/20px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, system-ui, \"Helvetica Neue\", sans-serif)",
35
+ '&:hover': {
36
+ backgroundColor: "var(--ds-background-neutral-subtle-hovered, #091E420F)"
37
+ }
32
38
  });
33
39
  var showButtonContainerStyle = css({
34
40
  opacity: 1
@@ -41,14 +47,32 @@ var i18n = defineMessages({
41
47
  id: 'editor-common-extensibility-extension-lozenge-editToggle.done.editing',
42
48
  defaultMessage: 'Done editing',
43
49
  description: 'Text in button when on click switches back to view mode of a macro'
50
+ },
51
+ makeEdits: {
52
+ id: 'editor-common-extensibility-extension-lozenge-editToggle.make.edits',
53
+ defaultMessage: 'Make edits',
54
+ description: 'Text in button when on click switches back to edit mode of a macro'
44
55
  }
45
56
  });
46
57
  // Used to toggle between edit and renderer mode for bodied macros in live pages
47
58
  export var EditToggle = function EditToggle(_ref) {
48
59
  var isNodeHovered = _ref.isNodeHovered,
49
60
  customContainerStyles = _ref.customContainerStyles,
50
- setIsNodeHovered = _ref.setIsNodeHovered;
61
+ setIsNodeHovered = _ref.setIsNodeHovered,
62
+ showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
63
+ setShowBodiedExtensionRendererView = _ref.setShowBodiedExtensionRendererView;
51
64
  var intl = useIntl();
65
+ var text = showBodiedExtensionRendererView ? intl.formatMessage(i18n.makeEdits) : intl.formatMessage(i18n.doneEditing);
66
+ var icon = showBodiedExtensionRendererView ? jsx(EditIcon, {
67
+ testId: "edit-icon",
68
+ label: ""
69
+ }) : jsx(CheckMarkIcon, {
70
+ testId: "check-mark-icon",
71
+ label: ""
72
+ });
73
+ var handleClick = useCallback(function () {
74
+ setShowBodiedExtensionRendererView === null || setShowBodiedExtensionRendererView === void 0 || setShowBodiedExtensionRendererView(!showBodiedExtensionRendererView);
75
+ }, [showBodiedExtensionRendererView, setShowBodiedExtensionRendererView]);
52
76
  return jsx("div", {
53
77
  "data-testid": "extension-edit-toggle-container"
54
78
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
@@ -67,12 +91,16 @@ export var EditToggle = function EditToggle(_ref) {
67
91
  return setIsNodeHovered === null || setIsNodeHovered === void 0 ? void 0 : setIsNodeHovered(false);
68
92
  }
69
93
  }, jsx("span", {
70
- css: buttonStyles,
71
- className: "extension-edit-toggle"
94
+ "data-testid": "edit-toggle"
95
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
96
+ ,
97
+ css: buttonStyles
98
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
99
+ ,
100
+ className: "extension-edit-toggle",
101
+ onClick: handleClick
72
102
  }, jsx(Flex, {
73
103
  as: "span",
74
104
  xcss: iconStyles
75
- }, jsx(CheckMarkIcon, {
76
- label: ""
77
- })), intl.formatMessage(i18n.doneEditing)));
105
+ }, icon), text));
78
106
  };
@@ -115,6 +115,15 @@ var i18n = defineMessages({
115
115
  description: 'Text in tooltip that tells user they can configure the specific macro.'
116
116
  }
117
117
  });
118
+ export var getShouldShowBodiedMacroLabel = function getShouldShowBodiedMacroLabel(isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView) {
119
+ if (!isBodiedMacro) {
120
+ return isNodeHovered;
121
+ } // Bodied macros show the label by default
122
+ if (!showLivePagesBodiedMacrosRendererView) {
123
+ return true;
124
+ } // Keep showing labels as usual for default experience for bodied macros
125
+ return !!(isNodeHovered && !showBodiedExtensionRendererView); // For the new live pages bodied macro experience, we only show the label on hover in the "edit" view
126
+ };
118
127
  export var ExtensionLabel = function ExtensionLabel(_ref) {
119
128
  var text = _ref.text,
120
129
  extensionName = _ref.extensionName,
@@ -124,23 +133,23 @@ export var ExtensionLabel = function ExtensionLabel(_ref) {
124
133
  setIsNodeHovered = _ref.setIsNodeHovered,
125
134
  isBodiedMacro = _ref.isBodiedMacro,
126
135
  showMacroButtonUpdates = _ref.showMacroButtonUpdates,
127
- showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView;
136
+ showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
137
+ showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView;
128
138
  var isInlineExtension = extensionName === 'inlineExtension';
129
139
  var showDefaultBodiedStyles = isBodiedMacro && !isNodeHovered;
140
+ var shouldShowBodiedMacroLabel = getShouldShowBodiedMacroLabel(isBodiedMacro, isNodeHovered, showLivePagesBodiedMacrosRendererView, showBodiedExtensionRendererView);
130
141
  var containerClassNames = classnames({
131
142
  bodied: isBodiedMacro
132
143
  });
133
-
134
- // For the new live pages bodied macro experience, we don't want to hide the label by default
135
- var showBodiedMacroLabel = isBodiedMacro ? !showLivePagesBodiedMacrosRendererView : false;
136
144
  var sharedLabelClassNames = classnames('extension-label', {
137
145
  nested: isNodeNested,
138
146
  inline: isInlineExtension,
139
147
  bodied: isBodiedMacro,
140
148
  'bodied-border': showDefaultBodiedStyles,
141
149
  'bodied-background': showDefaultBodiedStyles,
142
- 'show-label': isNodeHovered || showBodiedMacroLabel,
143
- 'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView
150
+ 'show-label': shouldShowBodiedMacroLabel,
151
+ 'with-bodied-macro-live-page-styles': isBodiedMacro && showLivePagesBodiedMacrosRendererView,
152
+ 'always-hide-label': isBodiedMacro && showBodiedExtensionRendererView // Need this separate class since we don't ever want to show the label during view mode
144
153
  });
145
154
  var newButtonLabelClassNames = classnames({
146
155
  // For new button design, non-bodied macros should have a flush label. Inline macros don't need this since they never had the margin-left applied.
@@ -29,7 +29,9 @@ export var LozengeComponent = function LozengeComponent(_ref) {
29
29
  isNodeNested = _ref.isNodeNested,
30
30
  setIsNodeHovered = _ref.setIsNodeHovered,
31
31
  isBodiedMacro = _ref.isBodiedMacro,
32
- showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView;
32
+ showLivePagesBodiedMacrosRendererView = _ref.showLivePagesBodiedMacrosRendererView,
33
+ showBodiedExtensionRendererView = _ref.showBodiedExtensionRendererView,
34
+ setShowBodiedExtensionRendererView = _ref.setShowBodiedExtensionRendererView;
33
35
  var capitalizedTitle = capitalizeFirstLetter(title);
34
36
  if (showMacroInteractionDesignUpdates) {
35
37
  return jsx(Fragment, null, jsx(ExtensionLabel, {
@@ -41,11 +43,14 @@ export var LozengeComponent = function LozengeComponent(_ref) {
41
43
  setIsNodeHovered: setIsNodeHovered,
42
44
  isBodiedMacro: isBodiedMacro,
43
45
  showMacroButtonUpdates: showMacroButtonUpdates,
44
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
46
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
47
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView
45
48
  }), showLivePagesBodiedMacrosRendererView && isBodiedMacro && jsx(EditToggle, {
46
49
  isNodeHovered: isNodeHovered,
47
50
  setIsNodeHovered: setIsNodeHovered,
48
- customContainerStyles: customContainerStyles
51
+ customContainerStyles: customContainerStyles,
52
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
53
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
49
54
  }));
50
55
  }
51
56
  var isBlockExtension = extensionName === 'extension';
@@ -52,7 +52,9 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
52
52
  customContainerStyles = _this$props.customContainerStyles,
53
53
  setIsNodeHovered = _this$props.setIsNodeHovered,
54
54
  isBodiedMacro = _this$props.isBodiedMacro,
55
- showLivePagesBodiedMacrosRendererView = _this$props.showLivePagesBodiedMacrosRendererView;
55
+ showLivePagesBodiedMacrosRendererView = _this$props.showLivePagesBodiedMacrosRendererView,
56
+ showBodiedExtensionRendererView = _this$props.showBodiedExtensionRendererView,
57
+ setShowBodiedExtensionRendererView = _this$props.setShowBodiedExtensionRendererView;
56
58
  var _this$props$node$attr = _this.props.node.attrs,
57
59
  parameters = _this$props$node$attr.parameters,
58
60
  extensionKey = _this$props$node$attr.extensionKey;
@@ -73,7 +75,9 @@ var ExtensionLozenge = /*#__PURE__*/function (_Component) {
73
75
  customContainerStyles: customContainerStyles,
74
76
  setIsNodeHovered: setIsNodeHovered,
75
77
  isBodiedMacro: isBodiedMacro,
76
- showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
78
+ showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
79
+ showBodiedExtensionRendererView: showBodiedExtensionRendererView,
80
+ setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
77
81
  });
78
82
  });
79
83
  return _this;