UNPKG

@atlaskit/editor-plugin-block-controls

Version:

Block controls plugin for @atlaskit/editor-core

37 lines (36 loc) 2.12 kB
import { BLOCK_CONTROLS_SURFACE_INVALIDATION } from '@atlaskit/editor-common/block-controls/surface-candidate-invalidation'; import { SafePlugin } from '@atlaskit/editor-common/safe-plugin'; import { PluginKey } from '@atlaskit/editor-prosemirror/state'; import { DecorationSet } from '@atlaskit/editor-prosemirror/view'; import { key as blockControlsKey } from './main'; import { emptySparseSurfaceCandidateState } from './utils/sparse-surface-candidates'; import { applySparseSurfacesTransaction, createInitialSparseSurfacesState } from './utils/sparse-surfaces-state'; import { createSparseSurfacesView } from './utils/sparse-surfaces-view'; export const sparseSurfacesKey = new PluginKey('blockControlsSparseSurfaces'); /** Owns sparse anchors independently of drag/drop decorations and their lifecycle. */ export const createSparseSurfacesPlugin = api => new SafePlugin({ key: sparseSurfacesKey, state: { init: () => createInitialSparseSurfacesState(emptySparseSurfaceCandidateState), apply(tr, previous, _oldState, newState) { return applySparseSurfacesTransaction({ invalidation: tr.getMeta(BLOCK_CONTROLS_SURFACE_INVALIDATION), meta: tr.getMeta(sparseSurfacesKey), newState, previous, tr }); } }, props: { decorations(state) { var _api$limitedMode, _api$limitedMode$shar, _blockControlsKey$get, _sparseSurfacesKey$ge; return api !== null && api !== void 0 && (_api$limitedMode = api.limitedMode) !== null && _api$limitedMode !== void 0 && (_api$limitedMode$shar = _api$limitedMode.sharedState.currentState()) !== null && _api$limitedMode$shar !== void 0 && _api$limitedMode$shar.enabled || (_blockControlsKey$get = blockControlsKey.getState(state)) !== null && _blockControlsKey$get !== void 0 && _blockControlsKey$get.isDragging ? DecorationSet.empty : (_sparseSurfacesKey$ge = sparseSurfacesKey.getState(state)) === null || _sparseSurfacesKey$ge === void 0 ? void 0 : _sparseSurfacesKey$ge.decorations; } }, view: view => createSparseSurfacesView({ api, pluginKey: sparseSurfacesKey, view }) });