@instructure/canvas-rce 5.14.1 → 5.15.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 (489) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DEVELOPMENT.md +2 -2
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +18 -73
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +21 -77
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +15 -39
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +105 -64
  25. package/es/common/incremental-loading/LoadMoreButton.js +4 -4
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +5 -13
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +16 -10
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +24 -35
  36. package/es/enhance-user-content/enhance_user_content.js +32 -67
  37. package/es/enhance-user-content/external_links.js +6 -9
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +22 -50
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +48 -107
  42. package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
  43. package/es/format-message.js +4 -5
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.d.ts +59 -0
  47. package/es/index.js +6 -6
  48. package/es/rce/AlertMessageArea.js +15 -16
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +3 -2
  51. package/es/rce/RCE.js +16 -17
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +29 -14
  54. package/es/rce/RCEWrapper.js +530 -641
  55. package/es/rce/RCEWrapper.utils.js +131 -0
  56. package/es/rce/RCEWrapperProps.js +9 -5
  57. package/es/rce/RceHtmlEditor.js +17 -19
  58. package/es/rce/ResizeHandle.js +4 -10
  59. package/es/rce/RestoreAutoSaveModal.js +1 -2
  60. package/es/rce/ShowOnFocusButton/index.js +2 -8
  61. package/es/rce/StatusBar.js +10 -44
  62. package/es/rce/alertHandler.js +1 -4
  63. package/es/rce/contentInsertion.js +36 -59
  64. package/es/rce/contentInsertionUtils.js +6 -8
  65. package/es/rce/contentRendering.js +13 -17
  66. package/es/rce/customEvents.js +1 -0
  67. package/es/rce/editorLanguage.js +23 -11
  68. package/es/rce/indicatorRegion.js +7 -7
  69. package/es/rce/normalizeLocale.js +5 -3
  70. package/es/rce/normalizeProps.js +7 -5
  71. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  72. package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
  74. package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
  75. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  76. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  78. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
  83. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
  84. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  85. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  86. package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
  87. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
  93. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
  95. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
  96. package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
  97. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  98. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  99. package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
  100. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  101. package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
  102. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  103. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  104. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
  127. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  128. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
  129. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  130. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  131. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  132. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  133. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
  134. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  135. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  136. package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
  137. package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
  138. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  139. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
  140. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
  141. package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
  142. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
  144. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  145. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
  147. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  148. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  149. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
  150. package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
  151. package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
  153. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
  154. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  155. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_image/plugin.js +14 -20
  157. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
  159. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  160. package/es/rce/plugins/instructure_links/components/Link.js +68 -84
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  164. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
  165. package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
  166. package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
  167. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  168. package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
  169. package/es/rce/plugins/instructure_links/plugin.js +23 -49
  170. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  171. package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
  172. package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
  173. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  174. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  175. package/es/rce/plugins/instructure_paste/plugin.js +29 -33
  176. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
  177. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
  182. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  184. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  185. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  186. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
  187. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  188. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
  189. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
  199. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
  200. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  201. package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
  202. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
  203. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
  204. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  205. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
  206. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
  207. package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
  208. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  209. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  210. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
  211. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
  212. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
  213. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  214. package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
  215. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  216. package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
  217. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
  218. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  219. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
  220. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
  221. package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
  222. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  223. package/es/rce/plugins/shared/ColorInput.js +27 -39
  224. package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
  225. package/es/rce/plugins/shared/ContentSelection.js +29 -78
  226. package/es/rce/plugins/shared/DimensionUtils.js +3 -12
  227. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  228. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  229. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  230. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  231. package/es/rce/plugins/shared/EventUtils.js +2 -4
  232. package/es/rce/plugins/shared/Filter.js +8 -38
  233. package/es/rce/plugins/shared/FixedContentTray.js +16 -17
  234. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
  235. package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
  236. package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
  237. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
  239. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
  240. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
  241. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
  242. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
  244. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
  245. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  246. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
  247. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  250. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  252. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
  253. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
  254. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
  255. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  256. package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
  257. package/es/rce/plugins/shared/LinkDisplay.js +9 -11
  258. package/es/rce/plugins/shared/PreviewIcon.js +9 -15
  259. package/es/rce/plugins/shared/Previewable.js +1 -0
  260. package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
  261. package/es/rce/plugins/shared/StoreContext.js +9 -12
  262. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
  263. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  264. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
  265. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
  266. package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
  267. package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
  268. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  269. package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
  270. package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
  271. package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
  272. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
  273. package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
  274. package/es/rce/plugins/shared/Upload/index.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
  276. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
  277. package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
  278. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  279. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  280. package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
  281. package/es/rce/plugins/shared/compressionUtils.js +18 -28
  282. package/es/rce/plugins/shared/dateUtils.js +1 -1
  283. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  284. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
  285. package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
  286. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  287. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  288. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  289. package/es/rce/plugins/shared/fileShape.js +4 -9
  290. package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
  291. package/es/rce/plugins/shared/fileUtils.js +1 -2
  292. package/es/rce/plugins/shared/linkUtils.js +1 -16
  293. package/es/rce/plugins/shared/round.js +2 -2
  294. package/es/rce/plugins/shared/trayUtils.js +7 -3
  295. package/es/rce/plugins/shared/useDataUrl.js +13 -14
  296. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  297. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
  298. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
  299. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  300. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  301. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  302. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
  303. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
  315. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  316. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  317. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
  321. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
  322. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
  323. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  324. package/es/rce/root.js +17 -16
  325. package/es/rce/sanitizePlugins.js +1 -3
  326. package/es/rce/style.js +1 -4
  327. package/es/rce/tinyRCE.js +14 -9
  328. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  329. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  330. package/es/rce/transformContent.js +9 -11
  331. package/es/rce/types.js +1 -0
  332. package/es/rce/userOS.js +1 -1
  333. package/es/rce/wrapInitCb.js +50 -43
  334. package/es/rcs/api.js +100 -171
  335. package/es/rcs/buildError.js +8 -20
  336. package/es/rcs/fake.js +9 -20
  337. package/es/sidebar/actions/all_files.js +2 -0
  338. package/es/sidebar/actions/data.js +4 -7
  339. package/es/sidebar/actions/documents.js +19 -18
  340. package/es/sidebar/actions/files.js +21 -28
  341. package/es/sidebar/actions/filter.js +5 -5
  342. package/es/sidebar/actions/flickr.js +1 -1
  343. package/es/sidebar/actions/images.js +32 -37
  344. package/es/sidebar/actions/links.js +1 -0
  345. package/es/sidebar/actions/media.js +27 -28
  346. package/es/sidebar/actions/session.js +2 -5
  347. package/es/sidebar/actions/ui.js +1 -0
  348. package/es/sidebar/actions/upload.js +38 -74
  349. package/es/sidebar/containers/Sidebar.js +1 -2
  350. package/es/sidebar/containers/sidebarHandlers.js +9 -13
  351. package/es/sidebar/dragHtml.js +11 -5
  352. package/es/sidebar/reducers/all_files.js +5 -6
  353. package/es/sidebar/reducers/collection.js +12 -15
  354. package/es/sidebar/reducers/collections.js +6 -8
  355. package/es/sidebar/reducers/documents.js +7 -16
  356. package/es/sidebar/reducers/files.js +4 -6
  357. package/es/sidebar/reducers/filter.js +8 -23
  358. package/es/sidebar/reducers/flickr.js +10 -12
  359. package/es/sidebar/reducers/folder.js +16 -18
  360. package/es/sidebar/reducers/folders.js +4 -6
  361. package/es/sidebar/reducers/images.js +4 -16
  362. package/es/sidebar/reducers/index.js +3 -1
  363. package/es/sidebar/reducers/media.js +7 -16
  364. package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
  365. package/es/sidebar/reducers/noop.js +2 -2
  366. package/es/sidebar/reducers/rootFolderId.js +2 -5
  367. package/es/sidebar/reducers/session.js +4 -6
  368. package/es/sidebar/reducers/ui.js +6 -25
  369. package/es/sidebar/reducers/upload.js +16 -64
  370. package/es/sidebar/store/configureStore.js +1 -0
  371. package/es/sidebar/store/initialState.js +14 -26
  372. package/es/translations/locales/ab.js +1 -0
  373. package/es/translations/locales/ar.js +72 -8
  374. package/es/translations/locales/ca.js +72 -8
  375. package/es/translations/locales/cs.js +1 -0
  376. package/es/translations/locales/cs_CZ.js +1 -0
  377. package/es/translations/locales/cy.js +72 -8
  378. package/es/translations/locales/da-x-k12.js +72 -8
  379. package/es/translations/locales/da.js +72 -8
  380. package/es/translations/locales/da_DK.js +1 -0
  381. package/es/translations/locales/de.js +72 -8
  382. package/es/translations/locales/el.js +4 -0
  383. package/es/translations/locales/en-AU-x-unimelb.js +72 -8
  384. package/es/translations/locales/en-GB-x-ukhe.js +72 -8
  385. package/es/translations/locales/en.js +72 -8
  386. package/es/translations/locales/en_AU.js +72 -8
  387. package/es/translations/locales/en_CA.js +72 -8
  388. package/es/translations/locales/en_CY.js +72 -8
  389. package/es/translations/locales/en_GB.js +72 -8
  390. package/es/translations/locales/en_NZ.js +1 -0
  391. package/es/translations/locales/en_SE.js +1 -0
  392. package/es/translations/locales/en_US.js +1 -0
  393. package/es/translations/locales/es.js +72 -8
  394. package/es/translations/locales/es_ES.js +72 -8
  395. package/es/translations/locales/es_GT.js +1 -0
  396. package/es/translations/locales/fa_IR.js +7 -0
  397. package/es/translations/locales/fi.js +72 -8
  398. package/es/translations/locales/fr.js +72 -8
  399. package/es/translations/locales/fr_CA.js +73 -9
  400. package/es/translations/locales/ga.js +5 -13
  401. package/es/translations/locales/he.js +7 -0
  402. package/es/translations/locales/hi.js +72 -8
  403. package/es/translations/locales/ht.js +72 -8
  404. package/es/translations/locales/hu.js +7 -6
  405. package/es/translations/locales/hu_HU.js +1 -0
  406. package/es/translations/locales/hy.js +1 -0
  407. package/es/translations/locales/id.js +72 -8
  408. package/es/translations/locales/id_ID.js +1 -0
  409. package/es/translations/locales/is.js +72 -8
  410. package/es/translations/locales/it.js +72 -8
  411. package/es/translations/locales/ja.js +72 -8
  412. package/es/translations/locales/ko.js +1 -0
  413. package/es/translations/locales/ko_KR.js +1 -0
  414. package/es/translations/locales/lt.js +1 -0
  415. package/es/translations/locales/lt_LT.js +1 -0
  416. package/es/translations/locales/mi.js +72 -8
  417. package/es/translations/locales/mn_MN.js +1 -0
  418. package/es/translations/locales/ms.js +72 -8
  419. package/es/translations/locales/nb-x-k12.js +72 -8
  420. package/es/translations/locales/nb.js +72 -8
  421. package/es/translations/locales/nl.js +72 -8
  422. package/es/translations/locales/nl_NL.js +1 -0
  423. package/es/translations/locales/nn.js +7 -6
  424. package/es/translations/locales/pl.js +72 -8
  425. package/es/translations/locales/pt.js +72 -8
  426. package/es/translations/locales/pt_BR.js +72 -8
  427. package/es/translations/locales/ro.js +1 -0
  428. package/es/translations/locales/ru.js +72 -8
  429. package/es/translations/locales/se.js +1 -0
  430. package/es/translations/locales/sl.js +72 -8
  431. package/es/translations/locales/sv-x-k12.js +72 -8
  432. package/es/translations/locales/sv.js +72 -8
  433. package/es/translations/locales/sv_SE.js +1 -0
  434. package/es/translations/locales/tg.js +1 -0
  435. package/es/translations/locales/th.js +72 -8
  436. package/es/translations/locales/th_TH.js +1 -0
  437. package/es/translations/locales/tl_PH.js +1 -0
  438. package/es/translations/locales/tr.js +7 -0
  439. package/es/translations/locales/uk_UA.js +7 -0
  440. package/es/translations/locales/vi.js +72 -8
  441. package/es/translations/locales/vi_VN.js +1 -0
  442. package/es/translations/locales/zh-Hans.js +72 -8
  443. package/es/translations/locales/zh-Hant.js +72 -8
  444. package/es/translations/locales/zh.js +72 -8
  445. package/es/translations/locales/zh_HK.js +72 -8
  446. package/es/translations/locales/zh_TW.Big5.js +1 -0
  447. package/es/translations/locales/zh_TW.js +1 -0
  448. package/es/translations/tinymce/ar_SA.js +1 -0
  449. package/es/translations/tinymce/fi.js +1 -0
  450. package/es/translations/tinymce/ga.js +1 -0
  451. package/es/translations/tinymce/id.js +1 -0
  452. package/es/translations/tinymce/ru.js +1 -0
  453. package/es/translations/tinymce/ru_RU.js +1 -0
  454. package/es/translations/tinymce/sl.js +1 -0
  455. package/es/translations/tinymce/sr.js +1 -0
  456. package/es/translations/tinymce/th.js +1 -0
  457. package/es/translations/tinymce/uk_UA.js +1 -0
  458. package/es/translations/tinymce/vi_VN.js +1 -0
  459. package/es/util/TypedDict.js +4 -2
  460. package/es/util/elem-util.js +1 -1
  461. package/es/util/encrypted-storage.js +3 -13
  462. package/es/util/file-url-util.js +2 -7
  463. package/es/util/fullscreenHelpers.js +9 -9
  464. package/es/util/instui-icon-helper.js +4 -3
  465. package/es/util/loadingPlaceholder.js +39 -41
  466. package/es/util/simpleCache.js +1 -5
  467. package/es/util/string-util.js +1 -1
  468. package/es/util/textarea-editing-util.js +3 -7
  469. package/es/util/tinymce-plugin-util.js +0 -5
  470. package/es/util/url-util.js +20 -29
  471. package/eslint.config.js +250 -0
  472. package/jest.config.js +1 -1
  473. package/locales/en.json +190 -10
  474. package/package.json +78 -82
  475. package/scripts/build-canvas +2 -1
  476. package/scripts/build.js +4 -4
  477. package/scripts/installTranslations.js +7 -8
  478. package/testcafe/RCEWrapper.test.js +0 -1
  479. package/testcafe/StatusBar.test.js +0 -1
  480. package/testcafe/axe.test.js +3 -4
  481. package/testcafe/enhanceUserContent.test.js +0 -1
  482. package/tsconfig.json +21 -16
  483. package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
  484. package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
  485. package/.eslintrc +0 -45
  486. package/.prettierignore +0 -6
  487. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  488. package/es/rce/__mocks__/tinymceReact.js +0 -55
  489. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { useCallback, useState, useEffect, useRef, useMemo } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { CloseButton } from '@instructure/ui-buttons';
@@ -37,10 +38,9 @@ import { validIcon } from '../utils/iconValidation';
37
38
  import { IconMakerFormHasChanges } from '../utils/IconMakerFormHasChanges';
38
39
  import bridge from '../../../../bridge';
39
40
  import { shouldIgnoreClose } from '../utils/IconMakerClose';
40
- import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
41
+ import { instuiPopupMountNodeFn } from '../../../../util/fullscreenHelpers';
41
42
  const INVALID_MESSAGE = formatMessage('One of the following styles must be added to save an icon: Icon Color, Outline Size, Icon Text, or Image');
42
43
  const UNSAVED_CHANGES_MESSAGE = formatMessage('You have unsaved changes in the Icon Maker tray. Do you want to continue without saving these changes?');
43
-
44
44
  function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
45
45
  return /*#__PURE__*/React.createElement(View, {
46
46
  as: "div",
@@ -76,7 +76,6 @@ function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
76
76
  settings: settings
77
77
  }))));
78
78
  }
79
-
80
79
  function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRef, canvasOrigin, isLoading) {
81
80
  return isLoading() ? /*#__PURE__*/React.createElement(Flex, {
82
81
  justifyItems: "center"
@@ -93,7 +92,6 @@ function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRe
93
92
  canvasOrigin: canvasOrigin
94
93
  });
95
94
  }
96
-
97
95
  function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setReplaceAll, applyRef, isModified) {
98
96
  return /*#__PURE__*/React.createElement(View, {
99
97
  as: "div",
@@ -111,14 +109,12 @@ function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setRep
111
109
  isModified: isModified
112
110
  }));
113
111
  }
114
-
115
- export function IconMakerTray(_ref) {
116
- let {
117
- editor,
118
- onUnmount,
119
- editing,
120
- canvasOrigin
121
- } = _ref;
112
+ export function IconMakerTray({
113
+ editor,
114
+ onUnmount,
115
+ editing,
116
+ canvasOrigin
117
+ }) {
122
118
  const nameRef = useRef();
123
119
  const applyRef = useRef();
124
120
  const [isOpen, setIsOpen] = useState(true);
@@ -126,16 +122,18 @@ export function IconMakerTray(_ref) {
126
122
  const title = editing ? formatMessage('Edit Icon') : formatMessage('Create Icon');
127
123
  const [settings, settingsStatus, dispatch] = useSvgSettings(editor, editing, canvasOrigin);
128
124
  const [status, setStatus] = useState(statuses.IDLE);
129
- const [initialSettings, setInitialSettings] = useState({ ...defaultState
125
+ const [initialSettings, setInitialSettings] = useState({
126
+ ...defaultState
130
127
  });
131
128
  const isModified = useRef(false);
132
- const [mountNode, setMountNode] = useState(instuiPopupMountNode());
129
+ const [mountNode, setMountNode] = useState(instuiPopupMountNodeFn());
133
130
  const handleFullscreenChange = useCallback(() => {
134
- setMountNode(instuiPopupMountNode());
135
- }, []); // These useRef objects are needed because when the tray is closed using the escape key
131
+ setMountNode(instuiPopupMountNodeFn());
132
+ }, []);
133
+
134
+ // These useRef objects are needed because when the tray is closed using the escape key
136
135
  // objects created by useState are not available, causing the comparison between
137
136
  // initialSettings and settings to behave unexpectedly
138
-
139
137
  const initialSettingsRef = useRef(initialSettings);
140
138
  const settingsRef = useRef(settings);
141
139
  const statusRef = useRef(status);
@@ -143,13 +141,9 @@ export function IconMakerTray(_ref) {
143
141
  statusRef.current = useMemo(() => status, [status]);
144
142
  initialSettingsRef.current = useMemo(() => initialSettings, [initialSettings]);
145
143
  useEffect(() => {
146
- var _editor$rceWrapper, _editor$rceWrapper$_e, _editor$rceWrapper$_e2;
147
-
148
- editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper = editor.rceWrapper) === null || _editor$rceWrapper === void 0 ? void 0 : (_editor$rceWrapper$_e = _editor$rceWrapper._elementRef) === null || _editor$rceWrapper$_e === void 0 ? void 0 : (_editor$rceWrapper$_e2 = _editor$rceWrapper$_e.current) === null || _editor$rceWrapper$_e2 === void 0 ? void 0 : _editor$rceWrapper$_e2.addEventListener('fullscreenchange', handleFullscreenChange);
144
+ editor?.rceWrapper?._elementRef?.current?.addEventListener('fullscreenchange', handleFullscreenChange);
149
145
  return () => {
150
- var _editor$rceWrapper2, _editor$rceWrapper2$_, _editor$rceWrapper2$_2;
151
-
152
- editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper2 = editor.rceWrapper) === null || _editor$rceWrapper2 === void 0 ? void 0 : (_editor$rceWrapper2$_ = _editor$rceWrapper2._elementRef) === null || _editor$rceWrapper2$_ === void 0 ? void 0 : (_editor$rceWrapper2$_2 = _editor$rceWrapper2$_.current) === null || _editor$rceWrapper2$_2 === void 0 ? void 0 : _editor$rceWrapper2$_2.removeEventListener('fullscreenchange', handleFullscreenChange);
146
+ editor?.rceWrapper?._elementRef?.current?.removeEventListener('fullscreenchange', handleFullscreenChange);
153
147
  };
154
148
  }, [editor, handleFullscreenChange]);
155
149
  useEffect(() => {
@@ -157,34 +151,27 @@ export function IconMakerTray(_ref) {
157
151
  isModified.current = formHasChanges.hasChanges();
158
152
  }, [settings, initialSettings]);
159
153
  const storeProps = useStoreProps();
160
-
161
154
  const onClose = event => {
162
- if (shouldIgnoreClose(event === null || event === void 0 ? void 0 : event.target, editor === null || editor === void 0 ? void 0 : editor.id)) return;
163
- if ((statusRef === null || statusRef === void 0 ? void 0 : statusRef.current) === statuses.LOADING) return; // Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
164
-
165
- if (!!hasOpenModal()) return; // RCE already uses browser's confirm dialog for unsaved changes
155
+ if (shouldIgnoreClose(event?.target, editor?.id)) return;
156
+ if (statusRef?.current === statuses.LOADING) return;
157
+ // Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
158
+ // eslint-disable-next-line no-extra-boolean-cast
159
+ if (!!hasOpenModal()) return;
160
+ // RCE already uses browser's confirm dialog for unsaved changes
166
161
  // Its use here in the Icon Maker tray keeps that consistency
167
- // eslint-disable-next-line no-restricted-globals, no-alert
168
162
 
169
163
  if (isModified.current && !confirm(UNSAVED_CHANGES_MESSAGE)) {
170
164
  return;
171
165
  }
172
-
173
166
  setIsOpen(false);
174
167
  };
175
-
176
168
  const hasOpenModal = () => document.querySelector('[data-cid="Modal"]');
177
-
178
169
  const isLoading = () => status === statuses.LOADING;
179
-
180
170
  const onKeyDown = event => {
181
- var _applyRef$current, _nameRef$current;
182
-
183
171
  if (event.keyCode !== 9) return;
184
172
  event.preventDefault();
185
- event.shiftKey ? (_applyRef$current = applyRef.current) === null || _applyRef$current === void 0 ? void 0 : _applyRef$current.focus() : (_nameRef$current = nameRef.current) === null || _nameRef$current === void 0 ? void 0 : _nameRef$current.focus();
173
+ event.shiftKey ? applyRef.current?.focus() : nameRef.current?.focus();
186
174
  };
187
-
188
175
  useEffect(() => {
189
176
  setReplaceAll(false);
190
177
  }, [settings.name]);
@@ -195,16 +182,13 @@ export function IconMakerTray(_ref) {
195
182
  payload: null
196
183
  });
197
184
  setStatus(statuses.IDLE);
198
- } // eslint-disable-next-line react-hooks/exhaustive-deps
199
-
185
+ }
186
+ // eslint-disable-next-line react-hooks/exhaustive-deps
200
187
  }, [settings.color, settings.textColor, settings.text, settings.textSize, settings.textBackgroundColor, settings.textPosition, settings.imageSettings, settings.outlineColor, settings.outlineSize, settings.name]);
201
-
202
- const handleSubmit = _ref2 => {
203
- let {
204
- replaceFile = false
205
- } = _ref2;
188
+ const handleSubmit = ({
189
+ replaceFile = false
190
+ }) => {
206
191
  setStatus(statuses.LOADING);
207
-
208
192
  if (!validIcon(settings)) {
209
193
  dispatch({
210
194
  type: actions.SET_ERROR,
@@ -213,7 +197,6 @@ export function IconMakerTray(_ref) {
213
197
  setStatus(statuses.ERROR);
214
198
  return;
215
199
  }
216
-
217
200
  const svg = buildSvg(settings, {
218
201
  isPreview: false
219
202
  });
@@ -224,17 +207,14 @@ export function IconMakerTray(_ref) {
224
207
  }, {
225
208
  onDuplicate: replaceFile && 'overwrite'
226
209
  }).then(writeIconToRCE).then(() => setIsOpen(false)).catch(err => {
227
- // eslint-disable-next-line no-console
228
210
  console.error(err);
229
211
  setStatus(statuses.ERROR);
230
212
  });
231
213
  };
232
-
233
- const writeIconToRCE = _ref3 => {
234
- let {
235
- url,
236
- display_name
237
- } = _ref3;
214
+ const writeIconToRCE = ({
215
+ url,
216
+ display_name
217
+ }) => {
238
218
  const {
239
219
  alt,
240
220
  isDecorative,
@@ -254,12 +234,12 @@ export function IconMakerTray(_ref) {
254
234
  STYLE: externalStyle,
255
235
  // DON'T CHANGE BEFORE READING COMMENT ABOVE
256
236
  width: externalWidth
257
- }; // Mark the image as an icon maker icon.
237
+ };
258
238
 
239
+ // Mark the image as an icon maker icon.
259
240
  addIconMakerAttributes(imageAttributes);
260
241
  bridge.embedImage(imageAttributes);
261
242
  };
262
-
263
243
  const defaultImageSettings = () => {
264
244
  return {
265
245
  mode: '',
@@ -270,7 +250,6 @@ export function IconMakerTray(_ref) {
270
250
  cropperSettings: null
271
251
  };
272
252
  };
273
-
274
253
  const replaceInitialSettings = () => {
275
254
  const name = editing ? settings.name : undefined;
276
255
  const textPosition = editing ? settings.textPosition : defaultState.textPosition;
@@ -291,17 +270,16 @@ export function IconMakerTray(_ref) {
291
270
  imageSettings
292
271
  });
293
272
  };
294
-
295
273
  useEffect(() => {
296
274
  setStatus(settingsStatus);
297
- replaceInitialSettings(); // eslint-disable-next-line react-hooks/exhaustive-deps
298
- }, [settingsStatus]);
275
+ replaceInitialSettings();
299
276
 
277
+ // eslint-disable-next-line react-hooks/exhaustive-deps
278
+ }, [settingsStatus]);
300
279
  const handleAlertDismissal = () => dispatch({
301
280
  type: actions.SET_ERROR,
302
281
  payload: null
303
282
  });
304
-
305
283
  return /*#__PURE__*/React.createElement(FixedContentTray, {
306
284
  title: title,
307
285
  isOpen: isOpen,
@@ -15,13 +15,13 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { View } from '@instructure/ui-view';
21
22
  import Images from '../../instructure_image/Images';
22
23
  import { contentTrayDocumentShape } from '../../shared/fileShape';
23
24
  import { ICON_MAKER_ICONS } from '../svg/constants';
24
-
25
25
  const SavedIconMakerList = props => {
26
26
  const {
27
27
  sortBy,
@@ -31,7 +31,8 @@ const SavedIconMakerList = props => {
31
31
  fetchInitialImages,
32
32
  fetchNextImages,
33
33
  contextType
34
- } = { ...props
34
+ } = {
35
+ ...props
35
36
  };
36
37
  const {
37
38
  files,
@@ -62,9 +63,8 @@ const SavedIconMakerList = props => {
62
63
  isIconMaker: true
63
64
  }));
64
65
  };
65
- /* eslint-disable react/no-unused-prop-types */
66
-
67
66
 
67
+ /* eslint-disable react/no-unused-prop-types */
68
68
  SavedIconMakerList.propTypes = {
69
69
  sortBy: PropTypes.shape({
70
70
  sort: PropTypes.oneOf(['date_added', 'alphabetical']).isRequired,
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2021 - present Instructure, Inc.
5
3
  *
@@ -17,13 +15,13 @@
17
15
  * You should have received a copy of the GNU Affero General Public License along
18
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
17
  */
18
+
20
19
  import bridge from '../../../bridge';
21
20
  import formatMessage from '../../../format-message';
22
21
  import { isOKToLink } from '../../contentInsertionUtils';
23
22
  import clickCallback, { CREATE_ICON_MAKER, EDIT_ICON_MAKER, LIST_ICON_MAKER } from './clickCallback';
24
23
  import registerEditToolbar from './registerEditToolbar';
25
24
  import tinymce from 'tinymce';
26
-
27
25
  function getMenuItems() {
28
26
  return [{
29
27
  text: formatMessage('Create Icon Maker Icon'),
@@ -33,27 +31,24 @@ function getMenuItems() {
33
31
  value: 'instructure_list_icon_maker'
34
32
  }];
35
33
  }
36
-
37
34
  function handleOptionSelected(ed, value) {
38
35
  switch (value) {
39
36
  case 'instructure_create_icon_maker':
40
37
  ed.focus(true);
41
38
  ed.execCommand('instructureTrayForIconMakerPlugin', false, CREATE_ICON_MAKER);
42
39
  break;
43
-
44
40
  case 'instructure_list_icon_maker':
45
41
  ed.focus(true);
46
42
  ed.execCommand('instructureTrayForIconMakerPlugin', false, LIST_ICON_MAKER);
47
43
  break;
48
-
49
44
  case 'instructure_edit_icon_maker':
50
45
  ed.focus(true);
51
46
  ed.execCommand('instructureTrayForIconMakerPlugin', false, EDIT_ICON_MAKER);
52
47
  break;
53
48
  }
54
- } // Register plugin
55
-
49
+ }
56
50
 
51
+ // Register plugin
57
52
  tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
58
53
  // Register tray control command
59
54
  ed.addCommand('instructureTrayForIconMakerPlugin', (_ui, type) => {
@@ -62,8 +57,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
62
57
  } else {
63
58
  clickCallback(ed, document, type);
64
59
  }
65
- }); // Register menu items
60
+ });
66
61
 
62
+ // Register menu items
67
63
  ed.ui.registry.addNestedMenuItem('instructure_icon_maker', {
68
64
  text: formatMessage('Icon Maker Icons'),
69
65
  icon: 'buttons',
@@ -76,8 +72,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
76
72
  return () => {};
77
73
  }
78
74
  }))
79
- }); // Register button
75
+ });
80
76
 
77
+ // Register button
81
78
  ed.ui.registry.addMenuButton('instructure_icon_maker', {
82
79
  tooltip: formatMessage('Icon Maker Icons'),
83
80
  icon: 'buttons',
@@ -87,21 +84,20 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
87
84
  value: item.value,
88
85
  onAction: () => handleOptionSelected(ed, item.value)
89
86
  }))),
90
-
91
87
  onSetup(api) {
92
88
  function handleNodeChange(_e) {
93
89
  api.setDisabled(!isOKToLink(ed.selection.getContent()));
94
90
  }
95
-
96
91
  setTimeout(handleNodeChange);
97
92
  ed.on('NodeChange', handleNodeChange);
98
93
  return () => {
99
94
  ed.off('NodeChange', handleNodeChange);
100
95
  };
101
96
  }
97
+ });
102
98
 
103
- }); // Register context toolbar for editing existing icon maker icons
104
-
99
+ // Register context toolbar for editing existing icon maker icons
100
+ // @ts-expect-error
105
101
  registerEditToolbar(ed, api => {
106
102
  if (!api.isDisabled()) {
107
103
  handleOptionSelected(ed, 'instructure_edit_icon_maker');
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import formatMessage from '../../../../format-message';
19
20
  export const initialState = {
20
21
  mode: '',
@@ -91,104 +92,102 @@ export const modes = {
91
92
  label: formatMessage('Multi Color Image')
92
93
  }
93
94
  };
94
-
95
95
  const imageSection = (state, action) => {
96
96
  switch (action.type) {
97
97
  case actions.START_LOADING.type:
98
- return { ...state,
98
+ return {
99
+ ...state,
99
100
  loading: true
100
101
  };
101
-
102
102
  case actions.STOP_LOADING.type:
103
- return { ...state,
103
+ return {
104
+ ...state,
104
105
  loading: false
105
106
  };
106
-
107
107
  case actions.SET_IMAGE.type:
108
- return { ...state,
108
+ return {
109
+ ...state,
109
110
  image: action.payload
110
111
  };
111
-
112
112
  case actions.SET_IMAGE_NAME.type:
113
- return { ...state,
113
+ return {
114
+ ...state,
114
115
  imageName: action.payload
115
116
  };
116
-
117
117
  case actions.SET_COMPRESSION_STATUS.type:
118
- return { ...state,
118
+ return {
119
+ ...state,
119
120
  compressed: action.payload
120
121
  };
121
-
122
122
  case actions.CLEAR_IMAGE.type:
123
- return { ...state,
123
+ return {
124
+ ...state,
124
125
  image: '',
125
126
  imageName: '',
126
127
  compressed: false
127
128
  };
128
-
129
129
  case actions.SET_ICON.type:
130
- return { ...state,
130
+ return {
131
+ ...state,
131
132
  icon: action.payload
132
133
  };
133
-
134
134
  case actions.SET_ICON_FILL_COLOR.type:
135
- return { ...state,
135
+ return {
136
+ ...state,
136
137
  iconFillColor: action.payload
137
138
  };
138
-
139
139
  case actions.CLEAR_MODE.type:
140
- return { ...state,
140
+ return {
141
+ ...state,
141
142
  mode: ''
142
143
  };
143
-
144
144
  case actions.SET_IMAGE_COLLECTION_OPEN.type:
145
- return { ...state,
145
+ return {
146
+ ...state,
146
147
  collectionOpen: action.payload
147
148
  };
148
-
149
149
  case actions.RESET_ALL.type:
150
- return { ...state,
150
+ return {
151
+ ...state,
151
152
  ...initialState
152
153
  };
153
-
154
154
  case modes.uploadImages.type:
155
- return { ...state,
155
+ return {
156
+ ...state,
156
157
  mode: modes.uploadImages.type
157
158
  };
158
-
159
159
  case modes.singleColorImages.type:
160
- return { ...state,
160
+ return {
161
+ ...state,
161
162
  mode: modes.singleColorImages.type
162
163
  };
163
-
164
164
  case modes.multiColorImages.type:
165
- return { ...state,
165
+ return {
166
+ ...state,
166
167
  mode: modes.multiColorImages.type
167
168
  };
168
-
169
169
  case modes.courseImages.type:
170
- return { ...state,
170
+ return {
171
+ ...state,
171
172
  mode: modes.courseImages.type
172
173
  };
173
-
174
174
  case actions.UPDATE_SETTINGS.type:
175
- return { ...state,
175
+ return {
176
+ ...state,
176
177
  ...action.payload
177
178
  };
178
-
179
179
  case actions.SET_CROPPER_OPEN.type:
180
- return { ...state,
180
+ return {
181
+ ...state,
181
182
  cropperOpen: action.payload
182
183
  };
183
-
184
184
  case actions.SET_CROPPER_SETTINGS.type:
185
- return { ...state,
185
+ return {
186
+ ...state,
186
187
  cropperSettings: action.payload
187
188
  };
188
-
189
189
  default:
190
190
  throw Error('Unknown action for image selection reducer');
191
191
  }
192
192
  };
193
-
194
193
  export default imageSection;
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import { DEFAULT_SETTINGS } from '../svg/constants';
19
20
  export const defaultState = DEFAULT_SETTINGS;
20
21
  export const actions = {
@@ -28,70 +29,69 @@ export const actions = {
28
29
  SET_HEIGHT: 'SetHeight',
29
30
  SET_ERROR: 'SetError'
30
31
  };
31
-
32
32
  const buildTransformString = state => {
33
33
  // All transforms that may be applied to an image
34
34
  return [`translate(${state.translateX},${state.translateY})`].join(' ');
35
35
  };
36
-
37
36
  const nextStateForTransform = (currentState, transformProp, value) => {
38
37
  // Set the transform property that actually changed
39
- let nextState = { ...currentState,
38
+ let nextState = {
39
+ ...currentState,
40
40
  [transformProp]: value
41
- }; // Regenerate the new "transform" string, taking into account the transform
42
- // property value that was updated
41
+ };
43
42
 
44
- nextState = { ...nextState,
43
+ // Regenerate the new "transform" string, taking into account the transform
44
+ // property value that was updated
45
+ nextState = {
46
+ ...nextState,
45
47
  transform: buildTransformString(nextState)
46
48
  };
47
49
  return nextState;
48
50
  };
49
-
50
51
  export const svgSettings = (state, action) => {
51
52
  switch (action.type) {
52
53
  case actions.SET_IMAGE_SETTINGS:
53
- return { ...state,
54
+ return {
55
+ ...state,
54
56
  imageSettings: action.payload
55
57
  };
56
-
57
58
  case actions.SET_EMBED_IMAGE:
58
- return { ...state,
59
+ return {
60
+ ...state,
59
61
  embedImage: action.payload
60
62
  };
61
-
62
63
  case actions.SET_X:
63
- return { ...state,
64
+ return {
65
+ ...state,
64
66
  x: action.payload
65
67
  };
66
-
67
68
  case actions.SET_Y:
68
- return { ...state,
69
+ return {
70
+ ...state,
69
71
  y: action.payload
70
72
  };
71
-
72
73
  case actions.SET_WIDTH:
73
- return { ...state,
74
+ return {
75
+ ...state,
74
76
  width: action.payload
75
77
  };
76
-
77
78
  case actions.SET_HEIGHT:
78
- return { ...state,
79
+ return {
80
+ ...state,
79
81
  height: action.payload
80
82
  };
81
-
82
83
  case actions.SET_ERROR:
83
- return { ...state,
84
+ return {
85
+ ...state,
84
86
  error: action.payload
85
87
  };
86
-
87
88
  case actions.SET_TRANSLATE_X:
88
89
  return nextStateForTransform(state, 'translateX', action.payload);
89
-
90
90
  case actions.SET_TRANSLATE_Y:
91
91
  return nextStateForTransform(state, 'translateY', action.payload);
92
-
93
92
  default:
94
- return { ...state,
93
+ return {
94
+ ...state,
95
95
  ...action
96
96
  };
97
97
  }
@@ -15,10 +15,11 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import formatMessage from '../../../format-message';
19
20
  import { BUTTON_ID, TOOLBAR_ID, ICON_MAKER_ATTRIBUTE } from './svg/constants';
20
21
  import TrayController from '../instructure_image/ImageOptionsTray/TrayController';
21
- export const shouldShowEditButton = node => !!(node !== null && node !== void 0 && node.getAttribute(ICON_MAKER_ATTRIBUTE));
22
+ export const shouldShowEditButton = node => !!node?.getAttribute(ICON_MAKER_ATTRIBUTE);
22
23
  export const EDIT_ALT_TEXT_BUTTON_ID = 'inst-icon-maker-edit-alt-text';
23
24
  const trayController = new TrayController();
24
25
  export default function registerEditToolbar(editor, onAction) {
@@ -26,7 +27,6 @@ export default function registerEditToolbar(editor, onAction) {
26
27
  addAltTextButton(editor);
27
28
  addContextToolbar(editor);
28
29
  }
29
-
30
30
  function addButton(editor, onAction) {
31
31
  editor.ui.registry.addButton(BUTTON_ID, {
32
32
  onAction,
@@ -34,7 +34,6 @@ function addButton(editor, onAction) {
34
34
  tooltip: formatMessage('Edit Existing Icon Maker Icon')
35
35
  });
36
36
  }
37
-
38
37
  function addAltTextButton(editor) {
39
38
  editor.ui.registry.addButton(EDIT_ALT_TEXT_BUTTON_ID, {
40
39
  onAction: () => {
@@ -45,7 +44,6 @@ function addAltTextButton(editor) {
45
44
  tooltip: formatMessage('Edit alt text for this icon instance')
46
45
  });
47
46
  }
48
-
49
47
  function addContextToolbar(editor) {
50
48
  editor.ui.registry.addContextToolbar(TOOLBAR_ID, {
51
49
  items: `${BUTTON_ID} ${EDIT_ALT_TEXT_BUTTON_ID}`,
@@ -15,15 +15,16 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
- export const TYPE = 'image/svg+xml-icon-maker-icons'; // New constants added to centralize imports
19
18
 
19
+ export const TYPE = 'image/svg+xml-icon-maker-icons';
20
+ // New constants added to centralize imports
20
21
  export const BUTTON_ID = 'inst-icon-maker-edit';
21
22
  export const TOOLBAR_ID = 'inst-icon-maker-edit-toolbar';
22
23
  export const ICON_MAKER_ATTRIBUTE = 'data-inst-icon-maker-icon';
23
24
  export const ICON_MAKER_DOWNLOAD_URL_ATTR = 'data-download-url';
24
25
  export const ICON_MAKER_ICONS = 'icon_maker_icons';
25
- export const ICON_MAKER_PARAM = 'icon_maker_icon'; // different definitions for filetypes
26
-
26
+ export const ICON_MAKER_PARAM = 'icon_maker_icon';
27
+ // different definitions for filetypes
27
28
  export const SVG_XML_TYPE = 'image/svg+xml';
28
29
  export const SVG_TYPE = 'image/svg';
29
30
  export const Size = {