@atlaskit/editor-plugin-card 0.1.0

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 (200) hide show
  1. package/.eslintrc.js +15 -0
  2. package/CHANGELOG.md +1 -0
  3. package/LICENSE.md +13 -0
  4. package/README.md +7 -0
  5. package/dist/cjs/index.js +12 -0
  6. package/dist/cjs/messages.js +20 -0
  7. package/dist/cjs/nodeviews/blockCard.js +164 -0
  8. package/dist/cjs/nodeviews/datasource.js +173 -0
  9. package/dist/cjs/nodeviews/embedCard.js +398 -0
  10. package/dist/cjs/nodeviews/genericCard.js +118 -0
  11. package/dist/cjs/nodeviews/inlineCard.js +132 -0
  12. package/dist/cjs/plugin.js +138 -0
  13. package/dist/cjs/pm-plugins/actions.js +122 -0
  14. package/dist/cjs/pm-plugins/analytics/create-analytics-queue.js +48 -0
  15. package/dist/cjs/pm-plugins/analytics/events-from-tr.js +359 -0
  16. package/dist/cjs/pm-plugins/analytics/index.js +19 -0
  17. package/dist/cjs/pm-plugins/analytics/types.js +5 -0
  18. package/dist/cjs/pm-plugins/analytics/utils.js +178 -0
  19. package/dist/cjs/pm-plugins/doc.js +479 -0
  20. package/dist/cjs/pm-plugins/keymap.js +64 -0
  21. package/dist/cjs/pm-plugins/main.js +212 -0
  22. package/dist/cjs/pm-plugins/mountHyperlink.js +47 -0
  23. package/dist/cjs/pm-plugins/plugin-key.js +9 -0
  24. package/dist/cjs/pm-plugins/reducers.js +111 -0
  25. package/dist/cjs/pm-plugins/shouldReplaceLink.js +35 -0
  26. package/dist/cjs/pm-plugins/util/resolve.js +59 -0
  27. package/dist/cjs/pm-plugins/util/state.js +49 -0
  28. package/dist/cjs/toolbar.js +364 -0
  29. package/dist/cjs/types.js +5 -0
  30. package/dist/cjs/ui/DatasourceModal/ModalWithState.js +25 -0
  31. package/dist/cjs/ui/DatasourceModal/index.js +60 -0
  32. package/dist/cjs/ui/EditLinkToolbar.js +258 -0
  33. package/dist/cjs/ui/EditorSmartCardEvents.js +21 -0
  34. package/dist/cjs/ui/EditorSmartCardEventsNext.js +215 -0
  35. package/dist/cjs/ui/HyperlinkToolbarAppearance.js +174 -0
  36. package/dist/cjs/ui/LayoutButton/index.js +121 -0
  37. package/dist/cjs/ui/LayoutButton/types.js +5 -0
  38. package/dist/cjs/ui/LayoutButton/utils.js +19 -0
  39. package/dist/cjs/ui/LinkToolbarAppearance.js +152 -0
  40. package/dist/cjs/ui/ResizableEmbedCard.js +364 -0
  41. package/dist/cjs/ui/SmallerEditIcon.js +22 -0
  42. package/dist/cjs/utils.js +60 -0
  43. package/dist/cjs/version.json +5 -0
  44. package/dist/es2019/index.js +1 -0
  45. package/dist/es2019/messages.js +13 -0
  46. package/dist/es2019/nodeviews/blockCard.js +131 -0
  47. package/dist/es2019/nodeviews/datasource.js +137 -0
  48. package/dist/es2019/nodeviews/embedCard.js +370 -0
  49. package/dist/es2019/nodeviews/genericCard.js +92 -0
  50. package/dist/es2019/nodeviews/inlineCard.js +113 -0
  51. package/dist/es2019/plugin.js +129 -0
  52. package/dist/es2019/pm-plugins/actions.js +57 -0
  53. package/dist/es2019/pm-plugins/analytics/create-analytics-queue.js +38 -0
  54. package/dist/es2019/pm-plugins/analytics/events-from-tr.js +339 -0
  55. package/dist/es2019/pm-plugins/analytics/index.js +2 -0
  56. package/dist/es2019/pm-plugins/analytics/types.js +1 -0
  57. package/dist/es2019/pm-plugins/analytics/utils.js +160 -0
  58. package/dist/es2019/pm-plugins/doc.js +451 -0
  59. package/dist/es2019/pm-plugins/keymap.js +59 -0
  60. package/dist/es2019/pm-plugins/main.js +208 -0
  61. package/dist/es2019/pm-plugins/mountHyperlink.js +37 -0
  62. package/dist/es2019/pm-plugins/plugin-key.js +2 -0
  63. package/dist/es2019/pm-plugins/reducers.js +110 -0
  64. package/dist/es2019/pm-plugins/shouldReplaceLink.js +25 -0
  65. package/dist/es2019/pm-plugins/util/resolve.js +50 -0
  66. package/dist/es2019/pm-plugins/util/state.js +26 -0
  67. package/dist/es2019/toolbar.js +359 -0
  68. package/dist/es2019/types.js +1 -0
  69. package/dist/es2019/ui/DatasourceModal/ModalWithState.js +19 -0
  70. package/dist/es2019/ui/DatasourceModal/index.js +48 -0
  71. package/dist/es2019/ui/EditLinkToolbar.js +226 -0
  72. package/dist/es2019/ui/EditorSmartCardEvents.js +15 -0
  73. package/dist/es2019/ui/EditorSmartCardEventsNext.js +199 -0
  74. package/dist/es2019/ui/HyperlinkToolbarAppearance.js +86 -0
  75. package/dist/es2019/ui/LayoutButton/index.js +114 -0
  76. package/dist/es2019/ui/LayoutButton/types.js +1 -0
  77. package/dist/es2019/ui/LayoutButton/utils.js +15 -0
  78. package/dist/es2019/ui/LinkToolbarAppearance.js +118 -0
  79. package/dist/es2019/ui/ResizableEmbedCard.js +335 -0
  80. package/dist/es2019/ui/SmallerEditIcon.js +14 -0
  81. package/dist/es2019/utils.js +46 -0
  82. package/dist/es2019/version.json +5 -0
  83. package/dist/esm/index.js +1 -0
  84. package/dist/esm/messages.js +13 -0
  85. package/dist/esm/nodeviews/blockCard.js +156 -0
  86. package/dist/esm/nodeviews/datasource.js +165 -0
  87. package/dist/esm/nodeviews/embedCard.js +389 -0
  88. package/dist/esm/nodeviews/genericCard.js +111 -0
  89. package/dist/esm/nodeviews/inlineCard.js +124 -0
  90. package/dist/esm/plugin.js +130 -0
  91. package/dist/esm/pm-plugins/actions.js +102 -0
  92. package/dist/esm/pm-plugins/analytics/create-analytics-queue.js +41 -0
  93. package/dist/esm/pm-plugins/analytics/events-from-tr.js +350 -0
  94. package/dist/esm/pm-plugins/analytics/index.js +2 -0
  95. package/dist/esm/pm-plugins/analytics/types.js +1 -0
  96. package/dist/esm/pm-plugins/analytics/utils.js +160 -0
  97. package/dist/esm/pm-plugins/doc.js +460 -0
  98. package/dist/esm/pm-plugins/keymap.js +58 -0
  99. package/dist/esm/pm-plugins/main.js +199 -0
  100. package/dist/esm/pm-plugins/mountHyperlink.js +39 -0
  101. package/dist/esm/pm-plugins/plugin-key.js +2 -0
  102. package/dist/esm/pm-plugins/reducers.js +103 -0
  103. package/dist/esm/pm-plugins/shouldReplaceLink.js +29 -0
  104. package/dist/esm/pm-plugins/util/resolve.js +52 -0
  105. package/dist/esm/pm-plugins/util/state.js +40 -0
  106. package/dist/esm/toolbar.js +350 -0
  107. package/dist/esm/types.js +1 -0
  108. package/dist/esm/ui/DatasourceModal/ModalWithState.js +17 -0
  109. package/dist/esm/ui/DatasourceModal/index.js +49 -0
  110. package/dist/esm/ui/EditLinkToolbar.js +244 -0
  111. package/dist/esm/ui/EditorSmartCardEvents.js +14 -0
  112. package/dist/esm/ui/EditorSmartCardEventsNext.js +203 -0
  113. package/dist/esm/ui/HyperlinkToolbarAppearance.js +163 -0
  114. package/dist/esm/ui/LayoutButton/index.js +110 -0
  115. package/dist/esm/ui/LayoutButton/types.js +1 -0
  116. package/dist/esm/ui/LayoutButton/utils.js +12 -0
  117. package/dist/esm/ui/LinkToolbarAppearance.js +141 -0
  118. package/dist/esm/ui/ResizableEmbedCard.js +358 -0
  119. package/dist/esm/ui/SmallerEditIcon.js +14 -0
  120. package/dist/esm/utils.js +48 -0
  121. package/dist/esm/version.json +5 -0
  122. package/dist/types/index.d.ts +2 -0
  123. package/dist/types/messages.d.ts +12 -0
  124. package/dist/types/nodeviews/blockCard.d.ts +26 -0
  125. package/dist/types/nodeviews/datasource.d.ts +42 -0
  126. package/dist/types/nodeviews/embedCard.d.ts +46 -0
  127. package/dist/types/nodeviews/genericCard.d.ts +37 -0
  128. package/dist/types/nodeviews/inlineCard.d.ts +23 -0
  129. package/dist/types/plugin.d.ts +24 -0
  130. package/dist/types/pm-plugins/actions.d.ts +23 -0
  131. package/dist/types/pm-plugins/analytics/create-analytics-queue.d.ts +10 -0
  132. package/dist/types/pm-plugins/analytics/events-from-tr.d.ts +17 -0
  133. package/dist/types/pm-plugins/analytics/index.d.ts +2 -0
  134. package/dist/types/pm-plugins/analytics/types.d.ts +12 -0
  135. package/dist/types/pm-plugins/analytics/utils.d.ts +32 -0
  136. package/dist/types/pm-plugins/doc.d.ts +22 -0
  137. package/dist/types/pm-plugins/keymap.d.ts +3 -0
  138. package/dist/types/pm-plugins/main.d.ts +6 -0
  139. package/dist/types/pm-plugins/mountHyperlink.d.ts +5 -0
  140. package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
  141. package/dist/types/pm-plugins/reducers.d.ts +3 -0
  142. package/dist/types/pm-plugins/shouldReplaceLink.d.ts +2 -0
  143. package/dist/types/pm-plugins/util/resolve.d.ts +8 -0
  144. package/dist/types/pm-plugins/util/state.d.ts +31 -0
  145. package/dist/types/toolbar.d.ts +9 -0
  146. package/dist/types/types.d.ts +163 -0
  147. package/dist/types/ui/DatasourceModal/ModalWithState.d.ts +9 -0
  148. package/dist/types/ui/DatasourceModal/index.d.ts +11 -0
  149. package/dist/types/ui/EditLinkToolbar.d.ts +47 -0
  150. package/dist/types/ui/EditorSmartCardEvents.d.ts +5 -0
  151. package/dist/types/ui/EditorSmartCardEventsNext.d.ts +18 -0
  152. package/dist/types/ui/HyperlinkToolbarAppearance.d.ts +32 -0
  153. package/dist/types/ui/LayoutButton/index.d.ts +9 -0
  154. package/dist/types/ui/LayoutButton/types.d.ts +19 -0
  155. package/dist/types/ui/LayoutButton/utils.d.ts +5 -0
  156. package/dist/types/ui/LinkToolbarAppearance.d.ts +29 -0
  157. package/dist/types/ui/ResizableEmbedCard.d.ts +61 -0
  158. package/dist/types/ui/SmallerEditIcon.d.ts +3 -0
  159. package/dist/types/utils.d.ts +19 -0
  160. package/dist/types-ts4.5/index.d.ts +2 -0
  161. package/dist/types-ts4.5/messages.d.ts +12 -0
  162. package/dist/types-ts4.5/nodeviews/blockCard.d.ts +26 -0
  163. package/dist/types-ts4.5/nodeviews/datasource.d.ts +42 -0
  164. package/dist/types-ts4.5/nodeviews/embedCard.d.ts +46 -0
  165. package/dist/types-ts4.5/nodeviews/genericCard.d.ts +37 -0
  166. package/dist/types-ts4.5/nodeviews/inlineCard.d.ts +23 -0
  167. package/dist/types-ts4.5/plugin.d.ts +24 -0
  168. package/dist/types-ts4.5/pm-plugins/actions.d.ts +23 -0
  169. package/dist/types-ts4.5/pm-plugins/analytics/create-analytics-queue.d.ts +10 -0
  170. package/dist/types-ts4.5/pm-plugins/analytics/events-from-tr.d.ts +17 -0
  171. package/dist/types-ts4.5/pm-plugins/analytics/index.d.ts +2 -0
  172. package/dist/types-ts4.5/pm-plugins/analytics/types.d.ts +12 -0
  173. package/dist/types-ts4.5/pm-plugins/analytics/utils.d.ts +32 -0
  174. package/dist/types-ts4.5/pm-plugins/doc.d.ts +22 -0
  175. package/dist/types-ts4.5/pm-plugins/keymap.d.ts +3 -0
  176. package/dist/types-ts4.5/pm-plugins/main.d.ts +6 -0
  177. package/dist/types-ts4.5/pm-plugins/mountHyperlink.d.ts +5 -0
  178. package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
  179. package/dist/types-ts4.5/pm-plugins/reducers.d.ts +3 -0
  180. package/dist/types-ts4.5/pm-plugins/shouldReplaceLink.d.ts +2 -0
  181. package/dist/types-ts4.5/pm-plugins/util/resolve.d.ts +8 -0
  182. package/dist/types-ts4.5/pm-plugins/util/state.d.ts +31 -0
  183. package/dist/types-ts4.5/toolbar.d.ts +9 -0
  184. package/dist/types-ts4.5/types.d.ts +163 -0
  185. package/dist/types-ts4.5/ui/DatasourceModal/ModalWithState.d.ts +9 -0
  186. package/dist/types-ts4.5/ui/DatasourceModal/index.d.ts +11 -0
  187. package/dist/types-ts4.5/ui/EditLinkToolbar.d.ts +47 -0
  188. package/dist/types-ts4.5/ui/EditorSmartCardEvents.d.ts +5 -0
  189. package/dist/types-ts4.5/ui/EditorSmartCardEventsNext.d.ts +18 -0
  190. package/dist/types-ts4.5/ui/HyperlinkToolbarAppearance.d.ts +32 -0
  191. package/dist/types-ts4.5/ui/LayoutButton/index.d.ts +9 -0
  192. package/dist/types-ts4.5/ui/LayoutButton/types.d.ts +19 -0
  193. package/dist/types-ts4.5/ui/LayoutButton/utils.d.ts +5 -0
  194. package/dist/types-ts4.5/ui/LinkToolbarAppearance.d.ts +29 -0
  195. package/dist/types-ts4.5/ui/ResizableEmbedCard.d.ts +61 -0
  196. package/dist/types-ts4.5/ui/SmallerEditIcon.d.ts +3 -0
  197. package/dist/types-ts4.5/utils.d.ts +19 -0
  198. package/package.json +126 -0
  199. package/report.api.md +146 -0
  200. package/tmp/api-report-tmp.d.ts +117 -0
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cardKeymap = cardKeymap;
7
+ var _prosemirrorKeymap = require("prosemirror-keymap");
8
+ var _prosemirrorState = require("prosemirror-state");
9
+ var _prosemirrorUtils = require("prosemirror-utils");
10
+ var _keymaps = require("@atlaskit/editor-common/keymaps");
11
+ var _utils = require("@atlaskit/editor-common/utils");
12
+ var lookupPixel = 10;
13
+ var getClosestInlineCardPos = function getClosestInlineCardPos(state, editorView, direction) {
14
+ var _editorView$posAtCoor;
15
+ var selection = state.selection;
16
+ var parent = selection.$from.parent;
17
+ var inlineCardType = state.schema.nodes.inlineCard;
18
+ if (!(0, _prosemirrorUtils.flatten)(parent, false).some(function (_ref) {
19
+ var node = _ref.node;
20
+ return node.type === inlineCardType;
21
+ })) {
22
+ return null;
23
+ }
24
+ var coord = editorView.coordsAtPos(selection.$anchor.pos);
25
+ var nearPos = (_editorView$posAtCoor = editorView.posAtCoords({
26
+ left: coord.left,
27
+ top: direction === 'up' ? coord.top - lookupPixel : coord.bottom + lookupPixel
28
+ })) === null || _editorView$posAtCoor === void 0 ? void 0 : _editorView$posAtCoor.pos;
29
+ if (nearPos) {
30
+ var newNode = state.doc.nodeAt(nearPos);
31
+ if (newNode) {
32
+ if (newNode.type !== inlineCardType || (0, _prosemirrorUtils.findChildren)(parent, function (node) {
33
+ return node === newNode;
34
+ }, false).length === 0 || newNode === selection.node) {
35
+ return null;
36
+ }
37
+ return nearPos;
38
+ }
39
+ }
40
+ return null;
41
+ };
42
+ var selectAboveBelowInlineCard = function selectAboveBelowInlineCard(direction) {
43
+ return function (state, dispatch, editorView) {
44
+ if (!editorView || !dispatch) {
45
+ return false;
46
+ }
47
+ var pos = getClosestInlineCardPos(state, editorView, direction);
48
+ if (pos) {
49
+ dispatch(state.tr.setSelection(new _prosemirrorState.NodeSelection(state.doc.resolve(pos))));
50
+ return true;
51
+ }
52
+ return false;
53
+ };
54
+ };
55
+ function cardKeymap(featureFlags) {
56
+ var list = {};
57
+
58
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1227468 introduced since Chrome 91
59
+ if (_utils.browser.chrome && _utils.browser.chrome_version > 90 && featureFlags.chromeCursorHandlerFixedVersion && _utils.browser.chrome_version < featureFlags.chromeCursorHandlerFixedVersion) {
60
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveUp.common, selectAboveBelowInlineCard('up'), list);
61
+ (0, _keymaps.bindKeymapWithCommand)(_keymaps.moveDown.common, selectAboveBelowInlineCard('down'), list);
62
+ }
63
+ return (0, _prosemirrorKeymap.keymap)(list);
64
+ }
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createPlugin = void 0;
8
+ Object.defineProperty(exports, "pluginKey", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _pluginKey.pluginKey;
12
+ }
13
+ });
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+ var _prosemirrorState = require("prosemirror-state");
16
+ var _prosemirrorUtils = require("prosemirror-utils");
17
+ var _rafSchd = _interopRequireDefault(require("raf-schd"));
18
+ var _reactNodeView = require("@atlaskit/editor-common/react-node-view");
19
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
20
+ var _styles = require("@atlaskit/editor-common/styles");
21
+ var _utils = require("@atlaskit/editor-common/utils");
22
+ var _blockCard = require("../nodeviews/blockCard");
23
+ var _datasource = require("../nodeviews/datasource");
24
+ var _embedCard = require("../nodeviews/embedCard");
25
+ var _inlineCard = require("../nodeviews/inlineCard");
26
+ var _actions = require("./actions");
27
+ var _analytics = require("./analytics");
28
+ var _pluginKey = require("./plugin-key");
29
+ var _reducers = _interopRequireDefault(require("./reducers"));
30
+ var _resolve = require("./util/resolve");
31
+ var _state = require("./util/state");
32
+ var createPlugin = function createPlugin(options, pluginInjectionApi) {
33
+ return function (pmPluginFactoryParams) {
34
+ var lpAnalyticsEventsNext = pmPluginFactoryParams.featureFlags.lpAnalyticsEventsNext;
35
+ var analyticsQueue = (0, _analytics.createAnalyticsQueue)(!!lpAnalyticsEventsNext);
36
+ var editorAppearance = options.editorAppearance,
37
+ platform = options.platform,
38
+ allowResizing = options.allowResizing,
39
+ useAlternativePreloader = options.useAlternativePreloader,
40
+ fullWidthMode = options.fullWidthMode,
41
+ showServerActions = options.showServerActions;
42
+ var inlineCardViewProducer = (0, _reactNodeView.getInlineNodeViewProducer)({
43
+ pmPluginFactoryParams: pmPluginFactoryParams,
44
+ Component: _inlineCard.InlineCardNodeView,
45
+ extraComponentProps: {
46
+ useAlternativePreloader: useAlternativePreloader,
47
+ showServerActions: showServerActions
48
+ }
49
+ });
50
+ return new _safePlugin.SafePlugin({
51
+ state: {
52
+ init: function init() {
53
+ return {
54
+ requests: [],
55
+ provider: null,
56
+ cards: [],
57
+ showLinkingToolbar: false,
58
+ smartLinkEvents: undefined,
59
+ smartLinkEventsNext: undefined,
60
+ editorAppearance: editorAppearance,
61
+ showDatasourceModal: false,
62
+ datasourceModalType: undefined,
63
+ datasourceTableRef: undefined,
64
+ layout: undefined
65
+ };
66
+ },
67
+ apply: function apply(tr, pluginState, prevEditorState) {
68
+ // Update all the positions of outstanding requests and
69
+ // cards in the plugin state.
70
+ var pluginStateWithUpdatedPos = (0, _state.getPluginStateWithUpdatedPos)(pluginState, tr);
71
+
72
+ // apply any actions
73
+ var meta = tr.getMeta(_pluginKey.pluginKey);
74
+ var events = (0, _analytics.eventsFromTransaction)(tr, prevEditorState);
75
+ analyticsQueue.push.apply(analyticsQueue, (0, _toConsumableArray2.default)(events));
76
+ if (meta) {
77
+ var nextState = (0, _reducers.default)(pluginStateWithUpdatedPos, meta);
78
+ if (!pluginState.smartLinkEventsNext && nextState.smartLinkEventsNext) {
79
+ analyticsQueue.setCallbacks(nextState.smartLinkEventsNext);
80
+ }
81
+ return nextState;
82
+ }
83
+ return pluginStateWithUpdatedPos;
84
+ }
85
+ },
86
+ view: function view(_view) {
87
+ var subscriptionHandler = function subscriptionHandler(name, provider) {
88
+ return (0, _resolve.handleProvider)(name, provider, _view);
89
+ };
90
+ var domAtPos = _view.domAtPos.bind(_view);
91
+ var rafCancellationCallbacks = [];
92
+ pmPluginFactoryParams.providerFactory.subscribe('cardProvider', subscriptionHandler);
93
+ return {
94
+ update: function update(view, prevState) {
95
+ var _selection$node;
96
+ var currentState = (0, _state.getPluginState)(view.state);
97
+ var oldState = (0, _state.getPluginState)(prevState);
98
+ var state = view.state,
99
+ dispatch = view.dispatch;
100
+ var selection = state.selection,
101
+ tr = state.tr,
102
+ schema = state.schema;
103
+ var isBlockCardSelected = selection instanceof _prosemirrorState.NodeSelection && ((_selection$node = selection.node) === null || _selection$node === void 0 ? void 0 : _selection$node.type) === schema.nodes.blockCard;
104
+ if (isBlockCardSelected) {
105
+ var _findDomRefAtPos, _node$attrs;
106
+ var datasourceTableRef = (_findDomRefAtPos = (0, _prosemirrorUtils.findDomRefAtPos)(selection.from, domAtPos)) === null || _findDomRefAtPos === void 0 ? void 0 : _findDomRefAtPos.querySelector(".".concat(_styles.DATASOURCE_INNER_CONTAINER_CLASSNAME));
107
+ var node = selection.node;
108
+ var isDatasource = !!(node !== null && node !== void 0 && (_node$attrs = node.attrs) !== null && _node$attrs !== void 0 && _node$attrs.datasource);
109
+ var shouldUpdateTableRef = datasourceTableRef && (currentState === null || currentState === void 0 ? void 0 : currentState.datasourceTableRef) !== datasourceTableRef;
110
+ if (isDatasource && shouldUpdateTableRef) {
111
+ var _node$attrs2;
112
+ // since we use the plugin state, which is a shared state, we need to update the datasourceTableRef, layout on each selection
113
+ var layout = (node === null || node === void 0 ? void 0 : (_node$attrs2 = node.attrs) === null || _node$attrs2 === void 0 ? void 0 : _node$attrs2.layout) || 'center';
114
+
115
+ // we use cardAction to set the same meta, hence, we will need to combine both layout+datasourceTableRef in one transaction
116
+ dispatch((0, _actions.setCardLayoutAndDatasourceTableRef)({
117
+ datasourceTableRef: datasourceTableRef,
118
+ layout: layout
119
+ })(tr));
120
+ }
121
+ } else {
122
+ if (currentState !== null && currentState !== void 0 && currentState.datasourceTableRef) {
123
+ dispatch((0, _actions.setDatasourceTableRef)(undefined)(tr));
124
+ }
125
+ }
126
+ if (currentState && currentState.provider) {
127
+ // Find requests in this state that weren't in the old one.
128
+ var newRequests = (0, _state.getNewRequests)(oldState, currentState);
129
+ // Ask the CardProvider to resolve all new requests.
130
+ var provider = currentState.provider;
131
+ newRequests.forEach(function (request) {
132
+ /**
133
+ * Queue each asynchronous resolve request on separate frames.
134
+ * ---
135
+ * NB: The promise for each request is queued to take place on separate animation frames. This avoids
136
+ * the scenario debugged and discovered in EDM-668, wherein the queuing of too many promises in quick succession
137
+ * leads to the browser's macrotask queue being overwhelmed, locking interactivity of the browser tab.
138
+ * By using this approach, the browser is free to schedule the resolution of the promises below in between rendering/network/
139
+ * other tasks as per common implementations of the JavaScript event loop in browsers.
140
+ */
141
+ var invoke = (0, _rafSchd.default)(function () {
142
+ var _pluginInjectionApi$d, _pluginInjectionApi$d2, _pluginInjectionApi$d3, _pluginInjectionApi$d4;
143
+ return (0, _resolve.resolveWithProvider)(view, provider, request, options, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d = pluginInjectionApi.dependencies.analytics) === null || _pluginInjectionApi$d === void 0 ? void 0 : _pluginInjectionApi$d.actions, (_pluginInjectionApi$d2 = pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d3 = pluginInjectionApi.dependencies.analytics) === null || _pluginInjectionApi$d3 === void 0 ? void 0 : (_pluginInjectionApi$d4 = _pluginInjectionApi$d3.sharedState.currentState()) === null || _pluginInjectionApi$d4 === void 0 ? void 0 : _pluginInjectionApi$d4.createAnalyticsEvent) !== null && _pluginInjectionApi$d2 !== void 0 ? _pluginInjectionApi$d2 : undefined);
144
+ });
145
+ rafCancellationCallbacks.push(invoke.cancel);
146
+ invoke();
147
+ });
148
+ }
149
+ analyticsQueue.flush();
150
+ },
151
+ destroy: function destroy() {
152
+ // Cancel any outstanding raf callbacks.
153
+ rafCancellationCallbacks.forEach(function (cancellationCallback) {
154
+ return cancellationCallback();
155
+ });
156
+ pmPluginFactoryParams.providerFactory.unsubscribe('cardProvider', subscriptionHandler);
157
+ }
158
+ };
159
+ },
160
+ props: {
161
+ nodeViews: {
162
+ inlineCard: inlineCardViewProducer,
163
+ blockCard: function blockCard(node, view, getPos, decorations) {
164
+ var _node$attrs3;
165
+ var portalProviderAPI = pmPluginFactoryParams.portalProviderAPI,
166
+ eventDispatcher = pmPluginFactoryParams.eventDispatcher;
167
+ var reactComponentProps = {
168
+ platform: platform,
169
+ showServerActions: showServerActions
170
+ };
171
+ var hasIntlContext = true;
172
+ var isDatasource = !!(node !== null && node !== void 0 && (_node$attrs3 = node.attrs) !== null && _node$attrs3 !== void 0 && _node$attrs3.datasource);
173
+ if (isDatasource) {
174
+ var _node$attrs4, _node$attrs4$datasour;
175
+ if (platform !== 'mobile' && (0, _utils.canRenderDatasource)(node === null || node === void 0 ? void 0 : (_node$attrs4 = node.attrs) === null || _node$attrs4 === void 0 ? void 0 : (_node$attrs4$datasour = _node$attrs4.datasource) === null || _node$attrs4$datasour === void 0 ? void 0 : _node$attrs4$datasour.id)) {
176
+ return new _datasource.Datasource({
177
+ node: node,
178
+ view: view,
179
+ getPos: getPos,
180
+ portalProviderAPI: portalProviderAPI,
181
+ eventDispatcher: eventDispatcher,
182
+ hasIntlContext: hasIntlContext,
183
+ pluginInjectionApi: pluginInjectionApi
184
+ }).init();
185
+ } else {
186
+ return inlineCardViewProducer(node, view, getPos, decorations);
187
+ }
188
+ }
189
+ return new _blockCard.BlockCard(node, view, getPos, portalProviderAPI, eventDispatcher, reactComponentProps, undefined, true, undefined, hasIntlContext).init();
190
+ },
191
+ embedCard: function embedCard(node, view, getPos) {
192
+ var portalProviderAPI = pmPluginFactoryParams.portalProviderAPI,
193
+ eventDispatcher = pmPluginFactoryParams.eventDispatcher,
194
+ dispatchAnalyticsEvent = pmPluginFactoryParams.dispatchAnalyticsEvent;
195
+ var reactComponentProps = {
196
+ eventDispatcher: eventDispatcher,
197
+ allowResizing: allowResizing,
198
+ platform: platform,
199
+ fullWidthMode: fullWidthMode,
200
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
201
+ pluginInjectionApi: pluginInjectionApi
202
+ };
203
+ var hasIntlContext = true;
204
+ return new _embedCard.EmbedCard(node, view, getPos, portalProviderAPI, eventDispatcher, reactComponentProps, undefined, true, undefined, hasIntlContext).init();
205
+ }
206
+ }
207
+ },
208
+ key: _pluginKey.pluginKey
209
+ });
210
+ };
211
+ };
212
+ exports.createPlugin = createPlugin;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.mountHyperlinkPlugin = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
10
+ var _HyperlinkToolbarAppearance = require("../ui/HyperlinkToolbarAppearance");
11
+ var mountHyperlinkPlugin = function mountHyperlinkPlugin(pluginInjectionApi, options) {
12
+ return new _safePlugin.SafePlugin({
13
+ view: function view(editorView) {
14
+ requestAnimationFrame(function () {
15
+ var _pluginInjectionApi$d, _pluginInjectionApi$d2;
16
+ pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d = pluginInjectionApi.dependencies.hyperlink) === null || _pluginInjectionApi$d === void 0 ? void 0 : (_pluginInjectionApi$d2 = _pluginInjectionApi$d.actions) === null || _pluginInjectionApi$d2 === void 0 ? void 0 : _pluginInjectionApi$d2.prependToolbarButtons({
17
+ items: function items(state, intl, providerFactory, link) {
18
+ return [{
19
+ type: 'custom',
20
+ fallback: [],
21
+ render: function render(editorView) {
22
+ var _pluginInjectionApi$d3, _pluginInjectionApi$d4;
23
+ return /*#__PURE__*/_react.default.createElement(_HyperlinkToolbarAppearance.HyperlinkToolbarAppearance, {
24
+ key: "link-appearance",
25
+ url: link,
26
+ intl: intl,
27
+ editorView: editorView,
28
+ editorState: state,
29
+ cardOptions: options,
30
+ providerFactory: providerFactory,
31
+ platform: options === null || options === void 0 ? void 0 : options.platform,
32
+ editorAnalyticsApi: pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d3 = pluginInjectionApi.dependencies.analytics) === null || _pluginInjectionApi$d3 === void 0 ? void 0 : _pluginInjectionApi$d3.actions,
33
+ cardActions: pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$d4 = pluginInjectionApi.dependencies.card) === null || _pluginInjectionApi$d4 === void 0 ? void 0 : _pluginInjectionApi$d4.actions
34
+ });
35
+ }
36
+ }];
37
+ },
38
+ onEscapeCallback: pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.dependencies.card.actions.hideLinkToolbar,
39
+ onInsertLinkCallback: pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : pluginInjectionApi.dependencies.card.actions.queueCardsFromChangedTr,
40
+ view: editorView
41
+ });
42
+ });
43
+ return {};
44
+ }
45
+ });
46
+ };
47
+ exports.mountHyperlinkPlugin = mountHyperlinkPlugin;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pluginKey = void 0;
7
+ var _prosemirrorState = require("prosemirror-state");
8
+ var pluginKey = new _prosemirrorState.PluginKey('cardPlugin');
9
+ exports.pluginKey = pluginKey;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
+ var queue = function queue(state, action) {
12
+ return _objectSpread(_objectSpread({}, state), {}, {
13
+ requests: state.requests.concat(action.requests)
14
+ });
15
+ };
16
+ var resolve = function resolve(state, action) {
17
+ var requests = state.requests.reduce(function (requests, request) {
18
+ if (request.url !== action.url) {
19
+ requests.push(request);
20
+ }
21
+ return requests;
22
+ }, []);
23
+ return _objectSpread(_objectSpread({}, state), {}, {
24
+ requests: requests
25
+ });
26
+ };
27
+ var register = function register(state, action) {
28
+ return _objectSpread(_objectSpread({}, state), {}, {
29
+ cards: state.cards.filter(function (card) {
30
+ return card.pos !== action.info.pos;
31
+ }).concat(action.info)
32
+ });
33
+ };
34
+ var setProvider = function setProvider(state, action) {
35
+ return _objectSpread(_objectSpread({}, state), {}, {
36
+ provider: action.provider
37
+ });
38
+ };
39
+ var setCardLayout = function setCardLayout(state, action) {
40
+ return _objectSpread(_objectSpread({}, state), {}, {
41
+ layout: action.layout
42
+ });
43
+ };
44
+ var setDatasourceTableRef = function setDatasourceTableRef(state, action) {
45
+ return _objectSpread(_objectSpread({}, state), {}, {
46
+ datasourceTableRef: action.datasourceTableRef
47
+ });
48
+ };
49
+ var setCardLayoutDatasourceTableRef = function setCardLayoutDatasourceTableRef(state, action) {
50
+ return _objectSpread(_objectSpread({}, state), {}, {
51
+ datasourceTableRef: action.datasourceTableRef,
52
+ layout: action.layout
53
+ });
54
+ };
55
+ var registerEvents = function registerEvents(state, action) {
56
+ return _objectSpread(_objectSpread({}, state), {}, {
57
+ smartLinkEvents: action.smartLinkEvents
58
+ });
59
+ };
60
+ var registerEventsNext = function registerEventsNext(state, action) {
61
+ return _objectSpread(_objectSpread({}, state), {}, {
62
+ smartLinkEventsNext: action.smartLinkEvents
63
+ });
64
+ };
65
+ var setLinkToolbar = function setLinkToolbar(state, action) {
66
+ return _objectSpread(_objectSpread({}, state), {}, {
67
+ showLinkingToolbar: action.type === 'SHOW_LINK_TOOLBAR'
68
+ });
69
+ };
70
+ var showDatasourceModal = function showDatasourceModal(state, action) {
71
+ return _objectSpread(_objectSpread({}, state), {}, {
72
+ showDatasourceModal: true,
73
+ datasourceModalType: action.type === 'SHOW_DATASOURCE_MODAL' ? action.modalType : undefined
74
+ });
75
+ };
76
+ var hideDatasourceModal = function hideDatasourceModal(state) {
77
+ return _objectSpread(_objectSpread({}, state), {}, {
78
+ showDatasourceModal: false,
79
+ datasourceModalType: undefined
80
+ });
81
+ };
82
+ var _default = function _default(state, action) {
83
+ switch (action.type) {
84
+ case 'QUEUE':
85
+ return queue(state, action);
86
+ case 'SET_PROVIDER':
87
+ return setProvider(state, action);
88
+ case 'RESOLVE':
89
+ return resolve(state, action);
90
+ case 'REGISTER':
91
+ return register(state, action);
92
+ case 'REGISTER_EVENTS':
93
+ return registerEvents(state, action);
94
+ case 'REGISTER_EVENTS_NEXT':
95
+ return registerEventsNext(state, action);
96
+ case 'SET_DATASOURCE_TABLE_REF':
97
+ return setDatasourceTableRef(state, action);
98
+ case 'SET_CARD_LAYOUT':
99
+ return setCardLayout(state, action);
100
+ case 'SET_CARD_LAYOUT_AND_DATASOURCE_TABLE_REF':
101
+ return setCardLayoutDatasourceTableRef(state, action);
102
+ case 'SHOW_LINK_TOOLBAR':
103
+ case 'HIDE_LINK_TOOLBAR':
104
+ return setLinkToolbar(state, action);
105
+ case 'SHOW_DATASOURCE_MODAL':
106
+ return showDatasourceModal(state, action);
107
+ case 'HIDE_DATASOURCE_MODAL':
108
+ return hideDatasourceModal(state);
109
+ }
110
+ };
111
+ exports.default = _default;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.shouldReplaceLink = shouldReplaceLink;
7
+ var _adfSchema = require("@atlaskit/adf-schema");
8
+ var _paste = require("@atlaskit/editor-common/paste");
9
+ function shouldReplaceLink(node) {
10
+ var compareLinkText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
11
+ var compareToUrl = arguments.length > 2 ? arguments[2] : undefined;
12
+ var linkMark = node.marks.find(function (mark) {
13
+ return mark.type.name === 'link';
14
+ });
15
+ if (!linkMark) {
16
+ // not a link anymore
17
+ return false;
18
+ }
19
+
20
+ // ED-6041: compare normalised link text after linkfy from Markdown transformer
21
+ // instead, since it always decodes URL ('%20' -> ' ') on the link text
22
+
23
+ var normalisedHref = (0, _adfSchema.normalizeUrl)(_paste.md.normalizeLinkText(linkMark.attrs.href));
24
+ var normalizedLinkText = (0, _adfSchema.normalizeUrl)(_paste.md.normalizeLinkText(node.text || ''));
25
+ if (compareLinkText && normalisedHref !== normalizedLinkText) {
26
+ return false;
27
+ }
28
+ if (compareToUrl) {
29
+ var normalizedUrl = (0, _adfSchema.normalizeUrl)(_paste.md.normalizeLinkText(compareToUrl));
30
+ if (normalizedUrl !== normalisedHref) {
31
+ return false;
32
+ }
33
+ }
34
+ return true;
35
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resolveWithProvider = exports.handleProvider = void 0;
7
+ var _actions = require("../actions");
8
+ var _doc = require("../doc");
9
+ // ============================================================================ //
10
+ // ============================== PROVIDER UTILS ============================== //
11
+ // ============================================================================ //
12
+ // Used for all interactions with the EditorCardProvider.
13
+ // ============================================================================ //
14
+ var resolveWithProvider = function resolveWithProvider(view, provider, request, options, editorAnalyticsApi, createAnalyticsEvent) {
15
+ // When user manually changes appearance from blue link to smart link, we should respect that,
16
+ var shouldForceAppearance =
17
+ // This flag is set to true only in one place atm:
18
+ // packages/editor/editor-core/src/plugins/card/pm-plugins/doc.ts @ convertHyperlinkToSmartCard
19
+ // Which is used when user switching from URL to smart link appearance.
20
+ !!request.shouldReplaceLink;
21
+ var handleResolve = provider.resolve(request.url, request.appearance, shouldForceAppearance).then(handleResolved(view, request, editorAnalyticsApi, createAnalyticsEvent, options), handleRejected(view, request, editorAnalyticsApi));
22
+ return handleResolve;
23
+ };
24
+ exports.resolveWithProvider = resolveWithProvider;
25
+ var updateCardType = function updateCardType(resolvedCard, options) {
26
+ if ((resolvedCard === null || resolvedCard === void 0 ? void 0 : resolvedCard.type) === 'blockCard' && !options.allowBlockCards || (resolvedCard === null || resolvedCard === void 0 ? void 0 : resolvedCard.type) === 'embedCard' && !options.allowEmbeds) {
27
+ // clean out the 'layout' attr from an embedCard type that should be transformed into the inlineCard type.
28
+ if (resolvedCard.type === 'embedCard') {
29
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
+ delete resolvedCard.attrs.layout;
31
+ }
32
+ resolvedCard.type = 'inlineCard';
33
+ }
34
+ };
35
+ var handleResolved = function handleResolved(view, request, editorAnalyticsApi, createAnalyticsEvent, options) {
36
+ return function (resolvedCard) {
37
+ updateCardType(resolvedCard, options);
38
+ (0, _doc.replaceQueuedUrlWithCard)(request.url, resolvedCard, request.analyticsAction, editorAnalyticsApi, createAnalyticsEvent)(view.state, view.dispatch);
39
+ return resolvedCard;
40
+ };
41
+ };
42
+ var handleRejected = function handleRejected(view, request, editorAnalyticsApi) {
43
+ return function () {
44
+ (0, _doc.handleFallbackWithAnalytics)(request, editorAnalyticsApi)(view.state, view.dispatch);
45
+ };
46
+ };
47
+
48
+ // listen for card provider changes
49
+ var handleProvider = function handleProvider(_, provider, view) {
50
+ if (!provider) {
51
+ return;
52
+ }
53
+ provider.then(function (cardProvider) {
54
+ var state = view.state,
55
+ dispatch = view.dispatch;
56
+ dispatch((0, _actions.setProvider)(cardProvider)(state.tr));
57
+ });
58
+ };
59
+ exports.handleProvider = handleProvider;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getPluginStateWithUpdatedPos = exports.getPluginState = exports.getNewRequests = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _pluginKey = require("../plugin-key");
10
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
+ // ============================================================================ //
13
+ // ============================== PLUGIN STATE ================================ //
14
+ // ============================================================================ //
15
+ // Used for interactions with the Card Plugin's state.
16
+ // ============================================================================ //
17
+ var getPluginState = function getPluginState(editorState) {
18
+ return _pluginKey.pluginKey.getState(editorState);
19
+ };
20
+ exports.getPluginState = getPluginState;
21
+ var getPluginStateWithUpdatedPos = function getPluginStateWithUpdatedPos(pluginState, tr) {
22
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
23
+ requests: pluginState.requests.map(function (request) {
24
+ return _objectSpread(_objectSpread({}, request), {}, {
25
+ pos: tr.mapping.map(request.pos)
26
+ });
27
+ }),
28
+ cards: pluginState.cards.map(function (card) {
29
+ return _objectSpread(_objectSpread({}, card), {}, {
30
+ pos: tr.mapping.map(card.pos)
31
+ });
32
+ })
33
+ });
34
+ };
35
+ exports.getPluginStateWithUpdatedPos = getPluginStateWithUpdatedPos;
36
+ var getNewRequests = function getNewRequests(oldState, currentState) {
37
+ if (oldState) {
38
+ return currentState.requests.filter(function (req) {
39
+ return !oldState.requests.find(function (oldReq) {
40
+ return isSameRequest(oldReq, req);
41
+ });
42
+ });
43
+ }
44
+ return currentState.requests;
45
+ };
46
+ exports.getNewRequests = getNewRequests;
47
+ var isSameRequest = function isSameRequest(requestA, requestB) {
48
+ return requestA.url === requestB.url && requestA.pos === requestB.pos;
49
+ };