@instructure/canvas-rce 5.14.1 → 5.14.2

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 (481) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/DEVELOPMENT.md +1 -1
  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/plugins/shared/__mocks__/screenfull.js → __tests__/sidebar/reducers/all_files.test.js} +10 -6
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +8 -56
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +7 -28
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +104 -59
  25. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  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 +15 -8
  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 +17 -28
  36. package/es/enhance-user-content/enhance_user_content.js +28 -60
  37. package/es/enhance-user-content/external_links.js +5 -8
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +12 -34
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +35 -82
  42. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  43. package/es/format-message.js +3 -4
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.js +3 -1
  47. package/es/rce/AlertMessageArea.js +1 -1
  48. package/es/rce/DraggingBlocker.js +4 -2
  49. package/es/rce/KeyboardShortcutModal.js +1 -0
  50. package/es/rce/RCE.js +12 -11
  51. package/es/rce/RCEGlobals.js +12 -10
  52. package/es/rce/RCEVariants.js +27 -10
  53. package/es/rce/RCEWrapper.js +167 -386
  54. package/es/rce/RCEWrapperProps.js +8 -3
  55. package/es/rce/RceHtmlEditor.js +5 -8
  56. package/es/rce/ResizeHandle.js +3 -8
  57. package/es/rce/RestoreAutoSaveModal.js +1 -2
  58. package/es/rce/ShowOnFocusButton/index.js +0 -6
  59. package/es/rce/StatusBar.js +8 -37
  60. package/es/rce/alertHandler.js +1 -4
  61. package/es/rce/contentInsertion.js +35 -57
  62. package/es/rce/contentInsertionUtils.js +6 -8
  63. package/es/rce/contentRendering.js +7 -12
  64. package/es/rce/customEvents.js +1 -0
  65. package/es/rce/editorLanguage.js +22 -10
  66. package/es/rce/indicatorRegion.js +6 -5
  67. package/es/rce/normalizeLocale.js +5 -3
  68. package/es/rce/normalizeProps.js +3 -1
  69. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  70. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  71. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  73. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  74. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  75. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  76. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  82. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  83. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  84. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  85. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  86. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  92. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  94. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  95. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  96. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  97. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  98. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  99. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  100. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  101. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  102. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  103. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  126. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  127. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  128. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  129. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  130. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  131. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  132. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  134. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  135. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  136. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  137. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  138. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  139. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  140. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  141. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  143. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  144. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  146. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  147. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  148. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  149. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  150. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  152. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  153. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  154. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  155. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  158. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  159. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  163. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  164. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  165. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  166. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  167. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  168. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  169. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  170. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  171. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  172. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  173. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  174. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  175. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  176. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  181. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  183. package/es/rce/{__mocks__/_mockStudioPlayer.js → plugins/instructure_rce_external_tools/constants.js} +11 -3
  184. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  185. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  186. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  187. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  188. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  197. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  199. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  201. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  202. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  204. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  205. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  206. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  207. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  208. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  210. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  211. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  212. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  213. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  214. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  215. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  216. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  217. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  218. package/es/rce/plugins/shared/CanvasContentTray.js +22 -49
  219. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  220. package/es/rce/plugins/shared/ColorInput.js +5 -14
  221. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  222. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  223. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  224. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  225. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  226. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  227. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  228. package/es/rce/plugins/shared/EventUtils.js +1 -3
  229. package/es/rce/plugins/shared/Filter.js +8 -38
  230. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  231. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  232. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  233. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  234. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  235. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  236. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  237. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  238. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  239. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  240. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  241. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  242. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  243. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  244. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  245. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  247. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  249. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  250. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  252. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  253. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  254. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  255. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  256. package/es/rce/plugins/shared/Previewable.js +1 -0
  257. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  258. package/es/rce/plugins/shared/StoreContext.js +1 -2
  259. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  260. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  261. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  262. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  263. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  264. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  265. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  266. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  267. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  268. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  269. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  270. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  271. package/es/rce/plugins/shared/Upload/index.js +1 -0
  272. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  273. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  274. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  276. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  277. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  278. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  279. package/es/rce/plugins/shared/dateUtils.js +1 -1
  280. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  281. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  282. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  283. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  284. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  285. package/es/rce/plugins/shared/fileShape.js +4 -9
  286. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  287. package/es/rce/plugins/shared/fileUtils.js +1 -2
  288. package/es/rce/plugins/shared/linkUtils.js +1 -16
  289. package/es/rce/plugins/shared/round.js +1 -0
  290. package/es/rce/plugins/shared/trayUtils.js +4 -3
  291. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  292. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  293. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  294. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  295. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  296. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  297. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  299. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  300. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  314. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  320. package/es/rce/root.js +9 -8
  321. package/es/rce/sanitizePlugins.js +1 -3
  322. package/es/rce/style.js +1 -4
  323. package/es/rce/tinyRCE.js +13 -9
  324. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  325. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  326. package/es/rce/transformContent.js +8 -10
  327. package/es/rce/types.js +1 -0
  328. package/es/rce/userOS.js +1 -1
  329. package/es/rce/wrapInitCb.js +50 -43
  330. package/es/rcs/api.js +61 -116
  331. package/es/rcs/buildError.js +5 -17
  332. package/es/rcs/fake.js +4 -13
  333. package/es/sidebar/actions/all_files.js +2 -0
  334. package/es/sidebar/actions/data.js +4 -7
  335. package/es/sidebar/actions/documents.js +9 -6
  336. package/es/sidebar/actions/files.js +3 -6
  337. package/es/sidebar/actions/filter.js +1 -0
  338. package/es/sidebar/actions/flickr.js +1 -1
  339. package/es/sidebar/actions/images.js +12 -11
  340. package/es/sidebar/actions/links.js +1 -0
  341. package/es/sidebar/actions/media.js +12 -10
  342. package/es/sidebar/actions/session.js +1 -3
  343. package/es/sidebar/actions/ui.js +1 -0
  344. package/es/sidebar/actions/upload.js +14 -39
  345. package/es/sidebar/containers/Sidebar.js +1 -2
  346. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  347. package/es/sidebar/dragHtml.js +5 -3
  348. package/es/sidebar/reducers/all_files.js +4 -3
  349. package/es/sidebar/reducers/collection.js +12 -13
  350. package/es/sidebar/reducers/collections.js +5 -5
  351. package/es/sidebar/reducers/documents.js +6 -13
  352. package/es/sidebar/reducers/files.js +3 -3
  353. package/es/sidebar/reducers/filter.js +1 -8
  354. package/es/sidebar/reducers/flickr.js +9 -9
  355. package/es/sidebar/reducers/folder.js +15 -15
  356. package/es/sidebar/reducers/folders.js +3 -3
  357. package/es/sidebar/reducers/images.js +3 -13
  358. package/es/sidebar/reducers/index.js +3 -1
  359. package/es/sidebar/reducers/media.js +6 -13
  360. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  361. package/es/sidebar/reducers/noop.js +1 -0
  362. package/es/sidebar/reducers/rootFolderId.js +1 -2
  363. package/es/sidebar/reducers/session.js +3 -3
  364. package/es/sidebar/reducers/ui.js +3 -16
  365. package/es/sidebar/reducers/upload.js +8 -40
  366. package/es/sidebar/store/configureStore.js +1 -0
  367. package/es/sidebar/store/initialState.js +13 -24
  368. package/es/translations/locales/ab.js +1 -0
  369. package/es/translations/locales/ar.js +67 -9
  370. package/es/translations/locales/ca.js +67 -9
  371. package/es/translations/locales/cs.js +1 -0
  372. package/es/translations/locales/cs_CZ.js +1 -0
  373. package/es/translations/locales/cy.js +67 -9
  374. package/es/translations/locales/da-x-k12.js +67 -9
  375. package/es/translations/locales/da.js +67 -9
  376. package/es/translations/locales/da_DK.js +1 -0
  377. package/es/translations/locales/de.js +67 -9
  378. package/es/translations/locales/el.js +4 -0
  379. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  380. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  381. package/es/translations/locales/en.js +72 -8
  382. package/es/translations/locales/en_AU.js +67 -9
  383. package/es/translations/locales/en_CA.js +67 -9
  384. package/es/translations/locales/en_CY.js +67 -9
  385. package/es/translations/locales/en_GB.js +67 -9
  386. package/es/translations/locales/en_NZ.js +1 -0
  387. package/es/translations/locales/en_SE.js +1 -0
  388. package/es/translations/locales/en_US.js +1 -0
  389. package/es/translations/locales/es.js +67 -9
  390. package/es/translations/locales/es_ES.js +67 -9
  391. package/es/translations/locales/es_GT.js +1 -0
  392. package/es/translations/locales/fa_IR.js +7 -0
  393. package/es/translations/locales/fi.js +67 -9
  394. package/es/translations/locales/fr.js +67 -9
  395. package/es/translations/locales/fr_CA.js +68 -10
  396. package/es/translations/locales/ga.js +5 -13
  397. package/es/translations/locales/he.js +7 -0
  398. package/es/translations/locales/hi.js +67 -9
  399. package/es/translations/locales/ht.js +67 -9
  400. package/es/translations/locales/hu.js +7 -6
  401. package/es/translations/locales/hu_HU.js +1 -0
  402. package/es/translations/locales/hy.js +1 -0
  403. package/es/translations/locales/id.js +67 -9
  404. package/es/translations/locales/id_ID.js +1 -0
  405. package/es/translations/locales/is.js +67 -9
  406. package/es/translations/locales/it.js +67 -9
  407. package/es/translations/locales/ja.js +67 -9
  408. package/es/translations/locales/ko.js +1 -0
  409. package/es/translations/locales/ko_KR.js +1 -0
  410. package/es/translations/locales/lt.js +1 -0
  411. package/es/translations/locales/lt_LT.js +1 -0
  412. package/es/translations/locales/mi.js +67 -9
  413. package/es/translations/locales/mn_MN.js +1 -0
  414. package/es/translations/locales/ms.js +67 -9
  415. package/es/translations/locales/nb-x-k12.js +67 -9
  416. package/es/translations/locales/nb.js +67 -9
  417. package/es/translations/locales/nl.js +67 -9
  418. package/es/translations/locales/nl_NL.js +1 -0
  419. package/es/translations/locales/nn.js +7 -6
  420. package/es/translations/locales/pl.js +67 -9
  421. package/es/translations/locales/pt.js +67 -9
  422. package/es/translations/locales/pt_BR.js +67 -9
  423. package/es/translations/locales/ro.js +1 -0
  424. package/es/translations/locales/ru.js +67 -9
  425. package/es/translations/locales/se.js +1 -0
  426. package/es/translations/locales/sl.js +67 -9
  427. package/es/translations/locales/sv-x-k12.js +67 -9
  428. package/es/translations/locales/sv.js +67 -9
  429. package/es/translations/locales/sv_SE.js +1 -0
  430. package/es/translations/locales/tg.js +1 -0
  431. package/es/translations/locales/th.js +67 -9
  432. package/es/translations/locales/th_TH.js +1 -0
  433. package/es/translations/locales/tl_PH.js +1 -0
  434. package/es/translations/locales/tr.js +7 -0
  435. package/es/translations/locales/uk_UA.js +7 -0
  436. package/es/translations/locales/vi.js +67 -9
  437. package/es/translations/locales/vi_VN.js +1 -0
  438. package/es/translations/locales/zh-Hans.js +67 -9
  439. package/es/translations/locales/zh-Hant.js +67 -9
  440. package/es/translations/locales/zh.js +67 -9
  441. package/es/translations/locales/zh_HK.js +67 -9
  442. package/es/translations/locales/zh_TW.Big5.js +1 -0
  443. package/es/translations/locales/zh_TW.js +1 -0
  444. package/es/translations/tinymce/ar_SA.js +1 -0
  445. package/es/translations/tinymce/fi.js +1 -0
  446. package/es/translations/tinymce/ga.js +1 -0
  447. package/es/translations/tinymce/id.js +1 -0
  448. package/es/translations/tinymce/ru.js +1 -0
  449. package/es/translations/tinymce/ru_RU.js +1 -0
  450. package/es/translations/tinymce/sl.js +1 -0
  451. package/es/translations/tinymce/sr.js +1 -0
  452. package/es/translations/tinymce/th.js +1 -0
  453. package/es/translations/tinymce/uk_UA.js +1 -0
  454. package/es/translations/tinymce/vi_VN.js +1 -0
  455. package/es/util/TypedDict.js +4 -2
  456. package/es/util/encrypted-storage.js +3 -13
  457. package/es/util/file-url-util.js +1 -6
  458. package/es/util/fullscreenHelpers.js +4 -1
  459. package/es/util/instui-icon-helper.js +4 -3
  460. package/es/util/loadingPlaceholder.js +38 -39
  461. package/es/util/simpleCache.js +0 -3
  462. package/es/util/string-util.js +1 -1
  463. package/es/util/textarea-editing-util.js +3 -7
  464. package/es/util/tinymce-plugin-util.js +0 -5
  465. package/es/util/url-util.js +16 -25
  466. package/eslint.config.js +239 -0
  467. package/jest.config.js +1 -1
  468. package/package.json +76 -81
  469. package/scripts/build-canvas +2 -1
  470. package/scripts/build.js +4 -4
  471. package/testcafe/RCEWrapper.test.js +0 -1
  472. package/testcafe/StatusBar.test.js +0 -1
  473. package/testcafe/axe.test.js +3 -4
  474. package/testcafe/enhanceUserContent.test.js +0 -1
  475. package/tsconfig.json +20 -15
  476. package/.eslintrc +0 -45
  477. package/.prettierignore +0 -6
  478. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  479. package/es/rce/__mocks__/styleMock.js +0 -18
  480. package/es/rce/__mocks__/tinymceReact.js +0 -55
  481. 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, { useEffect } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { View } from '@instructure/ui-view';
@@ -27,12 +28,11 @@ import { isAnUnsupportedGifPngImage, MAX_GIF_PNG_SIZE_BYTES } from './utils';
27
28
  import { actions as svgActions } from '../../../reducers/svgSettings';
28
29
  import formatMessage from '../../../../../../format-message';
29
30
  import { PREVIEW_WIDTH, PREVIEW_HEIGHT } from '../../../../shared/ImageCropper/constants';
30
-
31
31
  const dispatchImage = async (dispatch, onChange, dataUrl, dataBlob) => {
32
32
  let image = dataUrl;
33
-
34
33
  if (isAnUnsupportedGifPngImage(dataBlob)) {
35
- dispatch({ ...actions.CLEAR_IMAGE
34
+ dispatch({
35
+ ...actions.CLEAR_IMAGE
36
36
  });
37
37
  return onChange({
38
38
  type: svgActions.SET_ERROR,
@@ -41,18 +41,18 @@ const dispatchImage = async (dispatch, onChange, dataUrl, dataBlob) => {
41
41
  })
42
42
  });
43
43
  }
44
-
45
- dispatch({ ...actions.SET_IMAGE,
44
+ dispatch({
45
+ ...actions.SET_IMAGE,
46
46
  payload: ''
47
47
  });
48
- dispatch({ ...actions.SET_CROPPER_OPEN,
48
+ dispatch({
49
+ ...actions.SET_CROPPER_OPEN,
49
50
  payload: true
50
51
  });
51
52
  onChange({
52
53
  type: svgActions.SET_EMBED_IMAGE,
53
54
  payload: ''
54
55
  });
55
-
56
56
  if (canCompressImage() && shouldCompressImage(dataBlob)) {
57
57
  try {
58
58
  // If compression fails, use the original one
@@ -66,13 +66,13 @@ const dispatchImage = async (dispatch, onChange, dataUrl, dataBlob) => {
66
66
  // eslint-disable-next-line no-console
67
67
  console.error(e);
68
68
  }
69
-
70
- dispatch({ ...actions.SET_COMPRESSION_STATUS,
69
+ dispatch({
70
+ ...actions.SET_COMPRESSION_STATUS,
71
71
  payload: true
72
72
  });
73
73
  }
74
-
75
- dispatch({ ...actions.SET_IMAGE,
74
+ dispatch({
75
+ ...actions.SET_IMAGE,
76
76
  payload: image
77
77
  });
78
78
  onChange({
@@ -80,7 +80,6 @@ const dispatchImage = async (dispatch, onChange, dataUrl, dataBlob) => {
80
80
  payload: image
81
81
  });
82
82
  };
83
-
84
83
  const Course = _ref => {
85
84
  let {
86
85
  dispatch,
@@ -102,26 +101,30 @@ const Course = _ref => {
102
101
  dataLoading,
103
102
  dataBlob
104
103
  } = useDataUrl();
105
- const category = 'uncategorized'; // Handle image selection
104
+ const category = 'uncategorized';
106
105
 
106
+ // Handle image selection
107
107
  useEffect(() => {
108
108
  // Don't clear the current image on re-render
109
109
  if (!dataUrl || !dataBlob) return;
110
- dispatchImage(dispatch, onChange, dataUrl, dataBlob); // eslint-disable-next-line react-hooks/exhaustive-deps
111
- }, [dataUrl, dataBlob]); // Handle loading states
110
+ dispatchImage(dispatch, onChange, dataUrl, dataBlob);
111
+ // eslint-disable-next-line react-hooks/exhaustive-deps
112
+ }, [dataUrl, dataBlob]);
112
113
 
114
+ // Handle loading states
113
115
  useEffect(() => {
114
116
  dispatch(dataLoading ? actions.START_LOADING : actions.STOP_LOADING);
115
-
116
117
  if (dataUrl) {
117
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
118
+ dispatch({
119
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
118
120
  payload: false
119
121
  });
120
- } // eslint-disable-next-line react-hooks/exhaustive-deps
121
-
122
+ }
123
+ // eslint-disable-next-line react-hooks/exhaustive-deps
122
124
  }, [dataLoading]);
123
125
  useEffect(() => {
124
- if (isLoading) onLoading && onLoading();else onLoaded && onLoaded(); // eslint-disable-next-line react-hooks/exhaustive-deps
126
+ if (isLoading) onLoading && onLoading();else onLoaded && onLoaded();
127
+ // eslint-disable-next-line react-hooks/exhaustive-deps
125
128
  }, [isLoading]);
126
129
  return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(ImageList, {
127
130
  fetchInitialImages: () => storeProps.fetchInitialImages({
@@ -145,14 +148,14 @@ const Course = _ref => {
145
148
  },
146
149
  onImageEmbed: file => {
147
150
  setUrl(file.download_url);
148
- dispatch({ ...actions.SET_IMAGE_NAME,
151
+ dispatch({
152
+ ...actions.SET_IMAGE_NAME,
149
153
  payload: file.filename
150
154
  });
151
155
  },
152
156
  canvasOrigin: canvasOrigin
153
157
  }));
154
158
  };
155
-
156
159
  Course.propTypes = {
157
160
  dispatch: PropTypes.func,
158
161
  onChange: PropTypes.func,
@@ -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, { useState, useCallback, useEffect } from 'react';
19
20
  import formatMessage from '../../../../../../format-message';
20
21
  import { actions, modes } from '../../../reducers/imageSection';
@@ -35,11 +36,9 @@ import { createCroppedImageSvg } from '../../../../shared/ImageCropper/imageCrop
35
36
  import { convertFileToBase64 } from '../../../../shared/fileUtils';
36
37
  import { ImageSettingsPropTypes } from './propTypes';
37
38
  import _ from 'lodash';
38
-
39
39
  const getCompressionMessage = () => formatMessage('Your image has been compressed for Icon Maker. Images less than {size} KB will not be compressed.', {
40
40
  size: MAX_IMAGE_SIZE_BYTES / 1024
41
41
  });
42
-
43
42
  function renderImagePreview(_ref, embedImage) {
44
43
  let {
45
44
  loading
@@ -52,7 +51,6 @@ function renderImagePreview(_ref, embedImage) {
52
51
  checkered: true
53
52
  });
54
53
  }
55
-
56
54
  function renderImageName(_ref2) {
57
55
  let {
58
56
  imageName
@@ -62,7 +60,6 @@ function renderImageName(_ref2) {
62
60
  as: "div"
63
61
  }, /*#__PURE__*/React.createElement(TruncateText, null, /*#__PURE__*/React.createElement(Text, null, imageName || formatMessage('None Selected'))));
64
62
  }
65
-
66
63
  function renderImageActionButtons(_ref3, dispatch, trayDispatch, setFocus, ref) {
67
64
  let {
68
65
  mode,
@@ -91,7 +88,6 @@ function renderImageActionButtons(_ref3, dispatch, trayDispatch, setFocus, ref)
91
88
  "data-testid": "clear-image"
92
89
  }, /*#__PURE__*/React.createElement(IconTrashLine, null)));
93
90
  }
94
-
95
91
  export const ImageOptions = _ref4 => {
96
92
  let {
97
93
  state,
@@ -103,18 +99,17 @@ export const ImageOptions = _ref4 => {
103
99
  const [isImageActionFocused, setIsImageActionFocused] = useState(false);
104
100
  const imageActionRef = useCallback(el => {
105
101
  if (el && isImageActionFocused) el.focus();
106
- }, [isImageActionFocused]); // After submitting cropper modal a new embedded image should be generated
102
+ }, [isImageActionFocused]);
107
103
 
104
+ // After submitting cropper modal a new embedded image should be generated
108
105
  useEffect(() => {
109
106
  var _settings$imageSettin;
110
-
111
107
  if (state.cropperSettings && settings.imageSettings && !_.isEqual(state.cropperSettings, (_settings$imageSettin = settings.imageSettings) === null || _settings$imageSettin === void 0 ? void 0 : _settings$imageSettin.cropperSettings)) {
112
108
  if (state.cropperSettings.shape !== settings.shape) {
113
109
  trayDispatch({
114
110
  shape: state.cropperSettings.shape
115
111
  });
116
112
  }
117
-
118
113
  createCroppedImageSvg(state.cropperSettings, settings.imageSettings.image).then(generatedSvg => convertFileToBase64(new Blob([generatedSvg.outerHTML], {
119
114
  type: 'image/svg+xml'
120
115
  }))).then(base64Image => {
@@ -122,10 +117,11 @@ export const ImageOptions = _ref4 => {
122
117
  type: trayActions.SET_EMBED_IMAGE,
123
118
  payload: base64Image
124
119
  });
125
- }) // eslint-disable-next-line no-console
120
+ })
121
+ // eslint-disable-next-line no-console
126
122
  .catch(error => console.error(error));
127
- } // eslint-disable-next-line react-hooks/exhaustive-deps
128
-
123
+ }
124
+ // eslint-disable-next-line react-hooks/exhaustive-deps
129
125
  }, [state.cropperSettings]);
130
126
  const {
131
127
  image
@@ -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, { useReducer, useEffect, useRef, Suspense } from 'react';
19
20
  import _ from 'lodash';
20
21
  import PropTypes from 'prop-types';
@@ -33,19 +34,15 @@ import { transformForShape } from '../../../svg/image';
33
34
  import SingleColorSVG from './SingleColor/svg';
34
35
  import { createCroppedImageSvg } from '../../../../shared/ImageCropper/imageCropUtils';
35
36
  const IMAGE_SECTION_ID = 'icon-maker-tray-image-section';
36
-
37
37
  const getImageSection = () => document.querySelector(`#${IMAGE_SECTION_ID}`);
38
-
39
38
  const scrollToBottom = () => {
40
39
  const section = getImageSection();
41
-
42
40
  if (section !== null && section !== void 0 && section.scrollIntoView) {
43
41
  section.scrollIntoView({
44
42
  behavior: 'smooth'
45
43
  });
46
44
  }
47
45
  };
48
-
49
46
  const filterSectionStateMetadata = state => {
50
47
  const {
51
48
  mode,
@@ -64,7 +61,6 @@ const filterSectionStateMetadata = state => {
64
61
  cropperSettings
65
62
  };
66
63
  };
67
-
68
64
  export const ImageSection = _ref => {
69
65
  let {
70
66
  settings,
@@ -75,12 +71,13 @@ export const ImageSection = _ref => {
75
71
  const [state, dispatch] = useReducer(reducer, initialState);
76
72
  const Upload = /*#__PURE__*/React.lazy(() => import('./Upload'));
77
73
  const SingleColor = /*#__PURE__*/React.lazy(() => import('./SingleColor'));
78
- const MultiColor = /*#__PURE__*/React.lazy(() => import('./MultiColor')); // This object maps image selection modes to the
74
+ const MultiColor = /*#__PURE__*/React.lazy(() => import('./MultiColor'));
75
+
76
+ // This object maps image selection modes to the
79
77
  // component that handles that selection.
80
78
  //
81
79
  // The selected component is dynamically rendered
82
80
  // in this component's returned JSX
83
-
84
81
  const allowedModes = {
85
82
  [modes.courseImages.type]: Course,
86
83
  [modes.uploadImages.type]: Upload,
@@ -90,9 +87,10 @@ export const ImageSection = _ref => {
90
87
  const metadata = filterSectionStateMetadata(state);
91
88
  const isMetadataLoaded = useRef(false);
92
89
  useEffect(() => {
93
- const transform = transformForShape(settings.shape, settings.size); // Set Q1 crop defaults
94
- // TODO: Set these properties based on cropper
90
+ const transform = transformForShape(settings.shape, settings.size);
95
91
 
92
+ // Set Q1 crop defaults
93
+ // TODO: Set these properties based on cropper
96
94
  onChange({
97
95
  type: svgActions.SET_X,
98
96
  payload: transform.x
@@ -120,16 +118,19 @@ export const ImageSection = _ref => {
120
118
  }, [onChange, settings.shape, settings.size]);
121
119
  useEffect(() => {
122
120
  if (state.icon && state.icon in SingleColorSVG) {
123
- dispatch({ ...actions.START_LOADING
124
- }); // eslint-disable-next-line promise/catch-or-return
125
-
121
+ dispatch({
122
+ ...actions.START_LOADING
123
+ });
124
+ // eslint-disable-next-line promise/catch-or-return
126
125
  convertFileToBase64(new Blob([SingleColorSVG[state.icon].source(state.iconFillColor)], {
127
126
  type: 'image/svg+xml'
128
127
  })).then(base64Image => {
129
- dispatch({ ...actions.SET_IMAGE,
128
+ dispatch({
129
+ ...actions.SET_IMAGE,
130
130
  payload: base64Image
131
131
  });
132
- dispatch({ ...actions.STOP_LOADING
132
+ dispatch({
133
+ ...actions.STOP_LOADING
133
134
  });
134
135
  onChange({
135
136
  type: svgActions.SET_EMBED_IMAGE,
@@ -137,11 +138,13 @@ export const ImageSection = _ref => {
137
138
  });
138
139
  });
139
140
  }
140
- }, [onChange, state.icon, state.iconFillColor]); // After a new shape is selected in shape section a new embedded image should be generated
141
+ }, [onChange, state.icon, state.iconFillColor]);
141
142
 
143
+ // After a new shape is selected in shape section a new embedded image should be generated
142
144
  useEffect(() => {
143
145
  if (state.cropperSettings && settings.shape !== state.cropperSettings.shape) {
144
- const newCropperSettings = { ...state.cropperSettings,
146
+ const newCropperSettings = {
147
+ ...state.cropperSettings,
145
148
  shape: settings.shape
146
149
  };
147
150
  dispatch({
@@ -155,10 +158,11 @@ export const ImageSection = _ref => {
155
158
  type: svgActions.SET_EMBED_IMAGE,
156
159
  payload: base64Image
157
160
  });
158
- }) // eslint-disable-next-line no-console
161
+ })
162
+ // eslint-disable-next-line no-console
159
163
  .catch(error => console.error(error));
160
- } // eslint-disable-next-line react-hooks/exhaustive-deps
161
-
164
+ }
165
+ // eslint-disable-next-line react-hooks/exhaustive-deps
162
166
  }, [settings.shape]);
163
167
  useEffect(() => {
164
168
  if (settings.imageSettings && !isMetadataLoaded.current && !_.isEqual(settings.imageSettings, metadata)) {
@@ -167,8 +171,8 @@ export const ImageSection = _ref => {
167
171
  type: actions.UPDATE_SETTINGS.type,
168
172
  payload: settings.imageSettings
169
173
  });
170
- } // eslint-disable-next-line react-hooks/exhaustive-deps
171
-
174
+ }
175
+ // eslint-disable-next-line react-hooks/exhaustive-deps
172
176
  }, [settings.imageSettings]);
173
177
  useEffect(() => {
174
178
  if (!_.isEqual(metadata, settings.imageSettings)) {
@@ -176,8 +180,8 @@ export const ImageSection = _ref => {
176
180
  type: svgActions.SET_IMAGE_SETTINGS,
177
181
  payload: metadata
178
182
  });
179
- } // eslint-disable-next-line react-hooks/exhaustive-deps
180
-
183
+ }
184
+ // eslint-disable-next-line react-hooks/exhaustive-deps
181
185
  }, Object.values(metadata));
182
186
  const modeIsAllowed = !!allowedModes[state.mode];
183
187
  const ImageSelector = allowedModes[state.mode];
@@ -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, { forwardRef } from 'react';
19
20
  import formatMessage from '../../../../../../format-message';
20
21
  import { modes, actions } from '../../../reducers/imageSection';
@@ -30,7 +31,6 @@ const ModeSelect = /*#__PURE__*/forwardRef((_ref, ref) => {
30
31
  onFocus,
31
32
  onBlur
32
33
  } = _ref;
33
-
34
34
  const menuFor = mode => /*#__PURE__*/React.createElement(Menu.Item, {
35
35
  key: mode.type,
36
36
  value: mode.type,
@@ -39,18 +39,19 @@ const ModeSelect = /*#__PURE__*/forwardRef((_ref, ref) => {
39
39
  dispatch({
40
40
  type: mode.type
41
41
  });
42
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
42
+ dispatch({
43
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
43
44
  payload: true
44
45
  });
45
46
  }
46
47
  }, mode.label);
47
-
48
48
  return /*#__PURE__*/React.createElement(Menu, {
49
49
  mountNode: mountNode,
50
50
  placement: "top",
51
51
  ref: ref,
52
52
  onFocus: onFocus,
53
- onBlur: onBlur // maps to data-position-content
53
+ onBlur: onBlur
54
+ // maps to data-position-content
54
55
  ,
55
56
  id: ICON_MAKER_ADD_IMAGE_MENU_ID,
56
57
  trigger: /*#__PURE__*/React.createElement(Button, {
@@ -15,36 +15,40 @@
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 SVGList, { TYPE } from '../SVGList';
21
22
  import { actions } from '../../../../reducers/imageSection';
22
23
  import { convertFileToBase64 } from '../../../../../shared/fileUtils';
23
24
  import { actions as svgActions } from '../../../../reducers/svgSettings';
24
-
25
25
  const MultiColor = _ref => {
26
26
  let {
27
27
  dispatch,
28
28
  onChange,
29
29
  onLoaded
30
30
  } = _ref;
31
-
32
31
  const onSelect = (id, svg) => {
33
- dispatch({ ...actions.START_LOADING
32
+ dispatch({
33
+ ...actions.START_LOADING
34
34
  });
35
- dispatch({ ...actions.SET_IMAGE_NAME,
35
+ dispatch({
36
+ ...actions.SET_IMAGE_NAME,
36
37
  payload: svg.label
37
38
  });
38
39
  convertFileToBase64(new Blob([svg.source()], {
39
40
  type: 'image/svg+xml'
40
41
  })).then(base64Image => {
41
- dispatch({ ...actions.SET_IMAGE,
42
+ dispatch({
43
+ ...actions.SET_IMAGE,
42
44
  payload: base64Image
43
45
  });
44
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
46
+ dispatch({
47
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
45
48
  payload: false
46
49
  });
47
- dispatch({ ...actions.STOP_LOADING
50
+ dispatch({
51
+ ...actions.STOP_LOADING
48
52
  });
49
53
  onChange({
50
54
  type: svgActions.SET_EMBED_IMAGE,
@@ -52,14 +56,12 @@ const MultiColor = _ref => {
52
56
  });
53
57
  });
54
58
  };
55
-
56
59
  return /*#__PURE__*/React.createElement(SVGList, {
57
60
  type: TYPE.Multicolor,
58
61
  onSelect: onSelect,
59
62
  onMount: onLoaded
60
63
  });
61
64
  };
62
-
63
65
  MultiColor.propTypes = {
64
66
  dispatch: PropTypes.func,
65
67
  onChange: PropTypes.func,
@@ -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 default {
20
21
  art: {
@@ -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, { useEffect } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { Link } from '@instructure/ui-link';
@@ -30,7 +31,6 @@ export const TYPE = {
30
31
  export function svgSourceFor(type) {
31
32
  return type === TYPE.Multicolor ? MultiColorSVG : SingleColorSVG;
32
33
  }
33
-
34
34
  const SVGList = _ref => {
35
35
  let {
36
36
  type,
@@ -38,10 +38,12 @@ const SVGList = _ref => {
38
38
  fillColor,
39
39
  onMount
40
40
  } = _ref;
41
- const svgSourceList = svgSourceFor(type); // Only execute this once
41
+ const svgSourceList = svgSourceFor(type);
42
42
 
43
+ // Only execute this once
43
44
  useEffect(() => {
44
- if (onMount) onMount(); // eslint-disable-next-line react-hooks/exhaustive-deps
45
+ if (onMount) onMount();
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
45
47
  }, []);
46
48
  return /*#__PURE__*/React.createElement(Flex, {
47
49
  justifyItems: "start",
@@ -72,7 +74,6 @@ const SVGList = _ref => {
72
74
  fillColor: fillColor
73
75
  }))))));
74
76
  };
75
-
76
77
  SVGList.propTypes = {
77
78
  fillColor: PropTypes.string,
78
79
  type: PropTypes.oneOf(Object.values(TYPE)).isRequired,
@@ -15,13 +15,12 @@
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 { SVGIcon } from '@instructure/ui-svg-images';
21
-
22
22
  const SVGThumbnail = _ref => {
23
23
  var _source$name, _source$name2;
24
-
25
24
  let {
26
25
  name,
27
26
  source,
@@ -38,7 +37,6 @@ const SVGThumbnail = _ref => {
38
37
  "data-testid": `icon-${name}`
39
38
  }));
40
39
  };
41
-
42
40
  SVGThumbnail.propTypes = {
43
41
  size: PropTypes.string,
44
42
  fillColor: PropTypes.string,
@@ -15,11 +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 React from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import SVGList, { TYPE } from '../SVGList';
21
22
  import { actions } from '../../../../reducers/imageSection';
22
-
23
23
  const SingleColor = _ref => {
24
24
  let {
25
25
  data,
@@ -29,19 +29,20 @@ const SingleColor = _ref => {
29
29
  const {
30
30
  iconFillColor
31
31
  } = data;
32
-
33
32
  const onSelect = (id, svg) => {
34
- dispatch({ ...actions.SET_IMAGE_NAME,
33
+ dispatch({
34
+ ...actions.SET_IMAGE_NAME,
35
35
  payload: svg.label
36
36
  });
37
- dispatch({ ...actions.SET_ICON,
37
+ dispatch({
38
+ ...actions.SET_ICON,
38
39
  payload: id
39
40
  });
40
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
41
+ dispatch({
42
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
41
43
  payload: false
42
44
  });
43
45
  };
44
-
45
46
  return /*#__PURE__*/React.createElement(SVGList, {
46
47
  type: TYPE.Singlecolor,
47
48
  onSelect: onSelect,
@@ -49,7 +50,6 @@ const SingleColor = _ref => {
49
50
  onMount: onLoaded
50
51
  });
51
52
  };
52
-
53
53
  SingleColor.propTypes = {
54
54
  dispatch: PropTypes.func,
55
55
  data: PropTypes.shape({
@@ -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
  const DEFAULT_COLOR = '#ff00ff';
20
21
  export default {