@atlaskit/editor-common 95.5.0 → 95.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/cjs/element-browser/components/ElementList/ElementList.js +14 -14
- package/dist/cjs/extensibility/Extension/Extension/index.js +8 -3
- package/dist/cjs/extensibility/Extension/Extension/styles.js +4 -0
- package/dist/cjs/extensibility/Extension/Lozenge/EditToggle.js +41 -14
- package/dist/cjs/extensibility/Extension/Lozenge/ExtensionLabel.js +16 -7
- package/dist/cjs/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
- package/dist/cjs/extensibility/Extension/Lozenge/index.js +6 -2
- package/dist/cjs/extensibility/ExtensionComponent.js +93 -32
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/es2019/element-browser/components/ElementList/ElementList.js +14 -14
- package/dist/es2019/extensibility/Extension/Extension/index.js +8 -3
- package/dist/es2019/extensibility/Extension/Extension/styles.js +4 -0
- package/dist/es2019/extensibility/Extension/Lozenge/EditToggle.js +35 -7
- package/dist/es2019/extensibility/Extension/Lozenge/ExtensionLabel.js +15 -6
- package/dist/es2019/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
- package/dist/es2019/extensibility/Extension/Lozenge/index.js +6 -2
- package/dist/es2019/extensibility/ExtensionComponent.js +68 -9
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/esm/element-browser/components/ElementList/ElementList.js +14 -14
- package/dist/esm/extensibility/Extension/Extension/index.js +8 -3
- package/dist/esm/extensibility/Extension/Extension/styles.js +4 -0
- package/dist/esm/extensibility/Extension/Lozenge/EditToggle.js +35 -7
- package/dist/esm/extensibility/Extension/Lozenge/ExtensionLabel.js +15 -6
- package/dist/esm/extensibility/Extension/Lozenge/LozengeComponent.js +8 -3
- package/dist/esm/extensibility/Extension/Lozenge/index.js +6 -2
- package/dist/esm/extensibility/ExtensionComponent.js +91 -32
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/types/extensibility/Extension/Extension/index.d.ts +2 -0
- package/dist/types/extensibility/Extension/Lozenge/EditToggle.d.ts +3 -1
- package/dist/types/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +3 -1
- package/dist/types/extensibility/Extension/Lozenge/LozengeComponent.d.ts +3 -1
- package/dist/types/extensibility/Extension/Lozenge/index.d.ts +2 -0
- package/dist/types/extensibility/ExtensionComponent.d.ts +5 -1
- package/dist/types-ts4.5/extensibility/Extension/Extension/index.d.ts +2 -0
- package/dist/types-ts4.5/extensibility/Extension/Lozenge/EditToggle.d.ts +3 -1
- package/dist/types-ts4.5/extensibility/Extension/Lozenge/ExtensionLabel.d.ts +3 -1
- package/dist/types-ts4.5/extensibility/Extension/Lozenge/LozengeComponent.d.ts +3 -1
- package/dist/types-ts4.5/extensibility/Extension/Lozenge/index.d.ts +2 -0
- package/dist/types-ts4.5/extensibility/ExtensionComponent.d.ts +5 -1
- package/package.json +7 -7
|
@@ -32,7 +32,9 @@ function ExtensionWithPluginState(props) {
|
|
|
32
32
|
isNodeHovered,
|
|
33
33
|
isNodeNested,
|
|
34
34
|
setIsNodeHovered,
|
|
35
|
-
showLivePagesBodiedMacrosRendererView
|
|
35
|
+
showLivePagesBodiedMacrosRendererView,
|
|
36
|
+
showBodiedExtensionRendererView,
|
|
37
|
+
setShowBodiedExtensionRendererView
|
|
36
38
|
} = props;
|
|
37
39
|
const {
|
|
38
40
|
showMacroInteractionDesignUpdates,
|
|
@@ -79,7 +81,8 @@ function ExtensionWithPluginState(props) {
|
|
|
79
81
|
'with-bodied-padding-styles': hasBody && showMacroInteractionDesignUpdates
|
|
80
82
|
});
|
|
81
83
|
const contentClassNames = classnames('extension-content', 'block', {
|
|
82
|
-
'remove-border': showMacroInteractionDesignUpdates
|
|
84
|
+
'remove-border': showMacroInteractionDesignUpdates,
|
|
85
|
+
'hide-content': showBodiedExtensionRendererView
|
|
83
86
|
});
|
|
84
87
|
let customContainerStyles = {
|
|
85
88
|
width: '100%'
|
|
@@ -118,7 +121,9 @@ function ExtensionWithPluginState(props) {
|
|
|
118
121
|
customContainerStyles: customContainerStyles,
|
|
119
122
|
setIsNodeHovered: setIsNodeHovered,
|
|
120
123
|
isBodiedMacro: hasBody,
|
|
121
|
-
showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView
|
|
124
|
+
showLivePagesBodiedMacrosRendererView: showLivePagesBodiedMacrosRendererView,
|
|
125
|
+
showBodiedExtensionRendererView: showBodiedExtensionRendererView,
|
|
126
|
+
setShowBodiedExtensionRendererView: setShowBodiedExtensionRendererView
|
|
122
127
|
}), jsx("div", {
|
|
123
128
|
ref: handleRef,
|
|
124
129
|
"data-layout": node.attrs.layout
|
|
@@ -55,6 +55,10 @@ export const 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
|
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
|
-
|
|
68
|
-
|
|
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
|
-
},
|
|
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':
|
|
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
|
+
const packageVersion = "95.6.1";
|
|
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.
|
|
16
|
+
const packageVersion = "95.6.1";
|
|
17
17
|
const halfFocusRing = 1;
|
|
18
18
|
const dropOffset = '0, 8';
|
|
19
19
|
class DropList extends Component {
|
|
@@ -95,13 +95,13 @@ function ElementListOld(_ref) {
|
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
97
|
}, [createAnalyticsEvent]);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
});
|
|
98
|
+
var cache = useMemo(function () {
|
|
99
|
+
return new CellMeasurerCache({
|
|
100
|
+
fixedWidth: true,
|
|
101
|
+
defaultHeight: 75,
|
|
102
|
+
minHeight: 75
|
|
103
|
+
});
|
|
104
|
+
}, []);
|
|
105
105
|
var columnWidth = (containerWidth - ELEMENT_ITEM_PADDING * 2) / columnCount;
|
|
106
106
|
var rowCount = Math.ceil(items.length / columnCount);
|
|
107
107
|
var rowHeight = function rowHeight(_ref2) {
|
|
@@ -254,13 +254,13 @@ function ElementListNew(_ref5) {
|
|
|
254
254
|
}
|
|
255
255
|
});
|
|
256
256
|
}, [createAnalyticsEvent]);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
});
|
|
257
|
+
var listCache = useMemo(function () {
|
|
258
|
+
return cache !== null && cache !== void 0 ? cache : new CellMeasurerCache({
|
|
259
|
+
fixedWidth: true,
|
|
260
|
+
defaultHeight: ELEMENT_ITEM_HEIGHT,
|
|
261
|
+
minHeight: ELEMENT_ITEM_HEIGHT
|
|
262
|
+
});
|
|
263
|
+
}, [cache]);
|
|
264
264
|
useEffect(function () {
|
|
265
265
|
// need to recalculate values if we have the same items, but they're reordered
|
|
266
266
|
listCache.clearAll();
|
|
@@ -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
|
-
|
|
71
|
-
|
|
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
|
-
},
|
|
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':
|
|
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.
|