@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,2 @@
1
+ export declare const ALLOWED_LOGGED_MACRO_PARAMS: Record<string, Array<string>>;
2
+ export declare const ALLOWED_PARAM_TYPES: string[];
@@ -0,0 +1,2 @@
1
+ import ConfigPanelLoader from './ConfigPanelLoader';
2
+ export default ConfigPanelLoader;
@@ -0,0 +1,92 @@
1
+ export declare const messages: {
2
+ submit: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ cancel: {
8
+ id: string;
9
+ defaultMessage: string;
10
+ description: string;
11
+ };
12
+ close: {
13
+ id: string;
14
+ defaultMessage: string;
15
+ description: string;
16
+ };
17
+ required: {
18
+ id: string;
19
+ defaultMessage: string;
20
+ description: string;
21
+ };
22
+ invalid: {
23
+ id: string;
24
+ defaultMessage: string;
25
+ description: string;
26
+ };
27
+ isMultipleAndRadio: {
28
+ id: string;
29
+ defaultMessage: string;
30
+ description: string;
31
+ };
32
+ addField: {
33
+ id: string;
34
+ defaultMessage: string;
35
+ description: string;
36
+ };
37
+ removeField: {
38
+ id: string;
39
+ defaultMessage: string;
40
+ description: string;
41
+ };
42
+ createOption: {
43
+ id: string;
44
+ defaultMessage: string;
45
+ description: string;
46
+ };
47
+ documentation: {
48
+ id: string;
49
+ defaultMessage: string;
50
+ description: string;
51
+ };
52
+ help: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ custom: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ from: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ to: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ expand: {
73
+ id: string;
74
+ defaultMessage: string;
75
+ description: string;
76
+ };
77
+ collapse: {
78
+ id: string;
79
+ defaultMessage: string;
80
+ description: string;
81
+ };
82
+ errorBoundaryTitle: {
83
+ id: string;
84
+ defaultMessage: string;
85
+ description: string;
86
+ };
87
+ errorBoundaryNote: {
88
+ id: string;
89
+ defaultMessage: string;
90
+ description: string;
91
+ };
92
+ };
@@ -0,0 +1,9 @@
1
+ import type { ExtensionManifest, FieldDefinition, Parameters, ParametersWithDuplicateFields } from '@atlaskit/editor-common/extensions';
2
+ interface SerializeOptions {
3
+ depth?: number;
4
+ parentType?: 'fieldset' | 'tab' | 'expand';
5
+ }
6
+ export declare const findDuplicateFields: (fields: FieldDefinition[]) => FieldDefinition | undefined;
7
+ export declare const serialize: (manifest: ExtensionManifest, data: Parameters, fields: FieldDefinition[], options?: SerializeOptions) => Promise<Parameters>;
8
+ export declare const deserialize: (manifest: ExtensionManifest, data: Parameters | ParametersWithDuplicateFields, fields: FieldDefinition[], depth?: number) => Promise<Parameters>;
9
+ export {};
@@ -0,0 +1,39 @@
1
+ import type { ExtensionManifest, FieldDefinition, Parameters } from '@atlaskit/editor-common/extensions';
2
+ import type { ContextIdentifierProvider } from '@atlaskit/editor-common/provider-factory';
3
+ import type { FeatureFlags } from '@atlaskit/editor-common/types';
4
+ export declare enum ValidationError {
5
+ Required = "required",
6
+ Invalid = "invalid"
7
+ }
8
+ export declare enum FieldTypeError {
9
+ isMultipleAndRadio = "isMultipleAndRadio"
10
+ }
11
+ export type Entry<T> = [
12
+ string,
13
+ T
14
+ ];
15
+ export type OnFieldChange = (name: string, isDirty: boolean) => void;
16
+ export interface ValidationErrors {
17
+ [key: string]: any;
18
+ }
19
+ export interface FieldComponentProps {
20
+ field: FieldDefinition;
21
+ parameters: Parameters;
22
+ parentName?: string;
23
+ extensionManifest: ExtensionManifest;
24
+ firstVisibleFieldName?: string;
25
+ onFieldChange: OnFieldChange;
26
+ featureFlags?: FeatureFlags;
27
+ }
28
+ export interface FormContentProps {
29
+ fields: FieldDefinition[];
30
+ parentName?: string;
31
+ parameters?: Parameters;
32
+ extensionManifest: ExtensionManifest;
33
+ canRemoveFields?: boolean;
34
+ onClickRemove?: (fieldName: string) => void;
35
+ onFieldChange: OnFieldChange;
36
+ firstVisibleFieldName?: string;
37
+ contextIdentifierProvider?: ContextIdentifierProvider;
38
+ featureFlags?: FeatureFlags;
39
+ }
@@ -0,0 +1,16 @@
1
+ import type React from 'react';
2
+ type AbortableEffectWithCancel = (signal: AbortSignal) => () => void;
3
+ type AbortableEffect = (signal: AbortSignal) => void;
4
+ /**
5
+ * Similar to useEffect but integrated with the AbortController to make it useful for async operations.
6
+ * On unmount, the abort function will be called and the signal will be passed down to the function so
7
+ * we get the chance to cancel any operation we want.
8
+ *
9
+ * Note: This hook follows the signature of useEffect so it can be linted if enabled through the
10
+ * `additionalHooks` config.
11
+ *
12
+ * @param callback
13
+ * @param deps
14
+ */
15
+ export declare function useAbortableEffect(callback: AbortableEffectWithCancel | AbortableEffect, deps: React.DependencyList): void;
16
+ export {};
@@ -0,0 +1,18 @@
1
+ import type React from 'react';
2
+ type AbortableEffect<T> = () => Promise<T> | undefined;
3
+ /**
4
+ * Similar to useState but deals with async values.
5
+ * Simply pass a promise and it will set the state when it resolves. It won't try to set if
6
+ * the component unmounts
7
+ *
8
+ * Note: This hook follows the signature of useEffect so it can be linted if enabled through the
9
+ * `additionalHooks` config.
10
+ *
11
+ * @param callback
12
+ * @param deps
13
+ */
14
+ export declare function useStateFromPromise<S>(callback: AbortableEffect<S>, deps: React.DependencyList, initialValue?: S): [
15
+ S | undefined,
16
+ React.Dispatch<React.SetStateAction<S | undefined>>
17
+ ];
18
+ export {};
@@ -0,0 +1,16 @@
1
+ import type { GroupBase } from 'react-select';
2
+ import type { FieldDefinition, Option, Parameters } from '@atlaskit/editor-common/extensions';
3
+ import { ValidationError } from './types';
4
+ export declare const validate: <T>(field: Partial<FieldDefinition>, value: T) => ValidationError | undefined;
5
+ type ValidationProps = {
6
+ isRequired?: boolean;
7
+ isMultiple?: boolean;
8
+ };
9
+ export declare const validateRequired: <T>({ isRequired, isMultiple }: ValidationProps, value: T) => ValidationError | undefined;
10
+ export declare const getOptionFromValue: (options: Option[] | GroupBase<Option>[], value: string | string[] | undefined) => Option | Option[] | undefined;
11
+ export declare const getSafeParentedName: (name: string, parentName?: string) => string;
12
+ export declare const isDuplicateField: (key: string) => boolean;
13
+ export declare const getNameFromDuplicateField: (key: string) => string;
14
+ export declare const parseParamType: (paramValue: Parameters[string], paramField?: FieldDefinition) => any;
15
+ export declare const getLoggedParameters: (macroKey: string, currentParams: Parameters, macroFields?: FieldDefinition[]) => {};
16
+ export {};
@@ -0,0 +1,4 @@
1
+ /** @jsx jsx */
2
+ import type { FunctionComponent } from 'react';
3
+ import type { SaveIndicatorProps } from './types';
4
+ export declare const SaveIndicator: FunctionComponent<SaveIndicatorProps>;
@@ -0,0 +1,7 @@
1
+ export declare const messages: {
2
+ saveIndicator: {
3
+ id: string;
4
+ defaultMessage: string;
5
+ description: string;
6
+ };
7
+ };
@@ -0,0 +1,11 @@
1
+ import type { ReactNode } from 'react';
2
+ interface SaveIndicatorRenderOptions {
3
+ onSaveStarted: () => void;
4
+ onSaveEnded: () => void;
5
+ }
6
+ export interface SaveIndicatorProps {
7
+ children: (options: SaveIndicatorRenderOptions) => ReactNode;
8
+ duration: number;
9
+ visible?: boolean;
10
+ }
11
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { Mark, Node as PMNode, Schema } from '@atlaskit/editor-prosemirror/model';
2
+ import type { EditorState } from '@atlaskit/editor-prosemirror/state';
3
+ import type { DomAtPos, NodeWithPos } from '@atlaskit/editor-prosemirror/utils';
4
+ export declare const getSelectedExtension: (state: EditorState, searchParent?: boolean) => import("prosemirror-utils/dist/types").ContentNodeWithPos | undefined;
5
+ export declare const findExtensionWithLocalId: (state: EditorState, localId?: string) => NodeWithPos | undefined;
6
+ export declare const getSelectedDomElement: (schema: Schema, domAtPos: DomAtPos, selectedExtensionNode: NodeWithPos) => HTMLElement;
7
+ export declare const getDataConsumerMark: (newNode: PMNode) => Mark | undefined;
8
+ export declare const getNodeTypesReferenced: (ids: string[], state: EditorState) => string[];
9
+ export declare const findNodePosWithLocalId: (state: EditorState, localId: string) => NodeWithPos | undefined;
10
+ export interface Position {
11
+ top?: number;
12
+ right?: number;
13
+ bottom?: number;
14
+ left?: number;
15
+ }
@@ -0,0 +1,217 @@
1
+ /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
2
+ /** @jsx jsx */
3
+ import { useEffect, useState } from 'react';
4
+
5
+ import { css, jsx } from '@emotion/react';
6
+ import { IntlProvider } from 'react-intl-next';
7
+
8
+ // eslint-disable-next-line import/no-extraneous-dependencies
9
+ import { CodeBlock } from '@atlaskit/code';
10
+ import type {
11
+ ExtensionModule,
12
+ ExtensionProvider,
13
+ Parameters,
14
+ } from '@atlaskit/editor-common/extensions';
15
+ import { getExtensionKeyAndNodeKey } from '@atlaskit/editor-common/extensions';
16
+ import TextArea from '@atlaskit/textarea';
17
+ import * as colors from '@atlaskit/theme/colors';
18
+ import { token } from '@atlaskit/tokens';
19
+
20
+ import { useStateFromPromise } from '../../src/ui/ConfigPanel/use-state-from-promise';
21
+
22
+ import ConfigPanelWithProviders from './ConfigPanelWithProviders';
23
+ import type { CallbackParams } from './ExtensionNodePicker';
24
+ import ExtensionNodePicker from './ExtensionNodePicker';
25
+
26
+ const wrapperStyles = css({ margin: token('space.200', '16px') });
27
+
28
+ const exampleWrapperStyles = css({ display: 'flex', flexDirection: 'row' });
29
+
30
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
31
+ const column = (width: number | string) => css`
32
+ width: ${width}px;
33
+ margin: ${token('space.200', '16px')};
34
+
35
+ h3 {
36
+ border-bottom: 1px solid ${colors.N50};
37
+ margin-bottom: ${token('space.200', '16px')};
38
+ }
39
+ `;
40
+
41
+ const codeWrapperStyles = css({
42
+ marginTop: token('space.200', '16px'),
43
+ });
44
+
45
+ function ExtensionConfigPanel({
46
+ extension,
47
+ node,
48
+ nodeKey,
49
+ extensionProvider,
50
+ parameters: initialParameters = {},
51
+ item,
52
+ }: { extensionProvider: ExtensionProvider; nodeKey: string } & CallbackParams) {
53
+ const [fields] = useStateFromPromise(
54
+ function getFields() {
55
+ if (node && typeof node.getFieldsDefinition === 'function') {
56
+ return node.getFieldsDefinition({});
57
+ }
58
+ },
59
+ [node],
60
+ [],
61
+ );
62
+
63
+ const [parametersJson, setParametersJson] = useState(() =>
64
+ JSON.stringify(initialParameters),
65
+ );
66
+
67
+ const [parameters, setParameters] = useState(initialParameters);
68
+
69
+ const onChangeParametersJson: React.ChangeEventHandler<
70
+ HTMLTextAreaElement
71
+ > = event => {
72
+ setParametersJson(event.target.value);
73
+ };
74
+
75
+ useEffect(() => {
76
+ try {
77
+ setParameters({
78
+ ...parameters,
79
+ ...JSON.parse(parametersJson),
80
+ });
81
+ } catch (e) {
82
+ // eslint-disable-next-line no-console
83
+ console.error(
84
+ 'Invalid JSON Parameters',
85
+ e instanceof Error ? e.message : String(e),
86
+ );
87
+ }
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [parametersJson]);
90
+
91
+ if (!extension || !node || !item) {
92
+ return null;
93
+ }
94
+
95
+ return (
96
+ <div css={exampleWrapperStyles}>
97
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
98
+ <div css={column(400)} key="config-panel">
99
+ <h3>Config panel:</h3>
100
+ <ConfigPanelWithProviders
101
+ extensionType={extension.type}
102
+ extensionKey={extension.key}
103
+ nodeKey={nodeKey}
104
+ extensionProvider={extensionProvider}
105
+ parameters={parameters}
106
+ onChange={setParameters}
107
+ />
108
+ </div>
109
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
110
+ <div css={column(500)} key="parameters">
111
+ <h3>Initial Parameters:</h3>
112
+ <div css={codeWrapperStyles}>
113
+ {parameters && (
114
+ <TextArea
115
+ onChange={onChangeParametersJson}
116
+ value={parametersJson}
117
+ />
118
+ )}
119
+ </div>
120
+ <h3>State:</h3>
121
+ <div css={codeWrapperStyles}>
122
+ {parameters && (
123
+ <CodeBlock
124
+ language="json"
125
+ text={JSON.stringify(parameters, null, 4)}
126
+ showLineNumbers={false}
127
+ />
128
+ )}
129
+ </div>
130
+ </div>
131
+ {/* eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage */}
132
+ <div css={column(500)} key="fields-definition">
133
+ <h3>Fields definition:</h3>
134
+ <div css={codeWrapperStyles}>
135
+ <CodeBlock
136
+ language="json"
137
+ text={JSON.stringify(fields, null, 4)}
138
+ showLineNumbers={false}
139
+ />
140
+ </div>
141
+ </div>
142
+ </div>
143
+ );
144
+ }
145
+
146
+ const addHashToTheUrl = (extensionPath: string): void => {
147
+ // @ts-expect-error
148
+ window.top.location.hash = extensionPath;
149
+ };
150
+
151
+ const getHashFromUrl = (): string =>
152
+ // @ts-expect-error
153
+ window.top.location.hash &&
154
+ // @ts-expect-error
155
+ decodeURIComponent(window.top.location.hash.slice(1));
156
+
157
+ export default function ConfigPanelWithExtensionPicker({
158
+ extensionProvider,
159
+ parameters = {},
160
+ }: {
161
+ extensionProvider: ExtensionProvider;
162
+ parameters?: Parameters;
163
+ }) {
164
+ const [hash, setHash] = useState<string>(getHashFromUrl());
165
+ const [extensionNode, setNodeAndParameters] = useState<CallbackParams>();
166
+ const [item, setItem] = useState<ExtensionModule>();
167
+ const [extensionKey, nodeKey] = getExtensionKeyAndNodeKey(
168
+ hash,
169
+ extensionNode && extensionNode.extension
170
+ ? extensionNode.extension.type
171
+ : '',
172
+ );
173
+
174
+ const actualParameters =
175
+ extensionNode &&
176
+ extensionNode.parameters &&
177
+ Object.keys(extensionNode.parameters).length > 0
178
+ ? extensionNode.parameters
179
+ : parameters;
180
+
181
+ return (
182
+ <IntlProvider locale="en-AU">
183
+ <div css={wrapperStyles}>
184
+ <div style={{ float: 'left' }} key="panel">
185
+ {extensionNode?.node && item && (
186
+ <ExtensionConfigPanel
187
+ key={hash}
188
+ extension={extensionNode.extension}
189
+ extensionProvider={extensionProvider}
190
+ nodeKey={nodeKey}
191
+ node={extensionNode.node}
192
+ item={item}
193
+ parameters={actualParameters}
194
+ />
195
+ )}
196
+ </div>
197
+ <div style={{ float: 'right' }} key="picker">
198
+ <ExtensionNodePicker
199
+ selectedExtension={extensionKey}
200
+ selectedNode={nodeKey}
201
+ extensionProvider={extensionProvider}
202
+ onSelect={params => {
203
+ setNodeAndParameters(params);
204
+ setItem(params.item);
205
+
206
+ if (params.extension) {
207
+ const hash = `${params.extension.key}:${params.nodeKey}`;
208
+ addHashToTheUrl(hash);
209
+ setHash(hash);
210
+ }
211
+ }}
212
+ />
213
+ </div>
214
+ </div>
215
+ </IntlProvider>
216
+ );
217
+ }
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+
3
+ import { IntlProvider } from 'react-intl-next';
4
+
5
+ import {
6
+ ExtensionKey,
7
+ ExtensionProvider,
8
+ ExtensionType,
9
+ Parameters,
10
+ } from '@atlaskit/editor-common/extensions';
11
+
12
+ import ConfigPanel from '../../src/ui/ConfigPanel';
13
+
14
+ export default function ConfigPanelWithProviders({
15
+ extensionType,
16
+ extensionKey,
17
+ nodeKey,
18
+ extensionProvider,
19
+ parameters,
20
+ onChange,
21
+ }: {
22
+ extensionType: ExtensionType;
23
+ extensionKey: ExtensionKey;
24
+ nodeKey: string;
25
+ extensionProvider: ExtensionProvider;
26
+ parameters: Parameters;
27
+ onChange?: (parameters: Parameters) => void;
28
+ }) {
29
+ function _onChange(data: Parameters) {
30
+ if (onChange) {
31
+ onChange(data);
32
+ }
33
+ }
34
+
35
+ return (
36
+ <IntlProvider locale="en">
37
+ <ConfigPanel
38
+ extensionType={extensionType}
39
+ extensionKey={extensionKey}
40
+ nodeKey={nodeKey}
41
+ extensionProvider={extensionProvider}
42
+ parameters={parameters}
43
+ showHeader
44
+ autoSave
45
+ onChange={_onChange}
46
+ // eslint-disable-next-line no-console
47
+ onCancel={() => console.log('onCancel')}
48
+ />
49
+ </IntlProvider>
50
+ );
51
+ }
@@ -0,0 +1,141 @@
1
+ /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
2
+ import type { ReactNode } from 'react';
3
+ import React, { useState } from 'react';
4
+
5
+ import Loadable from 'react-loadable';
6
+
7
+ import type {
8
+ ExtensionManifest,
9
+ ExtensionModule,
10
+ ExtensionModuleActionObject,
11
+ ExtensionModuleNode,
12
+ ExtensionProvider,
13
+ Parameters,
14
+ } from '@atlaskit/editor-common/extensions';
15
+ // eslint-disable-next-line import/no-extraneous-dependencies
16
+ import { ButtonItem, HeadingItem, MenuGroup, Section } from '@atlaskit/menu';
17
+
18
+ import { useStateFromPromise } from '../../src/ui/ConfigPanel/use-state-from-promise';
19
+
20
+ export type CallbackParams = {
21
+ extension?: ExtensionManifest;
22
+ nodeKey?: string;
23
+ item: ExtensionModule;
24
+ node?: ExtensionModuleNode;
25
+ parameters?: Parameters;
26
+ };
27
+
28
+ export default function ExtensionNodePicker({
29
+ selectedExtension,
30
+ selectedNode,
31
+ extensionProvider,
32
+ onSelect,
33
+ }: {
34
+ selectedExtension?: string;
35
+ selectedNode?: string;
36
+ extensionProvider: ExtensionProvider;
37
+ onSelect: (nodeParams: CallbackParams) => void;
38
+ }) {
39
+ const [hasSelection, setHasSelection] = useState<boolean>(false);
40
+
41
+ // AFP-2511 TODO: Fix automatic suppressions below
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ const [extensions] = useStateFromPromise(extensionProvider.getExtensions, [
44
+ extensionProvider,
45
+ ]);
46
+
47
+ return (
48
+ <div
49
+ style={{
50
+ border: `1px solid #ccc`,
51
+ boxShadow:
52
+ '0px 4px 8px rgba(9, 30, 66, 0.25), 0px 0px 1px rgba(9, 30, 66, 0.31)',
53
+ borderRadius: 4,
54
+ maxWidth: 320,
55
+ maxHeight: '90vh',
56
+ overflow: 'auto',
57
+ }}
58
+ >
59
+ <MenuGroup>
60
+ <Section>
61
+ <HeadingItem>Select an extension</HeadingItem>
62
+ {(extensions || []).map((extension, extensionIndex) => {
63
+ return (
64
+ extension.modules &&
65
+ extension.modules.quickInsert &&
66
+ extension.modules.quickInsert
67
+ .map((item, nodeIndex) => {
68
+ if (
69
+ typeof item.action === 'object' &&
70
+ item.action.type === 'node'
71
+ ) {
72
+ const action = item.action as ExtensionModuleActionObject;
73
+
74
+ const nodes =
75
+ (extension.modules && extension.modules.nodes) || {};
76
+
77
+ const node = nodes[action.key];
78
+
79
+ let isSelected = false;
80
+
81
+ if (
82
+ !selectedExtension &&
83
+ extensionIndex === 0 &&
84
+ nodeIndex === 0
85
+ ) {
86
+ isSelected = true;
87
+ } else if (
88
+ selectedExtension === extension.key &&
89
+ selectedNode === item.key
90
+ ) {
91
+ isSelected = true;
92
+ }
93
+
94
+ const doSelect = () =>
95
+ onSelect({
96
+ extension: extension,
97
+ nodeKey: action.key,
98
+ node,
99
+ parameters: action.parameters || {},
100
+ item,
101
+ });
102
+
103
+ if (isSelected && isSelected !== hasSelection) {
104
+ doSelect();
105
+ setHasSelection(isSelected);
106
+ }
107
+
108
+ let iconProp: { elemBefore?: ReactNode } = {};
109
+
110
+ if (item.icon) {
111
+ const ExtensionIcon = Loadable<{ label: string }, never>({
112
+ loader: item.icon,
113
+ loading: () => null,
114
+ });
115
+
116
+ iconProp['elemBefore'] = (
117
+ <ExtensionIcon label={action.key} />
118
+ );
119
+ }
120
+
121
+ return (
122
+ <ButtonItem
123
+ isSelected={isSelected}
124
+ key={item.key}
125
+ onClick={doSelect}
126
+ description={item.description}
127
+ {...iconProp}
128
+ >
129
+ {item.title} ({extension.key})
130
+ </ButtonItem>
131
+ );
132
+ }
133
+ })
134
+ .filter(a => a)
135
+ );
136
+ })}
137
+ </Section>
138
+ </MenuGroup>
139
+ </div>
140
+ );
141
+ }