@atlaskit/editor-common 74.19.2 → 74.21.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 (314) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/link/LinkPicker/EditorLinkPicker/index.js +86 -0
  3. package/dist/cjs/link/LinkPicker/EditorLinkPicker/useEscapeClickaway.js +32 -0
  4. package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +939 -0
  5. package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/index.js +79 -0
  6. package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/messages.js +40 -0
  7. package/dist/cjs/link/LinkPicker/HyperlinkAddToolbar/utils.js +84 -0
  8. package/dist/cjs/link/LinkSearch/LinkSearchList.js +83 -0
  9. package/dist/cjs/link/LinkSearch/LinkSearchListItem.js +146 -0
  10. package/dist/cjs/link/LinkSearch/ToolbarComponents.js +17 -0
  11. package/dist/cjs/link/LinkSearch/index.js +328 -0
  12. package/dist/cjs/link/LinkSearch/listItemAlts.js +70 -0
  13. package/dist/cjs/link/LinkSearch/transformTimeStamp.js +42 -0
  14. package/dist/cjs/link/LinkSearch/types.js +5 -0
  15. package/dist/cjs/link/LinkSearch/withActivityProvider.js +59 -0
  16. package/dist/cjs/link/index.js +122 -0
  17. package/dist/cjs/link/types.js +22 -0
  18. package/dist/cjs/link/utils.js +19 -0
  19. package/dist/cjs/monitoring/error.js +1 -1
  20. package/dist/cjs/quick-insert/assets/action.js +43 -0
  21. package/dist/cjs/quick-insert/assets/code.js +115 -0
  22. package/dist/cjs/quick-insert/assets/custom-panel.js +55 -0
  23. package/dist/cjs/quick-insert/assets/datasource-jira-issue.js +108 -0
  24. package/dist/cjs/quick-insert/assets/date.js +93 -0
  25. package/dist/cjs/quick-insert/assets/decision.js +34 -0
  26. package/dist/cjs/quick-insert/assets/divider.js +74 -0
  27. package/dist/cjs/quick-insert/assets/emoji.js +37 -0
  28. package/dist/cjs/quick-insert/assets/expand.js +47 -0
  29. package/dist/cjs/quick-insert/assets/fallback.js +55 -0
  30. package/dist/cjs/quick-insert/assets/feedback.js +70 -0
  31. package/dist/cjs/quick-insert/assets/heading1.js +50 -0
  32. package/dist/cjs/quick-insert/assets/heading2.js +50 -0
  33. package/dist/cjs/quick-insert/assets/heading3.js +50 -0
  34. package/dist/cjs/quick-insert/assets/heading4.js +50 -0
  35. package/dist/cjs/quick-insert/assets/heading5.js +50 -0
  36. package/dist/cjs/quick-insert/assets/heading6.js +50 -0
  37. package/dist/cjs/quick-insert/assets/images.js +92 -0
  38. package/dist/cjs/quick-insert/assets/index.js +385 -0
  39. package/dist/cjs/quick-insert/assets/layout.js +71 -0
  40. package/dist/cjs/quick-insert/assets/link.js +35 -0
  41. package/dist/cjs/quick-insert/assets/list-number.js +51 -0
  42. package/dist/cjs/quick-insert/assets/list.js +65 -0
  43. package/dist/cjs/quick-insert/assets/mention.js +56 -0
  44. package/dist/cjs/quick-insert/assets/panel-error.js +35 -0
  45. package/dist/cjs/quick-insert/assets/panel-note.js +35 -0
  46. package/dist/cjs/quick-insert/assets/panel-success.js +35 -0
  47. package/dist/cjs/quick-insert/assets/panel-warning.js +35 -0
  48. package/dist/cjs/quick-insert/assets/panel.js +50 -0
  49. package/dist/cjs/quick-insert/assets/quote.js +35 -0
  50. package/dist/cjs/quick-insert/assets/status.js +109 -0
  51. package/dist/cjs/quick-insert/index.js +156 -0
  52. package/dist/cjs/types/block-type.js +5 -0
  53. package/dist/cjs/types/datasource.js +5 -0
  54. package/dist/cjs/ui/Announcer/announcer.js +62 -0
  55. package/dist/cjs/ui/DropList/index.js +1 -1
  56. package/dist/cjs/ui/PanelTextInput/index.js +174 -0
  57. package/dist/cjs/ui/PanelTextInput/styles.js +19 -0
  58. package/dist/cjs/ui/index.js +21 -0
  59. package/dist/cjs/utils/commands.js +20 -0
  60. package/dist/cjs/utils/datasource.js +4 -4
  61. package/dist/cjs/utils/hyperlink.js +25 -2
  62. package/dist/cjs/utils/index.js +24 -1
  63. package/dist/cjs/version.json +1 -1
  64. package/dist/es2019/link/LinkPicker/EditorLinkPicker/index.js +74 -0
  65. package/dist/es2019/link/LinkPicker/EditorLinkPicker/useEscapeClickaway.js +25 -0
  66. package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +789 -0
  67. package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/index.js +74 -0
  68. package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/messages.js +33 -0
  69. package/dist/es2019/link/LinkPicker/HyperlinkAddToolbar/utils.js +83 -0
  70. package/dist/es2019/link/LinkSearch/LinkSearchList.js +63 -0
  71. package/dist/es2019/link/LinkSearch/LinkSearchListItem.js +141 -0
  72. package/dist/es2019/link/LinkSearch/ToolbarComponents.js +20 -0
  73. package/dist/es2019/link/LinkSearch/index.js +213 -0
  74. package/dist/es2019/link/LinkSearch/listItemAlts.js +63 -0
  75. package/dist/es2019/link/LinkSearch/transformTimeStamp.js +34 -0
  76. package/dist/es2019/link/LinkSearch/types.js +1 -0
  77. package/dist/es2019/link/LinkSearch/withActivityProvider.js +35 -0
  78. package/dist/es2019/link/index.js +11 -0
  79. package/dist/es2019/link/types.js +14 -0
  80. package/dist/es2019/link/utils.js +12 -0
  81. package/dist/es2019/monitoring/error.js +1 -1
  82. package/dist/es2019/quick-insert/assets/action.js +35 -0
  83. package/dist/es2019/quick-insert/assets/code.js +107 -0
  84. package/dist/es2019/quick-insert/assets/custom-panel.js +47 -0
  85. package/dist/es2019/quick-insert/assets/datasource-jira-issue.js +100 -0
  86. package/dist/es2019/quick-insert/assets/date.js +85 -0
  87. package/dist/es2019/quick-insert/assets/decision.js +26 -0
  88. package/dist/es2019/quick-insert/assets/divider.js +66 -0
  89. package/dist/es2019/quick-insert/assets/emoji.js +29 -0
  90. package/dist/es2019/quick-insert/assets/expand.js +39 -0
  91. package/dist/es2019/quick-insert/assets/fallback.js +47 -0
  92. package/dist/es2019/quick-insert/assets/feedback.js +62 -0
  93. package/dist/es2019/quick-insert/assets/heading1.js +42 -0
  94. package/dist/es2019/quick-insert/assets/heading2.js +42 -0
  95. package/dist/es2019/quick-insert/assets/heading3.js +42 -0
  96. package/dist/es2019/quick-insert/assets/heading4.js +42 -0
  97. package/dist/es2019/quick-insert/assets/heading5.js +42 -0
  98. package/dist/es2019/quick-insert/assets/heading6.js +42 -0
  99. package/dist/es2019/quick-insert/assets/images.js +84 -0
  100. package/dist/es2019/quick-insert/assets/index.js +119 -0
  101. package/dist/es2019/quick-insert/assets/layout.js +63 -0
  102. package/dist/es2019/quick-insert/assets/link.js +27 -0
  103. package/dist/es2019/quick-insert/assets/list-number.js +43 -0
  104. package/dist/es2019/quick-insert/assets/list.js +57 -0
  105. package/dist/es2019/quick-insert/assets/mention.js +48 -0
  106. package/dist/es2019/quick-insert/assets/panel-error.js +27 -0
  107. package/dist/es2019/quick-insert/assets/panel-note.js +27 -0
  108. package/dist/es2019/quick-insert/assets/panel-success.js +27 -0
  109. package/dist/es2019/quick-insert/assets/panel-warning.js +27 -0
  110. package/dist/es2019/quick-insert/assets/panel.js +42 -0
  111. package/dist/es2019/quick-insert/assets/quote.js +27 -0
  112. package/dist/es2019/quick-insert/assets/status.js +101 -0
  113. package/dist/es2019/quick-insert/index.js +1 -0
  114. package/dist/es2019/types/block-type.js +1 -0
  115. package/dist/es2019/types/datasource.js +1 -0
  116. package/dist/es2019/ui/Announcer/announcer.js +41 -0
  117. package/dist/es2019/ui/DropList/index.js +1 -1
  118. package/dist/es2019/ui/PanelTextInput/index.js +149 -0
  119. package/dist/es2019/ui/PanelTextInput/styles.js +36 -0
  120. package/dist/es2019/ui/index.js +4 -1
  121. package/dist/es2019/utils/commands.js +11 -0
  122. package/dist/es2019/utils/datasource.js +4 -4
  123. package/dist/es2019/utils/hyperlink.js +19 -1
  124. package/dist/es2019/utils/index.js +8 -2
  125. package/dist/es2019/version.json +1 -1
  126. package/dist/esm/link/LinkPicker/EditorLinkPicker/index.js +76 -0
  127. package/dist/esm/link/LinkPicker/EditorLinkPicker/useEscapeClickaway.js +25 -0
  128. package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.js +924 -0
  129. package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/index.js +72 -0
  130. package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/messages.js +33 -0
  131. package/dist/esm/link/LinkPicker/HyperlinkAddToolbar/utils.js +73 -0
  132. package/dist/esm/link/LinkSearch/LinkSearchList.js +75 -0
  133. package/dist/esm/link/LinkSearch/LinkSearchListItem.js +131 -0
  134. package/dist/esm/link/LinkSearch/ToolbarComponents.js +7 -0
  135. package/dist/esm/link/LinkSearch/index.js +320 -0
  136. package/dist/esm/link/LinkSearch/listItemAlts.js +63 -0
  137. package/dist/esm/link/LinkSearch/transformTimeStamp.js +34 -0
  138. package/dist/esm/link/LinkSearch/types.js +1 -0
  139. package/dist/esm/link/LinkSearch/withActivityProvider.js +52 -0
  140. package/dist/esm/link/index.js +11 -0
  141. package/dist/esm/link/types.js +14 -0
  142. package/dist/esm/link/utils.js +12 -0
  143. package/dist/esm/monitoring/error.js +1 -1
  144. package/dist/esm/quick-insert/assets/action.js +35 -0
  145. package/dist/esm/quick-insert/assets/code.js +107 -0
  146. package/dist/esm/quick-insert/assets/custom-panel.js +47 -0
  147. package/dist/esm/quick-insert/assets/datasource-jira-issue.js +100 -0
  148. package/dist/esm/quick-insert/assets/date.js +85 -0
  149. package/dist/esm/quick-insert/assets/decision.js +26 -0
  150. package/dist/esm/quick-insert/assets/divider.js +66 -0
  151. package/dist/esm/quick-insert/assets/emoji.js +29 -0
  152. package/dist/esm/quick-insert/assets/expand.js +39 -0
  153. package/dist/esm/quick-insert/assets/fallback.js +47 -0
  154. package/dist/esm/quick-insert/assets/feedback.js +62 -0
  155. package/dist/esm/quick-insert/assets/heading1.js +42 -0
  156. package/dist/esm/quick-insert/assets/heading2.js +42 -0
  157. package/dist/esm/quick-insert/assets/heading3.js +42 -0
  158. package/dist/esm/quick-insert/assets/heading4.js +42 -0
  159. package/dist/esm/quick-insert/assets/heading5.js +42 -0
  160. package/dist/esm/quick-insert/assets/heading6.js +42 -0
  161. package/dist/esm/quick-insert/assets/images.js +84 -0
  162. package/dist/esm/quick-insert/assets/index.js +258 -0
  163. package/dist/esm/quick-insert/assets/layout.js +63 -0
  164. package/dist/esm/quick-insert/assets/link.js +27 -0
  165. package/dist/esm/quick-insert/assets/list-number.js +43 -0
  166. package/dist/esm/quick-insert/assets/list.js +57 -0
  167. package/dist/esm/quick-insert/assets/mention.js +48 -0
  168. package/dist/esm/quick-insert/assets/panel-error.js +27 -0
  169. package/dist/esm/quick-insert/assets/panel-note.js +27 -0
  170. package/dist/esm/quick-insert/assets/panel-success.js +27 -0
  171. package/dist/esm/quick-insert/assets/panel-warning.js +27 -0
  172. package/dist/esm/quick-insert/assets/panel.js +42 -0
  173. package/dist/esm/quick-insert/assets/quote.js +27 -0
  174. package/dist/esm/quick-insert/assets/status.js +101 -0
  175. package/dist/esm/quick-insert/index.js +1 -0
  176. package/dist/esm/types/block-type.js +1 -0
  177. package/dist/esm/types/datasource.js +1 -0
  178. package/dist/esm/ui/Announcer/announcer.js +52 -0
  179. package/dist/esm/ui/DropList/index.js +1 -1
  180. package/dist/esm/ui/PanelTextInput/index.js +168 -0
  181. package/dist/esm/ui/PanelTextInput/styles.js +10 -0
  182. package/dist/esm/ui/index.js +4 -1
  183. package/dist/esm/utils/commands.js +13 -0
  184. package/dist/esm/utils/datasource.js +4 -4
  185. package/dist/esm/utils/hyperlink.js +23 -1
  186. package/dist/esm/utils/index.js +12 -2
  187. package/dist/esm/version.json +1 -1
  188. package/dist/types/link/LinkPicker/EditorLinkPicker/index.d.ts +23 -0
  189. package/dist/types/link/LinkPicker/EditorLinkPicker/useEscapeClickaway.d.ts +2 -0
  190. package/dist/types/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.d.ts +115 -0
  191. package/dist/types/link/LinkPicker/HyperlinkAddToolbar/index.d.ts +21 -0
  192. package/dist/types/link/LinkPicker/HyperlinkAddToolbar/messages.d.ts +32 -0
  193. package/dist/types/link/LinkPicker/HyperlinkAddToolbar/utils.d.ts +8 -0
  194. package/dist/types/link/LinkSearch/LinkSearchList.d.ts +20 -0
  195. package/dist/types/link/LinkSearch/LinkSearchListItem.d.ts +22 -0
  196. package/dist/types/link/LinkSearch/ToolbarComponents.d.ts +3 -0
  197. package/dist/types/link/LinkSearch/index.d.ts +59 -0
  198. package/dist/types/link/LinkSearch/listItemAlts.d.ts +2 -0
  199. package/dist/types/link/LinkSearch/transformTimeStamp.d.ts +10 -0
  200. package/dist/types/link/LinkSearch/types.d.ts +49 -0
  201. package/dist/types/link/LinkSearch/withActivityProvider.d.ts +66 -0
  202. package/dist/types/link/index.d.ts +16 -0
  203. package/dist/types/link/types.d.ts +40 -0
  204. package/dist/types/link/utils.d.ts +3 -0
  205. package/dist/types/provider-factory/quick-insert-provider.d.ts +1 -1
  206. package/dist/types/quick-insert/assets/action.d.ts +2 -0
  207. package/dist/types/quick-insert/assets/code.d.ts +2 -0
  208. package/dist/types/quick-insert/assets/custom-panel.d.ts +2 -0
  209. package/dist/types/quick-insert/assets/datasource-jira-issue.d.ts +2 -0
  210. package/dist/types/quick-insert/assets/date.d.ts +2 -0
  211. package/dist/types/quick-insert/assets/decision.d.ts +2 -0
  212. package/dist/types/quick-insert/assets/divider.d.ts +2 -0
  213. package/dist/types/quick-insert/assets/emoji.d.ts +2 -0
  214. package/dist/types/quick-insert/assets/expand.d.ts +2 -0
  215. package/dist/types/quick-insert/assets/fallback.d.ts +2 -0
  216. package/dist/types/quick-insert/assets/feedback.d.ts +2 -0
  217. package/dist/types/quick-insert/assets/heading1.d.ts +2 -0
  218. package/dist/types/quick-insert/assets/heading2.d.ts +2 -0
  219. package/dist/types/quick-insert/assets/heading3.d.ts +2 -0
  220. package/dist/types/quick-insert/assets/heading4.d.ts +2 -0
  221. package/dist/types/quick-insert/assets/heading5.d.ts +2 -0
  222. package/dist/types/quick-insert/assets/heading6.d.ts +2 -0
  223. package/dist/types/quick-insert/assets/images.d.ts +2 -0
  224. package/dist/types/quick-insert/assets/index.d.ts +31 -0
  225. package/dist/types/quick-insert/assets/layout.d.ts +2 -0
  226. package/dist/types/quick-insert/assets/link.d.ts +2 -0
  227. package/dist/types/quick-insert/assets/list-number.d.ts +2 -0
  228. package/dist/types/quick-insert/assets/list.d.ts +2 -0
  229. package/dist/types/quick-insert/assets/mention.d.ts +2 -0
  230. package/dist/types/quick-insert/assets/panel-error.d.ts +2 -0
  231. package/dist/types/quick-insert/assets/panel-note.d.ts +2 -0
  232. package/dist/types/quick-insert/assets/panel-success.d.ts +2 -0
  233. package/dist/types/quick-insert/assets/panel-warning.d.ts +2 -0
  234. package/dist/types/quick-insert/assets/panel.d.ts +2 -0
  235. package/dist/types/quick-insert/assets/quote.d.ts +2 -0
  236. package/dist/types/quick-insert/assets/status.d.ts +2 -0
  237. package/dist/types/quick-insert/index.d.ts +1 -0
  238. package/dist/types/types/block-type.d.ts +3 -0
  239. package/dist/types/types/command.d.ts +1 -0
  240. package/dist/types/types/datasource.d.ts +1 -0
  241. package/dist/types/types/index.d.ts +3 -1
  242. package/dist/types/ui/Announcer/announcer.d.ts +22 -0
  243. package/dist/types/ui/PanelTextInput/index.d.ts +45 -0
  244. package/dist/types/ui/PanelTextInput/styles.d.ts +2 -0
  245. package/dist/types/ui/index.d.ts +3 -0
  246. package/dist/types/utils/commands.d.ts +2 -0
  247. package/dist/types/utils/datasource.d.ts +1 -2
  248. package/dist/types/utils/hyperlink.d.ts +2 -0
  249. package/dist/types/utils/index.d.ts +3 -1
  250. package/dist/types-ts4.5/link/LinkPicker/EditorLinkPicker/index.d.ts +23 -0
  251. package/dist/types-ts4.5/link/LinkPicker/EditorLinkPicker/useEscapeClickaway.d.ts +2 -0
  252. package/dist/types-ts4.5/link/LinkPicker/HyperlinkAddToolbar/HyperlinkAddToolbar.d.ts +115 -0
  253. package/dist/types-ts4.5/link/LinkPicker/HyperlinkAddToolbar/index.d.ts +21 -0
  254. package/dist/types-ts4.5/link/LinkPicker/HyperlinkAddToolbar/messages.d.ts +32 -0
  255. package/dist/types-ts4.5/link/LinkPicker/HyperlinkAddToolbar/utils.d.ts +8 -0
  256. package/dist/types-ts4.5/link/LinkSearch/LinkSearchList.d.ts +20 -0
  257. package/dist/types-ts4.5/link/LinkSearch/LinkSearchListItem.d.ts +22 -0
  258. package/dist/types-ts4.5/link/LinkSearch/ToolbarComponents.d.ts +3 -0
  259. package/dist/types-ts4.5/link/LinkSearch/index.d.ts +59 -0
  260. package/dist/types-ts4.5/link/LinkSearch/listItemAlts.d.ts +2 -0
  261. package/dist/types-ts4.5/link/LinkSearch/transformTimeStamp.d.ts +10 -0
  262. package/dist/types-ts4.5/link/LinkSearch/types.d.ts +49 -0
  263. package/dist/types-ts4.5/link/LinkSearch/withActivityProvider.d.ts +66 -0
  264. package/dist/types-ts4.5/link/index.d.ts +16 -0
  265. package/dist/types-ts4.5/link/types.d.ts +40 -0
  266. package/dist/types-ts4.5/link/utils.d.ts +3 -0
  267. package/dist/types-ts4.5/provider-factory/quick-insert-provider.d.ts +1 -1
  268. package/dist/types-ts4.5/quick-insert/assets/action.d.ts +2 -0
  269. package/dist/types-ts4.5/quick-insert/assets/code.d.ts +2 -0
  270. package/dist/types-ts4.5/quick-insert/assets/custom-panel.d.ts +2 -0
  271. package/dist/types-ts4.5/quick-insert/assets/datasource-jira-issue.d.ts +2 -0
  272. package/dist/types-ts4.5/quick-insert/assets/date.d.ts +2 -0
  273. package/dist/types-ts4.5/quick-insert/assets/decision.d.ts +2 -0
  274. package/dist/types-ts4.5/quick-insert/assets/divider.d.ts +2 -0
  275. package/dist/types-ts4.5/quick-insert/assets/emoji.d.ts +2 -0
  276. package/dist/types-ts4.5/quick-insert/assets/expand.d.ts +2 -0
  277. package/dist/types-ts4.5/quick-insert/assets/fallback.d.ts +2 -0
  278. package/dist/types-ts4.5/quick-insert/assets/feedback.d.ts +2 -0
  279. package/dist/types-ts4.5/quick-insert/assets/heading1.d.ts +2 -0
  280. package/dist/types-ts4.5/quick-insert/assets/heading2.d.ts +2 -0
  281. package/dist/types-ts4.5/quick-insert/assets/heading3.d.ts +2 -0
  282. package/dist/types-ts4.5/quick-insert/assets/heading4.d.ts +2 -0
  283. package/dist/types-ts4.5/quick-insert/assets/heading5.d.ts +2 -0
  284. package/dist/types-ts4.5/quick-insert/assets/heading6.d.ts +2 -0
  285. package/dist/types-ts4.5/quick-insert/assets/images.d.ts +2 -0
  286. package/dist/types-ts4.5/quick-insert/assets/index.d.ts +31 -0
  287. package/dist/types-ts4.5/quick-insert/assets/layout.d.ts +2 -0
  288. package/dist/types-ts4.5/quick-insert/assets/link.d.ts +2 -0
  289. package/dist/types-ts4.5/quick-insert/assets/list-number.d.ts +2 -0
  290. package/dist/types-ts4.5/quick-insert/assets/list.d.ts +2 -0
  291. package/dist/types-ts4.5/quick-insert/assets/mention.d.ts +2 -0
  292. package/dist/types-ts4.5/quick-insert/assets/panel-error.d.ts +2 -0
  293. package/dist/types-ts4.5/quick-insert/assets/panel-note.d.ts +2 -0
  294. package/dist/types-ts4.5/quick-insert/assets/panel-success.d.ts +2 -0
  295. package/dist/types-ts4.5/quick-insert/assets/panel-warning.d.ts +2 -0
  296. package/dist/types-ts4.5/quick-insert/assets/panel.d.ts +2 -0
  297. package/dist/types-ts4.5/quick-insert/assets/quote.d.ts +2 -0
  298. package/dist/types-ts4.5/quick-insert/assets/status.d.ts +2 -0
  299. package/dist/types-ts4.5/quick-insert/index.d.ts +1 -0
  300. package/dist/types-ts4.5/types/block-type.d.ts +3 -0
  301. package/dist/types-ts4.5/types/command.d.ts +1 -0
  302. package/dist/types-ts4.5/types/datasource.d.ts +1 -0
  303. package/dist/types-ts4.5/types/index.d.ts +3 -1
  304. package/dist/types-ts4.5/ui/Announcer/announcer.d.ts +22 -0
  305. package/dist/types-ts4.5/ui/PanelTextInput/index.d.ts +45 -0
  306. package/dist/types-ts4.5/ui/PanelTextInput/styles.d.ts +2 -0
  307. package/dist/types-ts4.5/ui/index.d.ts +3 -0
  308. package/dist/types-ts4.5/utils/commands.d.ts +2 -0
  309. package/dist/types-ts4.5/utils/datasource.d.ts +1 -2
  310. package/dist/types-ts4.5/utils/hyperlink.d.ts +2 -0
  311. package/dist/types-ts4.5/utils/index.d.ts +3 -1
  312. package/link/package.json +15 -0
  313. package/package.json +12 -4
  314. package/quick-insert/package.json +15 -0
@@ -0,0 +1,789 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ /** @jsx jsx */
3
+ import React, { PureComponent } from 'react';
4
+ import { css, jsx } from '@emotion/react';
5
+ import debounce from 'lodash/debounce';
6
+ import { defineMessages, injectIntl } from 'react-intl-next';
7
+ import { isSafeUrl } from '@atlaskit/adf-schema';
8
+ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
9
+ import Page16Icon from '@atlaskit/icon-object/glyph/page/16';
10
+ import CrossCircleIcon from '@atlaskit/icon/glyph/cross-circle';
11
+ import EditorAlignLeftIcon from '@atlaskit/icon/glyph/editor/align-left';
12
+ import LinkIcon from '@atlaskit/icon/glyph/link';
13
+ import { N30, N80, N90 } from '@atlaskit/theme/colors';
14
+ import Tooltip from '@atlaskit/tooltip';
15
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, fireAnalyticsEvent, INPUT_METHOD } from '../../../analytics';
16
+ import { linkToolbarMessages as linkToolbarCommonMessages } from '../../../messages';
17
+ import { Announcer, PanelTextInput } from '../../../ui';
18
+ import { browser, normalizeUrl } from '../../../utils';
19
+ import LinkSearchList from '../../LinkSearch/LinkSearchList';
20
+ import { container, containerWithProvider, inputWrapper } from '../../LinkSearch/ToolbarComponents';
21
+ import { transformTimeStamp } from '../../LinkSearch/transformTimeStamp';
22
+ import { filterUniqueItems, mapContentTypeToIcon, sha1, wordCount } from './utils';
23
+
24
+ /**
25
+ * Visible only to screenreaders. Use when there is a need
26
+ * to provide more context to a non-sighted user.
27
+ */
28
+ export const visuallyHiddenStyles = css`
29
+ clip: rect(1px, 1px, 1px, 1px);
30
+ clip-path: inset(50%);
31
+ height: 1px;
32
+ width: 1px;
33
+ margin: -1px;
34
+ overflow: hidden;
35
+ padding: 0;
36
+ position: absolute;
37
+ `;
38
+ export const RECENT_SEARCH_LIST_SIZE = 5;
39
+ const clearText = css`
40
+ cursor: pointer;
41
+ padding: 0;
42
+ margin-right: ${"var(--ds-space-100, 8px)"};
43
+ color: ${`var(--ds-icon-subtle, ${N90})`};
44
+ background: transparent;
45
+ border: none;
46
+ `;
47
+ const textInputWrapper = css`
48
+ ${inputWrapper};
49
+ border-top: 1px solid ${`var(--ds-border, ${N30})`};
50
+ border-bottom: 1px solid ${`var(--ds-border, ${N30})`};
51
+ `;
52
+ const iconWrapper = css`
53
+ color: ${`var(--ds-icon-subtle, ${N80})`};
54
+ padding: ${"var(--ds-space-050, 4px)"} ${"var(--ds-space-100, 8px)"};
55
+ width: 18px;
56
+ `;
57
+ export const messages = defineMessages({
58
+ displayText: {
59
+ id: 'fabric.editor.displayText',
60
+ defaultMessage: 'Text to display',
61
+ description: 'Text to display'
62
+ },
63
+ clearText: {
64
+ id: 'fabric.editor.clearLinkText',
65
+ defaultMessage: 'Clear text',
66
+ description: 'Clears text on the link toolbar'
67
+ },
68
+ clearLink: {
69
+ id: 'fabric.editor.clearLink',
70
+ defaultMessage: 'Clear link',
71
+ description: 'Clears link in the link toolbar'
72
+ },
73
+ searchLinkAriaDescription: {
74
+ id: 'fabric.editor.hyperlink.searchLinkAriaDescription',
75
+ defaultMessage: 'Suggestions will appear below as you type into the field',
76
+ description: 'Describes what the search field does for screen reader users.'
77
+ },
78
+ searchLinkResults: {
79
+ id: 'fabric.editor.hyperlink.searchLinkResults',
80
+ defaultMessage: '{count, plural, =0 {no results} one {# result} other {# results}} found',
81
+ description: 'Announce search results for screen-reader users.'
82
+ },
83
+ linkAriaLabel: {
84
+ id: 'fabric.editor.hyperlink.linkAriaLabel',
85
+ defaultMessage: 'Link label',
86
+ description: 'aria label for a link'
87
+ }
88
+ });
89
+ const defaultIcon = jsx(Page16Icon, {
90
+ label: 'page'
91
+ });
92
+ const mapActivityProviderResultToLinkSearchItemData = ({
93
+ name,
94
+ container,
95
+ iconUrl,
96
+ objectId,
97
+ url,
98
+ viewedTimestamp
99
+ }) => ({
100
+ objectId,
101
+ name,
102
+ container,
103
+ iconUrl,
104
+ url,
105
+ lastViewedDate: viewedTimestamp ? new Date(viewedTimestamp) : undefined,
106
+ prefetch: true
107
+ });
108
+ const mapSearchProviderResultToLinkSearchItemData = ({
109
+ objectId,
110
+ container,
111
+ title,
112
+ contentType,
113
+ url,
114
+ updatedTimestamp
115
+ }) => ({
116
+ objectId,
117
+ container,
118
+ name: title,
119
+ url,
120
+ lastUpdatedDate: updatedTimestamp ? new Date(updatedTimestamp) : undefined,
121
+ icon: contentType && mapContentTypeToIcon[contentType] || defaultIcon,
122
+ prefetch: false
123
+ });
124
+ export class HyperlinkLinkAddToolbar extends PureComponent {
125
+ constructor(props) {
126
+ super(props);
127
+ /* To prevent double submit */
128
+ _defineProperty(this, "submitted", false);
129
+ _defineProperty(this, "urlInputContainer", null);
130
+ _defineProperty(this, "displayTextInputContainer", null);
131
+ _defineProperty(this, "wrapperRef", /*#__PURE__*/React.createRef());
132
+ _defineProperty(this, "quickSearchQueryVersion", 0);
133
+ _defineProperty(this, "analyticSource", 'createLinkInlineDialog');
134
+ _defineProperty(this, "quickSearch", async (input, items, quickSearchLimit) => {
135
+ var _pluginState$searchSe;
136
+ const {
137
+ searchProvider,
138
+ displayUrl
139
+ } = this.state;
140
+ const {
141
+ pluginState
142
+ } = this.props;
143
+ if (!searchProvider) {
144
+ return;
145
+ }
146
+ const queryVersion = ++this.quickSearchQueryVersion;
147
+ this.fireAnalytics({
148
+ action: ACTION.ENTERED,
149
+ actionSubject: ACTION_SUBJECT.TEXT,
150
+ actionSubjectId: ACTION_SUBJECT_ID.LINK_SEARCH_INPUT,
151
+ attributes: {
152
+ queryLength: input.length,
153
+ queryVersion,
154
+ queryHash: sha1(input),
155
+ searchSessionId: (_pluginState$searchSe = pluginState.searchSessionId) !== null && _pluginState$searchSe !== void 0 ? _pluginState$searchSe : '',
156
+ wordCount: wordCount(input),
157
+ source: this.analyticSource
158
+ },
159
+ nonPrivacySafeAttributes: {
160
+ query: input
161
+ },
162
+ eventType: EVENT_TYPE.UI
163
+ });
164
+ const perfStart = performance.now();
165
+ try {
166
+ var _pluginState$searchSe2;
167
+ const searchProviderResultItems = await searchProvider.quickSearch(input, quickSearchLimit);
168
+ const searchItems = limit(filterUniqueItems([...items, ...searchProviderResultItems.map(mapSearchProviderResultToLinkSearchItemData)], (firstItem, secondItem) => firstItem.objectId === secondItem.objectId));
169
+ if (displayUrl === input && queryVersion === this.quickSearchQueryVersion) {
170
+ this.setState({
171
+ items: searchItems,
172
+ isLoading: false
173
+ });
174
+ }
175
+ const perfStop = performance.now();
176
+ const duration = perfStop - perfStart;
177
+ this.fireAnalytics({
178
+ action: ACTION.INVOKED,
179
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
180
+ actionSubjectId: ACTION_SUBJECT_ID.QUICK_SEARCH,
181
+ attributes: {
182
+ duration,
183
+ count: searchProviderResultItems.length
184
+ },
185
+ eventType: EVENT_TYPE.OPERATIONAL
186
+ });
187
+ this.fireAnalytics({
188
+ action: ACTION.SHOWN,
189
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
190
+ actionSubjectId: ACTION_SUBJECT_ID.POST_QUERY_SEARCH_RESULTS,
191
+ attributes: {
192
+ source: this.analyticSource,
193
+ postQueryRequestDurationMs: duration,
194
+ searchSessionId: (_pluginState$searchSe2 = pluginState.searchSessionId) !== null && _pluginState$searchSe2 !== void 0 ? _pluginState$searchSe2 : '',
195
+ resultCount: searchProviderResultItems.length,
196
+ results: searchProviderResultItems.map(item => ({
197
+ resultContentId: item.objectId,
198
+ resultType: item.contentType
199
+ }))
200
+ },
201
+ eventType: EVENT_TYPE.UI
202
+ });
203
+ } catch (err) {
204
+ const perfStop = performance.now();
205
+ const duration = perfStop - perfStart;
206
+ this.fireAnalytics({
207
+ action: ACTION.INVOKED,
208
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
209
+ actionSubjectId: ACTION_SUBJECT_ID.QUICK_SEARCH,
210
+ attributes: {
211
+ duration,
212
+ count: -1,
213
+ errorCode: err.status
214
+ },
215
+ nonPrivacySafeAttributes: {
216
+ error: err.message
217
+ },
218
+ eventType: EVENT_TYPE.OPERATIONAL
219
+ });
220
+ }
221
+ });
222
+ _defineProperty(this, "updateInput", async input => {
223
+ const {
224
+ activityProvider,
225
+ searchProvider
226
+ } = this.state;
227
+ this.setState({
228
+ displayUrl: input
229
+ });
230
+ if (activityProvider) {
231
+ if (input.length === 0) {
232
+ this.setState({
233
+ items: await this.getRecentItems(activityProvider),
234
+ selectedIndex: -1
235
+ });
236
+ } else if (isSafeUrl(input)) {
237
+ this.setState({
238
+ items: [],
239
+ selectedIndex: -1,
240
+ isLoading: false
241
+ });
242
+ } else {
243
+ const items = await this.getRecentItems(activityProvider, input);
244
+ const shouldQuerySearchProvider = items.length < RECENT_SEARCH_LIST_SIZE && !!searchProvider;
245
+ this.setState({
246
+ items,
247
+ isLoading: shouldQuerySearchProvider
248
+ });
249
+ if (shouldQuerySearchProvider) {
250
+ this.debouncedQuickSearch(input, items, RECENT_SEARCH_LIST_SIZE);
251
+ }
252
+ }
253
+ }
254
+ });
255
+ _defineProperty(this, "createClearHandler", field => {
256
+ return async () => {
257
+ const {
258
+ activityProvider
259
+ } = this.state;
260
+ switch (field) {
261
+ case 'displayUrl':
262
+ {
263
+ this.setState({
264
+ [field]: '',
265
+ items: !!activityProvider ? limit(await activityProvider.getRecentItems()) : []
266
+ });
267
+ if (this.urlInputContainer) {
268
+ this.urlInputContainer.focus();
269
+ }
270
+ break;
271
+ }
272
+ case 'displayText':
273
+ {
274
+ this.setState({
275
+ [field]: ''
276
+ });
277
+ if (this.displayTextInputContainer) {
278
+ this.displayTextInputContainer.focus();
279
+ }
280
+ }
281
+ }
282
+ };
283
+ });
284
+ _defineProperty(this, "handleClickOutside", event => {
285
+ if (event.target instanceof Element && this.wrapperRef.current && !this.wrapperRef.current.contains(event.target)) {
286
+ const {
287
+ view: {
288
+ state,
289
+ dispatch
290
+ },
291
+ onClickAwayCallback
292
+ } = this.props;
293
+ onClickAwayCallback === null || onClickAwayCallback === void 0 ? void 0 : onClickAwayCallback(state, dispatch);
294
+ }
295
+ });
296
+ _defineProperty(this, "getScreenReaderText", () => {
297
+ const {
298
+ intl
299
+ } = this.props;
300
+ const {
301
+ items,
302
+ selectedIndex
303
+ } = this.state;
304
+ if (items.length && selectedIndex > -1) {
305
+ const {
306
+ name,
307
+ container,
308
+ lastUpdatedDate,
309
+ lastViewedDate
310
+ } = items[selectedIndex];
311
+ const date = transformTimeStamp(intl, lastViewedDate, lastUpdatedDate);
312
+ return `${name}, ${container}, ${date === null || date === void 0 ? void 0 : date.pageAction} ${date === null || date === void 0 ? void 0 : date.dateString} ${(date === null || date === void 0 ? void 0 : date.timeSince) || ''}`;
313
+ }
314
+ });
315
+ _defineProperty(this, "isUrlPopulatedWithSelectedItem", () => {
316
+ /**
317
+ * When we use ArrowKey to navigate through result items,
318
+ * the URL field will be populated with the content of
319
+ * selected item.
320
+ * This function will check if the URL field is populated
321
+ * with selected item.
322
+ * It can be useful to detect whether we want to insert a
323
+ * smartlink or a hyperlink with customized title
324
+ */
325
+ const {
326
+ items,
327
+ selectedIndex,
328
+ displayUrl
329
+ } = this.state;
330
+ const selectedItem = items[selectedIndex];
331
+ if (selectedItem && selectedItem.url === displayUrl) {
332
+ return true;
333
+ }
334
+ return false;
335
+ });
336
+ _defineProperty(this, "handleSelected", (href, text) => {
337
+ this.handleInsert(href, text, INPUT_METHOD.TYPEAHEAD, 'click');
338
+ });
339
+ _defineProperty(this, "handleInsert", (href, title, inputType, interaction) => {
340
+ const {
341
+ pluginState,
342
+ onSubmit
343
+ } = this.props;
344
+ const {
345
+ items,
346
+ selectedIndex,
347
+ displayText
348
+ } = this.state;
349
+ if (onSubmit) {
350
+ this.submitted = true;
351
+ onSubmit(href, title, displayText, inputType);
352
+ }
353
+ if (interaction === 'click' || this.isUrlPopulatedWithSelectedItem()) {
354
+ var _pluginState$searchSe3, _selectedItem$prefetc;
355
+ /**
356
+ * When it's a mouse click even or the selectedItem.url matches displayUrl, we think
357
+ * it's selected from the result list and fire the
358
+ * analytic
359
+ */
360
+ const selectedItem = items[selectedIndex];
361
+ this.fireAnalytics({
362
+ action: ACTION.SELECTED,
363
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
364
+ attributes: {
365
+ source: this.analyticSource,
366
+ searchSessionId: (_pluginState$searchSe3 = pluginState.searchSessionId) !== null && _pluginState$searchSe3 !== void 0 ? _pluginState$searchSe3 : '',
367
+ trigger: interaction,
368
+ resultCount: items.length,
369
+ selectedResultId: selectedItem.objectId,
370
+ selectedRelativePosition: selectedIndex,
371
+ prefetch: (_selectedItem$prefetc = selectedItem.prefetch) !== null && _selectedItem$prefetc !== void 0 ? _selectedItem$prefetc : false
372
+ },
373
+ eventType: EVENT_TYPE.UI
374
+ });
375
+ }
376
+ });
377
+ _defineProperty(this, "handleMouseEnterResultItem", objectId => {
378
+ const {
379
+ items
380
+ } = this.state;
381
+ const index = findIndex(items, item => item.objectId === objectId);
382
+ this.setState({
383
+ selectedIndex: index
384
+ });
385
+ });
386
+ _defineProperty(this, "handleMouseLeaveResultItem", objectId => {
387
+ const {
388
+ items,
389
+ selectedIndex
390
+ } = this.state;
391
+ const index = findIndex(items, item => item.objectId === objectId);
392
+ // This is to avoid updating index that was set by other mouseenter event
393
+ if (selectedIndex === index) {
394
+ this.setState({
395
+ selectedIndex: -1
396
+ });
397
+ }
398
+ });
399
+ _defineProperty(this, "handleSubmit", () => {
400
+ const {
401
+ displayUrl,
402
+ selectedIndex,
403
+ items
404
+ } = this.state;
405
+ const selectedItem = items[selectedIndex];
406
+ if (this.isUrlPopulatedWithSelectedItem()) {
407
+ this.handleInsert(normalizeUrl(selectedItem.url), selectedItem.name, INPUT_METHOD.TYPEAHEAD, 'keyboard');
408
+ } else if (displayUrl && displayUrl.length > 0) {
409
+ const url = normalizeUrl(displayUrl);
410
+ if (url) {
411
+ this.handleInsert(url, displayUrl, INPUT_METHOD.MANUAL, 'notselected');
412
+ }
413
+ }
414
+ });
415
+ _defineProperty(this, "handleClearTextKeyDown", event => {
416
+ const KEY_CODE_TAB = 9;
417
+ const {
418
+ keyCode
419
+ } = event;
420
+ if (keyCode === KEY_CODE_TAB) {
421
+ if (!this.submitted) {
422
+ const {
423
+ displayUrl,
424
+ displayText
425
+ } = this.state;
426
+ const url = normalizeUrl(displayUrl);
427
+ this.handleInsert(url, displayText || displayUrl, INPUT_METHOD.MANUAL, 'notselected');
428
+ }
429
+ event.preventDefault();
430
+ return;
431
+ }
432
+ });
433
+ _defineProperty(this, "handleKeyDown", event => {
434
+ const {
435
+ items,
436
+ selectedIndex
437
+ } = this.state;
438
+ const {
439
+ pluginState,
440
+ view,
441
+ onEscapeCallback
442
+ } = this.props;
443
+ const {
444
+ keyCode
445
+ } = event;
446
+ const KEY_CODE_ESCAPE = 27;
447
+ const KEY_CODE_ARROW_DOWN = 40;
448
+ const KEY_CODE_ARROW_UP = 38;
449
+ if (keyCode === KEY_CODE_ESCAPE) {
450
+ // escape
451
+ event.preventDefault();
452
+ const {
453
+ state,
454
+ dispatch
455
+ } = view;
456
+ onEscapeCallback === null || onEscapeCallback === void 0 ? void 0 : onEscapeCallback(state, dispatch);
457
+ return;
458
+ }
459
+ if (!items || !items.length) {
460
+ return;
461
+ }
462
+ let updatedIndex = selectedIndex;
463
+ if (keyCode === KEY_CODE_ARROW_DOWN) {
464
+ // down
465
+ event.preventDefault();
466
+ updatedIndex = (selectedIndex + 1) % items.length;
467
+ } else if (keyCode === KEY_CODE_ARROW_UP) {
468
+ // up
469
+ event.preventDefault();
470
+ updatedIndex = selectedIndex > 0 ? selectedIndex - 1 : items.length - 1;
471
+ }
472
+ if ([KEY_CODE_ARROW_DOWN, KEY_CODE_ARROW_UP].includes(keyCode) && items[updatedIndex]) {
473
+ var _pluginState$searchSe4;
474
+ this.setState({
475
+ selectedIndex: updatedIndex,
476
+ displayUrl: items[updatedIndex].url
477
+ });
478
+ this.fireAnalytics({
479
+ action: ACTION.HIGHLIGHTED,
480
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
481
+ attributes: {
482
+ source: this.analyticSource,
483
+ searchSessionId: (_pluginState$searchSe4 = pluginState.searchSessionId) !== null && _pluginState$searchSe4 !== void 0 ? _pluginState$searchSe4 : '',
484
+ selectedResultId: items[updatedIndex].objectId,
485
+ selectedRelativePosition: updatedIndex
486
+ },
487
+ eventType: EVENT_TYPE.UI
488
+ });
489
+ }
490
+ });
491
+ _defineProperty(this, "updateTextInput", displayText => {
492
+ this.setState({
493
+ displayText
494
+ });
495
+ });
496
+ _defineProperty(this, "handleCancel", e => {
497
+ const {
498
+ view: {
499
+ state,
500
+ dispatch
501
+ },
502
+ onClickAwayCallback
503
+ } = this.props;
504
+ e.preventDefault();
505
+ onClickAwayCallback === null || onClickAwayCallback === void 0 ? void 0 : onClickAwayCallback(state, dispatch);
506
+ });
507
+ this.state = {
508
+ selectedIndex: -1,
509
+ isLoading: false,
510
+ displayUrl: normalizeUrl(props.displayUrl),
511
+ displayText: props.displayText,
512
+ items: []
513
+ };
514
+
515
+ /* Cache functions */
516
+ this.handleClearText = this.createClearHandler('displayUrl');
517
+ this.handleClearDisplayText = this.createClearHandler('displayText');
518
+ this.debouncedQuickSearch = debounce(this.quickSearch, 400);
519
+ this.fireCustomAnalytics = fireAnalyticsEvent(props.createAnalyticsEvent);
520
+ }
521
+ async componentDidMount() {
522
+ var _pluginState$searchSe5, _pluginState$inputMet;
523
+ const {
524
+ pluginState
525
+ } = this.props;
526
+ document.addEventListener('mousedown', this.handleClickOutside);
527
+ this.fireAnalytics({
528
+ action: ACTION.VIEWED,
529
+ actionSubject: ACTION_SUBJECT.CREATE_LINK_INLINE_DIALOG,
530
+ attributes: {
531
+ timesViewed: pluginState.timesViewed,
532
+ searchSessionId: (_pluginState$searchSe5 = pluginState.searchSessionId) !== null && _pluginState$searchSe5 !== void 0 ? _pluginState$searchSe5 : '',
533
+ trigger: (_pluginState$inputMet = pluginState.inputMethod) !== null && _pluginState$inputMet !== void 0 ? _pluginState$inputMet : ''
534
+ },
535
+ eventType: EVENT_TYPE.SCREEN
536
+ });
537
+ const [activityProvider, searchProvider] = await Promise.all([this.props.activityProvider, this.props.searchProvider]);
538
+ this.setState({
539
+ activityProvider,
540
+ searchProvider
541
+ });
542
+ await this.loadInitialLinkSearchResult();
543
+ }
544
+ componentWillUnmount() {
545
+ const {
546
+ pluginState
547
+ } = this.props;
548
+ document.removeEventListener('mousedown', this.handleClickOutside);
549
+ if (!this.submitted) {
550
+ var _pluginState$searchSe6;
551
+ this.fireAnalytics({
552
+ action: ACTION.DISMISSED,
553
+ actionSubject: ACTION_SUBJECT.CREATE_LINK_INLINE_DIALOG,
554
+ attributes: {
555
+ source: this.analyticSource,
556
+ searchSessionId: (_pluginState$searchSe6 = pluginState.searchSessionId) !== null && _pluginState$searchSe6 !== void 0 ? _pluginState$searchSe6 : '',
557
+ trigger: 'blur'
558
+ },
559
+ eventType: EVENT_TYPE.UI
560
+ });
561
+ }
562
+ }
563
+ async getRecentItems(activityProvider, query) {
564
+ const {
565
+ pluginState
566
+ } = this.props;
567
+ const perfStart = performance.now();
568
+ try {
569
+ var _pluginState$searchSe7;
570
+ const activityRecentItems = limit(query ? await activityProvider.searchRecent(query) : await activityProvider.getRecentItems());
571
+ const items = activityRecentItems.map(mapActivityProviderResultToLinkSearchItemData);
572
+ const perfStop = performance.now();
573
+ const duration = perfStop - perfStart;
574
+ this.fireAnalytics({
575
+ action: ACTION.INVOKED,
576
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
577
+ actionSubjectId: ACTION_SUBJECT_ID.RECENT_ACTIVITIES,
578
+ attributes: {
579
+ duration,
580
+ count: items.length
581
+ },
582
+ eventType: EVENT_TYPE.OPERATIONAL
583
+ });
584
+ this.fireAnalytics({
585
+ action: ACTION.SHOWN,
586
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
587
+ actionSubjectId: ACTION_SUBJECT_ID.PRE_QUERY_SEARCH_RESULTS,
588
+ attributes: {
589
+ source: this.analyticSource,
590
+ preQueryRequestDurationMs: duration,
591
+ searchSessionId: (_pluginState$searchSe7 = pluginState.searchSessionId) !== null && _pluginState$searchSe7 !== void 0 ? _pluginState$searchSe7 : '',
592
+ resultCount: items.length,
593
+ results: activityRecentItems.map(item => {
594
+ var _item$type;
595
+ return {
596
+ resultContentId: item.objectId,
597
+ resultType: (_item$type = item.type) !== null && _item$type !== void 0 ? _item$type : ''
598
+ };
599
+ })
600
+ },
601
+ eventType: EVENT_TYPE.UI
602
+ });
603
+ return items;
604
+ } catch (err) {
605
+ const perfStop = performance.now();
606
+ const duration = perfStop - perfStart;
607
+ this.fireAnalytics({
608
+ action: ACTION.INVOKED,
609
+ actionSubject: ACTION_SUBJECT.SEARCH_RESULT,
610
+ actionSubjectId: ACTION_SUBJECT_ID.RECENT_ACTIVITIES,
611
+ attributes: {
612
+ duration,
613
+ count: -1,
614
+ errorCode: err.status
615
+ },
616
+ nonPrivacySafeAttributes: {
617
+ error: err.message
618
+ },
619
+ eventType: EVENT_TYPE.OPERATIONAL
620
+ });
621
+ return [];
622
+ }
623
+ }
624
+ fireAnalytics(payload) {
625
+ if (this.props.createAnalyticsEvent && this.fireCustomAnalytics) {
626
+ this.fireCustomAnalytics({
627
+ payload
628
+ });
629
+ }
630
+ }
631
+ async loadInitialLinkSearchResult() {
632
+ const {
633
+ displayUrl,
634
+ activityProvider
635
+ } = this.state;
636
+ try {
637
+ if (!displayUrl && activityProvider) {
638
+ this.setState({
639
+ isLoading: true
640
+ });
641
+ const items = await this.getRecentItems(activityProvider);
642
+ this.setState({
643
+ items
644
+ });
645
+ }
646
+ } finally {
647
+ this.setState({
648
+ isLoading: false
649
+ });
650
+ }
651
+ }
652
+ render() {
653
+ const {
654
+ items,
655
+ isLoading,
656
+ selectedIndex,
657
+ displayUrl,
658
+ displayText
659
+ } = this.state;
660
+ const {
661
+ intl: {
662
+ formatMessage
663
+ },
664
+ activityProvider
665
+ } = this.props;
666
+ const placeholder = formatMessage(activityProvider ? linkToolbarCommonMessages.placeholder : linkToolbarCommonMessages.linkPlaceholder);
667
+ const formatLinkAddressText = formatMessage(linkToolbarCommonMessages.linkAddress);
668
+ const formatClearLinkText = formatMessage(messages.clearLink);
669
+ const formatDisplayText = formatMessage(messages.displayText);
670
+ const screenReaderDescriptionId = 'search-recent-links-field-description';
671
+ const linkSearchListId = 'hyperlink-search-list';
672
+ const ariaActiveDescendant = selectedIndex > -1 ? `link-search-list-item-${selectedIndex}` : '';
673
+
674
+ // Added workaround with a screen reader Announcer specifically for VoiceOver + Safari
675
+ // as the Aria design pattern for combobox does not work in this case
676
+ // for details: https://a11y-internal.atlassian.net/browse/AK-740
677
+ const screenReaderText = browser.safari && this.getScreenReaderText();
678
+ return jsx("div", {
679
+ "aria-label": "Hyperlink Edit",
680
+ className: "recent-list"
681
+ }, jsx("div", {
682
+ css: [container, !!activityProvider && containerWithProvider],
683
+ ref: this.wrapperRef
684
+ }, jsx("div", {
685
+ css: inputWrapper
686
+ }, jsx("span", {
687
+ css: iconWrapper
688
+ }, jsx(Tooltip, {
689
+ content: formatLinkAddressText
690
+ }, jsx(LinkIcon, {
691
+ label: formatLinkAddressText
692
+ }))), screenReaderText && jsx(Announcer, {
693
+ ariaLive: "assertive",
694
+ text: screenReaderText,
695
+ ariaRelevant: "additions",
696
+ delay: 250
697
+ }), jsx("div", {
698
+ css: visuallyHiddenStyles,
699
+ "aria-hidden": "true",
700
+ id: screenReaderDescriptionId
701
+ }, formatMessage(messages.searchLinkAriaDescription)), jsx(PanelTextInput, {
702
+ role: "combobox",
703
+ ariaExpanded: true,
704
+ ariaActiveDescendant: ariaActiveDescendant,
705
+ ariaControls: linkSearchListId,
706
+ ariaAutoComplete: true,
707
+ describedById: screenReaderDescriptionId,
708
+ ref: ele => this.urlInputContainer = ele,
709
+ placeholder: placeholder,
710
+ testId: 'link-url',
711
+ onSubmit: this.handleSubmit,
712
+ onChange: this.updateInput,
713
+ autoFocus: {
714
+ preventScroll: true
715
+ },
716
+ onCancel: this.handleCancel,
717
+ defaultValue: displayUrl,
718
+ onKeyDown: this.handleKeyDown
719
+ }), displayUrl && jsx(Tooltip, {
720
+ content: formatClearLinkText
721
+ }, jsx("button", {
722
+ type: "button",
723
+ css: clearText,
724
+ onClick: this.handleClearText
725
+ }, jsx(CrossCircleIcon, {
726
+ label: formatClearLinkText
727
+ })))), jsx("div", {
728
+ css: textInputWrapper
729
+ }, jsx("span", {
730
+ css: iconWrapper
731
+ }, jsx(Tooltip, {
732
+ content: formatDisplayText
733
+ }, jsx(EditorAlignLeftIcon, {
734
+ label: formatDisplayText
735
+ }))), jsx(PanelTextInput, {
736
+ ref: ele => this.displayTextInputContainer = ele,
737
+ placeholder: formatDisplayText,
738
+ ariaLabel: formatMessage(messages.linkAriaLabel),
739
+ testId: 'link-label',
740
+ onChange: this.updateTextInput,
741
+ onCancel: this.handleCancel,
742
+ defaultValue: displayText,
743
+ onSubmit: this.handleSubmit,
744
+ onKeyDown: this.handleKeyDown
745
+ }), displayText && jsx(Tooltip, {
746
+ content: formatMessage(messages.clearText)
747
+ }, jsx("button", {
748
+ type: "button",
749
+ css: clearText,
750
+ onClick: this.handleClearDisplayText,
751
+ onKeyDown: this.handleClearTextKeyDown
752
+ }, jsx(CrossCircleIcon, {
753
+ label: formatMessage(messages.clearText)
754
+ })))), jsx("div", {
755
+ css: visuallyHiddenStyles,
756
+ "aria-live": "polite",
757
+ "aria-atomic": "true",
758
+ id: "fabric.editor.hyperlink.suggested.results"
759
+ }, displayUrl && formatMessage(messages.searchLinkResults, {
760
+ count: items.length
761
+ })), jsx(LinkSearchList, {
762
+ ariaControls: "fabric.editor.hyperlink.suggested.results",
763
+ id: linkSearchListId,
764
+ role: "listbox",
765
+ items: items,
766
+ isLoading: isLoading,
767
+ selectedIndex: selectedIndex,
768
+ onSelect: this.handleSelected,
769
+ onMouseEnter: this.handleMouseEnterResultItem,
770
+ onMouseLeave: this.handleMouseLeaveResultItem
771
+ })));
772
+ }
773
+ }
774
+ function findIndex(array, predicate) {
775
+ let index = -1;
776
+ array.some((item, i) => {
777
+ if (predicate(item)) {
778
+ index = i;
779
+ return true;
780
+ }
781
+ return false;
782
+ });
783
+ return index;
784
+ }
785
+ function limit(items) {
786
+ return items.slice(0, RECENT_SEARCH_LIST_SIZE);
787
+ }
788
+ export const HyperlinkLinkAddToolbarWithIntl = injectIntl(HyperlinkLinkAddToolbar);
789
+ export default withAnalyticsEvents()(HyperlinkLinkAddToolbarWithIntl);