@atlaskit/editor-core 182.0.2 → 182.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 (266) hide show
  1. package/.eslintrc.js +2 -0
  2. package/CHANGELOG.md +46 -0
  3. package/README.md +20 -0
  4. package/architecture/0001-record-architecture-decisions.md +25 -0
  5. package/architecture/0002-deep-equality-check-for-getsharedstate.md +67 -0
  6. package/architecture/0003-explicit-plugin-dependencies.md +291 -0
  7. package/dist/cjs/actions/index.js +17 -6
  8. package/dist/cjs/analytics-api/attach-payload-into-transaction.js +2 -1
  9. package/dist/cjs/create-editor/ErrorBoundary.js +1 -16
  10. package/dist/cjs/create-editor/ReactEditorViewInternal.js +3 -3
  11. package/dist/cjs/editor-next/editor-internal.js +2 -1
  12. package/dist/cjs/editor-next/index.js +5 -1
  13. package/dist/cjs/editor.js +9 -5
  14. package/dist/cjs/keymaps/index.js +12 -0
  15. package/dist/cjs/labs/next/internal/hooks/use-editor/index.js +5 -7
  16. package/dist/cjs/labs/next/presets/default.js +1 -2
  17. package/dist/cjs/plugins/card/index.js +16 -5
  18. package/dist/cjs/plugins/card/pm-plugins/actions.js +10 -1
  19. package/dist/cjs/plugins/card/pm-plugins/analytics/create-analytics-queue.js +48 -0
  20. package/dist/cjs/plugins/card/pm-plugins/analytics/events-from-tr.js +337 -0
  21. package/dist/cjs/plugins/card/pm-plugins/analytics/index.js +19 -0
  22. package/dist/cjs/plugins/card/pm-plugins/analytics/types.js +5 -0
  23. package/dist/cjs/plugins/card/pm-plugins/analytics/utils.js +139 -0
  24. package/dist/cjs/plugins/card/pm-plugins/doc.js +99 -22
  25. package/dist/cjs/plugins/card/pm-plugins/main.js +16 -10
  26. package/dist/cjs/plugins/card/pm-plugins/reducers.js +7 -0
  27. package/dist/cjs/plugins/card/pm-plugins/util/resolve.js +3 -7
  28. package/dist/cjs/plugins/card/toolbar.js +18 -8
  29. package/dist/cjs/plugins/card/ui/EditLinkToolbar.js +12 -8
  30. package/dist/cjs/plugins/card/ui/EditorSmartCardEventsNext.js +202 -0
  31. package/dist/cjs/plugins/card/ui/LinkToolbarAppearance.js +12 -4
  32. package/dist/cjs/plugins/card/utils.js +4 -2
  33. package/dist/cjs/plugins/extension/context-panel.js +3 -2
  34. package/dist/cjs/plugins/extension/index.js +4 -1
  35. package/dist/cjs/plugins/help-dialog/ui/index.js +29 -8
  36. package/dist/cjs/plugins/hyperlink/Toolbar.js +12 -2
  37. package/dist/cjs/plugins/hyperlink/commands.js +9 -5
  38. package/dist/cjs/plugins/hyperlink/pm-plugins/input-rule.js +4 -0
  39. package/dist/cjs/plugins/hyperlink/ui/HyperlinkAddToolbar/index.js +2 -2
  40. package/dist/cjs/plugins/index.js +0 -7
  41. package/dist/cjs/plugins/insert-block/index.js +5 -1
  42. package/dist/cjs/plugins/insert-block/ui/ToolbarInsertBlock/index.js +25 -23
  43. package/dist/cjs/plugins/media/index.js +9 -5
  44. package/dist/cjs/plugins/media/nodeviews/mediaNodeView/media.js +7 -1
  45. package/dist/cjs/plugins/media/pm-plugins/main.js +5 -4
  46. package/dist/cjs/plugins/media/utils/media-single.js +1 -4
  47. package/dist/cjs/plugins/panel/pm-plugins/keymaps.js +2 -1
  48. package/dist/cjs/plugins/paste/handlers.js +5 -5
  49. package/dist/cjs/plugins/paste/index.js +4 -2
  50. package/dist/cjs/plugins/paste/pm-plugins/main.js +6 -4
  51. package/dist/cjs/plugins/rule/commands.js +2 -2
  52. package/dist/cjs/plugins/rule/index.js +5 -4
  53. package/dist/cjs/plugins/rule/pm-plugins/input-rule.js +6 -8
  54. package/dist/cjs/plugins/rule/pm-plugins/keymap.js +2 -2
  55. package/dist/cjs/plugins/text-color/index.js +5 -2
  56. package/dist/cjs/plugins/text-color/ui/ToolbarTextColor/index.js +3 -4
  57. package/dist/cjs/plugins/text-formatting/ui/Toolbar/toolbar-messages.js +10 -0
  58. package/dist/cjs/ui/Appearance/FullPage/FullPage.js +2 -4
  59. package/dist/cjs/ui/ColorPalette/index.js +6 -0
  60. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +15 -10
  61. package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  62. package/dist/cjs/ui/ConfigPanel/Fields/ColorPicker.js +248 -17
  63. package/dist/cjs/ui/ConfigPanel/FormContent.js +12 -6
  64. package/dist/cjs/ui/ConfigPanel/utils.js +2 -12
  65. package/dist/cjs/ui/ContentStyles/index.js +2 -5
  66. package/dist/cjs/ui/MediaAndEmbedsToolbar/index.js +16 -8
  67. package/dist/cjs/utils/document.js +5 -3
  68. package/dist/cjs/version-wrapper.js +1 -1
  69. package/dist/cjs/version.json +1 -1
  70. package/dist/es2019/actions/index.js +10 -4
  71. package/dist/es2019/analytics-api/attach-payload-into-transaction.js +2 -1
  72. package/dist/es2019/create-editor/ErrorBoundary.js +1 -13
  73. package/dist/es2019/create-editor/ReactEditorViewInternal.js +2 -2
  74. package/dist/es2019/editor-next/editor-internal.js +2 -1
  75. package/dist/es2019/editor-next/index.js +5 -1
  76. package/dist/es2019/editor.js +5 -2
  77. package/dist/es2019/keymaps/index.js +1 -1
  78. package/dist/es2019/labs/next/internal/hooks/use-editor/index.js +4 -6
  79. package/dist/es2019/labs/next/presets/default.js +1 -2
  80. package/dist/es2019/plugins/card/index.js +15 -5
  81. package/dist/es2019/plugins/card/pm-plugins/actions.js +4 -0
  82. package/dist/es2019/plugins/card/pm-plugins/analytics/create-analytics-queue.js +38 -0
  83. package/dist/es2019/plugins/card/pm-plugins/analytics/events-from-tr.js +316 -0
  84. package/dist/es2019/plugins/card/pm-plugins/analytics/index.js +2 -0
  85. package/dist/es2019/plugins/card/pm-plugins/analytics/types.js +1 -0
  86. package/dist/es2019/plugins/card/pm-plugins/analytics/utils.js +124 -0
  87. package/dist/es2019/plugins/card/pm-plugins/doc.js +94 -20
  88. package/dist/es2019/plugins/card/pm-plugins/main.js +17 -8
  89. package/dist/es2019/plugins/card/pm-plugins/reducers.js +8 -0
  90. package/dist/es2019/plugins/card/pm-plugins/util/resolve.js +3 -7
  91. package/dist/es2019/plugins/card/toolbar.js +16 -8
  92. package/dist/es2019/plugins/card/ui/EditLinkToolbar.js +13 -9
  93. package/dist/es2019/plugins/card/ui/EditorSmartCardEventsNext.js +180 -0
  94. package/dist/es2019/plugins/card/ui/LinkToolbarAppearance.js +11 -2
  95. package/dist/es2019/plugins/card/utils.js +6 -2
  96. package/dist/es2019/plugins/extension/context-panel.js +3 -2
  97. package/dist/es2019/plugins/extension/index.js +45 -41
  98. package/dist/es2019/plugins/help-dialog/ui/index.js +17 -1
  99. package/dist/es2019/plugins/hyperlink/Toolbar.js +13 -4
  100. package/dist/es2019/plugins/hyperlink/commands.js +9 -6
  101. package/dist/es2019/plugins/hyperlink/pm-plugins/input-rule.js +4 -0
  102. package/dist/es2019/plugins/hyperlink/ui/HyperlinkAddToolbar/index.js +2 -2
  103. package/dist/es2019/plugins/index.js +0 -1
  104. package/dist/es2019/plugins/insert-block/index.js +96 -91
  105. package/dist/es2019/plugins/insert-block/ui/ToolbarInsertBlock/index.js +3 -2
  106. package/dist/es2019/plugins/media/index.js +202 -198
  107. package/dist/es2019/plugins/media/nodeviews/mediaNodeView/media.js +9 -1
  108. package/dist/es2019/plugins/media/pm-plugins/main.js +5 -4
  109. package/dist/es2019/plugins/media/utils/media-single.js +1 -5
  110. package/dist/es2019/plugins/panel/pm-plugins/keymaps.js +3 -2
  111. package/dist/es2019/plugins/paste/handlers.js +6 -6
  112. package/dist/es2019/plugins/paste/index.js +18 -14
  113. package/dist/es2019/plugins/paste/pm-plugins/main.js +7 -5
  114. package/dist/es2019/plugins/rule/commands.js +2 -2
  115. package/dist/es2019/plugins/rule/index.js +49 -46
  116. package/dist/es2019/plugins/rule/pm-plugins/input-rule.js +6 -7
  117. package/dist/es2019/plugins/rule/pm-plugins/keymap.js +2 -2
  118. package/dist/es2019/plugins/text-color/index.js +49 -44
  119. package/dist/es2019/plugins/text-color/ui/ToolbarTextColor/index.js +3 -3
  120. package/dist/es2019/plugins/text-formatting/ui/Toolbar/toolbar-messages.js +10 -0
  121. package/dist/es2019/ui/Appearance/FullPage/FullPage.js +2 -4
  122. package/dist/es2019/ui/ColorPalette/index.js +2 -2
  123. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +8 -4
  124. package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  125. package/dist/es2019/ui/ConfigPanel/Fields/ColorPicker.js +238 -13
  126. package/dist/es2019/ui/ConfigPanel/FormContent.js +12 -6
  127. package/dist/es2019/ui/ConfigPanel/utils.js +1 -11
  128. package/dist/es2019/ui/ContentStyles/index.js +2 -5
  129. package/dist/es2019/ui/MediaAndEmbedsToolbar/index.js +12 -10
  130. package/dist/es2019/utils/document.js +5 -3
  131. package/dist/es2019/version-wrapper.js +1 -1
  132. package/dist/es2019/version.json +1 -1
  133. package/dist/esm/actions/index.js +17 -6
  134. package/dist/esm/analytics-api/attach-payload-into-transaction.js +2 -1
  135. package/dist/esm/create-editor/ErrorBoundary.js +1 -16
  136. package/dist/esm/create-editor/ReactEditorViewInternal.js +2 -2
  137. package/dist/esm/editor-next/editor-internal.js +2 -1
  138. package/dist/esm/editor-next/index.js +5 -1
  139. package/dist/esm/editor.js +9 -5
  140. package/dist/esm/keymaps/index.js +1 -1
  141. package/dist/esm/labs/next/internal/hooks/use-editor/index.js +4 -6
  142. package/dist/esm/labs/next/presets/default.js +1 -2
  143. package/dist/esm/plugins/card/index.js +13 -5
  144. package/dist/esm/plugins/card/pm-plugins/actions.js +8 -0
  145. package/dist/esm/plugins/card/pm-plugins/analytics/create-analytics-queue.js +41 -0
  146. package/dist/esm/plugins/card/pm-plugins/analytics/events-from-tr.js +328 -0
  147. package/dist/esm/plugins/card/pm-plugins/analytics/index.js +2 -0
  148. package/dist/esm/plugins/card/pm-plugins/analytics/types.js +1 -0
  149. package/dist/esm/plugins/card/pm-plugins/analytics/utils.js +124 -0
  150. package/dist/esm/plugins/card/pm-plugins/doc.js +98 -22
  151. package/dist/esm/plugins/card/pm-plugins/main.js +16 -10
  152. package/dist/esm/plugins/card/pm-plugins/reducers.js +7 -0
  153. package/dist/esm/plugins/card/pm-plugins/util/resolve.js +3 -7
  154. package/dist/esm/plugins/card/toolbar.js +18 -8
  155. package/dist/esm/plugins/card/ui/EditLinkToolbar.js +13 -9
  156. package/dist/esm/plugins/card/ui/EditorSmartCardEventsNext.js +191 -0
  157. package/dist/esm/plugins/card/ui/LinkToolbarAppearance.js +12 -4
  158. package/dist/esm/plugins/card/utils.js +4 -2
  159. package/dist/esm/plugins/extension/context-panel.js +3 -2
  160. package/dist/esm/plugins/extension/index.js +4 -1
  161. package/dist/esm/plugins/help-dialog/ui/index.js +29 -8
  162. package/dist/esm/plugins/hyperlink/Toolbar.js +13 -3
  163. package/dist/esm/plugins/hyperlink/commands.js +9 -5
  164. package/dist/esm/plugins/hyperlink/pm-plugins/input-rule.js +4 -0
  165. package/dist/esm/plugins/hyperlink/ui/HyperlinkAddToolbar/index.js +2 -2
  166. package/dist/esm/plugins/index.js +0 -1
  167. package/dist/esm/plugins/insert-block/index.js +5 -1
  168. package/dist/esm/plugins/insert-block/ui/ToolbarInsertBlock/index.js +25 -23
  169. package/dist/esm/plugins/media/index.js +9 -5
  170. package/dist/esm/plugins/media/nodeviews/mediaNodeView/media.js +7 -1
  171. package/dist/esm/plugins/media/pm-plugins/main.js +5 -4
  172. package/dist/esm/plugins/media/utils/media-single.js +1 -4
  173. package/dist/esm/plugins/panel/pm-plugins/keymaps.js +3 -2
  174. package/dist/esm/plugins/paste/handlers.js +6 -6
  175. package/dist/esm/plugins/paste/index.js +4 -2
  176. package/dist/esm/plugins/paste/pm-plugins/main.js +7 -5
  177. package/dist/esm/plugins/rule/commands.js +2 -2
  178. package/dist/esm/plugins/rule/index.js +5 -4
  179. package/dist/esm/plugins/rule/pm-plugins/input-rule.js +6 -8
  180. package/dist/esm/plugins/rule/pm-plugins/keymap.js +2 -2
  181. package/dist/esm/plugins/text-color/index.js +5 -2
  182. package/dist/esm/plugins/text-color/ui/ToolbarTextColor/index.js +3 -4
  183. package/dist/esm/plugins/text-formatting/ui/Toolbar/toolbar-messages.js +10 -0
  184. package/dist/esm/ui/Appearance/FullPage/FullPage.js +2 -4
  185. package/dist/esm/ui/ColorPalette/index.js +2 -2
  186. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +15 -10
  187. package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  188. package/dist/esm/ui/ConfigPanel/Fields/ColorPicker.js +244 -19
  189. package/dist/esm/ui/ConfigPanel/FormContent.js +12 -6
  190. package/dist/esm/ui/ConfigPanel/utils.js +0 -10
  191. package/dist/esm/ui/ContentStyles/index.js +2 -5
  192. package/dist/esm/ui/MediaAndEmbedsToolbar/index.js +16 -8
  193. package/dist/esm/utils/document.js +5 -3
  194. package/dist/esm/version-wrapper.js +1 -1
  195. package/dist/esm/version.json +1 -1
  196. package/dist/types/actions/index.d.ts +3 -2
  197. package/dist/types/create-editor/ErrorBoundary.d.ts +2 -2
  198. package/dist/types/editor-next/index.d.ts +1 -0
  199. package/dist/types/editor.d.ts +1 -0
  200. package/dist/types/keymaps/index.d.ts +1 -1
  201. package/dist/types/labs/next/internal/hooks/use-editor/index.d.ts +2 -1
  202. package/dist/types/labs/next/presets/cxhtml.d.ts +1 -5
  203. package/dist/types/labs/next/presets/default.d.ts +2 -10
  204. package/dist/types/labs/next/presets/mobile.d.ts +1 -5
  205. package/dist/types/plugins/card/pm-plugins/actions.d.ts +2 -1
  206. package/dist/types/plugins/card/pm-plugins/analytics/create-analytics-queue.d.ts +10 -0
  207. package/dist/types/plugins/card/pm-plugins/analytics/events-from-tr.d.ts +17 -0
  208. package/dist/types/plugins/card/pm-plugins/analytics/index.d.ts +2 -0
  209. package/dist/types/plugins/card/pm-plugins/analytics/types.d.ts +10 -0
  210. package/dist/types/plugins/card/pm-plugins/analytics/utils.d.ts +26 -0
  211. package/dist/types/plugins/card/pm-plugins/doc.d.ts +8 -7
  212. package/dist/types/plugins/card/pm-plugins/main.d.ts +1 -1
  213. package/dist/types/plugins/card/pm-plugins/util/resolve.d.ts +2 -2
  214. package/dist/types/plugins/card/pm-plugins/util/state.d.ts +3 -0
  215. package/dist/types/plugins/card/types.d.ts +81 -7
  216. package/dist/types/plugins/card/ui/EditLinkToolbar.d.ts +2 -1
  217. package/dist/types/plugins/card/ui/EditorSmartCardEventsNext.d.ts +18 -0
  218. package/dist/types/plugins/card/utils.d.ts +1 -1
  219. package/dist/types/plugins/extension/context-panel.d.ts +2 -1
  220. package/dist/types/plugins/extension/index.d.ts +2 -0
  221. package/dist/types/plugins/hyperlink/commands.d.ts +3 -2
  222. package/dist/types/plugins/hyperlink/ui/HyperlinkAddToolbar/index.d.ts +2 -1
  223. package/dist/types/plugins/index.d.ts +0 -1
  224. package/dist/types/plugins/insert-block/index.d.ts +2 -0
  225. package/dist/types/plugins/insert-block/ui/ToolbarInsertBlock/types.d.ts +2 -1
  226. package/dist/types/plugins/media/index.d.ts +2 -0
  227. package/dist/types/plugins/media/pm-plugins/main.d.ts +3 -2
  228. package/dist/types/plugins/media/utils/media-single.d.ts +1 -1
  229. package/dist/types/plugins/paste/index.d.ts +2 -0
  230. package/dist/types/plugins/paste/pm-plugins/main.d.ts +2 -1
  231. package/dist/types/plugins/rule/commands.d.ts +2 -1
  232. package/dist/types/plugins/rule/index.d.ts +5 -1
  233. package/dist/types/plugins/rule/pm-plugins/input-rule.d.ts +1 -1
  234. package/dist/types/plugins/rule/pm-plugins/keymap.d.ts +2 -1
  235. package/dist/types/plugins/text-color/index.d.ts +2 -0
  236. package/dist/types/plugins/text-color/ui/ToolbarTextColor/index.d.ts +2 -0
  237. package/dist/types/plugins/text-formatting/ui/Toolbar/toolbar-messages.d.ts +10 -0
  238. package/dist/types/types/editor-appearance-component.d.ts +1 -1
  239. package/dist/types/types/editor-props.d.ts +1 -0
  240. package/dist/types/ui/Appearance/FullPage/FullPage.d.ts +2 -0
  241. package/dist/types/ui/ColorPalette/index.d.ts +2 -2
  242. package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +3 -1
  243. package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +3 -1
  244. package/dist/types/ui/ConfigPanel/Fields/ColorPicker.d.ts +12 -1
  245. package/dist/types/ui/ConfigPanel/FormContent.d.ts +2 -2
  246. package/dist/types/ui/ConfigPanel/types.d.ts +3 -0
  247. package/dist/types/ui/ConfigPanel/utils.d.ts +0 -1
  248. package/dist/types/ui/MediaAndEmbedsToolbar/index.d.ts +1 -1
  249. package/package.json +14 -13
  250. package/report.api.md +10 -0
  251. package/dist/cjs/plugins/feature-flags-context/get-enabled-feature-flag-keys.js +0 -12
  252. package/dist/cjs/plugins/feature-flags-context/get-feature-flags.js +0 -11
  253. package/dist/cjs/plugins/feature-flags-context/index.js +0 -50
  254. package/dist/cjs/plugins/feature-flags-context/plugin-key.js +0 -9
  255. package/dist/es2019/plugins/feature-flags-context/get-enabled-feature-flag-keys.js +0 -1
  256. package/dist/es2019/plugins/feature-flags-context/get-feature-flags.js +0 -2
  257. package/dist/es2019/plugins/feature-flags-context/index.js +0 -29
  258. package/dist/es2019/plugins/feature-flags-context/plugin-key.js +0 -2
  259. package/dist/esm/plugins/feature-flags-context/get-enabled-feature-flag-keys.js +0 -1
  260. package/dist/esm/plugins/feature-flags-context/get-feature-flags.js +0 -4
  261. package/dist/esm/plugins/feature-flags-context/index.js +0 -40
  262. package/dist/esm/plugins/feature-flags-context/plugin-key.js +0 -2
  263. package/dist/types/plugins/feature-flags-context/get-enabled-feature-flag-keys.d.ts +0 -1
  264. package/dist/types/plugins/feature-flags-context/get-feature-flags.d.ts +0 -3
  265. package/dist/types/plugins/feature-flags-context/index.d.ts +0 -9
  266. package/dist/types/plugins/feature-flags-context/plugin-key.d.ts +0 -2
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.appearanceForLink = appearanceForLink;
7
+ exports.findLinksAtPositions = void 0;
8
+ exports.findLinksInNode = findLinksInNode;
9
+ exports.getLinkUrl = getLinkUrl;
10
+ exports.isLink = void 0;
11
+ exports.isLinkNode = isLinkNode;
12
+ exports.linkObjectFromNode = void 0;
13
+ var _utils = require("@atlaskit/editor-common/utils");
14
+ var _utils2 = require("../../utils");
15
+ /**
16
+ * Whether a node is a "link" node, ie inline card, block card, embed card
17
+ * (but not a text node with a link mark)
18
+ */
19
+ function isLinkNode(node) {
20
+ return !!(0, _utils2.appearanceForNodeType)(node.type);
21
+ }
22
+
23
+ /**
24
+ * Analytics appearance for link object
25
+ */
26
+ function appearanceForLink(link) {
27
+ if (link.type === 'node') {
28
+ var appearance = (0, _utils2.appearanceForNodeType)(link.node.type);
29
+ if (appearance) {
30
+ return appearance;
31
+ }
32
+ }
33
+ return 'url';
34
+ }
35
+ var nodeHasLinkMark = function nodeHasLinkMark(schema, node) {
36
+ if (node.marks) {
37
+ for (var i = 0; i < node.marks.length; i++) {
38
+ var mark = node.marks[i];
39
+ if ((0, _utils.isLinkMark)(mark, schema)) {
40
+ return true;
41
+ }
42
+ }
43
+ }
44
+ return false;
45
+ };
46
+
47
+ /**
48
+ * Determine if a node is considered to be a link
49
+ */
50
+ var isLink = function isLink(schema, node) {
51
+ if (isLinkNode(node)) {
52
+ return true;
53
+ }
54
+ return nodeHasLinkMark(schema, node);
55
+ };
56
+
57
+ /**
58
+ * Given a node, find all nodes and marks that are considered "links"
59
+ * @param state EditorState
60
+ * @param fragment Fragment to search
61
+ * @returns Array of nodes and marks found in the fragment that are "links"
62
+ */
63
+ exports.isLink = isLink;
64
+ function findLinksInNode(schema, node, offset) {
65
+ var links = [];
66
+ node.descendants(function (node, pos) {
67
+ // Nodes
68
+ if (isLinkNode(node)) {
69
+ links.push({
70
+ type: 'node',
71
+ pos: pos + offset,
72
+ node: node
73
+ });
74
+ }
75
+
76
+ // Marks
77
+ if (node.marks) {
78
+ for (var i = 0; i < node.marks.length; i++) {
79
+ var mark = node.marks[i];
80
+ if ((0, _utils.isLinkMark)(mark, schema)) {
81
+ links.push({
82
+ type: 'mark',
83
+ pos: pos + offset,
84
+ mark: mark
85
+ });
86
+ }
87
+ }
88
+ }
89
+ });
90
+ return links;
91
+ }
92
+ function getLinkUrl(link) {
93
+ var _link$mark$attrs;
94
+ if (link.type === 'node') {
95
+ var _link$node$attrs;
96
+ return (_link$node$attrs = link.node.attrs) === null || _link$node$attrs === void 0 ? void 0 : _link$node$attrs.url;
97
+ }
98
+ return (_link$mark$attrs = link.mark.attrs) === null || _link$mark$attrs === void 0 ? void 0 : _link$mark$attrs.href;
99
+ }
100
+ var linkObjectFromNode = function linkObjectFromNode(schema, node, pos) {
101
+ if (isLinkNode(node)) {
102
+ return {
103
+ type: 'node',
104
+ pos: pos,
105
+ node: node
106
+ };
107
+ }
108
+ if (node.marks) {
109
+ for (var i = 0; i < node.marks.length; i++) {
110
+ var mark = node.marks[i];
111
+ if ((0, _utils.isLinkMark)(mark, schema)) {
112
+ return {
113
+ type: 'mark',
114
+ pos: pos,
115
+ mark: mark
116
+ };
117
+ }
118
+ }
119
+ }
120
+ };
121
+ exports.linkObjectFromNode = linkObjectFromNode;
122
+ var findLinksAtPositions = function findLinksAtPositions(tr, positions) {
123
+ var schema = tr.doc.type.schema;
124
+ var links = [];
125
+ for (var i = 0; i < positions.length; i++) {
126
+ var pos = positions[i];
127
+ var node = tr.doc.nodeAt(pos);
128
+ if (!node) {
129
+ continue;
130
+ }
131
+ var link = linkObjectFromNode(schema, node, pos);
132
+ if (!link) {
133
+ continue;
134
+ }
135
+ links.push(link);
136
+ }
137
+ return links;
138
+ };
139
+ exports.findLinksAtPositions = findLinksAtPositions;
@@ -4,12 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateCard = exports.setSelectedCardAppearance = exports.replaceQueuedUrlWithCard = exports.queueCardsFromChangedTr = exports.handleFallbackWithAnalytics = exports.convertHyperlinkToSmartCard = exports.changeSelectedCardToText = exports.changeSelectedCardToLinkFallback = exports.changeSelectedCardToLink = void 0;
7
+ exports.updateCard = exports.setSelectedCardAppearance = exports.replaceQueuedUrlWithCard = exports.queueCardsFromChangedTr = exports.queueCardFromChangedTr = exports.handleFallbackWithAnalytics = exports.convertHyperlinkToSmartCard = exports.changeSelectedCardToText = exports.changeSelectedCardToLinkFallback = exports.changeSelectedCardToLink = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _prosemirrorState = require("prosemirror-state");
11
11
  var _prosemirrorHistory = require("prosemirror-history");
12
12
  var _adfSchema = require("@atlaskit/adf-schema");
13
+ var _card = require("@atlaskit/editor-common/card");
13
14
  var _analytics = require("../../../plugins/analytics");
14
15
  var _nodeEvents = require("../../../plugins/analytics/types/node-events");
15
16
  var _analytics2 = require("../../../plugins/hyperlink/analytics");
@@ -52,7 +53,7 @@ function replaceLinksToCards(tr, cardAdf, schema, request) {
52
53
  tr.replaceWith(pos, pos + (node.text || url).length, nodes);
53
54
  return $pos.node($pos.depth - 1).type.name;
54
55
  }
55
- var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData, analyticsAction, createAnalyticsEvent) {
56
+ var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData, analyticsAction) {
56
57
  return function (editorState, dispatch) {
57
58
  var state = _pluginKey.pluginKey.getState(editorState);
58
59
  if (!state) {
@@ -90,15 +91,22 @@ var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData,
90
91
  if (state.smartLinkEvents) {
91
92
  state.smartLinkEvents.insertSmartLink(domainName, 'inline', state.createAnalyticsEvent);
92
93
  }
94
+
95
+ /**
96
+ * TODO:
97
+ * What if each request has a different source?
98
+ * Unlikely, but need to define behaviour.
99
+ * Ignore analytics event? take first? provide 'mixed' as well?
100
+ */
101
+ var inputMethod = requests[0].source;
102
+ var sourceEvent = requests[0].sourceEvent;
93
103
  (0, _analytics.addAnalytics)(editorState, tr, {
94
104
  action: analyticsAction || _analytics.ACTION.INSERTED,
95
105
  actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
96
106
  actionSubjectId: _analytics.ACTION_SUBJECT_ID.SMART_LINK,
97
107
  eventType: _analytics.EVENT_TYPE.TRACK,
98
108
  attributes: {
99
- inputMethod: requests[0].source /* TODO: what if each request has a different source?
100
- unlikely, but need to define behaviour.
101
- ignore analytics event? take first? provide 'mixed' as well?*/,
109
+ inputMethod: inputMethod,
102
110
  nodeType: nodeType,
103
111
  nodeContext: nodeContext,
104
112
  fromCurrentDomain: (0, _utils2.isFromCurrentDomain)(url)
@@ -107,6 +115,12 @@ var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData,
107
115
  domainName: domainName
108
116
  }
109
117
  });
118
+ (0, _card.addLinkMetadata)(editorState.selection, tr, {
119
+ action: analyticsAction,
120
+ inputMethod: inputMethod,
121
+ cardAction: 'RESOLVE',
122
+ sourceEvent: sourceEvent
123
+ });
110
124
  }
111
125
  }
112
126
  if (dispatch) {
@@ -116,23 +130,30 @@ var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData,
116
130
  };
117
131
  };
118
132
  exports.replaceQueuedUrlWithCard = replaceQueuedUrlWithCard;
119
- var handleFallbackWithAnalytics = function handleFallbackWithAnalytics(url, source) {
120
- return function (editorState, dispatch) {
121
- var state = _pluginKey.pluginKey.getState(editorState);
122
- if (!state) {
133
+ var handleFallbackWithAnalytics = function handleFallbackWithAnalytics(request) {
134
+ return function (state, dispatch) {
135
+ var cardState = _pluginKey.pluginKey.getState(state);
136
+ if (!cardState) {
123
137
  return false;
124
138
  }
125
- var tr = editorState.tr;
126
- (0, _analytics.addAnalytics)(editorState, tr, (0, _analytics2.getLinkCreationAnalyticsEvent)(source, url));
139
+ var tr = state.tr;
140
+ if (request.source !== _analytics.INPUT_METHOD.FLOATING_TB) {
141
+ (0, _analytics.addAnalytics)(state, tr, (0, _analytics2.getLinkCreationAnalyticsEvent)(request.source, request.url));
142
+ }
143
+ (0, _card.addLinkMetadata)(state.selection, tr, {
144
+ action: request.analyticsAction,
145
+ inputMethod: request.source
146
+ });
127
147
  if (dispatch) {
128
- dispatch((0, _actions.resolveCard)(url)(tr));
148
+ dispatch((0, _actions.resolveCard)(request.url)(tr));
129
149
  }
130
150
  return true;
131
151
  };
132
152
  };
133
153
  exports.handleFallbackWithAnalytics = handleFallbackWithAnalytics;
134
- var queueCardsFromChangedTr = function queueCardsFromChangedTr(state, tr, source) {
135
- var normalizeLinkText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
154
+ var queueCardsFromChangedTr = function queueCardsFromChangedTr(state, tr, source, analyticsAction) {
155
+ var normalizeLinkText = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
156
+ var sourceEvent = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
136
157
  var schema = state.schema;
137
158
  var link = schema.marks.link;
138
159
  var requests = [];
@@ -152,14 +173,56 @@ var queueCardsFromChangedTr = function queueCardsFromChangedTr(state, tr, source
152
173
  pos: pos,
153
174
  appearance: 'inline',
154
175
  compareLinkText: normalizeLinkText,
155
- source: source
176
+ source: source,
177
+ analyticsAction: analyticsAction,
178
+ sourceEvent: sourceEvent
156
179
  });
157
180
  }
158
181
  return false;
159
182
  });
183
+ (0, _card.addLinkMetadata)(state.selection, tr, {
184
+ action: analyticsAction
185
+ });
160
186
  return (0, _actions.queueCards)(requests)(tr);
161
187
  };
162
188
  exports.queueCardsFromChangedTr = queueCardsFromChangedTr;
189
+ var queueCardFromChangedTr = function queueCardFromChangedTr(state, tr, source, analyticsAction) {
190
+ var normalizeLinkText = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
191
+ var sourceEvent = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
192
+ var previousAppearance = arguments.length > 6 ? arguments[6] : undefined;
193
+ var schema = state.schema;
194
+ var link = schema.marks.link;
195
+ var requests = [];
196
+ (0, _utils.nodesBetweenChanged)(tr, function (node, pos) {
197
+ if (!node.isText) {
198
+ return true;
199
+ }
200
+ var linkMark = node.marks.find(function (mark) {
201
+ return mark.type === link;
202
+ });
203
+ if (linkMark) {
204
+ if (!(0, _shouldReplaceLink.shouldReplaceLink)(node, normalizeLinkText)) {
205
+ return false;
206
+ }
207
+ requests.push({
208
+ url: linkMark.attrs.href,
209
+ pos: pos,
210
+ appearance: 'inline',
211
+ previousAppearance: previousAppearance,
212
+ compareLinkText: normalizeLinkText,
213
+ source: source,
214
+ analyticsAction: analyticsAction,
215
+ sourceEvent: sourceEvent
216
+ });
217
+ }
218
+ return false;
219
+ });
220
+ (0, _card.addLinkMetadata)(state.selection, tr, {
221
+ action: analyticsAction
222
+ });
223
+ return (0, _actions.queueCards)(requests)(tr);
224
+ };
225
+ exports.queueCardFromChangedTr = queueCardFromChangedTr;
163
226
  var convertHyperlinkToSmartCard = function convertHyperlinkToSmartCard(state, source, appearance) {
164
227
  var normalizeLinkText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
165
228
  var schema = state.schema;
@@ -170,18 +233,21 @@ var convertHyperlinkToSmartCard = function convertHyperlinkToSmartCard(state, so
170
233
  return mark.type === link;
171
234
  });
172
235
  if (linkMark) {
173
- var request = {
236
+ requests.push({
174
237
  url: linkMark.attrs.href,
175
238
  pos: pos,
176
239
  appearance: appearance,
240
+ previousAppearance: 'url',
177
241
  compareLinkText: normalizeLinkText,
178
242
  source: source,
179
243
  analyticsAction: _analytics.ACTION.CHANGED_TYPE,
180
244
  shouldReplaceLink: true
181
- };
182
- requests.push(request);
245
+ });
183
246
  }
184
247
  });
248
+ (0, _card.addLinkMetadata)(state.selection, state.tr, {
249
+ action: _analytics.ACTION.CHANGED_TYPE
250
+ });
185
251
  return (0, _actions.queueCards)(requests)(state.tr);
186
252
  };
187
253
  exports.convertHyperlinkToSmartCard = convertHyperlinkToSmartCard;
@@ -239,14 +305,15 @@ var changeSelectedCardToLinkFallback = function changeSelectedCardToLinkFallback
239
305
  };
240
306
  };
241
307
  exports.changeSelectedCardToLinkFallback = changeSelectedCardToLinkFallback;
242
- var updateCard = function updateCard(href) {
308
+ var updateCard = function updateCard(href, sourceEvent) {
243
309
  return function (state, dispatch) {
244
310
  var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
245
311
  if (!selectedNode) {
246
312
  return false;
247
313
  }
314
+ var cardAppearance = (0, _utils3.selectedCardAppearance)(state);
248
315
  var tr = cardToLinkWithTransaction(state, href, href);
249
- queueCardsFromChangedTr(state, tr, _analytics.INPUT_METHOD.MANUAL);
316
+ queueCardFromChangedTr(state, tr, _analytics.INPUT_METHOD.MANUAL, _analytics.ACTION.UPDATED, undefined, sourceEvent, cardAppearance);
250
317
  if (dispatch) {
251
318
  dispatch(tr.scrollIntoView());
252
319
  }
@@ -281,7 +348,11 @@ var changeSelectedCardToText = function changeSelectedCardToText(text) {
281
348
  }
282
349
  var tr = state.tr.replaceSelectionWith(state.schema.text(text), false);
283
350
  if (dispatch) {
284
- dispatch((0, _analytics.addAnalytics)(state, tr.scrollIntoView(), (0, _linkingUtils.unlinkPayload)(_analytics.ACTION_SUBJECT_ID.CARD_INLINE)));
351
+ (0, _card.addLinkMetadata)(state.selection, tr, {
352
+ action: _analytics.ACTION.UNLINK
353
+ });
354
+ (0, _analytics.addAnalytics)(state, tr.scrollIntoView(), (0, _linkingUtils.unlinkPayload)(_analytics.ACTION_SUBJECT_ID.CARD_INLINE));
355
+ dispatch(tr);
285
356
  }
286
357
  return true;
287
358
  };
@@ -294,8 +365,11 @@ var setSelectedCardAppearance = function setSelectedCardAppearance(appearance) {
294
365
  if (!selectedNode) {
295
366
  // When there is no selected node, we insert a new one
296
367
  // and replace the existing blue link
297
- var _tr = convertHyperlinkToSmartCard(state, _analytics.INPUT_METHOD.MANUAL, appearance);
368
+ var _tr = convertHyperlinkToSmartCard(state, _analytics.INPUT_METHOD.FLOATING_TB, appearance);
298
369
  if (dispatch) {
370
+ (0, _card.addLinkMetadata)(state.selection, _tr, {
371
+ action: _analytics.ACTION.CHANGED_TYPE
372
+ });
299
373
  dispatch(_tr.scrollIntoView());
300
374
  }
301
375
  return false;
@@ -332,6 +406,9 @@ var setSelectedCardAppearance = function setSelectedCardAppearance(appearance) {
332
406
  previousType: (0, _utils3.appearanceForNodeType)(selectedNode.type)
333
407
  }
334
408
  });
409
+ (0, _card.addLinkMetadata)(state.selection, tr, {
410
+ action: _analytics.ACTION.CHANGED_TYPE
411
+ });
335
412
  if (dispatch) {
336
413
  dispatch(tr.scrollIntoView());
337
414
  }
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "pluginKey", {
11
11
  return _pluginKey.pluginKey;
12
12
  }
13
13
  });
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
14
15
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
15
16
  var _rafSchd = _interopRequireDefault(require("raf-schd"));
16
17
  var _getInlineNodeViewProducer = require("../../../nodeviews/getInlineNodeViewProducer");
@@ -21,8 +22,11 @@ var _pluginKey = require("./plugin-key");
21
22
  var _reducers = _interopRequireDefault(require("./reducers"));
22
23
  var _resolve = require("./util/resolve");
23
24
  var _state = require("./util/state");
25
+ var _analytics = require("./analytics");
24
26
  var createPlugin = function createPlugin(options) {
25
27
  return function (pmPluginFactoryParams) {
28
+ var lpAnalyticsEventsNext = pmPluginFactoryParams.featureFlags.lpAnalyticsEventsNext;
29
+ var analyticsQueue = (0, _analytics.createAnalyticsQueue)(!!lpAnalyticsEventsNext);
26
30
  var editorAppearance = options.editorAppearance,
27
31
  platform = options.platform,
28
32
  allowResizing = options.allowResizing,
@@ -39,25 +43,31 @@ var createPlugin = function createPlugin(options) {
39
43
  cards: [],
40
44
  showLinkingToolbar: false,
41
45
  smartLinkEvents: undefined,
46
+ smartLinkEventsNext: undefined,
42
47
  createAnalyticsEvent: createAnalyticsEvent,
43
48
  editorAppearance: editorAppearance
44
49
  };
45
50
  },
46
- apply: function apply(tr, pluginState) {
51
+ apply: function apply(tr, pluginState, prevEditorState) {
47
52
  // Update all the positions of outstanding requests and
48
53
  // cards in the plugin state.
49
54
  var pluginStateWithUpdatedPos = (0, _state.getPluginStateWithUpdatedPos)(pluginState, tr);
55
+
50
56
  // apply any actions
51
57
  var meta = tr.getMeta(_pluginKey.pluginKey);
58
+ var events = (0, _analytics.eventsFromTransaction)(tr, prevEditorState);
59
+ analyticsQueue.push.apply(analyticsQueue, (0, _toConsumableArray2.default)(events));
52
60
  if (meta) {
53
- var nextPluginState = (0, _reducers.default)(pluginStateWithUpdatedPos, meta);
54
- return nextPluginState;
61
+ var nextState = (0, _reducers.default)(pluginStateWithUpdatedPos, meta);
62
+ if (!pluginState.smartLinkEventsNext && nextState.smartLinkEventsNext) {
63
+ analyticsQueue.setCallbacks(nextState.smartLinkEventsNext);
64
+ }
65
+ return nextState;
55
66
  }
56
67
  return pluginStateWithUpdatedPos;
57
68
  }
58
69
  },
59
70
  view: function view(_view) {
60
- var outstandingRequests = {};
61
71
  var subscriptionHandler = function subscriptionHandler(name, provider) {
62
72
  return (0, _resolve.handleProvider)(name, provider, _view);
63
73
  };
@@ -83,19 +93,15 @@ var createPlugin = function createPlugin(options) {
83
93
  * other tasks as per common implementations of the JavaScript event loop in browsers.
84
94
  */
85
95
  var invoke = (0, _rafSchd.default)(function () {
86
- return (0, _resolve.resolveWithProvider)(view, outstandingRequests, provider, request, options);
96
+ return (0, _resolve.resolveWithProvider)(view, provider, request, options);
87
97
  });
88
98
  rafCancellationCallbacks.push(invoke.cancel);
89
99
  invoke();
90
100
  });
91
101
  }
102
+ analyticsQueue.flush();
92
103
  },
93
104
  destroy: function destroy() {
94
- // Cancel all outstanding requests
95
- Object.keys(outstandingRequests).forEach(function (url) {
96
- return Promise.reject(outstandingRequests[url]);
97
- });
98
-
99
105
  // Cancel any outstanding raf callbacks.
100
106
  rafCancellationCallbacks.forEach(function (cancellationCallback) {
101
107
  return cancellationCallback();
@@ -41,6 +41,11 @@ var registerEvents = function registerEvents(state, action) {
41
41
  smartLinkEvents: action.smartLinkEvents
42
42
  });
43
43
  };
44
+ var registerEventsNext = function registerEventsNext(state, action) {
45
+ return _objectSpread(_objectSpread({}, state), {}, {
46
+ smartLinkEventsNext: action.smartLinkEvents
47
+ });
48
+ };
44
49
  var setLinkToolbar = function setLinkToolbar(state, action) {
45
50
  return _objectSpread(_objectSpread({}, state), {}, {
46
51
  showLinkingToolbar: action.type === 'SHOW_LINK_TOOLBAR'
@@ -58,6 +63,8 @@ var _default = function _default(state, action) {
58
63
  return register(state, action);
59
64
  case 'REGISTER_EVENTS':
60
65
  return registerEvents(state, action);
66
+ case 'REGISTER_EVENTS_NEXT':
67
+ return registerEventsNext(state, action);
61
68
  case 'SHOW_LINK_TOOLBAR':
62
69
  case 'HIDE_LINK_TOOLBAR':
63
70
  return setLinkToolbar(state, action);
@@ -11,18 +11,14 @@ var _doc = require("../doc");
11
11
  // ============================================================================ //
12
12
  // Used for all interactions with the EditorCardProvider.
13
13
  // ============================================================================ //
14
- var resolveWithProvider = function resolveWithProvider(view, outstandingRequests, provider, request, options) {
14
+ var resolveWithProvider = function resolveWithProvider(view, provider, request, options) {
15
15
  // When user manually changes appearance from blue link to smart link, we should respect that,
16
16
  var shouldForceAppearance =
17
17
  // This flag is set to true only in one place atm:
18
18
  // packages/editor/editor-core/src/plugins/card/pm-plugins/doc.ts @ convertHyperlinkToSmartCard
19
19
  // Which is used when user switching from URL to smart link appearance.
20
20
  !!request.shouldReplaceLink;
21
- var handleResolve = provider.resolve(request.url, request.appearance, shouldForceAppearance).then(function (resolvedCard) {
22
- delete outstandingRequests[request.url];
23
- return resolvedCard;
24
- }).then(handleResolved(view, request, options), handleRejected(view, request));
25
- outstandingRequests[request.url] = handleResolve;
21
+ var handleResolve = provider.resolve(request.url, request.appearance, shouldForceAppearance).then(handleResolved(view, request, options), handleRejected(view, request));
26
22
  return handleResolve;
27
23
  };
28
24
  exports.resolveWithProvider = resolveWithProvider;
@@ -44,7 +40,7 @@ var handleResolved = function handleResolved(view, request, options) {
44
40
  };
45
41
  var handleRejected = function handleRejected(view, request) {
46
42
  return function () {
47
- (0, _doc.handleFallbackWithAnalytics)(request.url, request.source)(view.state, view.dispatch);
43
+ (0, _doc.handleFallbackWithAnalytics)(request)(view.state, view.dispatch);
48
44
  };
49
45
  };
50
46
 
@@ -19,6 +19,7 @@ var _analytics = require("../analytics");
19
19
  var _messages = _interopRequireWildcard(require("../../messages"));
20
20
  var _decoration = require("../base/pm-plugins/decoration");
21
21
  var _doc = require("./pm-plugins/doc");
22
+ var _card = require("@atlaskit/editor-common/card");
22
23
  var _main = require("./pm-plugins/main");
23
24
  var _styles = require("@atlaskit/editor-common/styles");
24
25
  var _EditLinkToolbar = require("./ui/EditLinkToolbar");
@@ -33,7 +34,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
33
34
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
34
35
  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; }
35
36
  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; }
36
- var removeCard = function removeCard(state, dispatch) {
37
+ var removeCard = (0, _card.commandWithMetadata)(function (state, dispatch) {
37
38
  if (!(state.selection instanceof _prosemirrorState.NodeSelection)) {
38
39
  return false;
39
40
  }
@@ -52,7 +53,9 @@ var removeCard = function removeCard(state, dispatch) {
52
53
  dispatch((0, _analytics.addAnalytics)(state, (0, _prosemirrorUtils.removeSelectedNode)(state.tr), payload));
53
54
  }
54
55
  return true;
55
- };
56
+ }, {
57
+ action: _analytics.ACTION.DELETED
58
+ });
56
59
  exports.removeCard = removeCard;
57
60
  var visitCardLink = function visitCardLink(state, dispatch) {
58
61
  if (!(state.selection instanceof _prosemirrorState.NodeSelection)) {
@@ -143,14 +146,21 @@ var unlinkCard = function unlinkCard(node, state) {
143
146
  var displayInfo = (0, _utils.displayInfoForCard)(node, (0, _utils.findCardInfo)(state));
144
147
  var text = displayInfo.title || displayInfo.url;
145
148
  if (text) {
146
- return (0, _doc.changeSelectedCardToText)(text);
149
+ return (0, _card.commandWithMetadata)((0, _doc.changeSelectedCardToText)(text), {
150
+ action: _analytics.ACTION.UNLINK
151
+ });
147
152
  }
148
153
  return function () {
149
154
  return false;
150
155
  };
151
156
  };
152
- var buildAlignmentOptions = function buildAlignmentOptions(state, intl) {
153
- return (0, _MediaAndEmbedsToolbar.default)(state, intl, state.schema.nodes.embedCard, true, true);
157
+ var buildAlignmentOptions = function buildAlignmentOptions(state, intl, cardOptions) {
158
+ return (0, _MediaAndEmbedsToolbar.default)(state, intl, state.schema.nodes.embedCard, true, true, cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowWrapping, cardOptions === null || cardOptions === void 0 ? void 0 : cardOptions.allowAlignment);
159
+ };
160
+ var withToolbarMetadata = function withToolbarMetadata(command) {
161
+ return (0, _card.commandWithMetadata)(command, {
162
+ inputMethod: _analytics.INPUT_METHOD.FLOATING_TB
163
+ });
154
164
  };
155
165
  var generateToolbarItems = function generateToolbarItems(state, featureFlags, intl, providerFactory, cardOptions, platform, linkPicker) {
156
166
  return function (node) {
@@ -221,10 +231,10 @@ var generateToolbarItems = function generateToolbarItems(state, featureFlags, in
221
231
  onFocus: (0, _decoration.hoverDecoration)(node.type, true),
222
232
  onBlur: (0, _decoration.hoverDecoration)(node.type, false),
223
233
  title: intl.formatMessage(_messages.default.remove),
224
- onClick: removeCard
234
+ onClick: withToolbarMetadata(removeCard)
225
235
  }]);
226
236
  if (currentAppearance === 'embed') {
227
- var alignmentOptions = buildAlignmentOptions(state, intl);
237
+ var alignmentOptions = buildAlignmentOptions(state, intl, cardOptions);
228
238
  if (alignmentOptions.length) {
229
239
  alignmentOptions.push({
230
240
  type: 'separator'
@@ -269,7 +279,7 @@ var getUnlinkButtonGroup = function getUnlinkButtonGroup(state, intl, node, inli
269
279
  type: 'button',
270
280
  title: intl.formatMessage(_messages.linkToolbarMessages.unlink),
271
281
  icon: _unlink.default,
272
- onClick: unlinkCard(node, state)
282
+ onClick: withToolbarMetadata(unlinkCard(node, state))
273
283
  }, {
274
284
  type: 'separator'
275
285
  }] : [];
@@ -13,6 +13,8 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
13
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
  var _react = _interopRequireDefault(require("react"));
16
+ var _ui = require("@atlaskit/editor-common/ui");
17
+ var _card = require("@atlaskit/editor-common/card");
16
18
  var _HyperlinkAddToolbar = _interopRequireDefault(require("../../hyperlink/ui/HyperlinkAddToolbar"));
17
19
  var _actions = require("../pm-plugins/actions");
18
20
  var _analytics = require("../../analytics");
@@ -22,7 +24,6 @@ var _utils = require("../utils");
22
24
  var _prosemirrorState = require("prosemirror-state");
23
25
  var _linkingUtils = require("../../../utils/linking-utils");
24
26
  var _forceFocus = require("../../floating-toolbar/pm-plugins/force-focus");
25
- var _ui = require("@atlaskit/editor-common/ui");
26
27
  var _messages = require("../../../messages");
27
28
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
28
29
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -88,10 +89,10 @@ var EditLinkToolbar = /*#__PURE__*/function (_React$Component) {
88
89
  ,
89
90
  invokeMethod: _analytics.INPUT_METHOD.FLOATING_TB,
90
91
  featureFlags: featureFlags,
91
- onSubmit: function onSubmit(href, title, displayText) {
92
+ onSubmit: function onSubmit(href, title, displayText, _, analytic) {
92
93
  _this2.hideLinkToolbar();
93
94
  if (_onSubmit) {
94
- _onSubmit(href, displayText || title);
95
+ _onSubmit(href, displayText || title, analytic);
95
96
  }
96
97
  }
97
98
  });
@@ -135,19 +136,22 @@ var buildEditLinkToolbar = function buildEditLinkToolbar(_ref) {
135
136
  text: displayInfo.title || '',
136
137
  node: node,
137
138
  featureFlags: featureFlags,
138
- onSubmit: function onSubmit(newHref, newText) {
139
+ onSubmit: function onSubmit(newHref, newText, analytic) {
139
140
  var urlChanged = newHref !== displayInfo.url;
140
141
  var titleChanged = newText !== displayInfo.title;
141
142
 
142
143
  // If the title is changed in a smartlink, convert to standard blue hyperlink
143
144
  // (even if the url was also changed) - we don't want to lose the custom title.
144
145
  if (titleChanged) {
145
- return (0, _doc.changeSelectedCardToLink)(newText, newHref)(view.state, view.dispatch);
146
- } else if (urlChanged) {
146
+ return (0, _card.commandWithMetadata)((0, _doc.changeSelectedCardToLink)(newText, newHref), {
147
+ action: _analytics.ACTION.UPDATED,
148
+ sourceEvent: analytic
149
+ })(view.state, view.dispatch);
150
+ }
151
+ if (urlChanged) {
147
152
  // If *only* the url is changed in a smart link, reresolve
148
- return (0, _doc.updateCard)(newHref)(view.state, view.dispatch);
153
+ return (0, _doc.updateCard)(newHref, analytic)(view.state, view.dispatch);
149
154
  }
150
- return;
151
155
  }
152
156
  });
153
157
  }