@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) 2024 - present Instructure, Inc.
5
4
  *
@@ -17,6 +16,7 @@ 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, { useState } from 'react';
21
21
  import { Flex } from '@instructure/ui-flex';
22
22
  import ErrorBoundary from '../ErrorBoundary';
@@ -34,18 +34,19 @@ export default function CanvasContentPanel(_ref) {
34
34
  } = _ref;
35
35
  const [filterSettings, setFilterSettings] = useFilterSettings(FILTER_SETTINGS_BY_PLUGIN[plugin]);
36
36
  const [link, setLink] = useState(null);
37
- const [hasLoaded, setHasLoaded] = useState(false); // storeProps has functions that collide with what we want to do in a block editor setting
37
+ const [hasLoaded, setHasLoaded] = useState(false);
38
38
 
39
+ // storeProps has functions that collide with what we want to do in a block editor setting
39
40
  const baseStoreProps = useStoreProps();
40
41
  const {
41
42
  onImageEmbed: _,
43
+ onMediaEmbed: _m,
42
44
  ...storeProps
43
45
  } = baseStoreProps;
44
-
45
46
  function handleFilterChange(newFilter, onChangeContext, onChangeSearchString, onChangeSortBy) {
46
- const newFilterSettings = { ...newFilter
47
+ const newFilterSettings = {
48
+ ...newFilter
47
49
  };
48
-
49
50
  if (newFilterSettings.sortValue) {
50
51
  newFilterSettings.sortDir = newFilterSettings.sortValue === 'alphabetical' ? 'asc' : 'desc';
51
52
  onChangeSortBy({
@@ -53,50 +54,43 @@ export default function CanvasContentPanel(_ref) {
53
54
  dir: newFilterSettings.sortDir
54
55
  });
55
56
  }
56
-
57
57
  if ('searchString' in newFilterSettings && filterSettings.searchString !== newFilterSettings.searchString) {
58
58
  onChangeSearchString(newFilterSettings.searchString);
59
59
  }
60
-
61
60
  setFilterSettings(newFilterSettings);
62
-
63
61
  if (newFilterSettings.contentType) {
64
62
  let contextType, contextId;
65
-
66
63
  switch (newFilterSettings.contentType) {
67
64
  case 'user_files':
68
65
  contextType = 'user';
69
66
  contextId = trayProps.containingContext.userId;
70
67
  break;
71
-
72
68
  case 'group_files':
73
69
  contextType = 'group';
74
70
  contextId = trayProps.containingContext.contextId;
75
71
  break;
76
-
77
72
  case 'course_files':
78
73
  contextType = trayProps.contextType;
79
74
  contextId = trayProps.containingContext.contextId;
80
75
  break;
81
-
82
76
  case 'links':
83
77
  contextType = trayProps.containingContext.contextType;
84
78
  contextId = trayProps.containingContext.contextId;
85
79
  }
86
-
87
80
  onChangeContext({
88
81
  contextType,
89
82
  contextId
90
- }); // context is only changed on load
91
-
83
+ });
84
+ // context is only changed on load
92
85
  setHasLoaded(true);
93
86
  }
94
87
  }
95
-
96
88
  const handleImageClick = image => {
97
89
  setFileUrl(image.href);
98
90
  };
99
-
91
+ const handleMediaClick = media => {
92
+ setFileUrl(`/media_attachments_iframe/${media.id}`);
93
+ };
100
94
  return /*#__PURE__*/React.createElement(Flex, {
101
95
  as: "div",
102
96
  direction: "column",
@@ -134,7 +128,8 @@ export default function CanvasContentPanel(_ref) {
134
128
  editing: false,
135
129
  onEditClick: setLink,
136
130
  selectedLink: link,
137
- onImageEmbed: handleImageClick
131
+ onImageEmbed: handleImageClick,
132
+ onMediaEmbed: handleMediaClick
138
133
  }, storeProps)))))));
139
134
  }
140
135
  CanvasContentPanel.propTypes = {
@@ -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 * as SvgProcessor from './SvgCategoryProcessor';
19
20
  export async function process(file) {
20
21
  var _file$type;
21
-
22
22
  // Determine which processor to use based on file type.
23
23
  // If no matching processor is found for the given file type, return undefined
24
24
  if (file !== null && file !== void 0 && (_file$type = file.type) !== null && _file$type !== void 0 && _file$type.includes(SvgProcessor.typeTest)) {
@@ -15,10 +15,12 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  // NOTE: if you're looking in here for the ComputerPanel that's used for
19
20
  // the RCE's Media > Upload/Record Media function, it's not this one
20
21
  // (though this panel can handle video with the right "accept" prop).
21
22
  // See @instructure/canvas-media/src/ComputerPanel.js
23
+
22
24
  import React, { useCallback, useEffect, useRef, useState } from 'react';
23
25
  import { arrayOf, func, number, object, oneOfType, shape, string } from 'prop-types';
24
26
  import { StyleSheet, css } from 'aphrodite';
@@ -38,34 +40,26 @@ import { MediaPlayer } from '@instructure/ui-media-player';
38
40
  import { RocketSVG, useComputerPanelFocus, isAudio, isPreviewable, sizeMediaPlayer } from '@instructure/canvas-media';
39
41
  import formatMessage from '../../../../format-message';
40
42
  import { getIconFromType, isAudioOrVideo, isImage, isText, isIWork, getIWorkType } from '../fileTypeUtils';
41
-
42
43
  function isPreviewableAudioOrVideo(type) {
43
44
  return isPreviewable(type) && isAudioOrVideo(type);
44
45
  }
45
-
46
46
  function readFile(theFile) {
47
47
  const p = new Promise((resolve, reject) => {
48
48
  const reader = new FileReader();
49
-
50
49
  reader.onload = () => {
51
50
  let result = reader.result;
52
-
53
51
  if (isText(theFile.type) && result.length > 1000) {
54
52
  result = `${result.substr(0, 1000)}...`;
55
53
  }
56
-
57
54
  resolve(result);
58
55
  };
59
-
60
56
  reader.onerror = () => {
61
57
  reject(new Error(formatMessage('An error occured reading the file')));
62
58
  };
63
-
64
59
  if (theFile.size === 0) {
65
60
  // canvas will reject uploading an empty file
66
61
  reject(new Error(formatMessage('You may not upload an empty file.')));
67
62
  }
68
-
69
63
  if (isImage(theFile.type)) {
70
64
  reader.readAsDataURL(theFile);
71
65
  } else if (isText(theFile.type)) {
@@ -78,19 +72,17 @@ function readFile(theFile) {
78
72
  }];
79
73
  resolve(sources);
80
74
  } else {
81
- let type = theFile.type; // Native JS File API returns empty string if it can't determine the type
82
-
75
+ let type = theFile.type;
76
+ // Native JS File API returns empty string if it can't determine the type
83
77
  if (type === '' && isIWork(theFile.name)) {
84
78
  type = getIWorkType(theFile.name);
85
79
  }
86
-
87
80
  const icon = getIconFromType(type);
88
81
  resolve(icon);
89
82
  }
90
83
  });
91
84
  return p;
92
85
  }
93
-
94
86
  export default function ComputerPanel(_ref) {
95
87
  let {
96
88
  theFile,
@@ -104,31 +96,28 @@ export default function ComputerPanel(_ref) {
104
96
  const [preview, setPreview] = useState({
105
97
  preview: null,
106
98
  isLoading: false
107
- }); // the trashcan is 38px tall and the 1.5rem margin-bottom
99
+ });
100
+ // the trashcan is 38px tall and the 1.5rem margin-bottom
108
101
  // the 350 is to guarantee the video doesn't oveflow into the copyright UI,
109
102
  // which should probably be rendered here and not up in the modal because
110
103
  // dealing with Tabs and size is nearly impossible
111
-
112
104
  const height = Math.min(350, 0.8 * (bounds.height - 38 - px('1.5rem')));
113
105
  const width = 0.8 * bounds.width;
114
106
  useEffect(() => {
115
107
  return () => {
116
108
  if (Array.isArray(preview === null || preview === void 0 ? void 0 : preview.preview)) {
117
109
  var _URL, _URL$revokeObjectURL;
118
-
119
110
  (_URL = URL) === null || _URL === void 0 ? void 0 : (_URL$revokeObjectURL = _URL.revokeObjectURL) === null || _URL$revokeObjectURL === void 0 ? void 0 : _URL$revokeObjectURL.call(_URL, preview.preview[0].src);
120
111
  }
121
112
  };
122
113
  }, [preview]);
123
114
  useEffect(() => {
124
115
  if (!theFile || preview.isLoading || preview.preview || preview.error) return;
125
-
126
116
  async function getPreview() {
127
117
  setPreview({
128
118
  preview: null,
129
119
  isLoading: true
130
120
  });
131
-
132
121
  try {
133
122
  const previewer = await readFile(theFile);
134
123
  setPreview({
@@ -136,7 +125,6 @@ export default function ComputerPanel(_ref) {
136
125
  isLoading: false
137
126
  });
138
127
  setError(null);
139
-
140
128
  if (isImage(theFile.type)) {
141
129
  // we need the preview to know the image size to show the placeholder
142
130
  theFile.preview = previewer;
@@ -151,7 +139,6 @@ export default function ComputerPanel(_ref) {
151
139
  });
152
140
  }
153
141
  }
154
-
155
142
  getPreview();
156
143
  });
157
144
  const handleLoadedMetadata = useCallback(event => {
@@ -162,16 +149,15 @@ export default function ComputerPanel(_ref) {
162
149
  });
163
150
  player.style.width = sz.width;
164
151
  player.style.height = sz.height;
165
- player.style.margin = '0 auto'; // from this sub-package, I don't have a URL to use as the
152
+ player.style.margin = '0 auto';
153
+ // from this sub-package, I don't have a URL to use as the
166
154
  // audio player's poster image. We can give it a background image though
167
-
168
155
  player.classList.add(isAudio(theFile.type) ? 'audio-player' : 'video-player');
169
156
  }, [theFile, width, height]);
170
157
  const previewPanelRef = useRef(null);
171
158
  const clearButtonRef = useRef(null);
172
159
  const panelRef = useRef(null);
173
160
  useComputerPanelFocus(theFile, panelRef, clearButtonRef);
174
-
175
161
  function renderPreview() {
176
162
  if (preview.isLoading) {
177
163
  return /*#__PURE__*/React.createElement("div", {
@@ -231,7 +217,6 @@ export default function ComputerPanel(_ref) {
231
217
  }
232
218
  }
233
219
  }
234
-
235
220
  if (theFile) {
236
221
  const filename = theFile.name;
237
222
  return /*#__PURE__*/React.createElement("div", {
@@ -269,7 +254,6 @@ export default function ComputerPanel(_ref) {
269
254
  margin: "0 auto"
270
255
  }, renderPreview()));
271
256
  }
272
-
273
257
  return /*#__PURE__*/React.createElement("div", {
274
258
  ref: panelRef
275
259
  }, /*#__PURE__*/React.createElement(FileDrop, {
@@ -277,11 +261,9 @@ export default function ComputerPanel(_ref) {
277
261
  accept: accept,
278
262
  onDropAccepted: _ref2 => {
279
263
  let [file] = _ref2;
280
-
281
264
  if (messages.length) {
282
265
  setMessages([]);
283
266
  }
284
-
285
267
  setFile(file);
286
268
  },
287
269
  onDropRejected: () => {
@@ -1,5 +1,4 @@
1
1
  import _pt from "prop-types";
2
-
3
2
  /*
4
3
  * Copyright (C) 2024 - present Instructure, Inc.
5
4
  *
@@ -17,6 +16,7 @@ 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 { ScreenReaderContent } from '@instructure/ui-a11y-content';
21
21
  import { IconButton } from '@instructure/ui-buttons';
22
22
  import { Flex } from '@instructure/ui-flex';
@@ -25,11 +25,9 @@ import { SimpleSelect } from '@instructure/ui-simple-select';
25
25
  import { TextInput } from '@instructure/ui-text-input';
26
26
  import formatMessage from 'format-message';
27
27
  import React, { useEffect, useState } from 'react';
28
-
29
28
  function shouldSearch(searchString) {
30
29
  return searchString.length === 0 || searchString.length >= 3;
31
30
  }
32
-
33
31
  export default function PanelFilter(_ref) {
34
32
  let {
35
33
  mountNode,
@@ -39,8 +37,9 @@ export default function PanelFilter(_ref) {
39
37
  contentType
40
38
  } = _ref;
41
39
  const [pendingSearchString, setPendingSearchString] = useState(searchString);
42
- const [searchInputTimer, setSearchInputTimer] = useState(0); // only run on mounting to trigger change to correct contextType
40
+ const [searchInputTimer, setSearchInputTimer] = useState(0);
43
41
 
42
+ // only run on mounting to trigger change to correct contextType
44
43
  useEffect(() => {
45
44
  onChange({
46
45
  contentType
@@ -53,28 +52,22 @@ export default function PanelFilter(_ref) {
53
52
  window.clearTimeout(searchInputTimer);
54
53
  setSearchInputTimer(0);
55
54
  }
56
-
57
55
  onChange({
58
56
  searchString: value
59
57
  });
60
58
  }
61
59
  }
62
-
63
60
  function handleChangeSearch(value) {
64
61
  setPendingSearchString(value);
65
-
66
62
  if (searchInputTimer) {
67
63
  window.clearTimeout(searchInputTimer);
68
64
  }
69
-
70
65
  const tid = window.setTimeout(() => doSearch(value), 250);
71
66
  setSearchInputTimer(tid);
72
67
  }
73
-
74
68
  function handleClear() {
75
69
  handleChangeSearch('');
76
70
  }
77
-
78
71
  function renderClearButton() {
79
72
  if (pendingSearchString) {
80
73
  return /*#__PURE__*/React.createElement(IconButton, {
@@ -85,10 +78,8 @@ export default function PanelFilter(_ref) {
85
78
  size: "small"
86
79
  }, /*#__PURE__*/React.createElement(IconXLine, null));
87
80
  }
88
-
89
81
  return undefined;
90
82
  }
91
-
92
83
  return /*#__PURE__*/React.createElement(Flex, {
93
84
  margin: "none xx-large none none",
94
85
  gap: "small",
@@ -15,21 +15,22 @@
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 { ICON_MAKER_ICONS, TYPE, SVG_TYPE } from '../../instructure_icon_maker/svg/constants';
19
20
  export const typeTest = SVG_TYPE;
20
21
  const sliceSize = 400; // bytes
21
-
22
22
  const iconMakerType = TYPE;
23
23
  export async function process(file) {
24
24
  try {
25
25
  // The first slice of 400 bytes is sufficient to grab
26
26
  // the "type" metadata for icon maker SVGs
27
27
  const slice = await file.slice(0, sliceSize).text();
28
-
29
28
  if (slice.includes(iconMakerType)) {
30
29
  return {
31
30
  category: ICON_MAKER_ICONS
32
31
  };
33
32
  }
34
- } catch {}
33
+ } catch {
34
+ // intentionally empty
35
+ }
35
36
  }
@@ -1,6 +1,4 @@
1
1
  import _pt from "prop-types";
2
- // @ts-nocheck
3
-
4
2
  /*
5
3
  * Copyright (C) 2019 - present Instructure, Inc.
6
4
  *
@@ -18,6 +16,7 @@ import _pt from "prop-types";
18
16
  * You should have received a copy of the GNU Affero General Public License along
19
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
20
18
  */
19
+
21
20
  import React, { useEffect, useState } from 'react';
22
21
  import ReactDOM from 'react-dom';
23
22
  import { px } from '@instructure/ui-utils';
@@ -31,25 +30,27 @@ import RCEWrapper from '../../../RCEWrapper';
31
30
  import { UploadCanvasPanelIds } from '../canvasContentUtils';
32
31
  export const UploadFilePanelIds = ['COMPUTER', 'URL'];
33
32
  export const FullPanelIds = [...UploadCanvasPanelIds, ...UploadFilePanelIds];
34
-
35
33
  /**
36
34
  * Handles uploading data based on what type of data is submitted.
37
35
  */
38
- export const handleSubmit = function (editor, accept, selectedPanel, uploadData, storeProps, _source) {
36
+ export const handleSubmit = function (editor, accept, selectedPanel,
37
+ // @ts-expect-error
38
+ uploadData,
39
+ // @ts-expect-error
40
+ storeProps,
41
+ // @ts-expect-error
42
+ _source) {
39
43
  let afterInsert = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => undefined;
40
44
  Bridge.focusEditor(RCEWrapper.getByEditor(editor)); // necessary since it blurred when the modal opened
41
-
42
45
  const {
43
46
  altText,
44
47
  isDecorativeImage,
45
48
  displayAs
46
49
  } = (uploadData === null || uploadData === void 0 ? void 0 : uploadData.imageOptions) || {};
47
-
48
50
  switch (selectedPanel) {
49
51
  case 'COMPUTER':
50
52
  {
51
53
  var _uploadData$usageRigh;
52
-
53
54
  const {
54
55
  theFile
55
56
  } = uploadData;
@@ -65,24 +66,20 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
65
66
  usageRights: (uploadData === null || uploadData === void 0 ? void 0 : (_uploadData$usageRigh = uploadData.usageRights) === null || _uploadData$usageRigh === void 0 ? void 0 : _uploadData$usageRigh.usageRight) === 'choose' ? undefined : uploadData === null || uploadData === void 0 ? void 0 : uploadData.usageRights
66
67
  };
67
68
  let tabContext = 'documents';
68
-
69
69
  if (isImage(theFile.type)) {
70
70
  tabContext = 'images';
71
71
  } else if (isAudioOrVideo(theFile.type)) {
72
72
  tabContext = 'media';
73
73
  }
74
-
75
74
  storeProps.startMediaUpload(tabContext, fileMetaData);
76
75
  break;
77
76
  }
78
-
79
77
  case 'URL':
80
78
  {
81
79
  const {
82
80
  fileUrl
83
81
  } = uploadData;
84
82
  let editorHtml;
85
-
86
83
  if (displayAs !== 'link' && /image/.test(accept)) {
87
84
  editorHtml = editor.dom.createHTML('img', {
88
85
  src: fileUrl,
@@ -96,16 +93,13 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
96
93
  href: fileUrl
97
94
  }, altText || fileUrl);
98
95
  }
99
-
100
96
  editor.insertContent(editorHtml);
101
97
  break;
102
98
  }
103
-
104
99
  default:
105
100
  throw new Error('Selected Panel is invalid');
106
101
  // Should never get here
107
102
  }
108
-
109
103
  const element = editor.selection.getEnd();
110
104
  element.addEventListener('load', () => indicate(indicatorRegion(editor, element)));
111
105
  afterInsert();
@@ -129,18 +123,20 @@ export function UploadFile(_ref) {
129
123
  const [modalBodyHeight, setModalBodyHeight] = useState(undefined);
130
124
  const [theFile] = useState(preselectedFile);
131
125
  const bodyRef = React.useRef();
132
- trayProps = trayProps || Bridge.trayProps.get(editor); // the panels get rendered inside tab panels. it's difficult for them to
126
+
127
+ // @ts-expect-error
128
+ trayProps = trayProps || Bridge.trayProps.get(editor);
129
+
130
+ // the panels get rendered inside tab panels. it's difficult for them to
133
131
  // figure out how much space they have to work with, and I'd like the previews
134
132
  // not to trigger scrollbars in the modal's body. Get the Modal.Body's size
135
133
  // and to the ComputerPanel how much space it has so it can render the file preview
136
-
137
134
  useEffect(() => {
138
135
  if (bodyRef.current) {
139
136
  // eslint-disable-next-line react/no-find-dom-node
140
137
  const thebody = ReactDOM.findDOMNode(bodyRef.current);
141
138
  const sz = thebody === null || thebody === void 0 ? void 0 : thebody.getBoundingClientRect();
142
139
  sz.height -= px('3rem'); // leave room for the tabs
143
-
144
140
  setModalBodyWidth(sz.width);
145
141
  setModalBodyHeight(sz.height);
146
142
  }
@@ -148,7 +144,8 @@ export function UploadFile(_ref) {
148
144
  return /*#__PURE__*/React.createElement(StoreProvider, Object.assign({}, trayProps, {
149
145
  canvasOrigin: canvasOrigin
150
146
  }), contentProps => /*#__PURE__*/React.createElement(UploadFileModal, {
151
- ref: bodyRef // @ts-ignore
147
+ ref: bodyRef
148
+ // @ts-expect-error
152
149
  ,
153
150
  preselectedFile: theFile,
154
151
  editor: editor,
@@ -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, { Suspense, useState } from 'react';
19
20
  import { arrayOf, bool, func, number, object, oneOf, oneOfType, string } from 'prop-types';
20
21
  import { Modal } from '@instructure/ui-modal';
@@ -33,35 +34,28 @@ import { UploadCanvasPanelIds, CanvasPanelTitles } from '../canvasContentUtils';
33
34
  const CanvasContentPanel = /*#__PURE__*/React.lazy(() => import('./CanvasContentPanel'));
34
35
  const ComputerPanel = /*#__PURE__*/React.lazy(() => import('./ComputerPanel'));
35
36
  const UrlPanel = /*#__PURE__*/React.lazy(() => import('./UrlPanel'));
36
-
37
37
  function shouldBeDisabled(_ref, selectedPanel, usageRightNotSet) {
38
38
  let {
39
39
  fileUrl,
40
40
  theFile,
41
41
  error
42
42
  } = _ref;
43
-
44
43
  if (error || usageRightNotSet && selectedPanel === 'COMPUTER') {
45
44
  return true;
46
45
  }
47
-
48
46
  switch (selectedPanel) {
49
47
  case 'COMPUTER':
50
48
  return !theFile || theFile.error;
51
-
52
49
  case 'URL':
53
50
  return !fileUrl;
54
-
55
51
  default:
56
52
  if (UploadCanvasPanelIds.includes(selectedPanel)) return !fileUrl;
57
53
  return false;
58
54
  // When in doubt, don't disable (but we shouldn't get here either)
59
55
  }
60
56
  }
61
-
62
57
  const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
63
58
  var _contentProps$session;
64
-
65
59
  let {
66
60
  preselectedFile,
67
61
  editor,
@@ -87,38 +81,35 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
87
81
  usageRight: 'choose',
88
82
  ccLicense: '',
89
83
  copyrightHolder: ''
90
- }); // Image options props
84
+ });
91
85
 
86
+ // Image options props
92
87
  const [altText, setAltText] = useState('');
93
88
  const [isDecorativeImage, setIsDecorativeImage] = useState(false);
94
- const [displayAs, setDisplayAs] = useState('embed'); // even though usage rights might be required by the course, canvas has no place
89
+ const [displayAs, setDisplayAs] = useState('embed');
90
+ // even though usage rights might be required by the course, canvas has no place
95
91
  // on the user to store it. Only Group and Course.
96
-
97
92
  const requiresUsageRights = (contentProps === null || contentProps === void 0 ? void 0 : (_contentProps$session = contentProps.session) === null || _contentProps$session === void 0 ? void 0 : _contentProps$session.usageRightsRequired) && /(?:course|group)/.test(trayProps.contextType);
98
-
99
93
  function handleAltTextChange(event) {
100
94
  setAltText(event.target.value);
101
95
  }
102
-
103
96
  function handleIsDecorativeChange(event) {
104
97
  setIsDecorativeImage(event.target.checked);
105
98
  }
106
-
107
99
  function handleDisplayAsChange(event) {
108
100
  setDisplayAs(event.target.value);
109
101
  }
110
-
111
102
  const handleRequestTabChange = index => {
112
103
  setSelectedPanel(panels[index]);
113
104
  setFileUrl('');
114
105
  };
115
-
116
106
  const submitDisabled = shouldBeDisabled({
117
107
  fileUrl,
118
108
  theFile,
119
109
  error
120
- }, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose'); // Load the necessary session values, if not already loaded
110
+ }, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose');
121
111
 
112
+ // Load the necessary session values, if not already loaded
122
113
  const loadSession = contentProps.loadSession;
123
114
  React.useEffect(() => {
124
115
  loadSession();
@@ -129,11 +120,9 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
129
120
  host: trayProps.host,
130
121
  canvasOrigin
131
122
  });
132
-
133
123
  if (forBlockEditorUse && !['COMPUTER', 'URL'].includes(selectedPanel)) {
134
124
  requireA11yAttributes = false;
135
125
  }
136
-
137
126
  return /*#__PURE__*/React.createElement(Modal, {
138
127
  "data-mce-component": true,
139
128
  as: "form",
@@ -144,11 +133,9 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
144
133
  onDismiss: onDismiss,
145
134
  onSubmit: e => {
146
135
  e.preventDefault();
147
-
148
136
  if (submitDisabled || uploading) {
149
137
  return false;
150
138
  }
151
-
152
139
  onSubmit(editor, accept, selectedPanel, {
153
140
  fileUrl,
154
141
  theFile,
@@ -202,7 +189,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
202
189
  height: modalBodyHeight
203
190
  }
204
191
  })));
205
-
206
192
  case 'URL':
207
193
  return /*#__PURE__*/React.createElement(Tabs.Panel, {
208
194
  key: panel,
@@ -219,7 +205,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
219
205
  fileUrl: fileUrl,
220
206
  setFileUrl: setFileUrl
221
207
  })));
222
-
223
208
  default:
224
209
  if (UploadCanvasPanelIds.includes(panel)) {
225
210
  return /*#__PURE__*/React.createElement(Tabs.Panel, {
@@ -238,10 +223,10 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
238
223
  setFileUrl: setFileUrl
239
224
  })));
240
225
  }
241
-
242
226
  return null;
243
227
  }
244
- })), // We shouldn't show the accordions until the session data is loaded.
228
+ })),
229
+ // We shouldn't show the accordions until the session data is loaded.
245
230
  Object.keys(contentProps.session || {}).length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, selectedPanel === 'COMPUTER' && requiresUsageRights && /*#__PURE__*/React.createElement(View, {
246
231
  as: "div",
247
232
  role: "group",
@@ -304,6 +289,5 @@ UploadFileModal.propTypes = {
304
289
  forBlockEditorUse: bool,
305
290
  uploading: bool,
306
291
  preselectedFile: object // JS File
307
-
308
292
  };
309
293
  export default UploadFileModal;
@@ -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 { string, func } from 'prop-types';
20
21
  import { TextInput } from '@instructure/ui-text-input';