@atlaskit/editor-plugin-synced-block 20.1.5 → 21.0.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.
Files changed (32) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/editor-commands/index.js +1 -4
  3. package/dist/cjs/pm-plugins/main.js +6 -11
  4. package/dist/cjs/syncedBlockPlugin.js +1 -2
  5. package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +1 -3
  6. package/dist/cjs/ui/Flag.js +1 -2
  7. package/dist/cjs/ui/SyncBlockLabel.js +2 -3
  8. package/dist/cjs/ui/SyncBlockRendererWrapper.js +2 -7
  9. package/dist/cjs/ui/SyncedLocationDropdown.js +3 -22
  10. package/dist/cjs/ui/floating-toolbar.js +36 -82
  11. package/dist/cjs/ui/quick-insert.js +2 -4
  12. package/dist/es2019/editor-commands/index.js +1 -4
  13. package/dist/es2019/pm-plugins/main.js +6 -11
  14. package/dist/es2019/syncedBlockPlugin.js +1 -2
  15. package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +1 -3
  16. package/dist/es2019/ui/Flag.js +1 -2
  17. package/dist/es2019/ui/SyncBlockLabel.js +2 -3
  18. package/dist/es2019/ui/SyncBlockRendererWrapper.js +2 -7
  19. package/dist/es2019/ui/SyncedLocationDropdown.js +3 -22
  20. package/dist/es2019/ui/floating-toolbar.js +36 -83
  21. package/dist/es2019/ui/quick-insert.js +2 -4
  22. package/dist/esm/editor-commands/index.js +1 -4
  23. package/dist/esm/pm-plugins/main.js +6 -11
  24. package/dist/esm/syncedBlockPlugin.js +1 -2
  25. package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +1 -3
  26. package/dist/esm/ui/Flag.js +1 -2
  27. package/dist/esm/ui/SyncBlockLabel.js +2 -3
  28. package/dist/esm/ui/SyncBlockRendererWrapper.js +2 -7
  29. package/dist/esm/ui/SyncedLocationDropdown.js +3 -22
  30. package/dist/esm/ui/floating-toolbar.js +37 -83
  31. package/dist/esm/ui/quick-insert.js +2 -4
  32. package/package.json +22 -22
@@ -15,7 +15,6 @@ import StatusSuccessIcon from '@atlaskit/icon/core/status-success';
15
15
  import StatusWarningIcon from '@atlaskit/icon/core/status-warning';
16
16
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
17
17
  import { Anchor } from '@atlaskit/primitives/compiled/anchor';
18
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
19
18
  import { syncedBlockPluginKey } from '../pm-plugins/main';
20
19
  import { FLAG_ID } from '../types';
21
20
  const feedbackFlagStyles = null;
@@ -162,7 +161,7 @@ export const Flag = ({
162
161
  onDismissed: onDismissedCallback
163
162
  } = activeFlag;
164
163
  const isCopiedFlag = activeFlag.id === FLAG_ID.SYNC_BLOCK_COPIED;
165
- const isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page' && expValEquals('platform_editor_sync_block_activation', 'isEnabled', true));
164
+ const isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page');
166
165
  const copiedDescription = getSyncBlockCopiedDescription(activeFlag, isCopiedDescriptionEnabled);
167
166
  const title = isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedTitleJiraWorkItem : defaultTitle;
168
167
  const description = copiedDescription !== null && copiedDescription !== void 0 ? copiedDescription : isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedDescriptionJiraWorkItem : defaultDescription;
@@ -7,7 +7,6 @@ import { syncBlockMessages as messages } from '@atlaskit/editor-common/messages'
7
7
  import { SyncBlockLabelSharedCssClassName } from '@atlaskit/editor-common/sync-block';
8
8
  import BlockSyncedIcon from '@atlaskit/icon-lab/core/block-synced';
9
9
  import { Box, Text } from '@atlaskit/primitives/compiled';
10
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
11
10
  import Tooltip from '@atlaskit/tooltip/Tooltip';
12
11
  import VisuallyHidden from '@atlaskit/visually-hidden/visually-hidden';
13
12
  import { formatElapsedTime } from './utils/time';
@@ -85,7 +84,7 @@ const SyncBlockLabelComponent = ({
85
84
  return renderPlainLabel(formatMessage(messages.unsyncedBlockLabel));
86
85
  }
87
86
  if (isSource) {
88
- return renderPlainLabel(formatMessage(expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? messages.sourceSyncedBlockLabel : messages.syncedBlockLabel));
87
+ return renderPlainLabel(formatMessage(messages.sourceSyncedBlockLabel));
89
88
  }
90
89
  if (!title) {
91
90
  return renderPlainLabel(formatMessage(messages.syncedBlockLabel));
@@ -108,7 +107,7 @@ const SyncBlockLabelComponent = ({
108
107
  }), getLabelContent);
109
108
  const referenceDescription = !isSource && !isUnsyncedBlock && /*#__PURE__*/React.createElement(VisuallyHidden, {
110
109
  id: ariaDescribedById
111
- }, expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? tooltipMessage : tooltipContent);
110
+ }, tooltipMessage);
112
111
  if (unpublishedTooltipLabel) {
113
112
  return /*#__PURE__*/React.createElement(Tooltip, {
114
113
  position: "top",
@@ -3,7 +3,6 @@ import { bind } from 'bind-event-listener';
3
3
  import { SyncBlockSharedCssClassName } from '@atlaskit/editor-common/sync-block';
4
4
  import { SyncBlockError, useFetchSyncBlockData, useFetchSyncBlockTitle } from '@atlaskit/editor-synced-block-provider';
5
5
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
7
6
  import { getUnpublishedSourceType } from './getUnpublishedSourceType';
8
7
  import { SyncBlockLabel } from './SyncBlockLabel';
9
8
  const SyncBlockRendererWrapperDataId = 'sync-block-plugin-renderer-wrapper';
@@ -42,10 +41,6 @@ const SyncBlockRendererWrapperComponent = ({
42
41
  }, [localSourceBlockInstanceId, syncBlockStore.sourceManager]);
43
42
  const isUnsyncedBlock = isUnpublishedBlock && !localSameDocumentSource || (syncBlockFetchResult === null || syncBlockFetchResult === void 0 ? void 0 : (_syncBlockFetchResult6 = syncBlockFetchResult.syncBlockInstance) === null || _syncBlockFetchResult6 === void 0 ? void 0 : (_syncBlockFetchResult7 = _syncBlockFetchResult6.error) === null || _syncBlockFetchResult7 === void 0 ? void 0 : _syncBlockFetchResult7.type) === SyncBlockError.NotFound;
44
43
 
45
- // Evaluated unconditionally so the experiment exposure is tracked correctly
46
- // (recorded on every render, not lazily on first click).
47
- const isSyncBlockActivationEnabled = expValEquals('platform_editor_sync_block_activation', 'isEnabled', true);
48
-
49
44
  // Prevent editing in the contentEditable renderer wrapper. We set
50
45
  // contentEditable="true" to enable text selection (creating an editable
51
46
  // island inside ProseMirror's contentEditable="false" nodeview wrapper),
@@ -63,7 +58,7 @@ const SyncBlockRendererWrapperComponent = ({
63
58
  const rendererRef = useRef(null);
64
59
  useEffect(() => {
65
60
  const containerEl = rendererRef.current;
66
- if (!containerEl || !isSyncBlockActivationEnabled) {
61
+ if (!containerEl) {
67
62
  return;
68
63
  }
69
64
  const unbind = bind(containerEl, {
@@ -83,7 +78,7 @@ const SyncBlockRendererWrapperComponent = ({
83
78
  }
84
79
  });
85
80
  return unbind;
86
- }, [isSyncBlockActivationEnabled]);
81
+ }, []);
87
82
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
88
83
  ref: rendererRef,
89
84
  "data-testid": SyncBlockRendererWrapperDataId
@@ -30,8 +30,6 @@ import Lozenge from '@atlaskit/lozenge/lozenge';
30
30
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
31
31
  import { Box, Text, Inline, Anchor, Stack } from '@atlaskit/primitives/compiled';
32
32
  import Spinner from '@atlaskit/spinner/spinner';
33
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
34
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
35
33
  import Tooltip from '@atlaskit/tooltip/Tooltip';
36
34
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
37
35
  import { SyncedLocationsEmptyStateIllustration } from './assets/SyncedLocationsEmptyStateIllustration';
@@ -46,7 +44,6 @@ const styles = {
46
44
  title: "_1reo15vq _18m915vq _syazazsu _1bto1l2s _o5721q9c",
47
45
  note: "_syaz1rpy _o5721q9c",
48
46
  lozenge: "_ahbq12x7 _1ul91wqb",
49
- noResultsContainer: "_1bsbo8uj _y3gn1h6o",
50
47
  activationDropdownContent: "_1rjcze3t _1bsb1kdj",
51
48
  activationNoResultsContainer: "_vchhusvi _1bsb1kdj _ca0q1ejb _n3td1ejb",
52
49
  activationNoResultsContent: "_195g1wug _1bsb12aa _y3gn1h6o",
@@ -738,10 +735,7 @@ const DropdownContentWithReferenceData = ({
738
735
  }
739
736
  };
740
737
  return /*#__PURE__*/React.createElement(Box, {
741
- xcss: cx(styles.dropdownContent,
742
- // Read off the discriminant rather than the experiment, so the control cohort
743
- // cannot reach this width and no second exposure is fired for a style.
744
- locations.kind === 'field-aware' && styles.fieldAwareDropdownContent, expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true) && fetchStatus === 'success' && locationCount === 0 && styles.activationDropdownContent, shouldApplyMinHeight(fetchStatus, locationCount) && styles.containerWithMinHeight)
738
+ xcss: cx(styles.dropdownContent, locations.kind === 'field-aware' && styles.fieldAwareDropdownContent, fetchStatus === 'success' && locationCount === 0 && styles.activationDropdownContent, shouldApplyMinHeight(fetchStatus, locationCount) && styles.containerWithMinHeight)
745
739
  }, content());
746
740
  };
747
741
  // The pre-experiment rows. This block is master's, moved into a component; remove with the experiment.
@@ -881,7 +875,7 @@ const ErrorScreen = ({
881
875
  const NoResultScreen = ({
882
876
  formatMessage
883
877
  }) => {
884
- return expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? /*#__PURE__*/React.createElement(Box, {
878
+ return /*#__PURE__*/React.createElement(Box, {
885
879
  xcss: styles.activationNoResultsContainer,
886
880
  testId: "synced-locations-dropdown-content-no-results"
887
881
  }, /*#__PURE__*/React.createElement(Stack, {
@@ -897,18 +891,5 @@ const NoResultScreen = ({
897
891
  target: "_blank",
898
892
  rel: "noopener noreferrer",
899
893
  xcss: styles.learnMoreLink
900
- }, formatMessage(messages.syncedLocationDropdownLearnMoreLink))))) : /*#__PURE__*/React.createElement(Stack, {
901
- xcss: styles.noResultsContainer,
902
- space: "space.100",
903
- testId: "synced-locations-dropdown-content-no-results"
904
- }, /*#__PURE__*/React.createElement(Text, {
905
- as: "p"
906
- }, formatMessage(messages.syncedLocationDropdownNoResults)), /*#__PURE__*/React.createElement(Text, {
907
- as: "p"
908
- }, /*#__PURE__*/React.createElement(Anchor, {
909
- href: SYNCED_BLOCKS_DOCUMENTATION_URL,
910
- target: "_blank",
911
- rel: "noopener noreferrer",
912
- xcss: styles.learnMoreLink
913
- }, formatMessage(messages.syncedLocationDropdownLearnMoreLink))));
894
+ }, formatMessage(messages.syncedLocationDropdownLearnMoreLink)))));
914
895
  };
@@ -11,11 +11,10 @@ import DeleteIcon from '@atlaskit/icon/core/delete';
11
11
  import EditIcon from '@atlaskit/icon/core/edit';
12
12
  import LinkBrokenIcon from '@atlaskit/icon/core/link-broken';
13
13
  import MegaphoneIcon from '@atlaskit/icon/core/megaphone';
14
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
15
14
  import { copySyncedBlockReferenceToClipboard, editSyncedBlockSource, removeSyncedBlock, unsync } from '../editor-commands';
16
15
  import { findSyncBlockOrBodiedSyncBlock, isBodiedSyncBlockNode } from '../pm-plugins/utils/utils';
17
16
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
18
- import { SyncedLocationDropdown, SyncedLocationDropdownWithCount } from './SyncedLocationDropdown';
17
+ import { SyncedLocationDropdownWithCount } from './SyncedLocationDropdown';
19
18
  export const getToolbarConfig = (state, intl, api, syncBlockStore, isLivePage, onGiveFeedback) => {
20
19
  var _syncBlockInstance$er, _api$decorations, _api$connectivity, _api$connectivity$sha;
21
20
  const syncBlockObject = findSyncBlockOrBodiedSyncBlock(state.schema, state.selection);
@@ -25,7 +24,6 @@ export const getToolbarConfig = (state, intl, api, syncBlockStore, isLivePage, o
25
24
  if (syncBlockStore.sourceManager.isPendingCreation(syncBlockObject.node.attrs.resourceId)) {
26
25
  return;
27
26
  }
28
- const isSyncBlockActivationEnabled = expValEquals('platform_editor_sync_block_activation', 'isEnabled', true);
29
27
  const syncBlockInstance = syncBlockStore.referenceManager.getFromCache(syncBlockObject.node.attrs.resourceId);
30
28
  const isUnsyncedBlock = (syncBlockInstance === null || syncBlockInstance === void 0 ? void 0 : (_syncBlockInstance$er = syncBlockInstance.error) === null || _syncBlockInstance$er === void 0 ? void 0 : _syncBlockInstance$er.type) === SyncBlockError.NotFound;
31
29
  const isErroredBlock = syncBlockInstance === null || syncBlockInstance === void 0 ? void 0 : syncBlockInstance.error;
@@ -64,46 +62,25 @@ export const getToolbarConfig = (state, intl, api, syncBlockStore, isLivePage, o
64
62
  };
65
63
  items.push(deleteButton);
66
64
  } else {
67
- // When the synced block activation experiment is enabled, the copy action is
68
- // re-framed as the primary "Copy to sync" action: it shows a visible label and
69
- // is moved to the first toolbar position (before the synced-location info). See
70
- // EDITOR-8060.
71
65
  const copyButton = {
72
66
  id: 'editor.syncedBlock.copy',
73
67
  type: 'button',
74
68
  appearance: 'subtle',
75
69
  icon: CopyIcon,
76
- title: isSyncBlockActivationEnabled ? formatMessage(messages.copyToSyncLabel) : formatMessage(messages.copySyncBlockLabel),
77
- showTitle: isSyncBlockActivationEnabled,
78
- tooltipContent: isSyncBlockActivationEnabled ? undefined : formatMessage(messages.copySyncedBlockTooltip),
79
- testId: isSyncBlockActivationEnabled ? SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarCopy : undefined,
70
+ title: formatMessage(messages.copyToSyncLabel),
71
+ showTitle: true,
72
+ testId: SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarCopy,
80
73
  onClick: copySyncedBlockReferenceToClipboard(syncBlockStore, INPUT_METHOD.SYNCED_BLOCK_TB, api, isLivePage),
81
74
  ...hoverDecorationProps(nodeType, akEditorSelectedNodeClassName)
82
75
  };
83
-
84
- // In the activation experience the primary "Copy to sync" action leads the
85
- // toolbar, ahead of the informational synced-location dropdown.
86
- if (isSyncBlockActivationEnabled) {
87
- items.push(copyButton);
88
- }
76
+ items.push(copyButton);
89
77
  if (!isErroredBlock) {
90
78
  const syncedLocation = {
91
79
  type: 'custom',
92
80
  fallback: [],
93
81
  render: (_view, _idx, _dispatchAnalyticsEvent, floatingToolbarRenderContext) => {
94
- if (isSyncBlockActivationEnabled) {
95
- return /*#__PURE__*/React.createElement(SyncedLocationDropdownWithCount, {
96
- key: `${resourceId}:${localId}:${isBodiedSyncBlock}`,
97
- syncBlockStore: syncBlockStore,
98
- resourceId: resourceId,
99
- localId: localId,
100
- intl: intl,
101
- isSource: isBodiedSyncBlock,
102
- api: api,
103
- floatingToolbarRenderContext: floatingToolbarRenderContext
104
- });
105
- }
106
- return /*#__PURE__*/React.createElement(SyncedLocationDropdown, {
82
+ return /*#__PURE__*/React.createElement(SyncedLocationDropdownWithCount, {
83
+ key: `${resourceId}:${localId}:${isBodiedSyncBlock}`,
107
84
  syncBlockStore: syncBlockStore,
108
85
  resourceId: resourceId,
109
86
  localId: localId,
@@ -135,12 +112,6 @@ export const getToolbarConfig = (state, intl, api, syncBlockStore, isLivePage, o
135
112
  };
136
113
  items.push(syncedLocation, unsyncButton);
137
114
  }
138
-
139
- // Outside the activation experience the copy button keeps its original
140
- // (icon-only, secondary) position after the synced-location info.
141
- if (!isSyncBlockActivationEnabled) {
142
- items.push(copyButton);
143
- }
144
115
  const disabled = !syncBlockStore.referenceManager.getSyncBlockURL(syncBlockObject.node.attrs.resourceId);
145
116
  if (!isBodiedSyncBlock) {
146
117
  const editSourceButton = {
@@ -157,57 +128,39 @@ export const getToolbarConfig = (state, intl, api, syncBlockStore, isLivePage, o
157
128
  };
158
129
  items.push(editSourceButton);
159
130
  }
160
- if (!isSyncBlockActivationEnabled) {
161
- const separator = {
162
- type: 'separator'
163
- };
164
- const deleteButton = {
165
- id: 'editor.syncedBlock.delete',
166
- type: 'button',
167
- appearance: 'danger',
131
+
132
+ // testId is required to show focus on trigger button on ESC key press
133
+ // see hideOnEsc in platform/packages/editor/editor-plugin-floating-toolbar/src/ui/Dropdown.tsx
134
+ const testId = isBodiedSyncBlock ? SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceOverflowTrigger : SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceOverflowTrigger;
135
+ const overflowMenuConfig = [{
136
+ type: 'overflow-dropdown',
137
+ testId,
138
+ options: [...(onGiveFeedback ? [{
139
+ title: formatMessage(toolbarInsertBlockMessages.feedbackDialog),
140
+ icon: /*#__PURE__*/React.createElement(MegaphoneIcon, {
141
+ label: ""
142
+ }),
143
+ onClick: () => {
144
+ api === null || api === void 0 ? void 0 : api.core.actions.execute(({
145
+ tr
146
+ }) => tr.setSelection(new GapCursorSelection(tr.doc.resolve(syncBlockObject.pos + syncBlockObject.node.nodeSize), Side.RIGHT)));
147
+ onGiveFeedback({
148
+ blockType: isBodiedSyncBlock ? 'source' : 'reference',
149
+ entryPoint: 'overflow-menu'
150
+ });
151
+ return true;
152
+ }
153
+ }] : []), {
168
154
  title: formatMessage(commonMessages.delete),
169
- showTitle: false,
170
- tooltipContent: formatMessage(commonMessages.delete),
171
155
  onClick: removeSyncedBlock(api),
172
- icon: DeleteIcon,
156
+ icon: /*#__PURE__*/React.createElement(DeleteIcon, {
157
+ label: ""
158
+ }),
173
159
  testId: isBodiedSyncBlock ? SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceDelete : SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceDelete,
174
160
  ...hoverDecorationProps(nodeType)
175
- };
176
- items.push(separator, deleteButton);
177
- } else {
178
- // testId is required to show focus on trigger button on ESC key press
179
- // see hideOnEsc in platform/packages/editor/editor-plugin-floating-toolbar/src/ui/Dropdown.tsx
180
- const testId = isBodiedSyncBlock ? SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceOverflowTrigger : SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceOverflowTrigger;
181
- const overflowMenuConfig = [{
182
- type: 'overflow-dropdown',
183
- testId,
184
- options: [...(isSyncBlockActivationEnabled && onGiveFeedback ? [{
185
- title: formatMessage(toolbarInsertBlockMessages.feedbackDialog),
186
- icon: /*#__PURE__*/React.createElement(MegaphoneIcon, {
187
- label: ""
188
- }),
189
- onClick: () => {
190
- api === null || api === void 0 ? void 0 : api.core.actions.execute(({
191
- tr
192
- }) => tr.setSelection(new GapCursorSelection(tr.doc.resolve(syncBlockObject.pos + syncBlockObject.node.nodeSize), Side.RIGHT)));
193
- onGiveFeedback({
194
- blockType: isBodiedSyncBlock ? 'source' : 'reference',
195
- entryPoint: 'overflow-menu'
196
- });
197
- return true;
198
- }
199
- }] : []), {
200
- title: formatMessage(commonMessages.delete),
201
- onClick: removeSyncedBlock(api),
202
- icon: /*#__PURE__*/React.createElement(DeleteIcon, {
203
- label: ""
204
- }),
205
- testId: isBodiedSyncBlock ? SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarSourceDelete : SYNCED_BLOCK_BUTTON_TEST_ID.syncedBlockToolbarReferenceDelete,
206
- ...hoverDecorationProps(nodeType)
207
- }]
208
- }];
209
- items.push(...overflowMenuConfig);
210
- }
161
+ }]
162
+ }];
163
+ items.push(...overflowMenuConfig);
211
164
  }
212
165
  const getDomRef = editorView => {
213
166
  const domAtPos = editorView.domAtPos.bind(editorView);
@@ -7,7 +7,6 @@ import { blockTypeMessages } from '@atlaskit/editor-common/messages';
7
7
  import { IconSyncBlock } from '@atlaskit/editor-common/quick-insert';
8
8
  import Lozenge from '@atlaskit/lozenge/lozenge';
9
9
  import { fg } from '@atlaskit/platform-feature-flags/fg';
10
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
11
10
  import { createSyncedBlock } from '../editor-commands';
12
11
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
13
12
  const lozengeWrapperStyles = null;
@@ -18,10 +17,9 @@ export const getQuickInsertConfig = (config, api, syncBlockStore) => {
18
17
  if (!(config !== null && config !== void 0 && config.enableSourceCreation)) {
19
18
  return [];
20
19
  }
21
- const syncBlockTitle = expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? blockTypeMessages.syncedBlockQuickInsertTitle : blockTypeMessages.syncBlock;
22
20
  return [{
23
21
  id: 'syncBlock',
24
- title: formatMessage(syncBlockTitle),
22
+ title: formatMessage(blockTypeMessages.syncedBlockQuickInsertTitle),
25
23
  description: formatMessage(blockTypeMessages.syncedBlockDescription),
26
24
  priority: 400,
27
25
  keywords: ['synced', 'block', 'synced-block', 'sync', 'sync-block', 'auto', 'update', 'excerpt', 'connect', 'create'],
@@ -33,7 +31,7 @@ export const getQuickInsertConfig = (config, api, syncBlockStore) => {
33
31
  appearance: fg('confluence_fronend_labels_categorization_migration') ? 'discovery' : 'new'
34
32
  }, formatMessage(blockTypeMessages.newLozenge))),
35
33
  icon: () => /*#__PURE__*/React.createElement(IconSyncBlock, {
36
- label: formatMessage(syncBlockTitle)
34
+ label: formatMessage(blockTypeMessages.syncedBlockQuickInsertTitle)
37
35
  }),
38
36
  action: (insert, state) => {
39
37
  var _api$analytics;
@@ -12,7 +12,6 @@ import { findSelectedNodeOfType, removeParentNodeOfType, removeSelectedNode, saf
12
12
  import { getSourceProductFromResourceIdSafe } from '@atlaskit/editor-synced-block-provider/utils';
13
13
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
14
14
  import { fg } from '@atlaskit/platform-feature-flags/fg';
15
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
16
15
  import { creationMetaKey, deleteMechanismMetaKey, syncedBlockPluginKey } from '../pm-plugins/main';
17
16
  import { canBeConvertedToSyncBlock, deferDispatch, findSyncBlock, findSyncBlockOrBodiedSyncBlock, isBodiedSyncBlockNode } from '../pm-plugins/utils/utils';
18
17
  import { FLAG_ID } from '../types';
@@ -365,9 +364,7 @@ export var removeSyncedBlockAtPos = function removeSyncedBlockAtPos(api, pos) {
365
364
  if ((node === null || node === void 0 ? void 0 : node.type.name) === 'syncBlock') {
366
365
  var _node$nodeSize;
367
366
  var removeTr = tr.replace(pos, pos + ((_node$nodeSize = node === null || node === void 0 ? void 0 : node.nodeSize) !== null && _node$nodeSize !== void 0 ? _node$nodeSize : 0));
368
- if (expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true)) {
369
- removeTr.setMeta(deleteMechanismMetaKey, 'deleteButton');
370
- }
367
+ removeTr.setMeta(deleteMechanismMetaKey, 'deleteButton');
371
368
  return removeTr;
372
369
  }
373
370
  return tr;
@@ -23,7 +23,6 @@ import { DecorationSet, Decoration } from '@atlaskit/editor-prosemirror/view';
23
23
  import { convertPMNodesToSyncBlockNodes } from '@atlaskit/editor-synced-block-provider';
24
24
  import { getSourceProductFromResourceIdSafe } from '@atlaskit/editor-synced-block-provider/utils';
25
25
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
26
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
27
26
  import { bodiedSyncBlockNodeView } from '../nodeviews/bodiedSyncedBlock';
28
27
  import { SyncBlock as SyncBlockView } from '../nodeviews/syncedBlock';
29
28
  import { FLAG_ID } from '../types';
@@ -168,13 +167,9 @@ var isHistoryMeta = function isHistoryMeta(meta) {
168
167
  */
169
168
  export var getDeleteMechanism = function getDeleteMechanism(tr, state) {
170
169
  var _selection$node, _selection$node2;
171
- // Keep the legacy analytics classification unchanged while activation is off.
172
- // The stricter history, structural-step, and reference-selection handling is
173
- // only needed by the prompted feedback rollout.
174
- var isSyncBlockActivationEnabled = expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true);
175
170
  var historyMeta = tr.getMeta(pmHistoryPluginKey);
176
171
  if (historyMeta) {
177
- if (isSyncBlockActivationEnabled && !isHistoryMeta(historyMeta)) {
172
+ if (!isHistoryMeta(historyMeta)) {
178
173
  return 'other';
179
174
  }
180
175
  return isHistoryMeta(historyMeta) && historyMeta.redo ? 'redo' : 'undo';
@@ -185,7 +180,7 @@ export var getDeleteMechanism = function getDeleteMechanism(tr, state) {
185
180
  if (tr.getMeta(deleteMechanismMetaKey) === 'deleteButton') {
186
181
  return 'deleteButton';
187
182
  }
188
- var hasStructuralStep = isSyncBlockActivationEnabled && tr.steps.some(function (step) {
183
+ var hasStructuralStep = tr.steps.some(function (step) {
189
184
  return step instanceof ReplaceAroundStep;
190
185
  });
191
186
  var hasReplaceStep = tr.steps.some(function (step) {
@@ -195,7 +190,7 @@ export var getDeleteMechanism = function getDeleteMechanism(tr, state) {
195
190
  return 'other';
196
191
  }
197
192
  var selection = state.selection;
198
- var isNodeSelected = selection instanceof NodeSelection && (((_selection$node = selection.node) === null || _selection$node === void 0 ? void 0 : _selection$node.type.name) === 'bodiedSyncBlock' || isSyncBlockActivationEnabled && ((_selection$node2 = selection.node) === null || _selection$node2 === void 0 ? void 0 : _selection$node2.type.name) === 'syncBlock');
193
+ var isNodeSelected = selection instanceof NodeSelection && (((_selection$node = selection.node) === null || _selection$node === void 0 ? void 0 : _selection$node.type.name) === 'bodiedSyncBlock' || ((_selection$node2 = selection.node) === null || _selection$node2 === void 0 ? void 0 : _selection$node2.type.name) === 'syncBlock');
199
194
  return isNodeSelected ? 'selectionReplaced' : 'keyboardDelete';
200
195
  };
201
196
  export var getPromptedFeedbackEntryPoint = function getPromptedFeedbackEntryPoint(mechanism) {
@@ -283,7 +278,7 @@ var filterTransactionOnline = function filterTransactionOnline(_ref3) {
283
278
  var isCutRemoval = hasRemovedSyncBlock && ctx.consumeCutRemoval();
284
279
  var canPromptForRemoval = Boolean(ctx.onGiveFeedback) && hasRemovedSyncBlock && !isDirtyTransaction(tr) && !isCutRemoval && !isPasteOrDrop;
285
280
  var promptedFeedbackEntryPoint = canPromptForRemoval ? getPromptedFeedbackEntryPoint(getDeleteMechanism(tr, state)) : undefined;
286
- var entryPoint = promptedFeedbackEntryPoint && expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true) ? promptedFeedbackEntryPoint : undefined;
281
+ var entryPoint = promptedFeedbackEntryPoint;
287
282
  if (entryPoint && syncBlockRemoved.length > 0 && bodiedSyncBlockRemoved.length === 0) {
288
283
  tr.setMeta(syncedBlockPromptedFeedbackMetaKey, {
289
284
  context: {
@@ -958,7 +953,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
958
953
  var isCopy = ctx.consumeCopyEvent();
959
954
  var isCut = ctx.consumeCutEvent();
960
955
  // A prompted feedback cut is always a cut, so the two never need combining.
961
- var isPromptedFeedbackCut = Boolean(syncBlockStore && (options === null || options === void 0 ? void 0 : options.onGiveFeedback) && isCut) && expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true);
956
+ var isPromptedFeedbackCut = Boolean(syncBlockStore && (options === null || options === void 0 ? void 0 : options.onGiveFeedback) && isCut);
962
957
  if (!syncBlockStore || !isCopy && !isCut) {
963
958
  return slice;
964
959
  }
@@ -1115,7 +1110,7 @@ export var createPlugin = function createPlugin(options, pmPluginFactoryParams,
1115
1110
  var feedbackContext = tr.getMeta(syncedBlockPromptedFeedbackMetaKey);
1116
1111
  return feedbackContext ? [feedbackContext] : [];
1117
1112
  });
1118
- if (feedbackContexts.length > 0 && expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true)) {
1113
+ if (feedbackContexts.length > 0) {
1119
1114
  feedbackContexts.forEach(function (feedbackContext) {
1120
1115
  ctx.handleAppliedFeedback(feedbackContext);
1121
1116
  });
@@ -7,7 +7,6 @@ import { syncBlock } from '@atlaskit/adf-schema/sync-block';
7
7
  import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
8
8
  import { SyncBlockStoreManager } from '@atlaskit/editor-synced-block-provider';
9
9
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
10
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
11
10
  import { flushBodiedSyncBlocks as _flushBodiedSyncBlocks, flushSyncBlocks, discardUnpublishedSyncBlocks as _discardUnpublishedSyncBlocks } from './editor-actions';
12
11
  import { copySyncedBlockReferenceToClipboardEditorCommand, createSyncedBlock } from './editor-commands';
13
12
  import { createPlugin, syncedBlockPluginKey } from './pm-plugins/main';
@@ -164,7 +163,7 @@ export var syncedBlockPlugin = function syncedBlockPlugin(_ref2) {
164
163
  refs.containerElement = containerElement || undefined;
165
164
  refs.popupsMountPoint = popupsMountPoint || undefined;
166
165
  refs.wrapperElement = wrapperElement || undefined;
167
- return /*#__PURE__*/React.createElement(React.Fragment, null, expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) && /*#__PURE__*/React.createElement(SourceSyncBlockPlaceholder, null), /*#__PURE__*/React.createElement(LazySyncedBlockUI, {
166
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(SourceSyncBlockPlaceholder, null), /*#__PURE__*/React.createElement(LazySyncedBlockUI, {
168
167
  syncBlockStore: syncBlockStore,
169
168
  api: api,
170
169
  editorView: editorView,
@@ -7,7 +7,6 @@ import { isOfflineMode } from '@atlaskit/editor-plugin-connectivity';
7
7
  import { SyncBlocksIcon, ToolbarDropdownItem } from '@atlaskit/editor-toolbar';
8
8
  import Lozenge from '@atlaskit/lozenge/lozenge';
9
9
  import { fg } from '@atlaskit/platform-feature-flags/fg';
10
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
11
10
  import { canBeConvertedToSyncBlock } from '../pm-plugins/utils/utils';
12
11
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
13
12
  var SyncedBlockNewLozenge = function SyncedBlockNewLozenge(_ref) {
@@ -112,7 +111,6 @@ var CopySyncedBlockDropdownItem = function CopySyncedBlockDropdownItem(_ref4) {
112
111
  var lozenge = /*#__PURE__*/React.createElement(SyncedBlockNewLozenge, {
113
112
  label: formatMessage(blockMenuMessages.newLozenge)
114
113
  });
115
- var copyLabel = expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? syncBlockMessages.copyToSyncLabel : blockMenuMessages.copySyncedBlock;
116
114
  return /*#__PURE__*/React.createElement(ToolbarDropdownItem, {
117
115
  elemBefore: /*#__PURE__*/React.createElement(SyncBlocksIcon, {
118
116
  label: "",
@@ -121,7 +119,7 @@ var CopySyncedBlockDropdownItem = function CopySyncedBlockDropdownItem(_ref4) {
121
119
  onClick: onClick,
122
120
  isDisabled: isOfflineMode(mode),
123
121
  elemAfterText: lozenge
124
- }, formatMessage(copyLabel));
122
+ }, formatMessage(syncBlockMessages.copyToSyncLabel));
125
123
  };
126
124
  export var CreateOrCopySyncedBlockDropdownItem = function CreateOrCopySyncedBlockDropdownItem(_ref5) {
127
125
  var api = _ref5.api,
@@ -20,7 +20,6 @@ import StatusSuccessIcon from '@atlaskit/icon/core/status-success';
20
20
  import StatusWarningIcon from '@atlaskit/icon/core/status-warning';
21
21
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
22
22
  import { Anchor } from '@atlaskit/primitives/compiled/anchor';
23
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
24
23
  import { syncedBlockPluginKey } from '../pm-plugins/main';
25
24
  import { FLAG_ID } from '../types';
26
25
  var feedbackFlagStyles = null;
@@ -150,7 +149,7 @@ export var Flag = function Flag(_ref) {
150
149
  var onRetry = activeFlag.onRetry,
151
150
  onDismissedCallback = activeFlag.onDismissed;
152
151
  var isCopiedFlag = activeFlag.id === FLAG_ID.SYNC_BLOCK_COPIED;
153
- var isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page' && expValEquals('platform_editor_sync_block_activation', 'isEnabled', true));
152
+ var isCopiedDescriptionEnabled = isCopiedFlag && (isExperimentEnabled('platform_editor_blocks_patch_11') || activeFlag.sourceProduct === 'confluence-page');
154
153
  var copiedDescription = getSyncBlockCopiedDescription(activeFlag, isCopiedDescriptionEnabled);
155
154
  var title = isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedTitleJiraWorkItem : defaultTitle;
156
155
  var description = copiedDescription !== null && copiedDescription !== void 0 ? copiedDescription : isJiraUnpublishedPaste ? messages.unpublishedSyncBlockPastedDescriptionJiraWorkItem : defaultDescription;
@@ -8,7 +8,6 @@ import { syncBlockMessages as messages } from '@atlaskit/editor-common/messages'
8
8
  import { SyncBlockLabelSharedCssClassName } from '@atlaskit/editor-common/sync-block';
9
9
  import BlockSyncedIcon from '@atlaskit/icon-lab/core/block-synced';
10
10
  import { Box, Text } from '@atlaskit/primitives/compiled';
11
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
12
11
  import Tooltip from '@atlaskit/tooltip/Tooltip';
13
12
  import VisuallyHidden from '@atlaskit/visually-hidden/visually-hidden';
14
13
  import { formatElapsedTime } from './utils/time';
@@ -92,7 +91,7 @@ var SyncBlockLabelComponent = function SyncBlockLabelComponent(_ref) {
92
91
  return renderPlainLabel(formatMessage(messages.unsyncedBlockLabel));
93
92
  }
94
93
  if (isSource) {
95
- return renderPlainLabel(formatMessage(expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? messages.sourceSyncedBlockLabel : messages.syncedBlockLabel));
94
+ return renderPlainLabel(formatMessage(messages.sourceSyncedBlockLabel));
96
95
  }
97
96
  if (!title) {
98
97
  return renderPlainLabel(formatMessage(messages.syncedBlockLabel));
@@ -115,7 +114,7 @@ var SyncBlockLabelComponent = function SyncBlockLabelComponent(_ref) {
115
114
  }), getLabelContent);
116
115
  var referenceDescription = !isSource && !isUnsyncedBlock && /*#__PURE__*/React.createElement(VisuallyHidden, {
117
116
  id: ariaDescribedById
118
- }, expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? tooltipMessage : tooltipContent);
117
+ }, tooltipMessage);
119
118
  if (unpublishedTooltipLabel) {
120
119
  return /*#__PURE__*/React.createElement(Tooltip, {
121
120
  position: "top",
@@ -4,7 +4,6 @@ import { bind } from 'bind-event-listener';
4
4
  import { SyncBlockSharedCssClassName } from '@atlaskit/editor-common/sync-block';
5
5
  import { SyncBlockError, useFetchSyncBlockData, useFetchSyncBlockTitle } from '@atlaskit/editor-synced-block-provider';
6
6
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
7
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
8
7
  import { getUnpublishedSourceType } from './getUnpublishedSourceType';
9
8
  import { SyncBlockLabel } from './SyncBlockLabel';
10
9
  var SyncBlockRendererWrapperDataId = 'sync-block-plugin-renderer-wrapper';
@@ -45,10 +44,6 @@ var SyncBlockRendererWrapperComponent = function SyncBlockRendererWrapperCompone
45
44
  }, [localSourceBlockInstanceId, syncBlockStore.sourceManager]);
46
45
  var isUnsyncedBlock = isUnpublishedBlock && !localSameDocumentSource || (syncBlockFetchResult === null || syncBlockFetchResult === void 0 || (_syncBlockFetchResult4 = syncBlockFetchResult.syncBlockInstance) === null || _syncBlockFetchResult4 === void 0 || (_syncBlockFetchResult4 = _syncBlockFetchResult4.error) === null || _syncBlockFetchResult4 === void 0 ? void 0 : _syncBlockFetchResult4.type) === SyncBlockError.NotFound;
47
46
 
48
- // Evaluated unconditionally so the experiment exposure is tracked correctly
49
- // (recorded on every render, not lazily on first click).
50
- var isSyncBlockActivationEnabled = expValEquals('platform_editor_sync_block_activation', 'isEnabled', true);
51
-
52
47
  // Prevent editing in the contentEditable renderer wrapper. We set
53
48
  // contentEditable="true" to enable text selection (creating an editable
54
49
  // island inside ProseMirror's contentEditable="false" nodeview wrapper),
@@ -66,7 +61,7 @@ var SyncBlockRendererWrapperComponent = function SyncBlockRendererWrapperCompone
66
61
  var rendererRef = useRef(null);
67
62
  useEffect(function () {
68
63
  var containerEl = rendererRef.current;
69
- if (!containerEl || !isSyncBlockActivationEnabled) {
64
+ if (!containerEl) {
70
65
  return;
71
66
  }
72
67
  var unbind = bind(containerEl, {
@@ -86,7 +81,7 @@ var SyncBlockRendererWrapperComponent = function SyncBlockRendererWrapperCompone
86
81
  }
87
82
  });
88
83
  return unbind;
89
- }, [isSyncBlockActivationEnabled]);
84
+ }, []);
90
85
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
91
86
  ref: rendererRef,
92
87
  "data-testid": SyncBlockRendererWrapperDataId
@@ -39,8 +39,6 @@ import Lozenge from '@atlaskit/lozenge/lozenge';
39
39
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
40
40
  import { Box, Text, Inline, Anchor, Stack } from '@atlaskit/primitives/compiled';
41
41
  import Spinner from '@atlaskit/spinner/spinner';
42
- import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
43
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
44
42
  import Tooltip from '@atlaskit/tooltip/Tooltip';
45
43
  import { SYNCED_BLOCK_BUTTON_TEST_ID } from '../types';
46
44
  import { SyncedLocationsEmptyStateIllustration } from './assets/SyncedLocationsEmptyStateIllustration';
@@ -55,7 +53,6 @@ var styles = {
55
53
  title: "_1reo15vq _18m915vq _syazazsu _1bto1l2s _o5721q9c",
56
54
  note: "_syaz1rpy _o5721q9c",
57
55
  lozenge: "_ahbq12x7 _1ul91wqb",
58
- noResultsContainer: "_1bsbo8uj _y3gn1h6o",
59
56
  activationDropdownContent: "_1rjcze3t _1bsb1kdj",
60
57
  activationNoResultsContainer: "_vchhusvi _1bsb1kdj _ca0q1ejb _n3td1ejb",
61
58
  activationNoResultsContent: "_195g1wug _1bsb12aa _y3gn1h6o",
@@ -825,10 +822,7 @@ var DropdownContentWithReferenceData = function DropdownContentWithReferenceData
825
822
  }
826
823
  };
827
824
  return /*#__PURE__*/React.createElement(Box, {
828
- xcss: cx(styles.dropdownContent,
829
- // Read off the discriminant rather than the experiment, so the control cohort
830
- // cannot reach this width and no second exposure is fired for a style.
831
- locations.kind === 'field-aware' && styles.fieldAwareDropdownContent, expValEqualsNoExposure('platform_editor_sync_block_activation', 'isEnabled', true) && fetchStatus === 'success' && locationCount === 0 && styles.activationDropdownContent, shouldApplyMinHeight(fetchStatus, locationCount) && styles.containerWithMinHeight)
825
+ xcss: cx(styles.dropdownContent, locations.kind === 'field-aware' && styles.fieldAwareDropdownContent, fetchStatus === 'success' && locationCount === 0 && styles.activationDropdownContent, shouldApplyMinHeight(fetchStatus, locationCount) && styles.containerWithMinHeight)
832
826
  }, content());
833
827
  };
834
828
  // The pre-experiment rows. This block is master's, moved into a component; remove with the experiment.
@@ -963,7 +957,7 @@ var ErrorScreen = function ErrorScreen(_ref18) {
963
957
  };
964
958
  var NoResultScreen = function NoResultScreen(_ref19) {
965
959
  var formatMessage = _ref19.formatMessage;
966
- return expValEquals('platform_editor_sync_block_activation', 'isEnabled', true) ? /*#__PURE__*/React.createElement(Box, {
960
+ return /*#__PURE__*/React.createElement(Box, {
967
961
  xcss: styles.activationNoResultsContainer,
968
962
  testId: "synced-locations-dropdown-content-no-results"
969
963
  }, /*#__PURE__*/React.createElement(Stack, {
@@ -979,18 +973,5 @@ var NoResultScreen = function NoResultScreen(_ref19) {
979
973
  target: "_blank",
980
974
  rel: "noopener noreferrer",
981
975
  xcss: styles.learnMoreLink
982
- }, formatMessage(messages.syncedLocationDropdownLearnMoreLink))))) : /*#__PURE__*/React.createElement(Stack, {
983
- xcss: styles.noResultsContainer,
984
- space: "space.100",
985
- testId: "synced-locations-dropdown-content-no-results"
986
- }, /*#__PURE__*/React.createElement(Text, {
987
- as: "p"
988
- }, formatMessage(messages.syncedLocationDropdownNoResults)), /*#__PURE__*/React.createElement(Text, {
989
- as: "p"
990
- }, /*#__PURE__*/React.createElement(Anchor, {
991
- href: SYNCED_BLOCKS_DOCUMENTATION_URL,
992
- target: "_blank",
993
- rel: "noopener noreferrer",
994
- xcss: styles.learnMoreLink
995
- }, formatMessage(messages.syncedLocationDropdownLearnMoreLink))));
976
+ }, formatMessage(messages.syncedLocationDropdownLearnMoreLink)))));
996
977
  };