@instructure/canvas-rce 5.14.1 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DEVELOPMENT.md +2 -2
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +18 -73
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +21 -77
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +15 -39
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +105 -64
  25. package/es/common/incremental-loading/LoadMoreButton.js +4 -4
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +5 -13
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +16 -10
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +24 -35
  36. package/es/enhance-user-content/enhance_user_content.js +32 -67
  37. package/es/enhance-user-content/external_links.js +6 -9
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +22 -50
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +48 -107
  42. package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
  43. package/es/format-message.js +4 -5
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.d.ts +59 -0
  47. package/es/index.js +6 -6
  48. package/es/rce/AlertMessageArea.js +15 -16
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +3 -2
  51. package/es/rce/RCE.js +16 -17
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +29 -14
  54. package/es/rce/RCEWrapper.js +530 -641
  55. package/es/rce/RCEWrapper.utils.js +131 -0
  56. package/es/rce/RCEWrapperProps.js +9 -5
  57. package/es/rce/RceHtmlEditor.js +17 -19
  58. package/es/rce/ResizeHandle.js +4 -10
  59. package/es/rce/RestoreAutoSaveModal.js +1 -2
  60. package/es/rce/ShowOnFocusButton/index.js +2 -8
  61. package/es/rce/StatusBar.js +10 -44
  62. package/es/rce/alertHandler.js +1 -4
  63. package/es/rce/contentInsertion.js +36 -59
  64. package/es/rce/contentInsertionUtils.js +6 -8
  65. package/es/rce/contentRendering.js +13 -17
  66. package/es/rce/customEvents.js +1 -0
  67. package/es/rce/editorLanguage.js +23 -11
  68. package/es/rce/indicatorRegion.js +7 -7
  69. package/es/rce/normalizeLocale.js +5 -3
  70. package/es/rce/normalizeProps.js +7 -5
  71. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  72. package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
  74. package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
  75. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  76. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  78. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
  83. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
  84. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  85. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  86. package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
  87. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
  93. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
  95. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
  96. package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
  97. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  98. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  99. package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
  100. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  101. package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
  102. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  103. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  104. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
  127. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  128. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
  129. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  130. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  131. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  132. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  133. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
  134. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  135. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  136. package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
  137. package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
  138. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  139. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
  140. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
  141. package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
  142. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
  144. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  145. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
  147. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  148. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  149. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
  150. package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
  151. package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
  153. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
  154. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  155. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_image/plugin.js +14 -20
  157. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
  159. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  160. package/es/rce/plugins/instructure_links/components/Link.js +68 -84
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  164. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
  165. package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
  166. package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
  167. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  168. package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
  169. package/es/rce/plugins/instructure_links/plugin.js +23 -49
  170. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  171. package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
  172. package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
  173. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  174. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  175. package/es/rce/plugins/instructure_paste/plugin.js +29 -33
  176. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
  177. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
  182. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  184. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  185. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  186. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
  187. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  188. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
  189. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
  199. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
  200. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  201. package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
  202. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
  203. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
  204. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  205. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
  206. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
  207. package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
  208. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  209. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  210. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
  211. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
  212. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
  213. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  214. package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
  215. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  216. package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
  217. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
  218. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  219. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
  220. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
  221. package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
  222. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  223. package/es/rce/plugins/shared/ColorInput.js +27 -39
  224. package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
  225. package/es/rce/plugins/shared/ContentSelection.js +29 -78
  226. package/es/rce/plugins/shared/DimensionUtils.js +3 -12
  227. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  228. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  229. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  230. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  231. package/es/rce/plugins/shared/EventUtils.js +2 -4
  232. package/es/rce/plugins/shared/Filter.js +8 -38
  233. package/es/rce/plugins/shared/FixedContentTray.js +16 -17
  234. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
  235. package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
  236. package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
  237. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
  239. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
  240. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
  241. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
  242. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
  244. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
  245. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  246. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
  247. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  250. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  252. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
  253. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
  254. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
  255. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  256. package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
  257. package/es/rce/plugins/shared/LinkDisplay.js +9 -11
  258. package/es/rce/plugins/shared/PreviewIcon.js +9 -15
  259. package/es/rce/plugins/shared/Previewable.js +1 -0
  260. package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
  261. package/es/rce/plugins/shared/StoreContext.js +9 -12
  262. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
  263. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  264. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
  265. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
  266. package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
  267. package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
  268. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  269. package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
  270. package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
  271. package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
  272. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
  273. package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
  274. package/es/rce/plugins/shared/Upload/index.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
  276. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
  277. package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
  278. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  279. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  280. package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
  281. package/es/rce/plugins/shared/compressionUtils.js +18 -28
  282. package/es/rce/plugins/shared/dateUtils.js +1 -1
  283. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  284. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
  285. package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
  286. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  287. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  288. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  289. package/es/rce/plugins/shared/fileShape.js +4 -9
  290. package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
  291. package/es/rce/plugins/shared/fileUtils.js +1 -2
  292. package/es/rce/plugins/shared/linkUtils.js +1 -16
  293. package/es/rce/plugins/shared/round.js +2 -2
  294. package/es/rce/plugins/shared/trayUtils.js +7 -3
  295. package/es/rce/plugins/shared/useDataUrl.js +13 -14
  296. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  297. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
  298. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
  299. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  300. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  301. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  302. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
  303. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
  315. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  316. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  317. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
  321. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
  322. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
  323. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  324. package/es/rce/root.js +17 -16
  325. package/es/rce/sanitizePlugins.js +1 -3
  326. package/es/rce/style.js +1 -4
  327. package/es/rce/tinyRCE.js +14 -9
  328. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  329. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  330. package/es/rce/transformContent.js +9 -11
  331. package/es/rce/types.js +1 -0
  332. package/es/rce/userOS.js +1 -1
  333. package/es/rce/wrapInitCb.js +50 -43
  334. package/es/rcs/api.js +100 -171
  335. package/es/rcs/buildError.js +8 -20
  336. package/es/rcs/fake.js +9 -20
  337. package/es/sidebar/actions/all_files.js +2 -0
  338. package/es/sidebar/actions/data.js +4 -7
  339. package/es/sidebar/actions/documents.js +19 -18
  340. package/es/sidebar/actions/files.js +21 -28
  341. package/es/sidebar/actions/filter.js +5 -5
  342. package/es/sidebar/actions/flickr.js +1 -1
  343. package/es/sidebar/actions/images.js +32 -37
  344. package/es/sidebar/actions/links.js +1 -0
  345. package/es/sidebar/actions/media.js +27 -28
  346. package/es/sidebar/actions/session.js +2 -5
  347. package/es/sidebar/actions/ui.js +1 -0
  348. package/es/sidebar/actions/upload.js +38 -74
  349. package/es/sidebar/containers/Sidebar.js +1 -2
  350. package/es/sidebar/containers/sidebarHandlers.js +9 -13
  351. package/es/sidebar/dragHtml.js +11 -5
  352. package/es/sidebar/reducers/all_files.js +5 -6
  353. package/es/sidebar/reducers/collection.js +12 -15
  354. package/es/sidebar/reducers/collections.js +6 -8
  355. package/es/sidebar/reducers/documents.js +7 -16
  356. package/es/sidebar/reducers/files.js +4 -6
  357. package/es/sidebar/reducers/filter.js +8 -23
  358. package/es/sidebar/reducers/flickr.js +10 -12
  359. package/es/sidebar/reducers/folder.js +16 -18
  360. package/es/sidebar/reducers/folders.js +4 -6
  361. package/es/sidebar/reducers/images.js +4 -16
  362. package/es/sidebar/reducers/index.js +3 -1
  363. package/es/sidebar/reducers/media.js +7 -16
  364. package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
  365. package/es/sidebar/reducers/noop.js +2 -2
  366. package/es/sidebar/reducers/rootFolderId.js +2 -5
  367. package/es/sidebar/reducers/session.js +4 -6
  368. package/es/sidebar/reducers/ui.js +6 -25
  369. package/es/sidebar/reducers/upload.js +16 -64
  370. package/es/sidebar/store/configureStore.js +1 -0
  371. package/es/sidebar/store/initialState.js +14 -26
  372. package/es/translations/locales/ab.js +1 -0
  373. package/es/translations/locales/ar.js +72 -8
  374. package/es/translations/locales/ca.js +72 -8
  375. package/es/translations/locales/cs.js +1 -0
  376. package/es/translations/locales/cs_CZ.js +1 -0
  377. package/es/translations/locales/cy.js +72 -8
  378. package/es/translations/locales/da-x-k12.js +72 -8
  379. package/es/translations/locales/da.js +72 -8
  380. package/es/translations/locales/da_DK.js +1 -0
  381. package/es/translations/locales/de.js +72 -8
  382. package/es/translations/locales/el.js +4 -0
  383. package/es/translations/locales/en-AU-x-unimelb.js +72 -8
  384. package/es/translations/locales/en-GB-x-ukhe.js +72 -8
  385. package/es/translations/locales/en.js +72 -8
  386. package/es/translations/locales/en_AU.js +72 -8
  387. package/es/translations/locales/en_CA.js +72 -8
  388. package/es/translations/locales/en_CY.js +72 -8
  389. package/es/translations/locales/en_GB.js +72 -8
  390. package/es/translations/locales/en_NZ.js +1 -0
  391. package/es/translations/locales/en_SE.js +1 -0
  392. package/es/translations/locales/en_US.js +1 -0
  393. package/es/translations/locales/es.js +72 -8
  394. package/es/translations/locales/es_ES.js +72 -8
  395. package/es/translations/locales/es_GT.js +1 -0
  396. package/es/translations/locales/fa_IR.js +7 -0
  397. package/es/translations/locales/fi.js +72 -8
  398. package/es/translations/locales/fr.js +72 -8
  399. package/es/translations/locales/fr_CA.js +73 -9
  400. package/es/translations/locales/ga.js +5 -13
  401. package/es/translations/locales/he.js +7 -0
  402. package/es/translations/locales/hi.js +72 -8
  403. package/es/translations/locales/ht.js +72 -8
  404. package/es/translations/locales/hu.js +7 -6
  405. package/es/translations/locales/hu_HU.js +1 -0
  406. package/es/translations/locales/hy.js +1 -0
  407. package/es/translations/locales/id.js +72 -8
  408. package/es/translations/locales/id_ID.js +1 -0
  409. package/es/translations/locales/is.js +72 -8
  410. package/es/translations/locales/it.js +72 -8
  411. package/es/translations/locales/ja.js +72 -8
  412. package/es/translations/locales/ko.js +1 -0
  413. package/es/translations/locales/ko_KR.js +1 -0
  414. package/es/translations/locales/lt.js +1 -0
  415. package/es/translations/locales/lt_LT.js +1 -0
  416. package/es/translations/locales/mi.js +72 -8
  417. package/es/translations/locales/mn_MN.js +1 -0
  418. package/es/translations/locales/ms.js +72 -8
  419. package/es/translations/locales/nb-x-k12.js +72 -8
  420. package/es/translations/locales/nb.js +72 -8
  421. package/es/translations/locales/nl.js +72 -8
  422. package/es/translations/locales/nl_NL.js +1 -0
  423. package/es/translations/locales/nn.js +7 -6
  424. package/es/translations/locales/pl.js +72 -8
  425. package/es/translations/locales/pt.js +72 -8
  426. package/es/translations/locales/pt_BR.js +72 -8
  427. package/es/translations/locales/ro.js +1 -0
  428. package/es/translations/locales/ru.js +72 -8
  429. package/es/translations/locales/se.js +1 -0
  430. package/es/translations/locales/sl.js +72 -8
  431. package/es/translations/locales/sv-x-k12.js +72 -8
  432. package/es/translations/locales/sv.js +72 -8
  433. package/es/translations/locales/sv_SE.js +1 -0
  434. package/es/translations/locales/tg.js +1 -0
  435. package/es/translations/locales/th.js +72 -8
  436. package/es/translations/locales/th_TH.js +1 -0
  437. package/es/translations/locales/tl_PH.js +1 -0
  438. package/es/translations/locales/tr.js +7 -0
  439. package/es/translations/locales/uk_UA.js +7 -0
  440. package/es/translations/locales/vi.js +72 -8
  441. package/es/translations/locales/vi_VN.js +1 -0
  442. package/es/translations/locales/zh-Hans.js +72 -8
  443. package/es/translations/locales/zh-Hant.js +72 -8
  444. package/es/translations/locales/zh.js +72 -8
  445. package/es/translations/locales/zh_HK.js +72 -8
  446. package/es/translations/locales/zh_TW.Big5.js +1 -0
  447. package/es/translations/locales/zh_TW.js +1 -0
  448. package/es/translations/tinymce/ar_SA.js +1 -0
  449. package/es/translations/tinymce/fi.js +1 -0
  450. package/es/translations/tinymce/ga.js +1 -0
  451. package/es/translations/tinymce/id.js +1 -0
  452. package/es/translations/tinymce/ru.js +1 -0
  453. package/es/translations/tinymce/ru_RU.js +1 -0
  454. package/es/translations/tinymce/sl.js +1 -0
  455. package/es/translations/tinymce/sr.js +1 -0
  456. package/es/translations/tinymce/th.js +1 -0
  457. package/es/translations/tinymce/uk_UA.js +1 -0
  458. package/es/translations/tinymce/vi_VN.js +1 -0
  459. package/es/util/TypedDict.js +4 -2
  460. package/es/util/elem-util.js +1 -1
  461. package/es/util/encrypted-storage.js +3 -13
  462. package/es/util/file-url-util.js +2 -7
  463. package/es/util/fullscreenHelpers.js +9 -9
  464. package/es/util/instui-icon-helper.js +4 -3
  465. package/es/util/loadingPlaceholder.js +39 -41
  466. package/es/util/simpleCache.js +1 -5
  467. package/es/util/string-util.js +1 -1
  468. package/es/util/textarea-editing-util.js +3 -7
  469. package/es/util/tinymce-plugin-util.js +0 -5
  470. package/es/util/url-util.js +20 -29
  471. package/eslint.config.js +250 -0
  472. package/jest.config.js +1 -1
  473. package/locales/en.json +190 -10
  474. package/package.json +78 -82
  475. package/scripts/build-canvas +2 -1
  476. package/scripts/build.js +4 -4
  477. package/scripts/installTranslations.js +7 -8
  478. package/testcafe/RCEWrapper.test.js +0 -1
  479. package/testcafe/StatusBar.test.js +0 -1
  480. package/testcafe/axe.test.js +3 -4
  481. package/testcafe/enhanceUserContent.test.js +0 -1
  482. package/tsconfig.json +21 -16
  483. package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
  484. package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
  485. package/.eslintrc +0 -45
  486. package/.prettierignore +0 -6
  487. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  488. package/es/rce/__mocks__/tinymceReact.js +0 -55
  489. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import { 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'
@@ -15,47 +15,37 @@
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 { SHAPE_CONTAINER_LENGTH } from '../constants';
20
21
  import { createSvgElement } from './utils';
21
22
  import { Shape } from '../shape';
22
- export function buildShapeMask(_ref) {
23
- let {
24
- shape,
25
- size
26
- } = _ref;
23
+ export function buildShapeMask({
24
+ shape,
25
+ size
26
+ }) {
27
27
  const dimensionSize = size || SHAPE_CONTAINER_LENGTH;
28
-
29
28
  switch (shape) {
30
29
  case Shape.Square:
31
30
  return buildSquare(dimensionSize);
32
-
33
31
  case Shape.Circle:
34
32
  return buildCircle(dimensionSize);
35
-
36
33
  case Shape.Triangle:
37
34
  return buildTriangle(dimensionSize);
38
-
39
35
  case Shape.Diamond:
40
36
  return buildDiamond(dimensionSize);
41
-
42
37
  case Shape.Pentagon:
43
38
  return buildPentagon(dimensionSize);
44
-
45
39
  case Shape.Hexagon:
46
40
  return buildHexagon(dimensionSize);
47
-
48
41
  case Shape.Octagon:
49
42
  return buildOctagon(dimensionSize);
50
-
51
43
  case Shape.Star:
52
44
  return buildStar(dimensionSize);
53
-
54
45
  default:
55
46
  throw new Error(`Invalid shape: ${shape}`);
56
47
  }
57
48
  }
58
-
59
49
  function buildSquare(dimensionSize) {
60
50
  return createSvgElement('rect', {
61
51
  x: 0,
@@ -65,7 +55,6 @@ function buildSquare(dimensionSize) {
65
55
  fill: 'black'
66
56
  });
67
57
  }
68
-
69
58
  function buildCircle(dimensionSize) {
70
59
  return createSvgElement('circle', {
71
60
  cx: dimensionSize / 2,
@@ -74,19 +63,16 @@ function buildCircle(dimensionSize) {
74
63
  fill: 'black'
75
64
  });
76
65
  }
77
-
78
66
  function buildTriangle(dimensionSize) {
79
67
  return createSvgElement('path', {
80
68
  d: `M${dimensionSize / 2} 0L${dimensionSize} ${dimensionSize}H0L${dimensionSize / 2} 0Z`
81
69
  });
82
70
  }
83
-
84
71
  function buildDiamond(dimensionSize) {
85
72
  return createSvgElement('path', {
86
73
  d: `M${dimensionSize / 2} 0L${dimensionSize} ${dimensionSize / 2}L${dimensionSize / 2} ${dimensionSize}L0 ${dimensionSize / 2}L${dimensionSize / 2} 0Z`
87
74
  });
88
75
  }
89
-
90
76
  function buildPentagon(dimensionSize) {
91
77
  const half = round(dimensionSize / 2, 2);
92
78
  const alpha = round(0.3906 * dimensionSize, 2);
@@ -95,14 +81,12 @@ function buildPentagon(dimensionSize) {
95
81
  d: `M${half} 0L${dimensionSize} ${alpha}L${half + beta} ${dimensionSize}H${half - beta}L0 ${alpha}L${half} 0L${half} 0Z`
96
82
  });
97
83
  }
98
-
99
84
  function buildHexagon(dimensionSize) {
100
85
  const leg = round(0.2895 * dimensionSize, 2);
101
86
  return createSvgElement('path', {
102
87
  d: `M${dimensionSize - leg} 0L${dimensionSize} ${dimensionSize / 2}L${dimensionSize - leg} ${dimensionSize}H${leg}L0 ${dimensionSize / 2}L${leg} 0H${dimensionSize - leg}Z`
103
88
  });
104
89
  }
105
-
106
90
  function buildOctagon(dimensionSize) {
107
91
  const leg = round(0.2895 * dimensionSize, 2);
108
92
  const side = round(dimensionSize - 2 * leg, 2);
@@ -110,7 +94,6 @@ function buildOctagon(dimensionSize) {
110
94
  d: `M0 ${leg}L${leg} 0H${leg + side}L${dimensionSize} ${leg}V${leg + side}L${leg + side} ${dimensionSize}H${leg}L0 ${leg + side}V${leg}Z`
111
95
  });
112
96
  }
113
-
114
97
  function buildStar(dimensionSize) {
115
98
  const half = round(dimensionSize / 2, 2);
116
99
  const alpha = round(0.1143 * dimensionSize, 2);
@@ -15,11 +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
- export function createSvgElement(tag) {
19
- let attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18
+
19
+ export function createSvgElement(tag, attributes = {}) {
20
20
  const element = document.createElementNS('http://www.w3.org/2000/svg', tag);
21
- Object.entries(attributes).forEach(_ref => {
22
- let [attr, value] = _ref;
21
+ Object.entries(attributes).forEach(([attr, value]) => {
23
22
  element.setAttribute(attr, value);
24
23
  });
25
24
  return element;
@@ -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 { useEffect, useState, useRef, useCallback } from 'react';
19
20
  import { debounce } from '@instructure/debounce';
20
21
  import { KEY_EVENT_DELAY, KEY_EVENT_ACCELERATION } from './constants';
@@ -22,25 +23,20 @@ import { actions } from './reducers/imageCropper';
22
23
  const EVENT_EXCEPTION_ELEMENT_IDS = ['imageCropperHeader', 'imageCropperFooter', 'imageCropperControls'];
23
24
  const TOUCH_EVENTS = ['ontouchmove', 'ontouchend', 'ontouchcancel'];
24
25
  const MOUSE_EVENTS = ['onmousemove', 'onmouseup', 'onmouseout'];
25
-
26
26
  function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, isMoving, setIsMoving, dispatch) {
27
27
  // Refs that manage the keydown acceleration
28
28
  const direction = useRef(0);
29
29
  const initialTime = useRef(null);
30
-
31
30
  const onKeyDown = event => {
32
31
  // 37 = Left, 38 = Up, 39 = Right, 40 = Down
33
32
  const {
34
33
  keyCode
35
34
  } = event;
36
-
37
35
  if (![37, 38, 39, 40].includes(keyCode)) {
38
36
  return;
39
37
  }
40
-
41
38
  event.preventDefault();
42
39
  let elapsedTime;
43
-
44
40
  if (keyCode !== direction.current) {
45
41
  elapsedTime = 0;
46
42
  initialTime.current = new Date();
@@ -55,22 +51,18 @@ function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tem
55
51
  const currentTime = new Date();
56
52
  elapsedTime = (currentTime - initialTime.current) / 1000;
57
53
  }
58
-
59
54
  const translationDiff = Math.floor(KEY_EVENT_ACCELERATION * elapsedTime ** 2) || 1;
60
-
61
55
  if ([37, 39].includes(keyCode)) {
62
56
  const sign = keyCode === 37 ? -1 : 1;
63
57
  const newTranslateX = tempTranslateXRef.current + sign * translationDiff;
64
58
  setTempTranslateX(newTranslateX);
65
59
  }
66
-
67
60
  if ([38, 40].includes(keyCode)) {
68
61
  const sign = keyCode === 38 ? -1 : 1;
69
62
  const newTranslateY = tempTranslateYRef.current + sign * translationDiff;
70
63
  setTempTranslateY(newTranslateY);
71
64
  }
72
65
  };
73
-
74
66
  const stopMovement = useCallback(debounce(() => {
75
67
  direction.current = 0;
76
68
  initialTime.current = null;
@@ -81,43 +73,35 @@ function useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tem
81
73
  useEffect(() => {
82
74
  const onKeyDownWrapper = event => {
83
75
  // If the active element is in the modal header, footer or controls.
84
- if (EVENT_EXCEPTION_ELEMENT_IDS.some(id => {
85
- var _document$getElementB;
86
-
87
- return (_document$getElementB = document.getElementById(id)) === null || _document$getElementB === void 0 ? void 0 : _document$getElementB.contains(document.activeElement);
88
- })) {
76
+ if (EVENT_EXCEPTION_ELEMENT_IDS.some(id => document.getElementById(id)?.contains(document.activeElement))) {
89
77
  return;
90
78
  }
91
-
92
79
  onKeyDown(event);
93
- }; // Adds the event listener when component did mount
94
-
95
-
80
+ };
81
+ // Adds the event listener when component did mount
96
82
  document.addEventListener('keydown', onKeyDownWrapper);
97
83
  return () => {
98
84
  // Removes the event listener when component will unmount
99
85
  document.removeEventListener('keydown', onKeyDownWrapper);
100
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
86
+ };
87
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
88
  }, []);
102
89
  useEffect(() => {
103
90
  if (isMoving && direction.current !== 0) {
104
91
  stopMovement();
105
- } // eslint-disable-next-line react-hooks/exhaustive-deps
106
-
92
+ }
93
+ // eslint-disable-next-line react-hooks/exhaustive-deps
107
94
  }, [tempTranslateX, tempTranslateY]);
108
95
  }
109
-
110
96
  function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving) {
111
97
  const initialPageX = useRef(0);
112
98
  const initialPageY = useRef(0);
113
99
  const isDragging = useRef(false);
114
100
  const imgElement = useRef(null);
115
-
116
101
  const onStopMove = isMouseEvent => () => {
117
102
  isDragging.current = false;
118
103
  initialPageX.current = 0;
119
104
  initialPageY.current = 0;
120
-
121
105
  if (imgElement.current) {
122
106
  const [move, end, cancel] = isMouseEvent ? MOUSE_EVENTS : TOUCH_EVENTS;
123
107
  imgElement.current[move] = null;
@@ -125,15 +109,12 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
125
109
  imgElement.current[cancel] = null;
126
110
  imgElement.current = null;
127
111
  }
128
-
129
112
  setIsMoving(false);
130
113
  };
131
-
132
114
  const onMove = isMouseEvent => e => {
133
115
  if (!isDragging.current) {
134
116
  return onStopMove();
135
117
  }
136
-
137
118
  const {
138
119
  clientX,
139
120
  clientY
@@ -141,7 +122,6 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
141
122
  setTempTranslateX(tempTranslateX + clientX - initialPageX.current);
142
123
  setTempTranslateY(tempTranslateY + clientY - initialPageY.current);
143
124
  };
144
-
145
125
  const onStartMove = (e, isMouseEvent) => {
146
126
  isDragging.current = true;
147
127
  const {
@@ -155,79 +135,69 @@ function useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslate
155
135
  initialPageY.current = clientY;
156
136
  const [move, end, cancel] = isMouseEvent ? MOUSE_EVENTS : TOUCH_EVENTS;
157
137
  target[move] = onMove(isMouseEvent);
158
- target[end] = onStopMove(isMouseEvent); // Should stop the movement when touch/mouse leaves the preview
159
-
138
+ target[end] = onStopMove(isMouseEvent);
139
+ // Should stop the movement when touch/mouse leaves the preview
160
140
  target[cancel] = onStopMove(isMouseEvent);
161
141
  imgElement.current = target;
162
142
  setIsMoving(true);
163
143
  };
164
-
165
144
  return [e => onStartMove(e, true), e => onStartMove(e, false)];
166
145
  }
167
-
168
146
  export function useKeyMouseTouchEvents(translateX, translateY, dispatch) {
169
147
  const [tempTranslateX, _setTempTranslateX] = useState(translateX);
170
148
  const [tempTranslateY, _setTempTranslateY] = useState(translateY);
171
- const [isMoving, setIsMoving] = useState(false); // These are used to get the current values when the callback is called from outside.
149
+ const [isMoving, setIsMoving] = useState(false);
172
150
 
151
+ // These are used to get the current values when the callback is called from outside.
173
152
  const tempTranslateXRef = useRef(tempTranslateX);
174
153
  const tempTranslateYRef = useRef(tempTranslateY);
175
-
176
154
  const setTempTranslateX = data => {
177
155
  setIsMoving(true);
178
156
  tempTranslateXRef.current = data;
179
-
180
157
  _setTempTranslateX(data);
181
158
  };
182
-
183
159
  const setTempTranslateY = data => {
184
160
  setIsMoving(true);
185
161
  tempTranslateYRef.current = data;
186
-
187
162
  _setTempTranslateY(data);
188
163
  };
189
-
190
164
  useKeysEvents(tempTranslateXRef, tempTranslateYRef, tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, isMoving, setIsMoving, dispatch);
191
- const [onMouseDown, onTouchStart] = useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving); // Updates the reducer state when user stops moving.
165
+ const [onMouseDown, onTouchStart] = useMouseAndTouchEvents(tempTranslateX, tempTranslateY, setTempTranslateX, setTempTranslateY, setIsMoving);
192
166
 
167
+ // Updates the reducer state when user stops moving.
193
168
  useEffect(() => {
194
169
  if (isMoving) {
195
170
  return;
196
171
  }
197
-
198
172
  if (tempTranslateX !== translateX) {
199
173
  dispatch({
200
174
  type: actions.SET_TRANSLATE_X,
201
175
  payload: tempTranslateX
202
176
  });
203
177
  }
204
-
205
178
  if (tempTranslateY !== translateY) {
206
179
  dispatch({
207
180
  type: actions.SET_TRANSLATE_Y,
208
181
  payload: tempTranslateY
209
182
  });
210
- } // eslint-disable-next-line react-hooks/exhaustive-deps
211
-
212
- }, [isMoving]); // Updates the component state when props changed.
183
+ }
184
+ // eslint-disable-next-line react-hooks/exhaustive-deps
185
+ }, [isMoving]);
213
186
 
187
+ // Updates the component state when props changed.
214
188
  useEffect(() => {
215
189
  if (isMoving) {
216
190
  return;
217
191
  }
218
-
219
192
  if (translateX !== tempTranslateX) {
220
193
  tempTranslateXRef.current = translateX;
221
-
222
194
  _setTempTranslateX(translateX);
223
195
  }
224
-
225
196
  if (translateY !== tempTranslateY) {
226
197
  tempTranslateYRef.current = translateY;
227
-
228
198
  _setTempTranslateY(translateY);
229
- } // eslint-disable-next-line react-hooks/exhaustive-deps
230
-
199
+ }
200
+ // eslint-disable-next-line react-hooks/exhaustive-deps
231
201
  }, [translateX, translateY]);
232
202
  return [tempTranslateX, tempTranslateY, onMouseDown, onTouchStart];
233
203
  }
@@ -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 { useEffect, useState } from 'react';
19
20
  import { debounce } from '@instructure/debounce';
20
21
  import { calculateScaleRatio } from './controls/utils';
@@ -23,35 +24,32 @@ import { actions } from './reducers/imageCropper';
23
24
  export function useMouseWheel(scaleRatio, dispatch) {
24
25
  const [tempScaleRatio, setTempScaleRatio] = useState(scaleRatio);
25
26
  const [isScaling, setIsScaling] = useState(false);
26
-
27
27
  const onWheelCallback = event => {
28
28
  // Couldn't prevent modal body scroll when zoom, when using {passive:false}
29
29
  // the zoom event listener makes zoom look like a bouncing effect.
30
30
  // https://chromestatus.com/feature/6662647093133312
31
31
  // event.preventDefault()
32
- const newScaleRatio = calculateScaleRatio(tempScaleRatio - event.deltaY * WHEEL_SCALE_STEP);
33
32
 
33
+ const newScaleRatio = calculateScaleRatio(tempScaleRatio - event.deltaY * WHEEL_SCALE_STEP);
34
34
  if (newScaleRatio !== tempScaleRatio) {
35
35
  setIsScaling(true);
36
36
  setTempScaleRatio(newScaleRatio);
37
37
  }
38
38
  };
39
-
40
39
  const setScalingRatio = () => {
41
40
  setIsScaling(false);
42
41
  };
43
-
44
42
  useEffect(() => {
45
43
  if (!isScaling) {
46
44
  setTempScaleRatio(scaleRatio);
47
- } // eslint-disable-next-line react-hooks/exhaustive-deps
48
-
45
+ }
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
47
  }, [scaleRatio]);
50
48
  useEffect(() => {
51
49
  if (isScaling) {
52
50
  debounce(setScalingRatio, WHEEL_EVENT_DELAY)();
53
- } // eslint-disable-next-line react-hooks/exhaustive-deps
54
-
51
+ }
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
55
53
  }, [tempScaleRatio]);
56
54
  useEffect(() => {
57
55
  if (!isScaling) {
@@ -59,8 +57,8 @@ export function useMouseWheel(scaleRatio, dispatch) {
59
57
  type: actions.SET_SCALE_RATIO,
60
58
  payload: tempScaleRatio
61
59
  });
62
- } // eslint-disable-next-line react-hooks/exhaustive-deps
63
-
60
+ }
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
64
62
  }, [isScaling]);
65
63
  return [tempScaleRatio, onWheelCallback];
66
64
  }
@@ -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 { SimpleSelect } from '@instructure/ui-simple-select';
@@ -28,25 +29,23 @@ import { Tooltip } from '@instructure/ui-tooltip';
28
29
  import { CUSTOM, MIN_HEIGHT, MIN_WIDTH, MIN_PERCENTAGE, imageSizes, labelForImageSize } from '../instructure_image/ImageEmbedOptions';
29
30
  import formatMessage from '../../../format-message';
30
31
  import DimensionsInput from './DimensionsInput';
31
-
32
- const ImageOptionsForm = _ref => {
33
- let {
34
- imageSize,
35
- displayAs,
36
- isDecorativeImage,
37
- altText,
38
- isLinked,
39
- dimensionsState,
40
- handleAltTextChange,
41
- handleIsDecorativeChange,
42
- handleDisplayAsChange,
43
- handleImageSizeChange,
44
- messagesForSize,
45
- hideDimensions,
46
- id = 'image-options-form',
47
- isIconMaker = false,
48
- forBlockEditorUse = false
49
- } = _ref;
32
+ const ImageOptionsForm = ({
33
+ imageSize,
34
+ displayAs,
35
+ isDecorativeImage,
36
+ altText,
37
+ isLinked,
38
+ dimensionsState,
39
+ handleAltTextChange,
40
+ handleIsDecorativeChange,
41
+ handleDisplayAsChange,
42
+ handleImageSizeChange,
43
+ messagesForSize,
44
+ hideDimensions,
45
+ id = 'image-options-form',
46
+ isIconMaker = false,
47
+ forBlockEditorUse = false
48
+ }) => {
50
49
  const TYPE = isIconMaker ? formatMessage('icon') : formatMessage('image');
51
50
  const tooltipText = formatMessage('Used by screen readers to describe the content of an {TYPE}', {
52
51
  TYPE
@@ -137,5 +136,4 @@ const ImageOptionsForm = _ref => {
137
136
  minPercentage: MIN_PERCENTAGE
138
137
  })))));
139
138
  };
140
-
141
139
  export default ImageOptionsForm;
@@ -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 { View } from '@instructure/ui-view';
20
21
  import { Text } from '@instructure/ui-text';
@@ -24,18 +25,15 @@ import formatMessage from '../../../format-message';
24
25
  import { showFlashAlert } from '../../../common/FlashAlert';
25
26
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
26
27
  import { getIcon, getFriendlyLinkType } from './linkUtils';
27
-
28
28
  const getEditMessage = () => formatMessage('If left empty, link text will display as course link name');
29
-
30
- export const LinkDisplay = _ref => {
31
- let {
32
- linkText,
33
- placeholderText,
34
- linkFileName,
35
- published,
36
- handleTextChange,
37
- linkType
38
- } = _ref;
29
+ export const LinkDisplay = ({
30
+ linkText,
31
+ placeholderText,
32
+ linkFileName,
33
+ published,
34
+ handleTextChange,
35
+ linkType
36
+ }) => {
39
37
  useEffect(() => {
40
38
  showFlashAlert({
41
39
  message: formatMessage('Selected {linkFileName}', {
@@ -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 { Spinner } from '@instructure/ui-spinner';
@@ -22,21 +23,17 @@ import { Flex } from '@instructure/ui-flex';
22
23
  import formatMessage from '../../../format-message';
23
24
  import checkerboardStyle from './CheckerboardStyling';
24
25
  const SQUARE_SIZE = 4;
25
-
26
- const PreviewIcon = _ref => {
27
- let {
28
- color,
29
- testId,
30
- variant,
31
- image,
32
- loading,
33
- checkered
34
- } = _ref;
26
+ const PreviewIcon = ({
27
+ color,
28
+ testId,
29
+ variant,
30
+ image,
31
+ loading,
32
+ checkered
33
+ }) => {
35
34
  const variantSettings = PreviewIcon.variants[variant];
36
-
37
35
  const background = () => {
38
36
  if (loading) return {};
39
-
40
37
  if (image) {
41
38
  return {
42
39
  backgroundImage: `url(${image})`,
@@ -45,7 +42,6 @@ const PreviewIcon = _ref => {
45
42
  backgroundPosition: 'center'
46
43
  };
47
44
  }
48
-
49
45
  return {
50
46
  border: '1px solid #73818C',
51
47
  borderRadius: '3px',
@@ -58,7 +54,6 @@ const PreviewIcon = _ref => {
58
54
  `
59
55
  };
60
56
  };
61
-
62
57
  return /*#__PURE__*/React.createElement("div", {
63
58
  id: "preview-background-wrapper",
64
59
  style: checkered ? checkerboardStyle(SQUARE_SIZE) : {}
@@ -80,7 +75,6 @@ const PreviewIcon = _ref => {
80
75
  size: "small"
81
76
  })))));
82
77
  };
83
-
84
78
  PreviewIcon.variants = {
85
79
  small: {
86
80
  width: '25px',
@@ -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
  // copied from canvas-lms/ui/shared/features/doc-previews/jquery/index.js
19
20
  export const previewableMimeTypes = ['application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.sun.xml.writer', 'application/excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/rtf', 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'application/vnd.sun.xml.impress', 'application/vnd.sun.xml.calc', 'application/vnd.ms-excel', 'application/msword', 'application/mspowerpoint', 'application/rtf', 'application/vnd.oasis.opendocument.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'text/plain', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/postscript', 'application/pdf', 'application/vnd.ms-powerpoint'];
20
21
  export function isPreviewable(type) {
@@ -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, { useMemo } from 'react';
19
20
  import { func, object, string } from 'prop-types';
20
21
  import classnames from 'classnames';
@@ -22,8 +23,9 @@ import { View } from '@instructure/ui-view';
22
23
  import { downloadToWrap } from '../../../common/fileUrl';
23
24
  import { mediaPlayerURLFromFile } from './fileTypeUtils';
24
25
  import RceApiSource from '../../../rcs/api';
25
- import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes'; // TODO: should find a better way to share this code
26
+ import addIconMakerAttributes from '../instructure_icon_maker/utils/addIconMakerAttributes';
26
27
 
28
+ // TODO: should find a better way to share this code
27
29
  import FileBrowser from '../../../canvasFileBrowser/FileBrowser';
28
30
  import { isPreviewable } from './Previewable';
29
31
  RceFileBrowser.propTypes = {
@@ -56,10 +58,7 @@ export default function RceFileBrowser(props) {
56
58
  canvasOrigin
57
59
  });
58
60
  }, [host, jwt, refreshToken, source, canvasOrigin]);
59
-
60
61
  function handleFileSelect(fileInfo) {
61
- var _fileInfo$api$embed, _fileInfo$api;
62
-
63
62
  const content_type = fileInfo.api.type;
64
63
  const canPreview = isPreviewable(content_type);
65
64
  const url = downloadToWrap(fileInfo.src);
@@ -69,12 +68,11 @@ export default function RceFileBrowser(props) {
69
68
  title: fileInfo.name,
70
69
  href: url,
71
70
  embedded_iframe_url,
72
- media_id: ((_fileInfo$api$embed = fileInfo.api.embed) === null || _fileInfo$api$embed === void 0 ? void 0 : _fileInfo$api$embed.id) || fileInfo.api.mediaEntryId,
71
+ media_id: fileInfo.api.embed?.id || fileInfo.api.mediaEntryId,
73
72
  target: '_blank',
74
73
  content_type
75
74
  };
76
-
77
- if (((_fileInfo$api = fileInfo.api) === null || _fileInfo$api === void 0 ? void 0 : _fileInfo$api.category) === 'icon_maker_icons') {
75
+ if (fileInfo.api?.category === 'icon_maker_icons') {
78
76
  onFileSelectParams.src = fileInfo.api.url;
79
77
  addIconMakerAttributes(onFileSelectParams);
80
78
  } else {
@@ -83,14 +81,13 @@ export default function RceFileBrowser(props) {
83
81
  instructure_scribd_file: canPreview,
84
82
  inline_disabled: true
85
83
  });
86
- onFileSelectParams = { ...onFileSelectParams,
84
+ onFileSelectParams = {
85
+ ...onFileSelectParams,
87
86
  class: clazz
88
87
  };
89
88
  }
90
-
91
89
  onFileSelect(onFileSelectParams);
92
90
  }
93
-
94
91
  return /*#__PURE__*/React.createElement(View, {
95
92
  as: "div",
96
93
  margin: "medium",