@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
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2022 - present Instructure, Inc.
5
4
  *
@@ -17,11 +16,11 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import React from 'react';
21
21
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
22
22
  import formatMessage from '../../../../format-message';
23
23
  export let Direction;
24
-
25
24
  (function (Direction) {
26
25
  Direction[Direction["LEFT"] = 37] = "LEFT";
27
26
  Direction[Direction["UP"] = 38] = "UP";
@@ -29,26 +28,20 @@ export let Direction;
29
28
  Direction[Direction["DOWN"] = 40] = "DOWN";
30
29
  Direction[Direction["NONE"] = 0] = "NONE";
31
30
  })(Direction || (Direction = {}));
32
-
33
31
  const directionToWord = direction => {
34
32
  switch (direction) {
35
33
  case Direction.LEFT:
36
34
  return formatMessage('Left');
37
-
38
35
  case Direction.UP:
39
36
  return formatMessage('Up');
40
-
41
37
  case Direction.RIGHT:
42
38
  return formatMessage('Right');
43
-
44
39
  case Direction.DOWN:
45
40
  return formatMessage('Down');
46
-
47
41
  case Direction.NONE:
48
42
  return null;
49
43
  }
50
44
  };
51
-
52
45
  export const DirectionRegion = _ref => {
53
46
  let {
54
47
  direction
@@ -30,7 +30,6 @@ import { Controls } from './controls';
30
30
  import { ImageCropperSettingsPropTypes } from './propTypes';
31
31
  import { DirectionRegion } from './DirectionRegion';
32
32
  import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
33
-
34
33
  const renderBody = (image, settings, dispatch, message, loading) => {
35
34
  if (loading) {
36
35
  return /*#__PURE__*/React.createElement(Flex, {
@@ -42,7 +41,6 @@ const renderBody = (image, settings, dispatch, message, loading) => {
42
41
  size: "large"
43
42
  })));
44
43
  }
45
-
46
44
  return /*#__PURE__*/React.createElement(Flex, {
47
45
  direction: "column",
48
46
  margin: "none"
@@ -66,7 +64,6 @@ const renderBody = (image, settings, dispatch, message, loading) => {
66
64
  direction: settings.direction
67
65
  }));
68
66
  };
69
-
70
67
  const renderFooter = (settings, onClose) => {
71
68
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
72
69
  onClick: onClose,
@@ -76,7 +73,6 @@ const renderFooter = (settings, onClose) => {
76
73
  type: "submit"
77
74
  }, formatMessage('Save')));
78
75
  };
79
-
80
76
  export const ImageCropperModal = _ref => {
81
77
  let {
82
78
  open,
@@ -93,7 +89,8 @@ export const ImageCropperModal = _ref => {
93
89
  shape !== settings.shape && dispatch({
94
90
  type: actions.SET_SHAPE,
95
91
  payload: shape
96
- }); // eslint-disable-next-line react-hooks/exhaustive-deps
92
+ });
93
+ // eslint-disable-next-line react-hooks/exhaustive-deps
97
94
  }, [shape]);
98
95
  useEffect(() => {
99
96
  cropSettings && dispatch({
@@ -110,9 +107,9 @@ export const ImageCropperModal = _ref => {
110
107
  open: open,
111
108
  onDismiss: onClose,
112
109
  onSubmit: e => {
113
- e.preventDefault(); // Direction is only used while in cropper and
110
+ e.preventDefault();
111
+ // Direction is only used while in cropper and
114
112
  // should not be embedded in the icon's metadata
115
-
116
113
  const {
117
114
  direction,
118
115
  ...cropperSettings
@@ -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, createRef } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import formatMessage from '../../../../format-message';
@@ -25,20 +26,17 @@ import { useMouseWheel } from './useMouseWheel';
25
26
  import { useKeyMouseTouchEvents } from './useKeyMouseEvents';
26
27
  import checkerboardStyle from '../CheckerboardStyling';
27
28
  import { View } from '@instructure/ui-view';
29
+
28
30
  /**
29
31
  * Remove the node contents and append the svg element.
30
32
  */
31
-
32
33
  function replaceSvg(svg, node) {
33
34
  if (!node) return;
34
-
35
35
  while (node.firstChild) {
36
36
  node.removeChild(node.lastChild);
37
37
  }
38
-
39
38
  node.appendChild(svg);
40
39
  }
41
-
42
40
  function getTransformValue(_ref) {
43
41
  let {
44
42
  translateX,
@@ -53,7 +51,6 @@ function getTransformValue(_ref) {
53
51
  if (scaleRatio > 1) values.push(`scale(${scaleRatio})`);
54
52
  return values.join(' ');
55
53
  }
56
-
57
54
  export const Preview = _ref2 => {
58
55
  let {
59
56
  image,
@@ -73,8 +70,8 @@ export const Preview = _ref2 => {
73
70
  const [tempScaleRatio, onWheelCallback] = useMouseWheel(scaleRatio, dispatch);
74
71
  const [tempTranslateX, tempTranslateY, onMouseDownCallback, onTouchStartCallback] = useKeyMouseTouchEvents(translateX, translateY, dispatch, imgRef);
75
72
  useEffect(() => {
76
- imgRef.current.ondragstart = () => false; // eslint-disable-next-line react-hooks/exhaustive-deps
77
-
73
+ imgRef.current.ondragstart = () => false;
74
+ // eslint-disable-next-line react-hooks/exhaustive-deps
78
75
  }, []);
79
76
  useEffect(() => {
80
77
  const svg = buildSvg(shape);
@@ -86,17 +83,16 @@ export const Preview = _ref2 => {
86
83
  rotation,
87
84
  scaleRatio: tempScaleRatio
88
85
  });
89
-
90
86
  function isSafariVersion15OrLesser() {
91
87
  const match = /Version\/(\d+).+Safari/.exec(navigator.userAgent);
92
88
  return match ? parseInt(match[1], 10) < 16 : false;
93
- } // Clip is not supported in Safari until v16.
89
+ }
90
+
91
+ // Clip is not supported in Safari until v16.
94
92
  // It's needed here to prevent a strange screenreader
95
93
  // behavior that makes the cropper look bad. 'hidden'
96
94
  // suffices when clip is not available, although it's not perfect
97
95
  // TODO: remove when Safari versions >= 16 are more commonplace
98
-
99
-
100
96
  const overflow = isSafariVersion15OrLesser() ? 'hidden' : 'clip';
101
97
  return /*#__PURE__*/React.createElement("div", {
102
98
  style: {
@@ -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
  export const PREVIEW_BACKGROUND_COLOR = '#394B58';
19
20
  export const PREVIEW_WIDTH = 942;
20
21
  export const PREVIEW_HEIGHT = 350;
@@ -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 from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { NumberInput } from '@instructure/ui-number-input';
@@ -37,20 +38,16 @@ export const CustomNumberInput = _ref => {
37
38
  formatValueCallback,
38
39
  onChange
39
40
  });
40
-
41
41
  const handleChange = (event, newValue) => digestNewValue(newValue.trim());
42
-
43
42
  const handleBlur = () => digestCurrentValue();
44
-
45
43
  const handleIncrement = () => onChange(processValueCallback(value + 1));
46
-
47
44
  const handleDecrement = () => onChange(processValueCallback(value - 1));
48
-
49
45
  const messages = hasError ? [{
50
46
  text: formatMessage('Invalid entry.'),
51
47
  type: 'error'
52
48
  }] : [];
53
49
  return /*#__PURE__*/React.createElement(NumberInput, {
50
+ allowStringValue: true,
54
51
  value: inputValue,
55
52
  onChange: handleChange,
56
53
  onBlur: handleBlur,
@@ -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 from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { Flex } from '@instructure/ui-flex';
@@ -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 from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { IconButton } from '@instructure/ui-buttons';
@@ -25,36 +26,26 @@ import { CustomNumberInput } from './CustomNumberInput';
25
26
  import { calculateRotation, getNearestRectAngle } from './utils';
26
27
  import { BUTTON_ROTATION_DEGREES } from '../constants';
27
28
  import formatMessage from '../../../../../format-message';
28
-
29
29
  const parseRotationText = value => {
30
30
  // Matches a positive/negative integer/decimal followed by "º" symbol
31
31
  const matches = value.match(/([-|+]?\d+(?:\.\d+)?)º?/);
32
-
33
32
  if (!matches) {
34
33
  return null;
35
34
  }
36
-
37
35
  const result = parseInt(matches[1], 10);
38
-
39
36
  if (Number.isNaN(result)) {
40
37
  return null;
41
38
  }
42
-
43
39
  return result;
44
40
  };
45
-
46
41
  const formatRotationText = value => `${value}º`;
47
-
48
42
  export const RotationControls = _ref => {
49
43
  let {
50
44
  rotation,
51
45
  onChange
52
46
  } = _ref;
53
-
54
47
  const rotateLeftCallback = () => onChange(calculateRotation(getNearestRectAngle(rotation, true) - BUTTON_ROTATION_DEGREES));
55
-
56
48
  const rotateRightCallback = () => onChange(calculateRotation(getNearestRectAngle(rotation, false) + BUTTON_ROTATION_DEGREES));
57
-
58
49
  return /*#__PURE__*/React.createElement(Flex.Item, {
59
50
  margin: "0 medium 0 0",
60
51
  title: formatMessage('Rotation'),
@@ -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 from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { Flex } from '@instructure/ui-flex';
@@ -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 from 'react';
19
20
  import { IconButton } from '@instructure/ui-buttons';
20
21
  import { IconZoomInLine, IconZoomOutLine } from '@instructure/ui-icons';
@@ -28,33 +29,25 @@ import PropTypes from 'prop-types';
28
29
  import { CustomNumberInput } from './CustomNumberInput';
29
30
  import { showFlashAlert } from '../../../../../common/FlashAlert';
30
31
  import { debounce } from '@instructure/debounce';
31
-
32
32
  const parseZoomText = value => {
33
33
  // Matches a positive/negative integer/decimal followed by %" symbol
34
34
  const matches = value.match(/([-|+]?\d+(?:\.\d+)?)%?/);
35
-
36
35
  if (!matches) {
37
36
  return null;
38
37
  }
39
-
40
38
  const result = parseInt(matches[1], 10);
41
-
42
39
  if (Number.isNaN(result)) {
43
40
  return null;
44
41
  }
45
-
46
42
  return result;
47
43
  };
48
-
49
44
  const formatZoomText = value => `${value}%`;
50
-
51
45
  const debouncedAlert = debounce(showFlashAlert, 1000);
52
46
  export const ZoomControls = _ref => {
53
47
  let {
54
48
  scaleRatio,
55
49
  onChange
56
50
  } = _ref;
57
-
58
51
  const onZoomChange = value => {
59
52
  const message = {
60
53
  message: `${round(value * 100)}% Zoom`,
@@ -64,17 +57,14 @@ export const ZoomControls = _ref => {
64
57
  debouncedAlert(message);
65
58
  onChange(value);
66
59
  };
67
-
68
60
  const zoomOutCallback = () => {
69
61
  const newScaleRatio = calculateScaleRatio(scaleRatio - BUTTON_SCALE_STEP);
70
62
  onZoomChange(newScaleRatio);
71
63
  };
72
-
73
64
  const zoomInCallback = () => {
74
65
  const newScaleRatio = calculateScaleRatio(scaleRatio + BUTTON_SCALE_STEP);
75
66
  onZoomChange(newScaleRatio);
76
67
  };
77
-
78
68
  return /*#__PURE__*/React.createElement(Flex.Item, {
79
69
  title: formatMessage('Zoom'),
80
70
  role: "toolbar",
@@ -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 from 'react';
19
20
  import { Flex } from '@instructure/ui-flex';
20
21
  import { actions } from '../reducers/imageCropper';
@@ -15,10 +15,10 @@
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 { useEffect, useRef, useState } from 'react';
19
20
  import { debounce } from '@instructure/debounce';
20
21
  const CHANGE_EVENT_DELAY = 1000;
21
-
22
22
  const digestValue = _ref => {
23
23
  let {
24
24
  parseValueCallback,
@@ -27,16 +27,13 @@ const digestValue = _ref => {
27
27
  value
28
28
  } = _ref;
29
29
  const parsedNewValue = parseValueCallback(value);
30
-
31
30
  if (parsedNewValue === null) {
32
31
  return [null, null];
33
32
  }
34
-
35
33
  const processedNewValue = processValueCallback(parsedNewValue);
36
34
  const formattedNewTempValue = formatValueCallback(processedNewValue);
37
35
  return [formattedNewTempValue, processedNewValue];
38
36
  };
39
-
40
37
  export function useDebouncedNumericValue(_ref2) {
41
38
  let {
42
39
  value,
@@ -47,7 +44,6 @@ export function useDebouncedNumericValue(_ref2) {
47
44
  } = _ref2;
48
45
  const [inputValue, setInputValue] = useState(formatValueCallback(value));
49
46
  const [hasError, setHasError] = useState(false);
50
-
51
47
  const updateStateAfterDigest = newValue => {
52
48
  const [formattedValue, processedValue] = digestValue({
53
49
  parseValueCallback,
@@ -55,40 +51,31 @@ export function useDebouncedNumericValue(_ref2) {
55
51
  formatValueCallback,
56
52
  value: newValue
57
53
  });
58
-
59
54
  if (formattedValue === null || processedValue === null) {
60
55
  setHasError(true);
61
56
  return;
62
57
  }
63
-
64
58
  setHasError(false);
65
-
66
59
  if (newValue !== formattedValue) {
67
60
  setInputValue(formattedValue);
68
61
  }
69
-
70
62
  if (processedValue !== value) {
71
63
  onChange(processedValue);
72
64
  }
73
65
  };
74
-
75
66
  const debouncedUpdateStateAfterDigest = useRef(debounce(updateStateAfterDigest, CHANGE_EVENT_DELAY));
76
67
  useEffect(() => {
77
68
  const newTempValue = formatValueCallback(value);
78
-
79
69
  if (newTempValue !== inputValue) {
80
70
  setInputValue(newTempValue);
81
71
  setHasError(false);
82
- } // eslint-disable-next-line react-hooks/exhaustive-deps
83
-
72
+ }
73
+ // eslint-disable-next-line react-hooks/exhaustive-deps
84
74
  }, [value]);
85
-
86
75
  const digestCurrentValue = () => updateStateAfterDigest(inputValue);
87
-
88
76
  const digestNewValue = rawValue => {
89
77
  setInputValue(rawValue);
90
78
  debouncedUpdateStateAfterDigest.current(rawValue);
91
79
  };
92
-
93
80
  return [inputValue, digestCurrentValue, digestNewValue, hasError];
94
81
  }
@@ -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 { BUTTON_ROTATION_DEGREES, MAX_SCALE_RATIO, MIN_SCALE_RATIO } from '../constants';
19
20
  import round from '../../round';
20
21
  export const calculateScaleRatio = scaleRatio => {
@@ -29,11 +30,9 @@ export const calculateScalePercentage = scalePercentage => {
29
30
  };
30
31
  export const calculateRotation = rotationAngle => {
31
32
  const simplifiedRotationAngle = round(rotationAngle % 360);
32
-
33
33
  if (Math.abs(rotationAngle) >= 360) {
34
34
  return simplifiedRotationAngle;
35
35
  }
36
-
37
36
  return rotationAngle;
38
37
  };
39
38
  export const getNearestRectAngle = (rotationAngle, shouldRotateToLeft) => {
@@ -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 round from '../round';
19
20
  import { buildShapeMask } from './svg/shape';
20
21
  import { createSvgElement } from './svg/utils';
@@ -49,22 +50,18 @@ export async function createCroppedImageSvg(cropperSettings, image) {
49
50
  rootElement.appendChild(mainGroup);
50
51
  return rootElement;
51
52
  }
52
-
53
53
  const fetchImageMetadata = src => {
54
54
  return new Promise(resolve => {
55
55
  const img = new Image();
56
-
57
56
  img.onload = function () {
58
57
  resolve({
59
58
  imageWidth: this.naturalWidth,
60
59
  imageHeight: this.naturalHeight
61
60
  });
62
61
  };
63
-
64
62
  img.src = src;
65
63
  });
66
64
  };
67
-
68
65
  const createDefsElement = _ref => {
69
66
  let {
70
67
  shape,
@@ -82,11 +79,9 @@ const createDefsElement = _ref => {
82
79
  defs.appendChild(clipPath);
83
80
  return defs;
84
81
  };
85
-
86
82
  const convertTranslationUnits = (translationPixels, imageHeight) => {
87
83
  return imageHeight * translationPixels / PREVIEW_HEIGHT;
88
84
  };
89
-
90
85
  const createMainSvgGroup = _ref2 => {
91
86
  let {
92
87
  imageWidth,
@@ -113,7 +108,6 @@ const createMainSvgGroup = _ref2 => {
113
108
  mainGroup.appendChild(imageElement);
114
109
  return mainGroup;
115
110
  };
116
-
117
111
  export const setTransformAttribute = _ref3 => {
118
112
  let {
119
113
  imageElement,
@@ -135,15 +129,12 @@ export const setTransformAttribute = _ref3 => {
135
129
  const x = round(-horizontalCenter + convertedTranslateX + squareDimension / 2, 2);
136
130
  const y = round(-verticalCenter + convertedTranslateY + squareDimension / 2, 2);
137
131
  let value = `translate(${x}, ${y})`;
138
-
139
132
  if (rotation !== 0) {
140
133
  // Rotates image using its center as pivot
141
134
  value += ` rotate(${rotation}, ${horizontalCenter}, ${verticalCenter})`;
142
135
  }
143
-
144
136
  if (scaleRatio !== 1.0) {
145
137
  value += ` scale(${scaleRatio})`;
146
138
  }
147
-
148
139
  imageElement.setAttribute('transform', value);
149
140
  };
@@ -15,4 +15,5 @@
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
  export { ImageCropperModal } from './Modal';
@@ -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 PropTypes from 'prop-types';
19
20
  export const ImageCropperSettingsPropTypes = PropTypes.shape({
20
21
  shape: PropTypes.string,
@@ -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_CROPPER_SETTINGS } from '../constants';
19
20
  export const defaultState = DEFAULT_CROPPER_SETTINGS;
20
21
  export const actions = {
@@ -29,43 +30,43 @@ export const actions = {
29
30
  export const cropperSettingsReducer = (state, action) => {
30
31
  switch (action.type) {
31
32
  case actions.SET_SHAPE:
32
- return { ...state,
33
+ return {
34
+ ...state,
33
35
  shape: action.payload
34
36
  };
35
-
36
37
  case actions.SET_ROTATION:
37
- return { ...state,
38
+ return {
39
+ ...state,
38
40
  rotation: action.payload
39
41
  };
40
-
41
42
  case actions.SET_SCALE_RATIO:
42
- return { ...state,
43
+ return {
44
+ ...state,
43
45
  scaleRatio: action.payload
44
46
  };
45
-
46
47
  case actions.SET_TRANSLATE_X:
47
- return { ...state,
48
+ return {
49
+ ...state,
48
50
  translateX: action.payload
49
51
  };
50
-
51
52
  case actions.SET_TRANSLATE_Y:
52
- return { ...state,
53
+ return {
54
+ ...state,
53
55
  translateY: action.payload
54
56
  };
55
-
56
57
  case actions.UPDATE_SETTINGS:
57
- return { ...state,
58
+ return {
59
+ ...state,
58
60
  ...action.payload
59
61
  };
60
-
61
62
  case actions.RESET_SETTINGS:
62
- return { ...state,
63
+ return {
64
+ ...state,
63
65
  rotation: defaultState.rotation,
64
66
  scaleRatio: defaultState.scaleRatio,
65
67
  translateX: defaultState.translateX,
66
68
  translateY: defaultState.translateY
67
69
  };
68
-
69
70
  default:
70
71
  throw Error('Unknown action for image cropper reducer');
71
72
  }
@@ -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
  export const Shape = {
19
20
  Square: 'square',
20
21
  Circle: 'circle',
@@ -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 { createSvgElement } from './utils';
19
20
  import { PREVIEW_HEIGHT, SHAPE_CONTAINER_LENGTH, GLUE_WIDTH, PREVIEW_WIDTH, PREVIEW_BACKGROUND_COLOR } from '../constants';
20
21
  import { buildShapeMask } from './shape';
@@ -57,7 +58,6 @@ export function buildSvg(shape) {
57
58
  mainContainer.appendChild(bgElement);
58
59
  return mainContainer;
59
60
  }
60
-
61
61
  function createSvgContainer() {
62
62
  return createSvgElement('svg', {
63
63
  xmlns: 'http://www.w3.org/2000/svg',
@@ -65,7 +65,6 @@ function createSvgContainer() {
65
65
  height: PREVIEW_HEIGHT
66
66
  });
67
67
  }
68
-
69
68
  function createMask(settings) {
70
69
  const maskElement = createSvgElement('mask', {
71
70
  id: 'imageCropperMask'