@atlaskit/editor-plugin-block-controls 20.0.3 → 20.1.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 (107) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/cjs/blockControlsPlugin.js +53 -17
  3. package/dist/cjs/editor-commands/show-drag-handle.js +17 -5
  4. package/dist/cjs/pm-plugins/decorations-anchor.js +2 -1
  5. package/dist/cjs/pm-plugins/decorations-drop-target-active.js +2 -1
  6. package/dist/cjs/pm-plugins/decorations-drop-target.js +2 -1
  7. package/dist/cjs/pm-plugins/decorations-surface-anchor.js +72 -0
  8. package/dist/cjs/pm-plugins/handle-mouse-down.js +2 -1
  9. package/dist/cjs/pm-plugins/handle-mouse-over.js +3 -2
  10. package/dist/cjs/pm-plugins/handle-sparse-mouse-over.js +125 -0
  11. package/dist/cjs/pm-plugins/main.js +66 -54
  12. package/dist/cjs/pm-plugins/sparse-surfaces.js +49 -0
  13. package/dist/cjs/pm-plugins/utils/sparse-surface-candidates.js +419 -0
  14. package/dist/cjs/pm-plugins/utils/sparse-surfaces-mapping.js +108 -0
  15. package/dist/cjs/pm-plugins/utils/sparse-surfaces-state.js +53 -0
  16. package/dist/cjs/pm-plugins/utils/sparse-surfaces-view.js +134 -0
  17. package/dist/cjs/pm-plugins/utils/surface-viewport.js +223 -0
  18. package/dist/cjs/pm-plugins/utils/transactions.js +5 -0
  19. package/dist/cjs/ui/block-controls-left-surfaces.js +31 -25
  20. package/dist/cjs/ui/block-controls-right-surfaces.js +31 -25
  21. package/dist/cjs/ui/block-controls-surface-context.js +1 -0
  22. package/dist/cjs/ui/block-controls-surface-drag-handle-registration.js +6 -7
  23. package/dist/cjs/ui/block-controls-surface-drag-handle.js +6 -2
  24. package/dist/cjs/ui/drag-handle.js +5 -3
  25. package/dist/cjs/ui/drop-target-layout.js +3 -2
  26. package/dist/cjs/ui/drop-target.js +3 -2
  27. package/dist/cjs/ui/global-styles.js +69 -27
  28. package/dist/cjs/ui/inline-drop-target.js +6 -5
  29. package/dist/cjs/ui/utils/anchor-name.js +2 -1
  30. package/dist/cjs/ui/utils/dom-attr-name.js +3 -2
  31. package/dist/cjs/ui/utils/get-surface-placement.js +2 -1
  32. package/dist/es2019/blockControlsPlugin.js +42 -8
  33. package/dist/es2019/editor-commands/show-drag-handle.js +14 -2
  34. package/dist/es2019/pm-plugins/decorations-anchor.js +2 -1
  35. package/dist/es2019/pm-plugins/decorations-drop-target-active.js +2 -1
  36. package/dist/es2019/pm-plugins/decorations-drop-target.js +2 -1
  37. package/dist/es2019/pm-plugins/decorations-surface-anchor.js +56 -0
  38. package/dist/es2019/pm-plugins/handle-mouse-down.js +2 -1
  39. package/dist/es2019/pm-plugins/handle-mouse-over.js +3 -2
  40. package/dist/es2019/pm-plugins/handle-sparse-mouse-over.js +116 -0
  41. package/dist/es2019/pm-plugins/main.js +70 -54
  42. package/dist/es2019/pm-plugins/sparse-surfaces.js +37 -0
  43. package/dist/es2019/pm-plugins/utils/sparse-surface-candidates.js +305 -0
  44. package/dist/es2019/pm-plugins/utils/sparse-surfaces-mapping.js +78 -0
  45. package/dist/es2019/pm-plugins/utils/sparse-surfaces-state.js +39 -0
  46. package/dist/es2019/pm-plugins/utils/sparse-surfaces-view.js +121 -0
  47. package/dist/es2019/pm-plugins/utils/surface-viewport.js +192 -0
  48. package/dist/es2019/pm-plugins/utils/transactions.js +5 -0
  49. package/dist/es2019/ui/block-controls-left-surfaces.js +21 -14
  50. package/dist/es2019/ui/block-controls-right-surfaces.js +21 -14
  51. package/dist/es2019/ui/block-controls-surface-context.js +1 -0
  52. package/dist/es2019/ui/block-controls-surface-drag-handle-registration.js +4 -5
  53. package/dist/es2019/ui/block-controls-surface-drag-handle.js +6 -2
  54. package/dist/es2019/ui/drag-handle.js +5 -3
  55. package/dist/es2019/ui/drop-target-layout.js +3 -2
  56. package/dist/es2019/ui/drop-target.js +3 -2
  57. package/dist/es2019/ui/global-styles.js +67 -28
  58. package/dist/es2019/ui/inline-drop-target.js +6 -5
  59. package/dist/es2019/ui/utils/anchor-name.js +2 -1
  60. package/dist/es2019/ui/utils/dom-attr-name.js +3 -2
  61. package/dist/es2019/ui/utils/get-surface-placement.js +2 -1
  62. package/dist/esm/blockControlsPlugin.js +53 -17
  63. package/dist/esm/editor-commands/show-drag-handle.js +17 -5
  64. package/dist/esm/pm-plugins/decorations-anchor.js +2 -1
  65. package/dist/esm/pm-plugins/decorations-drop-target-active.js +2 -1
  66. package/dist/esm/pm-plugins/decorations-drop-target.js +2 -1
  67. package/dist/esm/pm-plugins/decorations-surface-anchor.js +65 -0
  68. package/dist/esm/pm-plugins/handle-mouse-down.js +2 -1
  69. package/dist/esm/pm-plugins/handle-mouse-over.js +3 -2
  70. package/dist/esm/pm-plugins/handle-sparse-mouse-over.js +119 -0
  71. package/dist/esm/pm-plugins/main.js +66 -54
  72. package/dist/esm/pm-plugins/sparse-surfaces.js +43 -0
  73. package/dist/esm/pm-plugins/utils/sparse-surface-candidates.js +413 -0
  74. package/dist/esm/pm-plugins/utils/sparse-surfaces-mapping.js +101 -0
  75. package/dist/esm/pm-plugins/utils/sparse-surfaces-state.js +46 -0
  76. package/dist/esm/pm-plugins/utils/sparse-surfaces-view.js +127 -0
  77. package/dist/esm/pm-plugins/utils/surface-viewport.js +217 -0
  78. package/dist/esm/pm-plugins/utils/transactions.js +5 -0
  79. package/dist/esm/ui/block-controls-left-surfaces.js +33 -27
  80. package/dist/esm/ui/block-controls-right-surfaces.js +33 -27
  81. package/dist/esm/ui/block-controls-surface-context.js +1 -0
  82. package/dist/esm/ui/block-controls-surface-drag-handle-registration.js +7 -8
  83. package/dist/esm/ui/block-controls-surface-drag-handle.js +6 -2
  84. package/dist/esm/ui/drag-handle.js +5 -3
  85. package/dist/esm/ui/drop-target-layout.js +3 -2
  86. package/dist/esm/ui/drop-target.js +3 -2
  87. package/dist/esm/ui/global-styles.js +70 -28
  88. package/dist/esm/ui/inline-drop-target.js +6 -5
  89. package/dist/esm/ui/utils/anchor-name.js +2 -1
  90. package/dist/esm/ui/utils/dom-attr-name.js +3 -2
  91. package/dist/esm/ui/utils/get-surface-placement.js +2 -1
  92. package/dist/types/blockControlsPluginType.d.ts +10 -3
  93. package/dist/types/pm-plugins/decorations-surface-anchor.d.ts +22 -0
  94. package/dist/types/pm-plugins/handle-sparse-mouse-over.d.ts +5 -0
  95. package/dist/types/pm-plugins/main.d.ts +2 -9
  96. package/dist/types/pm-plugins/sparse-surfaces.d.ts +8 -0
  97. package/dist/types/pm-plugins/utils/sparse-surface-candidates.d.ts +89 -0
  98. package/dist/types/pm-plugins/utils/sparse-surfaces-mapping.d.ts +20 -0
  99. package/dist/types/pm-plugins/utils/sparse-surfaces-state.d.ts +27 -0
  100. package/dist/types/pm-plugins/utils/sparse-surfaces-view.d.ts +15 -0
  101. package/dist/types/pm-plugins/utils/surface-viewport.d.ts +10 -0
  102. package/dist/types/ui/utils/get-surface-placement.d.ts +3 -2
  103. package/package.json +6 -6
  104. package/dist/cjs/pm-plugins/utils/surface-node-positions.js +0 -100
  105. package/dist/es2019/pm-plugins/utils/surface-node-positions.js +0 -78
  106. package/dist/esm/pm-plugins/utils/surface-node-positions.js +0 -93
  107. package/dist/types/pm-plugins/utils/surface-node-positions.d.ts +0 -14
@@ -0,0 +1,27 @@
1
+ import type { BlockControlsSurfaceInvalidation } from '@atlaskit/editor-common/block-controls/surface-candidate-invalidation';
2
+ import type { EditorState, ReadonlyTransaction } from '@atlaskit/editor-prosemirror/state';
3
+ import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
4
+ import type { ActiveNode } from '../../blockControlsPluginType';
5
+ import type { SparseSurfaceCandidateState } from './sparse-surface-candidates';
6
+ export type SparseSurfacesState = {
7
+ activeNodesByPosition: ReadonlyMap<number, ActiveNode>;
8
+ anchors: ReadonlyMap<number, string>;
9
+ candidates: SparseSurfaceCandidateState;
10
+ decorations: DecorationSet;
11
+ documentChanged: boolean;
12
+ invalidation?: BlockControlsSurfaceInvalidation;
13
+ };
14
+ export type SparseSurfacesReconciliation = Pick<SparseSurfacesState, 'activeNodesByPosition' | 'anchors' | 'candidates' | 'decorations'>;
15
+ export type SparseSurfacesMeta = {
16
+ reconciliation: SparseSurfacesReconciliation;
17
+ type: 'commitReconciliation';
18
+ };
19
+ export declare const createInitialSparseSurfacesState: (candidates: SparseSurfaceCandidateState) => SparseSurfacesState;
20
+ export type ApplySparseSurfacesTransactionInput = {
21
+ invalidation: BlockControlsSurfaceInvalidation | undefined;
22
+ meta: SparseSurfacesMeta | undefined;
23
+ newState: EditorState;
24
+ previous: SparseSurfacesState;
25
+ tr: ReadonlyTransaction;
26
+ };
27
+ export declare const applySparseSurfacesTransaction: (input: ApplySparseSurfacesTransactionInput) => SparseSurfacesState;
@@ -0,0 +1,15 @@
1
+ import type { ExtractInjectionAPI } from '@atlaskit/editor-common/types';
2
+ import type { EditorState, PluginKey } from '@atlaskit/editor-prosemirror/state';
3
+ import type { EditorView } from '@atlaskit/editor-prosemirror/view';
4
+ import type { BlockControlsPlugin } from '../../blockControlsPluginType';
5
+ import type { SparseSurfacesState } from './sparse-surfaces-state';
6
+ type SparseSurfacesPluginView = {
7
+ destroy: () => void;
8
+ update: (view: EditorView, previousState: EditorState) => void;
9
+ };
10
+ export declare const createSparseSurfacesView: ({ api, pluginKey, view, }: {
11
+ api: ExtractInjectionAPI<BlockControlsPlugin> | undefined;
12
+ pluginKey: PluginKey<SparseSurfacesState>;
13
+ view: EditorView;
14
+ }) => SparseSurfacesPluginView;
15
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { EditorView } from '@atlaskit/editor-prosemirror/view';
2
+ export type SurfaceViewportPositions = readonly number[];
3
+ /**
4
+ * Tracks block DOM nodes that intersect the browser viewport. The browser owns clipping and
5
+ * visibility decisions; this helper only translates observer targets back to PM positions.
6
+ */
7
+ export declare const observeSurfaceViewport: (view: EditorView, onChange: (positions: SurfaceViewportPositions) => void) => {
8
+ destroy: () => void;
9
+ update: () => void;
10
+ };
@@ -58,11 +58,12 @@ export type SurfaceWrapperPlacement = {
58
58
  */
59
59
  export declare const toMeasuredSurfaceWrapperPlacement: (placement: SurfacePlacement) => SurfaceWrapperPlacement;
60
60
  export type AnchoredSurfacePlacementOptions = {
61
- /** The target node's CSS anchor name, i.e. its `data-node-anchor` value. */
61
+ /** The target node's CSS anchor name, from a sparse marker or native `data-node-anchor`. */
62
62
  anchorName: string;
63
+ layout?: string;
63
64
  nodeType: string;
64
65
  nodeTypeWithLevel: string;
65
66
  parentNodeType?: string;
66
67
  side: SurfaceSide;
67
68
  };
68
- export declare const getAnchoredSurfacePlacement: ({ anchorName, nodeType, nodeTypeWithLevel, parentNodeType, side, }: AnchoredSurfacePlacementOptions) => SurfaceWrapperPlacement;
69
+ export declare const getAnchoredSurfacePlacement: ({ anchorName, layout, nodeType, nodeTypeWithLevel, parentNodeType, side, }: AnchoredSurfacePlacementOptions) => SurfaceWrapperPlacement;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-block-controls",
3
- "version": "20.0.3",
3
+ "version": "20.1.1",
4
4
  "description": "Block controls plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -26,7 +26,7 @@
26
26
  "atlaskit:src": "src/index.ts",
27
27
  "dependencies": {
28
28
  "@atlaskit/browser-apis": "^1.2.0",
29
- "@atlaskit/button": "^25.3.0",
29
+ "@atlaskit/button": "^25.4.0",
30
30
  "@atlaskit/css": "^1.1.0",
31
31
  "@atlaskit/docs": "^12.2.0",
32
32
  "@atlaskit/editor-plugin-accessibility-utils": "^19.0.0",
@@ -43,13 +43,13 @@
43
43
  "@atlaskit/editor-plugin-show-diff": "^17.1.0",
44
44
  "@atlaskit/editor-plugin-toolbar": "^16.0.0",
45
45
  "@atlaskit/editor-plugin-type-ahead": "^20.0.0",
46
- "@atlaskit/editor-plugin-ui-control-registry": "^13.0.0",
46
+ "@atlaskit/editor-plugin-ui-control-registry": "^13.1.0",
47
47
  "@atlaskit/editor-plugin-user-intent": "^17.0.0",
48
48
  "@atlaskit/editor-plugin-width": "^20.0.0",
49
49
  "@atlaskit/editor-prosemirror": "^9.0.0",
50
50
  "@atlaskit/editor-shared-styles": "^4.3.0",
51
51
  "@atlaskit/editor-tables": "^3.2.0",
52
- "@atlaskit/editor-ui-control-model": "^2.9.0",
52
+ "@atlaskit/editor-ui-control-model": "^2.10.0",
53
53
  "@atlaskit/icon": "^37.7.0",
54
54
  "@atlaskit/icon-lab": "^7.9.0",
55
55
  "@atlaskit/link": "^5.1.0",
@@ -61,7 +61,7 @@
61
61
  "@atlaskit/primitives": "^22.5.0",
62
62
  "@atlaskit/section-message": "^10.2.0",
63
63
  "@atlaskit/theme": "^28.2.0",
64
- "@atlaskit/tmp-editor-statsig": "^201.0.0",
64
+ "@atlaskit/tmp-editor-statsig": "^202.0.0",
65
65
  "@atlaskit/tokens": "^18.2.0",
66
66
  "@atlaskit/tooltip": "^24.3.0",
67
67
  "@babel/runtime": "^7.0.0",
@@ -73,7 +73,7 @@
73
73
  "uuid": "^11.1.1"
74
74
  },
75
75
  "peerDependencies": {
76
- "@atlaskit/editor-common": "^123.2.0",
76
+ "@atlaskit/editor-common": "^123.5.0",
77
77
  "react": "^18.2.0 || ^19.2.0",
78
78
  "react-dom": "^18.2.0 || ^19.2.0",
79
79
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
@@ -1,100 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.updateSurfaceNodePositions = exports.getSurfaceNodePositions = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _blockControlUiContext = require("@atlaskit/editor-common/block-controls/block-control-ui-context");
10
- var _createSurfaceContext = require("@atlaskit/editor-ui-control-model/create-surface-context");
11
- var _surfaceRenderer = require("@atlaskit/editor-ui-control-model/surface-renderer");
12
- var _blockControlsSurfaceContext = require("../../ui/block-controls-surface-context");
13
- var _hasSurfaceControls = require("../../ui/utils/has-surface-controls");
14
- var createSurfaceContextAtPosition = function createSurfaceContextAtPosition(state, position, activeNode) {
15
- var blockControlsContext = (0, _blockControlsSurfaceContext.createBlockControlsSurfaceContextForPosition)(state, position, activeNode);
16
- return blockControlsContext ? (0, _createSurfaceContext.createSurfaceContext)(_blockControlUiContext.BLOCK_CONTROL_UI_CONTEXT, blockControlsContext) : undefined;
17
- };
18
-
19
- /**
20
- * A position qualifies as soon as ANY of the given surfaces would render something for it.
21
- * The surface context depends only on state/position/activeNode, not on which surface is being
22
- * checked, so it's built once here rather than once per surface inside the `.some()`.
23
- */
24
- var willAnySurfaceRenderAt = function willAnySurfaceRenderAt(surfaces, state, position, activeNode) {
25
- var surfaceContext = createSurfaceContextAtPosition(state, position, activeNode);
26
- return surfaces.some(function (_ref) {
27
- var childrenMap = _ref.childrenMap,
28
- root = _ref.root;
29
- return (0, _surfaceRenderer.willComponentRender)(root, childrenMap, surfaceContext);
30
- });
31
- };
32
- var getSurfaceNodePositions = exports.getSurfaceNodePositions = function getSurfaceNodePositions(state, resolvedSurfaces, activeNode) {
33
- var from = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
34
- var to = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : state.doc.content.size;
35
- var surfaces = resolvedSurfaces.flatMap(function (_ref2) {
36
- var childrenMap = _ref2.childrenMap,
37
- components = _ref2.components,
38
- root = _ref2.root;
39
- return root && (0, _hasSurfaceControls.hasSurfaceControls)(components) ? [{
40
- childrenMap: childrenMap,
41
- root: root
42
- }] : [];
43
- });
44
- if (surfaces.length === 0) {
45
- return [];
46
- }
47
- var positions = [];
48
- var start = Math.max(0, from);
49
- var end = Math.min(state.doc.content.size, Math.max(start, to));
50
- state.doc.nodesBetween(start, end, function (node, position) {
51
- if (node.isBlock && willAnySurfaceRenderAt(surfaces, state, position, activeNode)) {
52
- positions.push(position);
53
- }
54
- });
55
- return positions;
56
- };
57
- var hasActiveNodeChanged = function hasActiveNodeChanged(previousActiveNode, activeNode) {
58
- return (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.pos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.pos) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.nodeType) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.nodeType) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.rootPos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.rootPos);
59
- };
60
- var updateSurfaceNodePositions = exports.updateSurfaceNodePositions = function updateSurfaceNodePositions(_ref3) {
61
- var activeNode = _ref3.activeNode,
62
- currentPositions = _ref3.currentPositions,
63
- from = _ref3.from,
64
- newState = _ref3.newState,
65
- previousActiveNode = _ref3.previousActiveNode,
66
- resolvedSurfaces = _ref3.resolvedSurfaces,
67
- to = _ref3.to,
68
- tr = _ref3.tr;
69
- var activeNodeChanged = hasActiveNodeChanged(previousActiveNode, activeNode);
70
- if (!tr.docChanged && !activeNodeChanged) {
71
- return currentPositions;
72
- }
73
- var nextActiveNode = activeNode !== null && activeNode !== void 0 ? activeNode : undefined;
74
- if (activeNodeChanged) {
75
- return getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode);
76
- }
77
- var surfaces = resolvedSurfaces.flatMap(function (_ref4) {
78
- var childrenMap = _ref4.childrenMap,
79
- components = _ref4.components,
80
- root = _ref4.root;
81
- return root && (0, _hasSurfaceControls.hasSurfaceControls)(components) ? [{
82
- childrenMap: childrenMap,
83
- root: root
84
- }] : [];
85
- });
86
- var mappedPositions = currentPositions.map(function (position) {
87
- return tr.mapping.mapResult(position, -1);
88
- }).filter(function (result) {
89
- return !result.deleted;
90
- }).map(function (result) {
91
- return result.pos;
92
- }).filter(function (position) {
93
- var node = newState.doc.nodeAt(position);
94
- return Boolean((node === null || node === void 0 ? void 0 : node.isBlock) && willAnySurfaceRenderAt(surfaces, newState, position, nextActiveNode));
95
- });
96
- var changedPositions = getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode, from - 1, to + 1);
97
- return Array.from(new Set([].concat((0, _toConsumableArray2.default)(mappedPositions), (0, _toConsumableArray2.default)(changedPositions)))).sort(function (first, second) {
98
- return first - second;
99
- });
100
- };
@@ -1,78 +0,0 @@
1
- import { BLOCK_CONTROL_UI_CONTEXT } from '@atlaskit/editor-common/block-controls/block-control-ui-context';
2
- import { createSurfaceContext } from '@atlaskit/editor-ui-control-model/create-surface-context';
3
- import { willComponentRender } from '@atlaskit/editor-ui-control-model/surface-renderer';
4
- import { createBlockControlsSurfaceContextForPosition } from '../../ui/block-controls-surface-context';
5
- import { hasSurfaceControls } from '../../ui/utils/has-surface-controls';
6
- const createSurfaceContextAtPosition = (state, position, activeNode) => {
7
- const blockControlsContext = createBlockControlsSurfaceContextForPosition(state, position, activeNode);
8
- return blockControlsContext ? createSurfaceContext(BLOCK_CONTROL_UI_CONTEXT, blockControlsContext) : undefined;
9
- };
10
-
11
- /**
12
- * A position qualifies as soon as ANY of the given surfaces would render something for it.
13
- * The surface context depends only on state/position/activeNode, not on which surface is being
14
- * checked, so it's built once here rather than once per surface inside the `.some()`.
15
- */
16
- const willAnySurfaceRenderAt = (surfaces, state, position, activeNode) => {
17
- const surfaceContext = createSurfaceContextAtPosition(state, position, activeNode);
18
- return surfaces.some(({
19
- childrenMap,
20
- root
21
- }) => willComponentRender(root, childrenMap, surfaceContext));
22
- };
23
- export const getSurfaceNodePositions = (state, resolvedSurfaces, activeNode, from = 0, to = state.doc.content.size) => {
24
- const surfaces = resolvedSurfaces.flatMap(({
25
- childrenMap,
26
- components,
27
- root
28
- }) => root && hasSurfaceControls(components) ? [{
29
- childrenMap,
30
- root
31
- }] : []);
32
- if (surfaces.length === 0) {
33
- return [];
34
- }
35
- const positions = [];
36
- const start = Math.max(0, from);
37
- const end = Math.min(state.doc.content.size, Math.max(start, to));
38
- state.doc.nodesBetween(start, end, (node, position) => {
39
- if (node.isBlock && willAnySurfaceRenderAt(surfaces, state, position, activeNode)) {
40
- positions.push(position);
41
- }
42
- });
43
- return positions;
44
- };
45
- const hasActiveNodeChanged = (previousActiveNode, activeNode) => (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.pos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.pos) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.nodeType) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.nodeType) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.rootPos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.rootPos);
46
- export const updateSurfaceNodePositions = ({
47
- activeNode,
48
- currentPositions,
49
- from,
50
- newState,
51
- previousActiveNode,
52
- resolvedSurfaces,
53
- to,
54
- tr
55
- }) => {
56
- const activeNodeChanged = hasActiveNodeChanged(previousActiveNode, activeNode);
57
- if (!tr.docChanged && !activeNodeChanged) {
58
- return currentPositions;
59
- }
60
- const nextActiveNode = activeNode !== null && activeNode !== void 0 ? activeNode : undefined;
61
- if (activeNodeChanged) {
62
- return getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode);
63
- }
64
- const surfaces = resolvedSurfaces.flatMap(({
65
- childrenMap,
66
- components,
67
- root
68
- }) => root && hasSurfaceControls(components) ? [{
69
- childrenMap,
70
- root
71
- }] : []);
72
- const mappedPositions = currentPositions.map(position => tr.mapping.mapResult(position, -1)).filter(result => !result.deleted).map(result => result.pos).filter(position => {
73
- const node = newState.doc.nodeAt(position);
74
- return Boolean((node === null || node === void 0 ? void 0 : node.isBlock) && willAnySurfaceRenderAt(surfaces, newState, position, nextActiveNode));
75
- });
76
- const changedPositions = getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode, from - 1, to + 1);
77
- return Array.from(new Set([...mappedPositions, ...changedPositions])).sort((first, second) => first - second);
78
- };
@@ -1,93 +0,0 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import { BLOCK_CONTROL_UI_CONTEXT } from '@atlaskit/editor-common/block-controls/block-control-ui-context';
3
- import { createSurfaceContext } from '@atlaskit/editor-ui-control-model/create-surface-context';
4
- import { willComponentRender } from '@atlaskit/editor-ui-control-model/surface-renderer';
5
- import { createBlockControlsSurfaceContextForPosition } from '../../ui/block-controls-surface-context';
6
- import { hasSurfaceControls } from '../../ui/utils/has-surface-controls';
7
- var createSurfaceContextAtPosition = function createSurfaceContextAtPosition(state, position, activeNode) {
8
- var blockControlsContext = createBlockControlsSurfaceContextForPosition(state, position, activeNode);
9
- return blockControlsContext ? createSurfaceContext(BLOCK_CONTROL_UI_CONTEXT, blockControlsContext) : undefined;
10
- };
11
-
12
- /**
13
- * A position qualifies as soon as ANY of the given surfaces would render something for it.
14
- * The surface context depends only on state/position/activeNode, not on which surface is being
15
- * checked, so it's built once here rather than once per surface inside the `.some()`.
16
- */
17
- var willAnySurfaceRenderAt = function willAnySurfaceRenderAt(surfaces, state, position, activeNode) {
18
- var surfaceContext = createSurfaceContextAtPosition(state, position, activeNode);
19
- return surfaces.some(function (_ref) {
20
- var childrenMap = _ref.childrenMap,
21
- root = _ref.root;
22
- return willComponentRender(root, childrenMap, surfaceContext);
23
- });
24
- };
25
- export var getSurfaceNodePositions = function getSurfaceNodePositions(state, resolvedSurfaces, activeNode) {
26
- var from = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
27
- var to = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : state.doc.content.size;
28
- var surfaces = resolvedSurfaces.flatMap(function (_ref2) {
29
- var childrenMap = _ref2.childrenMap,
30
- components = _ref2.components,
31
- root = _ref2.root;
32
- return root && hasSurfaceControls(components) ? [{
33
- childrenMap: childrenMap,
34
- root: root
35
- }] : [];
36
- });
37
- if (surfaces.length === 0) {
38
- return [];
39
- }
40
- var positions = [];
41
- var start = Math.max(0, from);
42
- var end = Math.min(state.doc.content.size, Math.max(start, to));
43
- state.doc.nodesBetween(start, end, function (node, position) {
44
- if (node.isBlock && willAnySurfaceRenderAt(surfaces, state, position, activeNode)) {
45
- positions.push(position);
46
- }
47
- });
48
- return positions;
49
- };
50
- var hasActiveNodeChanged = function hasActiveNodeChanged(previousActiveNode, activeNode) {
51
- return (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.pos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.pos) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.nodeType) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.nodeType) || (previousActiveNode === null || previousActiveNode === void 0 ? void 0 : previousActiveNode.rootPos) !== (activeNode === null || activeNode === void 0 ? void 0 : activeNode.rootPos);
52
- };
53
- export var updateSurfaceNodePositions = function updateSurfaceNodePositions(_ref3) {
54
- var activeNode = _ref3.activeNode,
55
- currentPositions = _ref3.currentPositions,
56
- from = _ref3.from,
57
- newState = _ref3.newState,
58
- previousActiveNode = _ref3.previousActiveNode,
59
- resolvedSurfaces = _ref3.resolvedSurfaces,
60
- to = _ref3.to,
61
- tr = _ref3.tr;
62
- var activeNodeChanged = hasActiveNodeChanged(previousActiveNode, activeNode);
63
- if (!tr.docChanged && !activeNodeChanged) {
64
- return currentPositions;
65
- }
66
- var nextActiveNode = activeNode !== null && activeNode !== void 0 ? activeNode : undefined;
67
- if (activeNodeChanged) {
68
- return getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode);
69
- }
70
- var surfaces = resolvedSurfaces.flatMap(function (_ref4) {
71
- var childrenMap = _ref4.childrenMap,
72
- components = _ref4.components,
73
- root = _ref4.root;
74
- return root && hasSurfaceControls(components) ? [{
75
- childrenMap: childrenMap,
76
- root: root
77
- }] : [];
78
- });
79
- var mappedPositions = currentPositions.map(function (position) {
80
- return tr.mapping.mapResult(position, -1);
81
- }).filter(function (result) {
82
- return !result.deleted;
83
- }).map(function (result) {
84
- return result.pos;
85
- }).filter(function (position) {
86
- var node = newState.doc.nodeAt(position);
87
- return Boolean((node === null || node === void 0 ? void 0 : node.isBlock) && willAnySurfaceRenderAt(surfaces, newState, position, nextActiveNode));
88
- });
89
- var changedPositions = getSurfaceNodePositions(newState, resolvedSurfaces, nextActiveNode, from - 1, to + 1);
90
- return Array.from(new Set([].concat(_toConsumableArray(mappedPositions), _toConsumableArray(changedPositions)))).sort(function (first, second) {
91
- return first - second;
92
- });
93
- };
@@ -1,14 +0,0 @@
1
- import type { EditorState, ReadonlyTransaction } from '@atlaskit/editor-prosemirror/state';
2
- import type { ResolvedSurface } from '@atlaskit/editor-ui-control-model/surface-renderer/types';
3
- import type { ActiveNode } from '../../blockControlsPluginType';
4
- export declare const getSurfaceNodePositions: (state: EditorState, resolvedSurfaces: readonly ResolvedSurface[], activeNode?: ActiveNode, from?: number, to?: number) => number[];
5
- export declare const updateSurfaceNodePositions: ({ activeNode, currentPositions, from, newState, previousActiveNode, resolvedSurfaces, to, tr, }: {
6
- activeNode: ActiveNode | null | undefined;
7
- currentPositions: number[];
8
- from: number;
9
- newState: EditorState;
10
- previousActiveNode: ActiveNode | null | undefined;
11
- resolvedSurfaces: readonly ResolvedSurface[];
12
- to: number;
13
- tr: ReadonlyTransaction;
14
- }) => number[];