UNPKG

@atlaskit/editor-plugin-card

Version:

Card plugin for @atlaskit/editor-core

440 lines (434 loc) 24.9 kB
/* PasteDisplayAsMenu.tsx generated by @compiled/babel-plugin v0.40.0 */ "use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.setAppearanceSelection = exports.normalizeSelectionToLinkRangeForUrlAppearance = exports.getPasteDisplayAsMenuComponents = exports.getFirstLinkRangeInSelection = exports.SMART_LINK_DISPLAY_AS_PASTE_MENU_SECTION_KEY = void 0; require("./PasteDisplayAsMenu.compiled.css"); var _runtime = require("@compiled/react/runtime"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireWildcard(require("react")); var _reactIntl = require("react-intl"); var _css = require("@atlaskit/css"); var _card = require("@atlaskit/editor-common/card"); var _hooks = require("@atlaskit/editor-common/hooks"); var _link = require("@atlaskit/editor-common/link"); var _toolbar = require("@atlaskit/editor-common/toolbar"); var _utils = require("@atlaskit/editor-common/utils"); var _model = require("@atlaskit/editor-prosemirror/model"); var _state = require("@atlaskit/editor-prosemirror/state"); var _editorToolbar = require("@atlaskit/editor-toolbar"); var _minus = _interopRequireDefault(require("@atlaskit/icon/core/minus")); var _smartLinkCard = _interopRequireDefault(require("@atlaskit/icon/core/smart-link-card")); var _smartLinkEmbed = _interopRequireDefault(require("@atlaskit/icon/core/smart-link-embed")); var _smartLinkInline = _interopRequireDefault(require("@atlaskit/icon/core/smart-link-inline")); var _context2 = require("@atlaskit/link-provider/context"); var _compiled = require("@atlaskit/primitives/compiled"); var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure"); var _doc = require("../pm-plugins/doc"); var _currentPastedSmartLink = require("./currentPastedSmartLink"); var _pasteDisplayAsUtils = require("./pasteDisplayAsUtils"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); } var SMART_LINK_DISPLAY_AS_PASTE_MENU_SECTION_KEY = exports.SMART_LINK_DISPLAY_AS_PASTE_MENU_SECTION_KEY = 'smart-link-display-as-paste-menu-section'; // Subset of `PasteMenuRuleFactories` we structurally consume here — kept local // to avoid importing the toolbar package (see cycle note below). // `pasteOptionsToolbarPlugin` is intentionally NOT declared in `CardPluginDependencies` // because doing so introduces a runtime package cycle // (editor-plugin-card -> editor-plugin-paste-options-toolbar -> editor-plugin-paste // -> editor-plugin-card) AND a TS2719 "two different types with this name exist" error // at downstream consumers (e.g. Jira's `EditorAfterBanner.tsx`). The `api` shape is augmented locally instead. var styles = { appearanceBox: "_2rko1qi0 _bfhkhfxm _19pku2gc _2hwxu2gc _otyru2gc _18u0u2gc _ca0q1b66 _u5f31b66 _n3td1b66 _19bv1b66", iconWrapper: "_1e0c11p5 _yv0ehkll _1bsb1osq", iconButton: "_2rko1qi0 _1h6d1l7x _1dqonqa1 _189ee4h9 _4cvr1h6o _syazi7uo _1e0c1txw _4t3izwfg _1bah1h6o _1bsb1osq _bfhksm61 _irr31dpa _1di6fcek", iconButtonSelected: "_2rko1qi0 _1h6dq98m _1dqonqa1 _189ee4h9 _4cvr1h6o _bfhk15s3 _syazi7uo _1e0c1txw _4t3izwfg _1bah1h6o _1bsb1osq _irr3ufnl _1di6nozp", iconButtonDisabled: "_2rko1qi0 _1h6dbk0g _1dqonqa1 _189ee4h9 _4cvr1h6o _bfhk187o _syaz1gmx _1e0c1txw _4t3izwfg _1bah1h6o _1bsb1osq" }; var AppearanceOptionIconButton = function AppearanceOptionIconButton(_ref) { var appearance = _ref.appearance, currentAppearance = _ref.currentAppearance, isDisabled = _ref.isDisabled, label = _ref.label, Icon = _ref.Icon, onClick = _ref.onClick; return /*#__PURE__*/_react.default.createElement(_compiled.Box, { xcss: styles.iconWrapper }, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarTooltip, { content: label, position: "bottom" }, /*#__PURE__*/_react.default.createElement(_compiled.Pressable, { xcss: (0, _css.cx)(styles.iconButton, isDisabled && styles.iconButtonDisabled, !isDisabled && currentAppearance === appearance && styles.iconButtonSelected), "aria-label": label, "aria-pressed": currentAppearance === appearance, isDisabled: isDisabled, onClick: onClick }, /*#__PURE__*/_react.default.createElement(Icon, { label: label })))); }; var InlineAppearanceIconButton = function InlineAppearanceIconButton(_ref2) { var currentAppearance = _ref2.currentAppearance, isDisabled = _ref2.isDisabled, label = _ref2.label, onClick = _ref2.onClick; return /*#__PURE__*/_react.default.createElement(AppearanceOptionIconButton, { appearance: "inline", currentAppearance: currentAppearance, isDisabled: isDisabled, label: label, Icon: _smartLinkInline.default, onClick: onClick }); }; var BlockAppearanceIconButton = function BlockAppearanceIconButton(_ref3) { var currentAppearance = _ref3.currentAppearance, isDisabled = _ref3.isDisabled, label = _ref3.label, onClick = _ref3.onClick; return /*#__PURE__*/_react.default.createElement(AppearanceOptionIconButton, { appearance: "block", currentAppearance: currentAppearance, isDisabled: isDisabled, label: label, Icon: _smartLinkCard.default, onClick: onClick }); }; var EmbedAppearanceIconButton = function EmbedAppearanceIconButton(_ref4) { var currentAppearance = _ref4.currentAppearance, isDisabled = _ref4.isDisabled, label = _ref4.label, onClick = _ref4.onClick; return /*#__PURE__*/_react.default.createElement(AppearanceOptionIconButton, { appearance: "embed", currentAppearance: currentAppearance, isDisabled: isDisabled, label: label, Icon: _smartLinkEmbed.default, onClick: onClick }); }; var getCurrentPastedSlice = function getCurrentPastedSlice(api) { var _apiWithPaste$paste, _pasteState$lastConte; var apiWithPaste = api; var pasteState = apiWithPaste === null || apiWithPaste === void 0 || (_apiWithPaste$paste = apiWithPaste.paste) === null || _apiWithPaste$paste === void 0 ? void 0 : _apiWithPaste$paste.sharedState.currentState(); var slice = pasteState === null || pasteState === void 0 || (_pasteState$lastConte = pasteState.lastContentPasted) === null || _pasteState$lastConte === void 0 ? void 0 : _pasteState$lastConte.pastedSlice; return slice; }; var getCardUrlAtPasteRange = function getCardUrlAtPasteRange(_ref5) { var _editorView$state$doc, _maybeAttrs$url, _maybeAttrs$data; var editorView = _ref5.editorView, pasteStartPos = _ref5.pasteStartPos, pasteEndPos = _ref5.pasteEndPos; var cardAtPasteRange = (0, _pasteDisplayAsUtils.getCardAtPasteRange)(editorView.state, pasteStartPos, pasteEndPos); var maybeAttrs = cardAtPasteRange ? (_editorView$state$doc = editorView.state.doc.nodeAt(cardAtPasteRange.pos)) === null || _editorView$state$doc === void 0 ? void 0 : _editorView$state$doc.attrs : undefined; var maybeUrl = (_maybeAttrs$url = maybeAttrs === null || maybeAttrs === void 0 ? void 0 : maybeAttrs.url) !== null && _maybeAttrs$url !== void 0 ? _maybeAttrs$url : maybeAttrs === null || maybeAttrs === void 0 || (_maybeAttrs$data = maybeAttrs.data) === null || _maybeAttrs$data === void 0 ? void 0 : _maybeAttrs$data.url; return typeof maybeUrl === 'string' ? maybeUrl : undefined; }; var setAppearanceSelection = exports.setAppearanceSelection = function setAppearanceSelection(_ref6) { var editorView = _ref6.editorView, pasteStartPos = _ref6.pasteStartPos, pasteEndPos = _ref6.pasteEndPos, targetPos = _ref6.targetPos; var state = editorView.state, dispatch = editorView.dispatch; var maxPos = state.doc.content.size; var clampedStart = Math.max(0, Math.min(pasteStartPos, maxPos)); var clampedEnd = Math.max(0, Math.min(pasteEndPos, maxPos)); var from = Math.min(clampedStart, clampedEnd); var to = Math.max(clampedStart, clampedEnd); var isTargetPosInBounds = targetPos !== undefined && targetPos >= 0 && targetPos <= state.doc.content.size; try { var nextSelection = isTargetPosInBounds && targetPos !== undefined ? _state.NodeSelection.create(state.doc, targetPos) : _state.TextSelection.create(state.doc, from, to); var tr = state.tr.setSelection(nextSelection); dispatch(tr); return true; } catch (_unused) { return false; } }; var getFirstLinkRangeInSelection = exports.getFirstLinkRangeInSelection = function getFirstLinkRangeInSelection(editorView) { var state = editorView.state; var linkMarkType = state.schema.marks.link; if (!linkMarkType) { return; } var firstLinkRange; state.doc.nodesBetween(state.selection.from, state.selection.to, function (node, pos) { if (firstLinkRange || !node.isText) { return; } if (linkMarkType.isInSet(node.marks)) { firstLinkRange = { from: pos, to: pos + node.nodeSize }; } }); return firstLinkRange; }; var normalizeSelectionToLinkRangeForUrlAppearance = exports.normalizeSelectionToLinkRangeForUrlAppearance = function normalizeSelectionToLinkRangeForUrlAppearance(_ref7) { var editorView = _ref7.editorView, targetPos = _ref7.targetPos; if (targetPos !== undefined || (0, _link.getActiveLinkMark)(editorView.state)) { return; } var firstLinkRange = getFirstLinkRangeInSelection(editorView); if (!firstLinkRange) { return; } var linkRangeSelectionTr = editorView.state.tr.setSelection(_state.TextSelection.create(editorView.state.doc, firstLinkRange.from, firstLinkRange.to)); editorView.dispatch(linkRangeSelectionTr); }; var PasteDisplayAsMenuHorizontalView = function PasteDisplayAsMenuHorizontalView(_ref8) { var _smartCardContext$val, _getCardAtPasteRange$, _getCardAtPasteRange, _smartCardContext$val2; var api = _ref8.api, allowBlockCards = _ref8.allowBlockCards, allowEmbeds = _ref8.allowEmbeds; var intl = (0, _reactIntl.useIntl)(); var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(), editorView = _useEditorToolbar.editorView; var toolbarDropdownMenu = (0, _editorToolbar.useToolbarDropdownMenu)(); var smartCardContext = (0, _context2.useSmartCardContext)(); var frameRef = (0, _react.useRef)(null); var isApplyingRef = (0, _react.useRef)(false); var apiWithPasteOptionsToolbar = api; var pasteRange = (0, _hooks.useSharedPluginStateWithSelector)(apiWithPasteOptionsToolbar, ['pasteOptionsToolbarPlugin'], // @ts-ignore TS7006 - isolated Fast Typecheck can't infer the selector states generic function (states) { var pluginState = states.pasteOptionsToolbarPluginState; return pluginState ? { pasteEndPos: pluginState.pasteEndPos, pasteStartPos: pluginState.pasteStartPos } : undefined; }); // Subscribe to card state so the menu re-renders when resolved card metadata updates. // @ts-ignore TS7006 - isolated Fast Typecheck can't infer the selector states generic (0, _hooks.useSharedPluginStateWithSelector)(api, ['card'], function (states) { return states.cardState; }); var pastedLinkUrlFromSlice = (0, _currentPastedSmartLink.getSingleSmartLinkUrlFromSlice)(getCurrentPastedSlice(api)); var pastedLinkUrlFromCard = editorView && pasteRange ? getCardUrlAtPasteRange({ editorView: editorView, pasteStartPos: pasteRange.pasteStartPos, pasteEndPos: pasteRange.pasteEndPos }) : undefined; var pastedLinkUrl = pastedLinkUrlFromSlice !== null && pastedLinkUrlFromSlice !== void 0 ? pastedLinkUrlFromSlice : pastedLinkUrlFromCard; var pastedLinkUrlState = pastedLinkUrl ? (_smartCardContext$val = smartCardContext.value) === null || _smartCardContext$val === void 0 || (_smartCardContext$val = _smartCardContext$val.store) === null || _smartCardContext$val === void 0 || (_smartCardContext$val = _smartCardContext$val.getState()) === null || _smartCardContext$val === void 0 ? void 0 : _smartCardContext$val[pastedLinkUrl] : undefined; var hasResolvedSmartLinkData = Boolean(pastedLinkUrlState === null || pastedLinkUrlState === void 0 ? void 0 : pastedLinkUrlState.details); var currentAppearance = editorView && pasteRange ? (_getCardAtPasteRange$ = (_getCardAtPasteRange = (0, _pasteDisplayAsUtils.getCardAtPasteRange)(editorView.state, pasteRange.pasteStartPos, pasteRange.pasteEndPos)) === null || _getCardAtPasteRange === void 0 ? void 0 : _getCardAtPasteRange.appearance) !== null && _getCardAtPasteRange$ !== void 0 ? _getCardAtPasteRange$ : 'url' : undefined; var handleClick = (0, _react.useCallback)(function (appearance) { return function () { var _state$doc$nodeAt2, _targetNodeAttrs$url, _targetNodeAttrs$data; if (!editorView || !pasteRange || !pastedLinkUrl || !currentAppearance || isApplyingRef.current) { return; } isApplyingRef.current = true; var state = editorView.state, dispatch = editorView.dispatch; var pasteStartPos = pasteRange.pasteStartPos, pasteEndPos = pasteRange.pasteEndPos; var cardAtPasteRange = (0, _pasteDisplayAsUtils.getCardAtPasteRange)(state, pasteStartPos, pasteEndPos); if (appearance === 'url') { if (cardAtPasteRange) { var _state$doc$nodeAt, _api$analytics; (0, _doc.changeSelectedCardToLink)(pastedLinkUrl, pastedLinkUrl, true, (_state$doc$nodeAt = state.doc.nodeAt(cardAtPasteRange.pos)) !== null && _state$doc$nodeAt !== void 0 ? _state$doc$nodeAt : undefined, cardAtPasteRange.pos, api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions)(state, dispatch, editorView); } toolbarDropdownMenu === null || toolbarDropdownMenu === void 0 || toolbarDropdownMenu.closeMenu(null); isApplyingRef.current = false; return; } var targetPos = cardAtPasteRange === null || cardAtPasteRange === void 0 ? void 0 : cardAtPasteRange.pos; var targetNodeAttrs = targetPos === undefined ? undefined : (_state$doc$nodeAt2 = state.doc.nodeAt(targetPos)) === null || _state$doc$nodeAt2 === void 0 ? void 0 : _state$doc$nodeAt2.attrs; var targetNodeUrl = (_targetNodeAttrs$url = targetNodeAttrs === null || targetNodeAttrs === void 0 ? void 0 : targetNodeAttrs.url) !== null && _targetNodeAttrs$url !== void 0 ? _targetNodeAttrs$url : targetNodeAttrs === null || targetNodeAttrs === void 0 || (_targetNodeAttrs$data = targetNodeAttrs.data) === null || _targetNodeAttrs$data === void 0 ? void 0 : _targetNodeAttrs$data.url; var isRecoveredAdjacentPastedCard = (0, _expValEqualsNoExposure.expValEqualsNoExposure)('confluence_editor_paste_3p_link_actions_menu', 'isEnabled', true) && targetPos === pasteStartPos - 1 && pasteStartPos === pasteEndPos && targetNodeUrl === pastedLinkUrl; if (targetPos !== undefined && targetPos < pasteStartPos && !isRecoveredAdjacentPastedCard) { isApplyingRef.current = false; return; } var didApplySelection = setAppearanceSelection({ editorView: editorView, pasteStartPos: pasteStartPos, pasteEndPos: pasteEndPos, targetPos: targetPos }); if (!didApplySelection) { toolbarDropdownMenu === null || toolbarDropdownMenu === void 0 || toolbarDropdownMenu.closeMenu(null); isApplyingRef.current = false; return; } normalizeSelectionToLinkRangeForUrlAppearance({ editorView: editorView, targetPos: targetPos }); frameRef.current = requestAnimationFrame(function () { var _api$analytics2; frameRef.current = null; (0, _doc.setSelectedCardAppearance)(appearance, api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions)(editorView.state, editorView.dispatch, editorView); toolbarDropdownMenu === null || toolbarDropdownMenu === void 0 || toolbarDropdownMenu.closeMenu(null); isApplyingRef.current = false; }); }; }, [api, currentAppearance, editorView, pasteRange, pastedLinkUrl, toolbarDropdownMenu]); (0, _react.useEffect)(function () { return function () { if (frameRef.current !== null) { cancelAnimationFrame(frameRef.current); } isApplyingRef.current = false; }; }, []); if (!editorView || !pasteRange || !pastedLinkUrl || !currentAppearance) { return null; } var preview = allowEmbeds && pastedLinkUrl && ((_smartCardContext$val2 = smartCardContext.value) === null || _smartCardContext$val2 === void 0 ? void 0 : _smartCardContext$val2.extractors.getPreview(pastedLinkUrl, 'web')); var blockCardNodeType = editorView.state.schema.nodes.blockCard; var embedCardNodeType = editorView.state.schema.nodes.embedCard; var isBlockSupportedFromAppearanceContext = allowBlockCards && blockCardNodeType && (0, _utils.isSupportedInParent)(editorView.state, _model.Fragment.from(blockCardNodeType.createChecked({})), currentAppearance === 'url' || currentAppearance === 'inline' ? undefined : currentAppearance); var isEmbedSupportedFromAppearanceContext = allowEmbeds && preview && embedCardNodeType && (0, _utils.isSupportedInParent)(editorView.state, _model.Fragment.from(embedCardNodeType.createChecked({})), currentAppearance === 'url' || currentAppearance === 'inline' ? undefined : currentAppearance); var isSmartLinkConvertible = hasResolvedSmartLinkData; var isBlockSupportedFromSelection = allowBlockCards && blockCardNodeType && (0, _utils.isSupportedInParent)(editorView.state, _model.Fragment.from(blockCardNodeType.createChecked({})), undefined); var isEmbedSupportedFromSelection = allowEmbeds && preview && embedCardNodeType && (0, _utils.isSupportedInParent)(editorView.state, _model.Fragment.from(embedCardNodeType.createChecked({})), undefined); var isBlockSupported = Boolean(isBlockSupportedFromAppearanceContext || isBlockSupportedFromSelection); var isEmbedSupported = Boolean(isEmbedSupportedFromAppearanceContext || isEmbedSupportedFromSelection); return /*#__PURE__*/_react.default.createElement(_compiled.Flex, { xcss: styles.appearanceBox, gap: "space.050" }, /*#__PURE__*/_react.default.createElement(AppearanceOptionIconButton, { appearance: "url", currentAppearance: currentAppearance, isDisabled: false, label: intl.formatMessage(_card.appearancePropsMap.url.title), Icon: _minus.default, onClick: handleClick('url') }), /*#__PURE__*/_react.default.createElement(InlineAppearanceIconButton, { currentAppearance: currentAppearance, isDisabled: !isSmartLinkConvertible, label: intl.formatMessage(_card.appearancePropsMap.inline.title), onClick: handleClick('inline') }), /*#__PURE__*/_react.default.createElement(BlockAppearanceIconButton, { currentAppearance: currentAppearance, isDisabled: !isSmartLinkConvertible || !isBlockSupported, label: intl.formatMessage(_card.appearancePropsMap.block.title), onClick: handleClick('block') }), /*#__PURE__*/_react.default.createElement(EmbedAppearanceIconButton, { currentAppearance: currentAppearance, isDisabled: !isEmbedSupported, label: intl.formatMessage(_card.appearancePropsMap.embed.title), onClick: handleClick('embed') })); }; var PasteDisplayAsMenuSection = function PasteDisplayAsMenuSection(_ref9) { var api = _ref9.api, allowBlockCards = _ref9.allowBlockCards, allowEmbeds = _ref9.allowEmbeds; var intl = (0, _reactIntl.useIntl)(); return /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarDropdownItemSection, { title: intl.formatMessage({ defaultMessage: 'Display as', description: 'Section title for Smart Link display options in the paste actions menu.', id: 'fabric.editor.pasteDisplayAsMenu.displayAs' }) }, /*#__PURE__*/_react.default.createElement(PasteDisplayAsMenuHorizontalView, { api: api, allowBlockCards: allowBlockCards, allowEmbeds: allowEmbeds })); }; var getPasteDisplayAsMenuComponents = exports.getPasteDisplayAsMenuComponents = function getPasteDisplayAsMenuComponents(_ref0) { var api = _ref0.api, allowBlockCards = _ref0.allowBlockCards, allowEmbeds = _ref0.allowEmbeds, getEditorView = _ref0.getEditorView, smartCardClientRef = _ref0.smartCardClientRef; var smartlinkAsyncHidden = /*#__PURE__*/function () { var _ref1 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(context) { var pastedUrl, isEnabled, smartCardClient, _response$meta, response, _t; return _regenerator.default.wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: pastedUrl = context.pastedUrl; if (pastedUrl) { _context.next = 1; break; } return _context.abrupt("return", false); case 1: isEnabled = (0, _expValEqualsNoExposure.expValEqualsNoExposure)('confluence_editor_paste_3p_link_actions_menu', 'isEnabled', true); smartCardClient = smartCardClientRef === null || smartCardClientRef === void 0 ? void 0 : smartCardClientRef.current; if (!(!isEnabled || !smartCardClient)) { _context.next = 2; break; } return _context.abrupt("return", true); case 2: _context.prev = 2; _context.next = 3; return smartCardClient.fetchData(pastedUrl); case 3: response = _context.sent; return _context.abrupt("return", ((_response$meta = response.meta) === null || _response$meta === void 0 ? void 0 : _response$meta.access) !== 'granted'); case 4: _context.prev = 4; _t = _context["catch"](2); return _context.abrupt("return", true); case 5: case "end": return _context.stop(); } }, _callee, null, [[2, 4]]); })); return function smartlinkAsyncHidden(_x) { return _ref1.apply(this, arguments); }; }(); return [{ type: 'menu-section', key: SMART_LINK_DISPLAY_AS_PASTE_MENU_SECTION_KEY, parents: [{ type: _toolbar.PASTE_MENU.type, key: _toolbar.PASTE_MENU.key, rank: 60 }], isAsyncHidden: smartlinkAsyncHidden, isHidden: function isHidden() { var _apiWithPasteOptionsT, _apiWithPasteOptionsT2; if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('confluence_editor_paste_3p_link_actions_menu', 'isEnabled', true)) { return true; } var apiWithPasteOptionsToolbar = api; var pasteRange = apiWithPasteOptionsToolbar === null || apiWithPasteOptionsToolbar === void 0 || (_apiWithPasteOptionsT = apiWithPasteOptionsToolbar.pasteOptionsToolbarPlugin) === null || _apiWithPasteOptionsT === void 0 ? void 0 : _apiWithPasteOptionsT.sharedState.currentState(); var editorView = getEditorView(); if (!editorView || !pasteRange) { return true; } // Slice-shape check — delegated to the toolbar plugin's shared // `notSingleLinkRule` via the structural cast (see note above). var rules = apiWithPasteOptionsToolbar === null || apiWithPasteOptionsToolbar === void 0 || (_apiWithPasteOptionsT2 = apiWithPasteOptionsToolbar.pasteOptionsToolbarPlugin) === null || _apiWithPasteOptionsT2 === void 0 ? void 0 : _apiWithPasteOptionsT2.actions.getPasteMenuRules(); if (!rules || rules.notSingleLinkRule()) { return true; } var urlFromSlice = (0, _currentPastedSmartLink.getSingleSmartLinkUrlFromSlice)(getCurrentPastedSlice(api)); if (urlFromSlice) { return false; } // Fallback: plain-text URL paste that the card plugin already resolved into a card node in the doc. var urlFromCard = getCardUrlAtPasteRange({ editorView: editorView, pasteStartPos: pasteRange.pasteStartPos, pasteEndPos: pasteRange.pasteEndPos }); return !urlFromCard; }, component: function component() { return /*#__PURE__*/_react.default.createElement(PasteDisplayAsMenuSection, { api: api, allowBlockCards: allowBlockCards, allowEmbeds: allowEmbeds }); } }]; };