@atlaskit/editor-plugin-extension 0.4.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/.eslintrc.js +26 -0
  2. package/CHANGELOG.md +16 -0
  3. package/dist/cjs/actions.js +236 -0
  4. package/dist/cjs/commands.js +122 -0
  5. package/dist/cjs/context-panel.js +269 -0
  6. package/dist/cjs/extension-api.js +266 -0
  7. package/dist/cjs/index.js +8 -1
  8. package/dist/cjs/plugin-factory.js +32 -0
  9. package/dist/cjs/plugin-key.js +8 -0
  10. package/dist/cjs/plugin.js +147 -0
  11. package/dist/cjs/pm-plugins/keymap.js +21 -0
  12. package/dist/cjs/pm-plugins/macro/actions.js +186 -0
  13. package/dist/cjs/pm-plugins/macro/index.js +72 -0
  14. package/dist/cjs/pm-plugins/macro/plugin-key.js +8 -0
  15. package/dist/cjs/pm-plugins/macro/types.js +5 -0
  16. package/dist/cjs/pm-plugins/main.js +323 -0
  17. package/dist/cjs/pm-plugins/unique-id.js +80 -0
  18. package/dist/cjs/pm-plugins/utils.js +75 -0
  19. package/dist/cjs/reducer.js +18 -0
  20. package/dist/cjs/toolbar.js +242 -0
  21. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +475 -0
  22. package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +122 -0
  23. package/dist/cjs/ui/ConfigPanel/ConfigPanelLoader.js +23 -0
  24. package/dist/cjs/ui/ConfigPanel/ErrorMessage/ErrorImage.js +76 -0
  25. package/dist/cjs/ui/ConfigPanel/ErrorMessage/index.js +33 -0
  26. package/dist/cjs/ui/ConfigPanel/FieldMessages.js +105 -0
  27. package/dist/cjs/ui/ConfigPanel/Fields/Boolean.js +150 -0
  28. package/dist/cjs/ui/ConfigPanel/Fields/CheckboxGroup.js +101 -0
  29. package/dist/cjs/ui/ConfigPanel/Fields/ColorPicker.js +420 -0
  30. package/dist/cjs/ui/ConfigPanel/Fields/CustomSelect.js +192 -0
  31. package/dist/cjs/ui/ConfigPanel/Fields/Date.js +55 -0
  32. package/dist/cjs/ui/ConfigPanel/Fields/DateRange.js +160 -0
  33. package/dist/cjs/ui/ConfigPanel/Fields/Enum.js +41 -0
  34. package/dist/cjs/ui/ConfigPanel/Fields/Expand.js +88 -0
  35. package/dist/cjs/ui/ConfigPanel/Fields/Fieldset.js +270 -0
  36. package/dist/cjs/ui/ConfigPanel/Fields/Number.js +64 -0
  37. package/dist/cjs/ui/ConfigPanel/Fields/RadioGroup.js +56 -0
  38. package/dist/cjs/ui/ConfigPanel/Fields/Select.js +60 -0
  39. package/dist/cjs/ui/ConfigPanel/Fields/SelectItem.js +53 -0
  40. package/dist/cjs/ui/ConfigPanel/Fields/String.js +75 -0
  41. package/dist/cjs/ui/ConfigPanel/Fields/TabGroup.js +73 -0
  42. package/dist/cjs/ui/ConfigPanel/Fields/UnhandledType.js +19 -0
  43. package/dist/cjs/ui/ConfigPanel/Fields/UserSelect.js +268 -0
  44. package/dist/cjs/ui/ConfigPanel/Fields/common/RequiredIndicator.js +12 -0
  45. package/dist/cjs/ui/ConfigPanel/FormContent.js +231 -0
  46. package/dist/cjs/ui/ConfigPanel/FormErrorBoundary.js +140 -0
  47. package/dist/cjs/ui/ConfigPanel/Header.js +148 -0
  48. package/dist/cjs/ui/ConfigPanel/LoadingState.js +25 -0
  49. package/dist/cjs/ui/ConfigPanel/NestedForms/RemovableField.js +61 -0
  50. package/dist/cjs/ui/ConfigPanel/constants.js +13 -0
  51. package/dist/cjs/ui/ConfigPanel/index.js +9 -0
  52. package/dist/cjs/ui/ConfigPanel/messages.js +99 -0
  53. package/dist/cjs/ui/ConfigPanel/transformers.js +631 -0
  54. package/dist/cjs/ui/ConfigPanel/types.js +15 -0
  55. package/dist/cjs/ui/ConfigPanel/use-abortable-effect/index.js +56 -0
  56. package/dist/cjs/ui/ConfigPanel/use-state-from-promise/index.js +41 -0
  57. package/dist/cjs/ui/ConfigPanel/utils.js +116 -0
  58. package/dist/cjs/ui/SaveIndicator/SaveIndicator.js +79 -0
  59. package/dist/cjs/ui/SaveIndicator/messages.js +14 -0
  60. package/dist/cjs/ui/SaveIndicator/types.js +5 -0
  61. package/dist/cjs/utils.js +73 -0
  62. package/dist/es2019/actions.js +203 -0
  63. package/dist/es2019/commands.js +99 -0
  64. package/dist/es2019/context-panel.js +181 -0
  65. package/dist/es2019/extension-api.js +284 -0
  66. package/dist/es2019/index.js +1 -1
  67. package/dist/es2019/plugin-factory.js +26 -0
  68. package/dist/es2019/plugin-key.js +2 -0
  69. package/dist/es2019/plugin.js +138 -0
  70. package/dist/es2019/pm-plugins/keymap.js +15 -0
  71. package/dist/es2019/pm-plugins/macro/actions.js +152 -0
  72. package/dist/es2019/pm-plugins/macro/index.js +36 -0
  73. package/dist/es2019/pm-plugins/macro/plugin-key.js +2 -0
  74. package/dist/es2019/pm-plugins/macro/types.js +1 -0
  75. package/dist/es2019/pm-plugins/main.js +230 -0
  76. package/dist/es2019/pm-plugins/unique-id.js +69 -0
  77. package/dist/es2019/pm-plugins/utils.js +30 -0
  78. package/dist/es2019/reducer.js +11 -0
  79. package/dist/es2019/toolbar.js +236 -0
  80. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +415 -0
  81. package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +100 -0
  82. package/dist/es2019/ui/ConfigPanel/ConfigPanelLoader.js +7 -0
  83. package/dist/es2019/ui/ConfigPanel/ErrorMessage/ErrorImage.js +66 -0
  84. package/dist/es2019/ui/ConfigPanel/ErrorMessage/index.js +25 -0
  85. package/dist/es2019/ui/ConfigPanel/FieldMessages.js +101 -0
  86. package/dist/es2019/ui/ConfigPanel/Fields/Boolean.js +138 -0
  87. package/dist/es2019/ui/ConfigPanel/Fields/CheckboxGroup.js +96 -0
  88. package/dist/es2019/ui/ConfigPanel/Fields/ColorPicker.js +411 -0
  89. package/dist/es2019/ui/ConfigPanel/Fields/CustomSelect.js +132 -0
  90. package/dist/es2019/ui/ConfigPanel/Fields/Date.js +50 -0
  91. package/dist/es2019/ui/ConfigPanel/Fields/DateRange.js +139 -0
  92. package/dist/es2019/ui/ConfigPanel/Fields/Enum.js +35 -0
  93. package/dist/es2019/ui/ConfigPanel/Fields/Expand.js +73 -0
  94. package/dist/es2019/ui/ConfigPanel/Fields/Fieldset.js +227 -0
  95. package/dist/es2019/ui/ConfigPanel/Fields/Number.js +61 -0
  96. package/dist/es2019/ui/ConfigPanel/Fields/RadioGroup.js +40 -0
  97. package/dist/es2019/ui/ConfigPanel/Fields/Select.js +50 -0
  98. package/dist/es2019/ui/ConfigPanel/Fields/SelectItem.js +47 -0
  99. package/dist/es2019/ui/ConfigPanel/Fields/String.js +67 -0
  100. package/dist/es2019/ui/ConfigPanel/Fields/TabGroup.js +57 -0
  101. package/dist/es2019/ui/ConfigPanel/Fields/UnhandledType.js +11 -0
  102. package/dist/es2019/ui/ConfigPanel/Fields/UserSelect.js +194 -0
  103. package/dist/es2019/ui/ConfigPanel/Fields/common/RequiredIndicator.js +5 -0
  104. package/dist/es2019/ui/ConfigPanel/FormContent.js +225 -0
  105. package/dist/es2019/ui/ConfigPanel/FormErrorBoundary.js +100 -0
  106. package/dist/es2019/ui/ConfigPanel/Header.js +140 -0
  107. package/dist/es2019/ui/ConfigPanel/LoadingState.js +15 -0
  108. package/dist/es2019/ui/ConfigPanel/NestedForms/RemovableField.js +52 -0
  109. package/dist/es2019/ui/ConfigPanel/constants.js +7 -0
  110. package/dist/es2019/ui/ConfigPanel/index.js +2 -0
  111. package/dist/es2019/ui/ConfigPanel/messages.js +93 -0
  112. package/dist/es2019/ui/ConfigPanel/transformers.js +367 -0
  113. package/dist/es2019/ui/ConfigPanel/types.js +9 -0
  114. package/dist/es2019/ui/ConfigPanel/use-abortable-effect/index.js +46 -0
  115. package/dist/es2019/ui/ConfigPanel/use-state-from-promise/index.js +30 -0
  116. package/dist/es2019/ui/ConfigPanel/utils.js +86 -0
  117. package/dist/es2019/ui/SaveIndicator/SaveIndicator.js +66 -0
  118. package/dist/es2019/ui/SaveIndicator/messages.js +8 -0
  119. package/dist/es2019/ui/SaveIndicator/types.js +1 -0
  120. package/dist/es2019/utils.js +65 -0
  121. package/dist/esm/actions.js +223 -0
  122. package/dist/esm/commands.js +113 -0
  123. package/dist/esm/context-panel.js +261 -0
  124. package/dist/esm/extension-api.js +259 -0
  125. package/dist/esm/index.js +1 -1
  126. package/dist/esm/plugin-factory.js +25 -0
  127. package/dist/esm/plugin-key.js +2 -0
  128. package/dist/esm/plugin.js +140 -0
  129. package/dist/esm/pm-plugins/keymap.js +15 -0
  130. package/dist/esm/pm-plugins/macro/actions.js +179 -0
  131. package/dist/esm/pm-plugins/macro/index.js +42 -0
  132. package/dist/esm/pm-plugins/macro/plugin-key.js +2 -0
  133. package/dist/esm/pm-plugins/macro/types.js +1 -0
  134. package/dist/esm/pm-plugins/main.js +298 -0
  135. package/dist/esm/pm-plugins/unique-id.js +74 -0
  136. package/dist/esm/pm-plugins/utils.js +68 -0
  137. package/dist/esm/reducer.js +11 -0
  138. package/dist/esm/toolbar.js +235 -0
  139. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +465 -0
  140. package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +112 -0
  141. package/dist/esm/ui/ConfigPanel/ConfigPanelLoader.js +11 -0
  142. package/dist/esm/ui/ConfigPanel/ErrorMessage/ErrorImage.js +68 -0
  143. package/dist/esm/ui/ConfigPanel/ErrorMessage/index.js +26 -0
  144. package/dist/esm/ui/ConfigPanel/FieldMessages.js +97 -0
  145. package/dist/esm/ui/ConfigPanel/Fields/Boolean.js +140 -0
  146. package/dist/esm/ui/ConfigPanel/Fields/CheckboxGroup.js +95 -0
  147. package/dist/esm/ui/ConfigPanel/Fields/ColorPicker.js +414 -0
  148. package/dist/esm/ui/ConfigPanel/Fields/CustomSelect.js +182 -0
  149. package/dist/esm/ui/ConfigPanel/Fields/Date.js +48 -0
  150. package/dist/esm/ui/ConfigPanel/Fields/DateRange.js +154 -0
  151. package/dist/esm/ui/ConfigPanel/Fields/Enum.js +34 -0
  152. package/dist/esm/ui/ConfigPanel/Fields/Expand.js +77 -0
  153. package/dist/esm/ui/ConfigPanel/Fields/Fieldset.js +261 -0
  154. package/dist/esm/ui/ConfigPanel/Fields/Number.js +57 -0
  155. package/dist/esm/ui/ConfigPanel/Fields/RadioGroup.js +46 -0
  156. package/dist/esm/ui/ConfigPanel/Fields/Select.js +50 -0
  157. package/dist/esm/ui/ConfigPanel/Fields/SelectItem.js +45 -0
  158. package/dist/esm/ui/ConfigPanel/Fields/String.js +65 -0
  159. package/dist/esm/ui/ConfigPanel/Fields/TabGroup.js +62 -0
  160. package/dist/esm/ui/ConfigPanel/Fields/UnhandledType.js +10 -0
  161. package/dist/esm/ui/ConfigPanel/Fields/UserSelect.js +258 -0
  162. package/dist/esm/ui/ConfigPanel/Fields/common/RequiredIndicator.js +5 -0
  163. package/dist/esm/ui/ConfigPanel/FormContent.js +223 -0
  164. package/dist/esm/ui/ConfigPanel/FormErrorBoundary.js +133 -0
  165. package/dist/esm/ui/ConfigPanel/Header.js +140 -0
  166. package/dist/esm/ui/ConfigPanel/LoadingState.js +17 -0
  167. package/dist/esm/ui/ConfigPanel/NestedForms/RemovableField.js +53 -0
  168. package/dist/esm/ui/ConfigPanel/constants.js +7 -0
  169. package/dist/esm/ui/ConfigPanel/index.js +2 -0
  170. package/dist/esm/ui/ConfigPanel/messages.js +93 -0
  171. package/dist/esm/ui/ConfigPanel/transformers.js +624 -0
  172. package/dist/esm/ui/ConfigPanel/types.js +9 -0
  173. package/dist/esm/ui/ConfigPanel/use-abortable-effect/index.js +49 -0
  174. package/dist/esm/ui/ConfigPanel/use-state-from-promise/index.js +34 -0
  175. package/dist/esm/ui/ConfigPanel/utils.js +109 -0
  176. package/dist/esm/ui/SaveIndicator/SaveIndicator.js +72 -0
  177. package/dist/esm/ui/SaveIndicator/messages.js +8 -0
  178. package/dist/esm/ui/SaveIndicator/types.js +1 -0
  179. package/dist/esm/utils.js +67 -0
  180. package/dist/types/actions.d.ts +20 -0
  181. package/dist/types/commands.d.ts +15 -0
  182. package/dist/types/context-panel.d.ts +10 -0
  183. package/dist/types/extension-api.d.ts +12 -0
  184. package/dist/types/index.d.ts +2 -1
  185. package/dist/types/plugin-factory.d.ts +4 -0
  186. package/dist/types/plugin-key.d.ts +3 -0
  187. package/dist/types/plugin.d.ts +2 -0
  188. package/dist/types/pm-plugins/keymap.d.ts +3 -0
  189. package/dist/types/pm-plugins/macro/actions.d.ts +9 -0
  190. package/dist/types/pm-plugins/macro/index.d.ts +8 -0
  191. package/dist/types/pm-plugins/macro/plugin-key.d.ts +3 -0
  192. package/dist/types/pm-plugins/macro/types.d.ts +4 -0
  193. package/dist/types/pm-plugins/main.d.ts +25 -0
  194. package/dist/types/pm-plugins/unique-id.d.ts +3 -0
  195. package/dist/types/pm-plugins/utils.d.ts +3 -0
  196. package/dist/types/reducer.d.ts +2 -0
  197. package/dist/types/toolbar.d.ts +44 -0
  198. package/dist/types/types.d.ts +27 -2
  199. package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +22 -0
  200. package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +21 -0
  201. package/dist/types/ui/ConfigPanel/ConfigPanelLoader.d.ts +5 -0
  202. package/dist/types/ui/ConfigPanel/ErrorMessage/ErrorImage.d.ts +4 -0
  203. package/dist/types/ui/ConfigPanel/ErrorMessage/index.d.ts +10 -0
  204. package/dist/types/ui/ConfigPanel/FieldMessages.d.ts +12 -0
  205. package/dist/types/ui/ConfigPanel/Fields/Boolean.d.ts +8 -0
  206. package/dist/types/ui/ConfigPanel/Fields/CheckboxGroup.d.ts +8 -0
  207. package/dist/types/ui/ConfigPanel/Fields/ColorPicker.d.ts +20 -0
  208. package/dist/types/ui/ConfigPanel/Fields/CustomSelect.d.ts +24 -0
  209. package/dist/types/ui/ConfigPanel/Fields/Date.d.ts +20 -0
  210. package/dist/types/ui/ConfigPanel/Fields/DateRange.d.ts +20 -0
  211. package/dist/types/ui/ConfigPanel/Fields/Enum.d.ts +10 -0
  212. package/dist/types/ui/ConfigPanel/Fields/Expand.d.ts +16 -0
  213. package/dist/types/ui/ConfigPanel/Fields/Fieldset.d.ts +19 -0
  214. package/dist/types/ui/ConfigPanel/Fields/Number.d.ts +10 -0
  215. package/dist/types/ui/ConfigPanel/Fields/RadioGroup.d.ts +8 -0
  216. package/dist/types/ui/ConfigPanel/Fields/Select.d.ts +11 -0
  217. package/dist/types/ui/ConfigPanel/Fields/SelectItem.d.ts +5 -0
  218. package/dist/types/ui/ConfigPanel/Fields/String.d.ts +10 -0
  219. package/dist/types/ui/ConfigPanel/Fields/TabGroup.d.ts +14 -0
  220. package/dist/types/ui/ConfigPanel/Fields/UnhandledType.d.ts +6 -0
  221. package/dist/types/ui/ConfigPanel/Fields/UserSelect.d.ts +10 -0
  222. package/dist/types/ui/ConfigPanel/Fields/common/RequiredIndicator.d.ts +1 -0
  223. package/dist/types/ui/ConfigPanel/FormContent.d.ts +4 -0
  224. package/dist/types/ui/ConfigPanel/FormErrorBoundary.d.ts +16 -0
  225. package/dist/types/ui/ConfigPanel/Header.d.ts +23 -0
  226. package/dist/types/ui/ConfigPanel/LoadingState.d.ts +4 -0
  227. package/dist/types/ui/ConfigPanel/NestedForms/RemovableField.d.ts +19 -0
  228. package/dist/types/ui/ConfigPanel/constants.d.ts +2 -0
  229. package/dist/types/ui/ConfigPanel/index.d.ts +2 -0
  230. package/dist/types/ui/ConfigPanel/messages.d.ts +92 -0
  231. package/dist/types/ui/ConfigPanel/transformers.d.ts +9 -0
  232. package/dist/types/ui/ConfigPanel/types.d.ts +36 -0
  233. package/dist/types/ui/ConfigPanel/use-abortable-effect/index.d.ts +16 -0
  234. package/dist/types/ui/ConfigPanel/use-state-from-promise/index.d.ts +15 -0
  235. package/dist/types/ui/ConfigPanel/utils.d.ts +16 -0
  236. package/dist/types/ui/SaveIndicator/SaveIndicator.d.ts +4 -0
  237. package/dist/types/ui/SaveIndicator/messages.d.ts +7 -0
  238. package/dist/types/ui/SaveIndicator/types.d.ts +11 -0
  239. package/dist/types/utils.d.ts +15 -0
  240. package/dist/types-ts4.5/actions.d.ts +20 -0
  241. package/dist/types-ts4.5/commands.d.ts +15 -0
  242. package/dist/types-ts4.5/context-panel.d.ts +10 -0
  243. package/dist/types-ts4.5/extension-api.d.ts +12 -0
  244. package/dist/types-ts4.5/index.d.ts +2 -1
  245. package/dist/types-ts4.5/plugin-factory.d.ts +4 -0
  246. package/dist/types-ts4.5/plugin-key.d.ts +3 -0
  247. package/dist/types-ts4.5/plugin.d.ts +2 -0
  248. package/dist/types-ts4.5/pm-plugins/keymap.d.ts +3 -0
  249. package/dist/types-ts4.5/pm-plugins/macro/actions.d.ts +9 -0
  250. package/dist/types-ts4.5/pm-plugins/macro/index.d.ts +8 -0
  251. package/dist/types-ts4.5/pm-plugins/macro/plugin-key.d.ts +3 -0
  252. package/dist/types-ts4.5/pm-plugins/macro/types.d.ts +4 -0
  253. package/dist/types-ts4.5/pm-plugins/main.d.ts +25 -0
  254. package/dist/types-ts4.5/pm-plugins/unique-id.d.ts +3 -0
  255. package/dist/types-ts4.5/pm-plugins/utils.d.ts +3 -0
  256. package/dist/types-ts4.5/reducer.d.ts +2 -0
  257. package/dist/types-ts4.5/toolbar.d.ts +44 -0
  258. package/dist/types-ts4.5/types.d.ts +27 -2
  259. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanel.d.ts +22 -0
  260. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +21 -0
  261. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelLoader.d.ts +5 -0
  262. package/dist/types-ts4.5/ui/ConfigPanel/ErrorMessage/ErrorImage.d.ts +4 -0
  263. package/dist/types-ts4.5/ui/ConfigPanel/ErrorMessage/index.d.ts +10 -0
  264. package/dist/types-ts4.5/ui/ConfigPanel/FieldMessages.d.ts +12 -0
  265. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Boolean.d.ts +8 -0
  266. package/dist/types-ts4.5/ui/ConfigPanel/Fields/CheckboxGroup.d.ts +8 -0
  267. package/dist/types-ts4.5/ui/ConfigPanel/Fields/ColorPicker.d.ts +20 -0
  268. package/dist/types-ts4.5/ui/ConfigPanel/Fields/CustomSelect.d.ts +24 -0
  269. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Date.d.ts +20 -0
  270. package/dist/types-ts4.5/ui/ConfigPanel/Fields/DateRange.d.ts +20 -0
  271. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Enum.d.ts +10 -0
  272. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Expand.d.ts +16 -0
  273. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Fieldset.d.ts +19 -0
  274. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Number.d.ts +10 -0
  275. package/dist/types-ts4.5/ui/ConfigPanel/Fields/RadioGroup.d.ts +8 -0
  276. package/dist/types-ts4.5/ui/ConfigPanel/Fields/Select.d.ts +11 -0
  277. package/dist/types-ts4.5/ui/ConfigPanel/Fields/SelectItem.d.ts +5 -0
  278. package/dist/types-ts4.5/ui/ConfigPanel/Fields/String.d.ts +10 -0
  279. package/dist/types-ts4.5/ui/ConfigPanel/Fields/TabGroup.d.ts +14 -0
  280. package/dist/types-ts4.5/ui/ConfigPanel/Fields/UnhandledType.d.ts +6 -0
  281. package/dist/types-ts4.5/ui/ConfigPanel/Fields/UserSelect.d.ts +10 -0
  282. package/dist/types-ts4.5/ui/ConfigPanel/Fields/common/RequiredIndicator.d.ts +1 -0
  283. package/dist/types-ts4.5/ui/ConfigPanel/FormContent.d.ts +4 -0
  284. package/dist/types-ts4.5/ui/ConfigPanel/FormErrorBoundary.d.ts +16 -0
  285. package/dist/types-ts4.5/ui/ConfigPanel/Header.d.ts +23 -0
  286. package/dist/types-ts4.5/ui/ConfigPanel/LoadingState.d.ts +4 -0
  287. package/dist/types-ts4.5/ui/ConfigPanel/NestedForms/RemovableField.d.ts +19 -0
  288. package/dist/types-ts4.5/ui/ConfigPanel/constants.d.ts +2 -0
  289. package/dist/types-ts4.5/ui/ConfigPanel/index.d.ts +2 -0
  290. package/dist/types-ts4.5/ui/ConfigPanel/messages.d.ts +92 -0
  291. package/dist/types-ts4.5/ui/ConfigPanel/transformers.d.ts +9 -0
  292. package/dist/types-ts4.5/ui/ConfigPanel/types.d.ts +39 -0
  293. package/dist/types-ts4.5/ui/ConfigPanel/use-abortable-effect/index.d.ts +16 -0
  294. package/dist/types-ts4.5/ui/ConfigPanel/use-state-from-promise/index.d.ts +18 -0
  295. package/dist/types-ts4.5/ui/ConfigPanel/utils.d.ts +16 -0
  296. package/dist/types-ts4.5/ui/SaveIndicator/SaveIndicator.d.ts +4 -0
  297. package/dist/types-ts4.5/ui/SaveIndicator/messages.d.ts +7 -0
  298. package/dist/types-ts4.5/ui/SaveIndicator/types.d.ts +11 -0
  299. package/dist/types-ts4.5/utils.d.ts +15 -0
  300. package/example-utils/config-panel/ConfigPanelWithExtensionPicker.tsx +217 -0
  301. package/example-utils/config-panel/ConfigPanelWithProviders.tsx +51 -0
  302. package/example-utils/config-panel/ExtensionNodePicker.tsx +141 -0
  303. package/example-utils/config-panel/FieldTypePicker.tsx +63 -0
  304. package/example-utils/config-panel/example-manifest-all-fields.ts +86 -0
  305. package/example-utils/config-panel/example-manifest-individual-fields.ts +85 -0
  306. package/example-utils/config-panel/fields.ts +611 -0
  307. package/package.json +49 -7
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useAbortableEffect = useAbortableEffect;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _react = require("react");
10
+ var safeError = function safeError(message) {
11
+ if (process.env.NODE_ENV !== 'production') {
12
+ throw new Error(message);
13
+ }
14
+
15
+ // eslint-disable-next-line no-console
16
+ console.error(message);
17
+ };
18
+ var createAbortController = function createAbortController() {
19
+ if (typeof AbortController === 'undefined') {
20
+ safeError('Missing AbortController');
21
+ }
22
+ return new AbortController();
23
+ };
24
+ /**
25
+ * Similar to useEffect but integrated with the AbortController to make it useful for async operations.
26
+ * On unmount, the abort function will be called and the signal will be passed down to the function so
27
+ * we get the chance to cancel any operation we want.
28
+ *
29
+ * Note: This hook follows the signature of useEffect so it can be linted if enabled through the
30
+ * `additionalHooks` config.
31
+ *
32
+ * @param callback
33
+ * @param deps
34
+ */
35
+ function useAbortableEffect(callback, deps) {
36
+ var abortController = (0, _react.useMemo)(function () {
37
+ return createAbortController();
38
+ },
39
+ // eslint-disable-next-line react-hooks/exhaustive-deps
40
+ deps);
41
+ var abort = (0, _react.useCallback)(function () {
42
+ return abortController.abort();
43
+ }, [abortController]);
44
+ // AFP-2511 TODO: Fix automatic suppressions below
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ var fn = (0, _react.useCallback)(callback, deps);
47
+ (0, _react.useEffect)(function () {
48
+ var teardown = fn(abortController.signal);
49
+ return function () {
50
+ if (typeof teardown === 'function') {
51
+ teardown();
52
+ }
53
+ abort();
54
+ };
55
+ }, [abortController, abort, fn].concat((0, _toConsumableArray2.default)(deps)));
56
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useStateFromPromise = useStateFromPromise;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = require("react");
11
+ var _useAbortableEffect = require("../use-abortable-effect");
12
+ /**
13
+ * Similar to useState but deals with async values.
14
+ * Simply pass a promise and it will set the state when it resolves. It won't try to set if
15
+ * the component unmounts
16
+ *
17
+ * Note: This hook follows the signature of useEffect so it can be linted if enabled through the
18
+ * `additionalHooks` config.
19
+ *
20
+ * @param callback
21
+ * @param deps
22
+ */
23
+ function useStateFromPromise(callback, deps, initialValue) {
24
+ // AFP-2511 TODO: Fix automatic suppressions below
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ var fn = (0, _react.useCallback)(callback, deps);
27
+ var _useState = (0, _react.useState)(initialValue),
28
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
29
+ value = _useState2[0],
30
+ setValue = _useState2[1];
31
+ (0, _useAbortableEffect.useAbortableEffect)(function (signal) {
32
+ Promise.resolve(fn()).then(function (result) {
33
+ if (signal.aborted) {
34
+ return;
35
+ }
36
+ setValue(result);
37
+ });
38
+ }, // eslint-disable-next-line react-hooks/exhaustive-deps
39
+ (0, _toConsumableArray2.default)(deps));
40
+ return [value, setValue];
41
+ }
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.validateRequired = exports.validate = exports.parseParamType = exports.isDuplicateField = exports.getSafeParentedName = exports.getOptionFromValue = exports.getNameFromDuplicateField = exports.getLoggedParameters = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _select = require("@atlaskit/select");
10
+ var _constants = require("./constants");
11
+ var _types = require("./types");
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ var validate = exports.validate = function validate(field, value) {
15
+ return validateRequired(field, value);
16
+ };
17
+ var isEmptyString = function isEmptyString(value) {
18
+ return typeof value === 'string' && value === '';
19
+ };
20
+ var isEmptyArray = function isEmptyArray(value) {
21
+ return Array.isArray(value) && value.length === 0;
22
+ };
23
+ var getUngroupedOptions = function getUngroupedOptions(groupedOptions) {
24
+ return groupedOptions.flatMap(function (option) {
25
+ return option.options;
26
+ });
27
+ };
28
+ var validateRequired = exports.validateRequired = function validateRequired(_ref, value) {
29
+ var isRequired = _ref.isRequired,
30
+ isMultiple = _ref.isMultiple;
31
+ if (isRequired) {
32
+ var isUndefined = typeof value === 'undefined';
33
+ var isEmpty = isEmptyString(value) || isMultiple && isEmptyArray(value) || false;
34
+ return isUndefined || isEmpty ? _types.ValidationError.Required : undefined;
35
+ }
36
+ return undefined;
37
+ };
38
+ var getOptionFromValue = exports.getOptionFromValue = function getOptionFromValue(options, value) {
39
+ if (!Array.isArray(options) || options.length === 0) {
40
+ return undefined;
41
+ }
42
+ if (Array.isArray(value)) {
43
+ if ((0, _select.isOptionsGrouped)(options)) {
44
+ return getUngroupedOptions(options).filter(function (option) {
45
+ return value.includes(option.value);
46
+ });
47
+ }
48
+ return options.filter(function (option) {
49
+ return value.includes(option.value);
50
+ });
51
+ }
52
+ if ((0, _select.isOptionsGrouped)(options)) {
53
+ return getUngroupedOptions(options).find(function (option) {
54
+ return value === option.value;
55
+ });
56
+ }
57
+ return options.find(function (option) {
58
+ return value === option.value;
59
+ });
60
+ };
61
+
62
+ // Atlaskit uses final-form to power the form.
63
+ // Final-form will create nesting in the tree if a dot (.) is used in the name of the field.
64
+ // A parent is provided from a <Fieldset /> and is appended to the name here for simplicity
65
+ var getSafeParentedName = exports.getSafeParentedName = function getSafeParentedName(name, parentName) {
66
+ if (parentName && name.indexOf("".concat(parentName, ".")) === -1) {
67
+ return "".concat(parentName, ".").concat(name);
68
+ }
69
+ return name;
70
+ };
71
+ var duplicateFieldRegex = /:[0-9]+$/;
72
+ var isDuplicateField = exports.isDuplicateField = function isDuplicateField(key) {
73
+ return duplicateFieldRegex.test(key);
74
+ };
75
+ var getNameFromDuplicateField = exports.getNameFromDuplicateField = function getNameFromDuplicateField(key) {
76
+ return key.replace(duplicateFieldRegex, '');
77
+ };
78
+
79
+ // An overly cautious parser for sanitizing configuration parameters of UGC
80
+ var parseParamType = exports.parseParamType = function parseParamType(paramValue, paramField) {
81
+ if (paramValue && paramField) {
82
+ if (paramField.type === 'string') {
83
+ if (paramField.name === 'types') {
84
+ // Parse types field as an array of valid content types
85
+ var contentTypes = ['page', 'blogpost', 'comment', 'attachment'];
86
+ return paramValue && paramValue.split(',').map(function (type) {
87
+ return type.trim();
88
+ }).filter(function (type) {
89
+ return contentTypes.includes(type);
90
+ });
91
+ }
92
+ if (paramField.name === 'width') {
93
+ return parseFloat(paramValue);
94
+ }
95
+ // Strings are very risky - return empty string in case anything slips through
96
+ return '';
97
+ }
98
+ if (_constants.ALLOWED_PARAM_TYPES.includes(paramField.type)) {
99
+ // The param types defined here are already parsed and safe to log
100
+ return paramValue;
101
+ }
102
+ }
103
+ // Safety net
104
+ return null;
105
+ };
106
+ var getLoggedParameters = exports.getLoggedParameters = function getLoggedParameters(macroKey, currentParams, macroFields) {
107
+ // Get the parameters only defined in the allowlist of logged macro/parameter keys
108
+ return Object.keys(currentParams).filter(function (paramKey) {
109
+ var _ALLOWED_LOGGED_MACRO;
110
+ return (_ALLOWED_LOGGED_MACRO = _constants.ALLOWED_LOGGED_MACRO_PARAMS[macroKey]) === null || _ALLOWED_LOGGED_MACRO === void 0 ? void 0 : _ALLOWED_LOGGED_MACRO.includes(paramKey);
111
+ }).reduce(function (obj, param) {
112
+ return _objectSpread(_objectSpread({}, obj), {}, (0, _defineProperty2.default)({}, param, parseParamType(currentParams[param], macroFields === null || macroFields === void 0 ? void 0 : macroFields.find(function (field) {
113
+ return field.name === param;
114
+ }))));
115
+ }, {});
116
+ };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.SaveIndicator = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _react = require("react");
10
+ var _react2 = require("@emotion/react");
11
+ var _reactIntlNext = require("react-intl-next");
12
+ var _checkCircle = _interopRequireDefault(require("@atlaskit/icon/glyph/check-circle"));
13
+ var _colors = require("@atlaskit/theme/colors");
14
+ var _messages = require("./messages");
15
+ /** @jsx jsx */
16
+
17
+ var noop = function noop() {};
18
+ var saveIndicatorWrapperStyles = (0, _react2.css)({
19
+ display: 'flex',
20
+ justifyContent: 'center'
21
+ });
22
+ var saveIndicatorContentStyles = (0, _react2.css)({
23
+ position: 'fixed',
24
+ width: '256px',
25
+ bottom: "var(--ds-space-250, 20px)",
26
+ display: 'flex',
27
+ flexDirection: 'row',
28
+ alignItems: 'center',
29
+ padding: "var(--ds-space-075, 6px)".concat(" ", "var(--ds-space-150, 12px)"),
30
+ background: "var(--ds-surface-overlay, ".concat(_colors.N0, ")"),
31
+ /* E300 */
32
+ boxShadow: "var(--ds-shadow-overlay, ".concat("0px 8px 12px rgba(9, 30, 66, 0.15), 0px 0px 1px rgba(9, 30, 66, 0.31)", ")"),
33
+ borderRadius: '16px'
34
+ });
35
+ var saveIndicatorTextStyles = (0, _react2.css)({
36
+ paddingLeft: "var(--ds-space-075, 6px)"
37
+ });
38
+ var SaveIndicator = exports.SaveIndicator = function SaveIndicator(_ref) {
39
+ var children = _ref.children,
40
+ duration = _ref.duration,
41
+ _ref$visible = _ref.visible,
42
+ visible = _ref$visible === void 0 ? true : _ref$visible;
43
+ var _useState = (0, _react.useState)(false),
44
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
+ saving = _useState2[0],
46
+ setSaving = _useState2[1];
47
+ var shown = (0, _react.useRef)(false);
48
+ var onSaveStarted = (0, _react.useCallback)(function () {
49
+ if (!shown.current) {
50
+ setSaving(true);
51
+ shown.current = true;
52
+ }
53
+ }, []);
54
+ (0, _react.useEffect)(function () {
55
+ if (saving) {
56
+ var handleId = setTimeout(function () {
57
+ setSaving(false);
58
+ }, duration);
59
+ return function () {
60
+ return clearTimeout(handleId);
61
+ };
62
+ }
63
+ }, [saving, duration]);
64
+ return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)("div", null, children({
65
+ onSaveStarted: onSaveStarted,
66
+ onSaveEnded: noop
67
+ })), visible && saving && (0, _react2.jsx)("div", {
68
+ css: saveIndicatorWrapperStyles
69
+ }, (0, _react2.jsx)("div", {
70
+ css: saveIndicatorContentStyles,
71
+ "data-testid": "save-indicator-content"
72
+ }, (0, _react2.jsx)(_checkCircle.default, {
73
+ label: "Saving",
74
+ primaryColor: "var(--ds-icon-success, ".concat(_colors.G300, ")"),
75
+ size: "small"
76
+ }), (0, _react2.jsx)("span", {
77
+ css: saveIndicatorTextStyles
78
+ }, (0, _react2.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.saveIndicator)))));
79
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.messages = void 0;
7
+ var _reactIntlNext = require("react-intl-next");
8
+ var messages = exports.messages = (0, _reactIntlNext.defineMessages)({
9
+ saveIndicator: {
10
+ id: 'fabric.editor.extensions.config-panel.save-indicator',
11
+ defaultMessage: 'All changes are always autosaved',
12
+ description: 'Message shown to the user to notify to them that we save the changes automatically.'
13
+ }
14
+ });
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getSelectedExtension = exports.getSelectedDomElement = exports.getNodeTypesReferenced = exports.getDataConsumerMark = exports.findNodePosWithLocalId = exports.findExtensionWithLocalId = void 0;
7
+ var _utils = require("@atlaskit/editor-common/utils");
8
+ var _utils2 = require("@atlaskit/editor-prosemirror/utils");
9
+ var getSelectedExtension = exports.getSelectedExtension = function getSelectedExtension(state) {
10
+ var searchParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
11
+ var _state$schema$nodes = state.schema.nodes,
12
+ inlineExtension = _state$schema$nodes.inlineExtension,
13
+ extension = _state$schema$nodes.extension,
14
+ bodiedExtension = _state$schema$nodes.bodiedExtension,
15
+ multiBodiedExtension = _state$schema$nodes.multiBodiedExtension;
16
+ var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
17
+ return (0, _utils2.findSelectedNodeOfType)(nodeTypes)(state.selection) || searchParent && (0, _utils2.findParentNodeOfType)(nodeTypes)(state.selection) || undefined;
18
+ };
19
+ var findExtensionWithLocalId = exports.findExtensionWithLocalId = function findExtensionWithLocalId(state, localId) {
20
+ var selectedExtension = getSelectedExtension(state, true);
21
+ if (!localId) {
22
+ return selectedExtension;
23
+ }
24
+ if (selectedExtension && selectedExtension.node.attrs.localId === localId) {
25
+ return selectedExtension;
26
+ }
27
+ var _state$schema$nodes2 = state.schema.nodes,
28
+ inlineExtension = _state$schema$nodes2.inlineExtension,
29
+ extension = _state$schema$nodes2.extension,
30
+ bodiedExtension = _state$schema$nodes2.bodiedExtension,
31
+ multiBodiedExtension = _state$schema$nodes2.multiBodiedExtension;
32
+ var nodeTypes = [extension, bodiedExtension, inlineExtension, multiBodiedExtension];
33
+ var matched;
34
+ state.doc.descendants(function (node, pos) {
35
+ if (nodeTypes.includes(node.type) && node.attrs.localId === localId) {
36
+ matched = {
37
+ node: node,
38
+ pos: pos
39
+ };
40
+ }
41
+ });
42
+ return matched;
43
+ };
44
+ var getSelectedDomElement = exports.getSelectedDomElement = function getSelectedDomElement(schema, domAtPos, selectedExtensionNode) {
45
+ var selectedExtensionDomNode = (0, _utils2.findDomRefAtPos)(selectedExtensionNode.pos, domAtPos);
46
+ var isContentExtension = selectedExtensionNode.node.type !== schema.nodes.bodiedExtension;
47
+ return (
48
+ // Content extension can be nested in bodied-extension, the following check is necessary for that case
49
+ (isContentExtension ?
50
+ // Search down
51
+ selectedExtensionDomNode.querySelector('.extension-container') :
52
+ // Try searching up and then down
53
+ (0, _utils.closestElement)(selectedExtensionDomNode, '.extension-container') || selectedExtensionDomNode.querySelector('.extension-container')) || selectedExtensionDomNode
54
+ );
55
+ };
56
+ var getDataConsumerMark = exports.getDataConsumerMark = function getDataConsumerMark(newNode) {
57
+ var _newNode$marks;
58
+ return (_newNode$marks = newNode.marks) === null || _newNode$marks === void 0 ? void 0 : _newNode$marks.find(function (mark) {
59
+ return mark.type.name === 'dataConsumer';
60
+ });
61
+ };
62
+ var getNodeTypesReferenced = exports.getNodeTypesReferenced = function getNodeTypesReferenced(ids, state) {
63
+ return (0, _utils.findNodePosByLocalIds)(state, ids, {
64
+ includeDocNode: true
65
+ }).map(function (_ref) {
66
+ var node = _ref.node;
67
+ return node.type.name;
68
+ });
69
+ };
70
+ var findNodePosWithLocalId = exports.findNodePosWithLocalId = function findNodePosWithLocalId(state, localId) {
71
+ var nodes = (0, _utils.findNodePosByLocalIds)(state, [localId]);
72
+ return nodes.length >= 1 ? nodes[0] : undefined;
73
+ };
@@ -0,0 +1,203 @@
1
+ import { ACTION, ACTION_SUBJECT, EVENT_TYPE, INPUT_METHOD, TARGET_SELECTION_SOURCE } from '@atlaskit/editor-common/analytics';
2
+ export { transformSliceToRemoveOpenBodiedExtension } from '@atlaskit/editor-common/transforms';
3
+ import { NodeSelection, Selection, TextSelection } from '@atlaskit/editor-prosemirror/state';
4
+ import { findSelectedNodeOfType, replaceParentNodeOfType, replaceSelectedNode } from '@atlaskit/editor-prosemirror/utils';
5
+ import { createExtensionAPI, getEditInLegacyMacroBrowser } from './extension-api';
6
+ import { getPluginState } from './pm-plugins/main';
7
+ import { findExtensionWithLocalId } from './utils';
8
+ export const buildExtensionNode = (type, schema, attrs, content, marks) => {
9
+ switch (type) {
10
+ case 'extension':
11
+ return schema.nodes.extension.createChecked(attrs, content, marks);
12
+ case 'inlineExtension':
13
+ return schema.nodes.inlineExtension.createChecked(attrs, content, marks);
14
+ case 'bodiedExtension':
15
+ return schema.nodes.bodiedExtension.create(attrs, content, marks);
16
+ }
17
+ };
18
+ export const performNodeUpdate = editorAnalyticsAPI => (type, newAttrs, content, marks, shouldScrollIntoView) => (_state, _dispatch, view) => {
19
+ if (!view) {
20
+ throw Error('EditorView is required to perform node update!');
21
+ }
22
+ // NOTE: `state` and `dispatch` are stale at this point so we need to grab
23
+ // the latest one from `view` @see HOT-93986
24
+ const {
25
+ state,
26
+ dispatch
27
+ } = view;
28
+ const newNode = buildExtensionNode(type, state.schema, newAttrs, content, marks);
29
+ if (!newNode) {
30
+ return false;
31
+ }
32
+ const {
33
+ selection,
34
+ schema
35
+ } = state;
36
+ const {
37
+ extension,
38
+ inlineExtension,
39
+ bodiedExtension
40
+ } = schema.nodes;
41
+ const isBodiedExtensionSelected = !!findSelectedNodeOfType([bodiedExtension])(selection);
42
+ const extensionState = getPluginState(state);
43
+ let targetSelectionSource = TARGET_SELECTION_SOURCE.CURRENT_SELECTION;
44
+ let action = ACTION.UPDATED;
45
+ let {
46
+ tr
47
+ } = state;
48
+
49
+ // When it's a bodiedExtension but not selected
50
+ if (newNode.type === bodiedExtension && !isBodiedExtensionSelected) {
51
+ // Bodied extensions can trigger an update when the cursor is inside which means that there is no node selected.
52
+ // To work around that we replace the parent and create a text selection instead of new node selection
53
+ tr = replaceParentNodeOfType(state.schema.nodes.bodiedExtension, newNode)(tr);
54
+ // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
55
+ tr.setSelection(TextSelection.create(tr.doc, state.selection.anchor));
56
+ }
57
+ // If any extension is currently selected
58
+ else if (findSelectedNodeOfType([extension, bodiedExtension, inlineExtension])(selection)) {
59
+ tr = replaceSelectedNode(newNode)(tr);
60
+ // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
61
+ tr.setSelection(NodeSelection.create(tr.doc, tr.mapping.map(state.selection.anchor)));
62
+ }
63
+ // When we loose the selection. This usually happens when Synchrony resets or changes
64
+ // the selection when user is in the middle of updating an extension.
65
+ else if (extensionState.element) {
66
+ const pos = view.posAtDOM(extensionState.element, -1);
67
+ if (pos > -1) {
68
+ tr = tr.replaceWith(pos, pos + (content.size || 0) + 1, newNode);
69
+ tr.setSelection(Selection.near(tr.doc.resolve(pos)));
70
+ targetSelectionSource = TARGET_SELECTION_SOURCE.HTML_ELEMENT;
71
+ } else {
72
+ action = ACTION.ERRORED;
73
+ }
74
+ }
75
+
76
+ // Only scroll if we have anything to update, best to avoid surprise scroll
77
+ if (dispatch && tr.docChanged) {
78
+ const {
79
+ extensionType,
80
+ extensionKey,
81
+ layout,
82
+ localId
83
+ } = newNode.attrs;
84
+ editorAnalyticsAPI === null || editorAnalyticsAPI === void 0 ? void 0 : editorAnalyticsAPI.attachAnalyticsEvent({
85
+ action,
86
+ actionSubject: ACTION_SUBJECT.EXTENSION,
87
+ actionSubjectId: newNode.type.name,
88
+ eventType: EVENT_TYPE.TRACK,
89
+ attributes: {
90
+ inputMethod: INPUT_METHOD.CONFIG_PANEL,
91
+ extensionType,
92
+ extensionKey,
93
+ layout,
94
+ localId,
95
+ selection: tr.selection.toJSON(),
96
+ targetSelectionSource
97
+ }
98
+ })(tr);
99
+ dispatch(shouldScrollIntoView ? tr.scrollIntoView() : tr);
100
+ }
101
+ return true;
102
+ };
103
+ const updateExtensionParams = editorAnalyticsAPI => (updateExtension, node, actions) => async (state, dispatch, view) => {
104
+ const {
105
+ attrs,
106
+ type,
107
+ content,
108
+ marks
109
+ } = node.node;
110
+ if (!state.schema.nodes[type.name]) {
111
+ return false;
112
+ }
113
+ const {
114
+ parameters
115
+ } = attrs;
116
+ try {
117
+ const newParameters = await updateExtension(parameters, actions);
118
+ if (newParameters) {
119
+ const newAttrs = {
120
+ ...attrs,
121
+ parameters: {
122
+ ...parameters,
123
+ ...newParameters
124
+ }
125
+ };
126
+ return performNodeUpdate(editorAnalyticsAPI)(type.name, newAttrs, content, marks, true)(state, dispatch, view);
127
+ }
128
+ } catch {}
129
+ return true;
130
+ };
131
+
132
+ // This is to decouple extensions from editor core
133
+ // Ideally in the future we completely deprecate `EditorActions`
134
+ export const editSelectedExtension = editorActions => {
135
+ const editorView = editorActions._privateGetEditorView();
136
+ const {
137
+ updateExtension,
138
+ applyChangeToContextPanel
139
+ } = getPluginState(editorView.state);
140
+ // The analytics API cannot be accessed in this case because
141
+ // we do not have access to the plugin injection API. Rather
142
+ // than change the way this works - we just won't use analytics
143
+ // here for now.
144
+ const editorAnalyticsAPI = undefined;
145
+ return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(editorView.state, editorView.dispatch, editorView);
146
+ };
147
+ export const editExtension = (macroProvider, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension) => (state, dispatch, view) => {
148
+ if (!view) {
149
+ return false;
150
+ }
151
+ const {
152
+ localId
153
+ } = getPluginState(state);
154
+ const nodeWithPos = findExtensionWithLocalId(state, localId);
155
+ if (!nodeWithPos) {
156
+ return false;
157
+ }
158
+ const editInLegacyMacroBrowser = getEditInLegacyMacroBrowser({
159
+ view,
160
+ macroProvider: macroProvider || undefined,
161
+ editorAnalyticsAPI
162
+ });
163
+ if (updateExtension) {
164
+ updateExtension.then(updateMethod => {
165
+ if (updateMethod && view) {
166
+ const actions = createExtensionAPI({
167
+ editorView: view,
168
+ editInLegacyMacroBrowser,
169
+ applyChange: applyChangeToContextPanel,
170
+ editorAnalyticsAPI
171
+ });
172
+ updateExtensionParams(editorAnalyticsAPI)(updateMethod, nodeWithPos, actions)(state, dispatch, view);
173
+ return;
174
+ }
175
+ if (!updateMethod && macroProvider) {
176
+ editInLegacyMacroBrowser();
177
+ return;
178
+ }
179
+ });
180
+ } else {
181
+ if (!macroProvider) {
182
+ return false;
183
+ }
184
+ editInLegacyMacroBrowser();
185
+ }
186
+ return true;
187
+ };
188
+ export const createEditSelectedExtensionAction = ({
189
+ editorViewRef,
190
+ editorAnalyticsAPI
191
+ }) => () => {
192
+ const {
193
+ current: view
194
+ } = editorViewRef;
195
+ if (!view) {
196
+ return false;
197
+ }
198
+ const {
199
+ updateExtension,
200
+ applyChangeToContextPanel
201
+ } = getPluginState(view.state);
202
+ return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(view.state, view.dispatch, view);
203
+ };