@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
@@ -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,25 @@ 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) {
39
- let afterInsert = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => undefined;
36
+ export const handleSubmit = (editor, accept, selectedPanel,
37
+ // @ts-expect-error
38
+ uploadData,
39
+ // @ts-expect-error
40
+ storeProps,
41
+ // @ts-expect-error
42
+ _source, afterInsert = () => undefined) => {
40
43
  Bridge.focusEditor(RCEWrapper.getByEditor(editor)); // necessary since it blurred when the modal opened
41
-
42
44
  const {
43
45
  altText,
44
46
  isDecorativeImage,
45
47
  displayAs
46
- } = (uploadData === null || uploadData === void 0 ? void 0 : uploadData.imageOptions) || {};
47
-
48
+ } = uploadData?.imageOptions || {};
48
49
  switch (selectedPanel) {
49
50
  case 'COMPUTER':
50
51
  {
51
- var _uploadData$usageRigh;
52
-
53
52
  const {
54
53
  theFile
55
54
  } = uploadData;
@@ -62,27 +61,23 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
62
61
  altText,
63
62
  isDecorativeImage,
64
63
  displayAs,
65
- 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
64
+ usageRights: uploadData?.usageRights?.usageRight === 'choose' ? undefined : uploadData?.usageRights
66
65
  };
67
66
  let tabContext = 'documents';
68
-
69
67
  if (isImage(theFile.type)) {
70
68
  tabContext = 'images';
71
69
  } else if (isAudioOrVideo(theFile.type)) {
72
70
  tabContext = 'media';
73
71
  }
74
-
75
72
  storeProps.startMediaUpload(tabContext, fileMetaData);
76
73
  break;
77
74
  }
78
-
79
75
  case 'URL':
80
76
  {
81
77
  const {
82
78
  fileUrl
83
79
  } = uploadData;
84
80
  let editorHtml;
85
-
86
81
  if (displayAs !== 'link' && /image/.test(accept)) {
87
82
  editorHtml = editor.dom.createHTML('img', {
88
83
  src: fileUrl,
@@ -96,51 +91,49 @@ export const handleSubmit = function (editor, accept, selectedPanel, uploadData,
96
91
  href: fileUrl
97
92
  }, altText || fileUrl);
98
93
  }
99
-
100
94
  editor.insertContent(editorHtml);
101
95
  break;
102
96
  }
103
-
104
97
  default:
105
98
  throw new Error('Selected Panel is invalid');
106
99
  // Should never get here
107
100
  }
108
-
109
101
  const element = editor.selection.getEnd();
110
102
  element.addEventListener('load', () => indicate(indicatorRegion(editor, element)));
111
103
  afterInsert();
112
104
  };
113
- export function UploadFile(_ref) {
114
- let {
115
- accept,
116
- editor,
117
- label,
118
- panels,
119
- onDismiss,
120
- requireA11yAttributes = true,
121
- forBlockEditorUse = false,
122
- uploading = false,
123
- trayProps,
124
- canvasOrigin,
125
- onSubmit = handleSubmit,
126
- preselectedFile = undefined
127
- } = _ref;
105
+ export function UploadFile({
106
+ accept,
107
+ editor,
108
+ label,
109
+ panels,
110
+ onDismiss,
111
+ requireA11yAttributes = true,
112
+ forBlockEditorUse = false,
113
+ uploading = false,
114
+ trayProps,
115
+ canvasOrigin,
116
+ onSubmit = handleSubmit,
117
+ preselectedFile = undefined
118
+ }) {
128
119
  const [modalBodyWidth, setModalBodyWidth] = useState(undefined);
129
120
  const [modalBodyHeight, setModalBodyHeight] = useState(undefined);
130
121
  const [theFile] = useState(preselectedFile);
131
122
  const bodyRef = React.useRef();
132
- trayProps = trayProps || Bridge.trayProps.get(editor); // the panels get rendered inside tab panels. it's difficult for them to
123
+
124
+ // @ts-expect-error
125
+ trayProps = trayProps || Bridge.trayProps.get(editor);
126
+
127
+ // the panels get rendered inside tab panels. it's difficult for them to
133
128
  // figure out how much space they have to work with, and I'd like the previews
134
129
  // not to trigger scrollbars in the modal's body. Get the Modal.Body's size
135
130
  // and to the ComputerPanel how much space it has so it can render the file preview
136
-
137
131
  useEffect(() => {
138
132
  if (bodyRef.current) {
139
133
  // eslint-disable-next-line react/no-find-dom-node
140
134
  const thebody = ReactDOM.findDOMNode(bodyRef.current);
141
- const sz = thebody === null || thebody === void 0 ? void 0 : thebody.getBoundingClientRect();
135
+ const sz = thebody?.getBoundingClientRect();
142
136
  sz.height -= px('3rem'); // leave room for the tabs
143
-
144
137
  setModalBodyWidth(sz.width);
145
138
  setModalBodyHeight(sz.height);
146
139
  }
@@ -148,7 +141,8 @@ export function UploadFile(_ref) {
148
141
  return /*#__PURE__*/React.createElement(StoreProvider, Object.assign({}, trayProps, {
149
142
  canvasOrigin: canvasOrigin
150
143
  }), contentProps => /*#__PURE__*/React.createElement(UploadFileModal, {
151
- ref: bodyRef // @ts-ignore
144
+ ref: bodyRef
145
+ // @ts-expect-error
152
146
  ,
153
147
  preselectedFile: theFile,
154
148
  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';
@@ -24,7 +25,7 @@ import { Spinner } from '@instructure/ui-spinner';
24
25
  import { Tabs } from '@instructure/ui-tabs';
25
26
  import { ToggleDetails } from '@instructure/ui-toggle-details';
26
27
  import formatMessage from '../../../../format-message';
27
- import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
28
+ import { instuiPopupMountNodeFn } from '../../../../util/fullscreenHelpers';
28
29
  import RceApiSource from '../../../../rcs/api';
29
30
  import ImageOptionsForm from '../ImageOptionsForm';
30
31
  import UsageRightsSelectBox from './UsageRightsSelectBox';
@@ -33,52 +34,42 @@ 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
- function shouldBeDisabled(_ref, selectedPanel, usageRightNotSet) {
38
- let {
39
- fileUrl,
40
- theFile,
41
- error
42
- } = _ref;
43
-
37
+ function shouldBeDisabled({
38
+ fileUrl,
39
+ theFile,
40
+ error
41
+ }, selectedPanel, usageRightNotSet) {
44
42
  if (error || usageRightNotSet && selectedPanel === 'COMPUTER') {
45
43
  return true;
46
44
  }
47
-
48
45
  switch (selectedPanel) {
49
46
  case 'COMPUTER':
50
47
  return !theFile || theFile.error;
51
-
52
48
  case 'URL':
53
49
  return !fileUrl;
54
-
55
50
  default:
56
51
  if (UploadCanvasPanelIds.includes(selectedPanel)) return !fileUrl;
57
52
  return false;
58
53
  // When in doubt, don't disable (but we shouldn't get here either)
59
54
  }
60
55
  }
61
-
62
- const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
63
- var _contentProps$session;
64
-
65
- let {
66
- preselectedFile,
67
- editor,
68
- contentProps,
69
- trayProps,
70
- canvasOrigin,
71
- onSubmit,
72
- onDismiss,
73
- panels,
74
- label,
75
- accept,
76
- modalBodyWidth,
77
- modalBodyHeight,
78
- requireA11yAttributes = true,
79
- forBlockEditorUse = false,
80
- uploading = false
81
- } = _ref2;
56
+ const UploadFileModal = /*#__PURE__*/React.forwardRef(({
57
+ preselectedFile,
58
+ editor,
59
+ contentProps,
60
+ trayProps,
61
+ canvasOrigin,
62
+ onSubmit,
63
+ onDismiss,
64
+ panels,
65
+ label,
66
+ accept,
67
+ modalBodyWidth,
68
+ modalBodyHeight,
69
+ requireA11yAttributes = true,
70
+ forBlockEditorUse = false,
71
+ uploading = false
72
+ }, ref) => {
82
73
  const [theFile, setFile] = useState(preselectedFile);
83
74
  const [error, setError] = useState(null);
84
75
  const [fileUrl, setFileUrl] = useState('');
@@ -87,38 +78,35 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
87
78
  usageRight: 'choose',
88
79
  ccLicense: '',
89
80
  copyrightHolder: ''
90
- }); // Image options props
81
+ });
91
82
 
83
+ // Image options props
92
84
  const [altText, setAltText] = useState('');
93
85
  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
86
+ const [displayAs, setDisplayAs] = useState('embed');
87
+ // even though usage rights might be required by the course, canvas has no place
95
88
  // on the user to store it. Only Group and Course.
96
-
97
- 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
-
89
+ const requiresUsageRights = contentProps?.session?.usageRightsRequired && /(?:course|group)/.test(trayProps.contextType);
99
90
  function handleAltTextChange(event) {
100
91
  setAltText(event.target.value);
101
92
  }
102
-
103
93
  function handleIsDecorativeChange(event) {
104
94
  setIsDecorativeImage(event.target.checked);
105
95
  }
106
-
107
96
  function handleDisplayAsChange(event) {
108
97
  setDisplayAs(event.target.value);
109
98
  }
110
-
111
99
  const handleRequestTabChange = index => {
112
100
  setSelectedPanel(panels[index]);
113
101
  setFileUrl('');
114
102
  };
115
-
116
103
  const submitDisabled = shouldBeDisabled({
117
104
  fileUrl,
118
105
  theFile,
119
106
  error
120
- }, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose'); // Load the necessary session values, if not already loaded
107
+ }, selectedPanel, requiresUsageRights && usageRightsState.usageRight === 'choose');
121
108
 
109
+ // Load the necessary session values, if not already loaded
122
110
  const loadSession = contentProps.loadSession;
123
111
  React.useEffect(() => {
124
112
  loadSession();
@@ -129,26 +117,22 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
129
117
  host: trayProps.host,
130
118
  canvasOrigin
131
119
  });
132
-
133
120
  if (forBlockEditorUse && !['COMPUTER', 'URL'].includes(selectedPanel)) {
134
121
  requireA11yAttributes = false;
135
122
  }
136
-
137
123
  return /*#__PURE__*/React.createElement(Modal, {
138
124
  "data-mce-component": true,
139
125
  as: "form",
140
126
  label: label,
141
- mountNode: instuiPopupMountNode,
127
+ mountNode: instuiPopupMountNodeFn,
142
128
  size: "large",
143
129
  overflow: "fit",
144
130
  onDismiss: onDismiss,
145
131
  onSubmit: e => {
146
132
  e.preventDefault();
147
-
148
133
  if (submitDisabled || uploading) {
149
134
  return false;
150
135
  }
151
-
152
136
  onSubmit(editor, accept, selectedPanel, {
153
137
  fileUrl,
154
138
  theFile,
@@ -171,12 +155,9 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
171
155
  }), /*#__PURE__*/React.createElement(Heading, null, label)), /*#__PURE__*/React.createElement(Modal.Body, {
172
156
  ref: ref
173
157
  }, /*#__PURE__*/React.createElement(Tabs, {
174
- onRequestTabChange: (event, _ref3) => {
175
- let {
176
- index
177
- } = _ref3;
178
- return handleRequestTabChange(index);
179
- }
158
+ onRequestTabChange: (event, {
159
+ index
160
+ }) => handleRequestTabChange(index)
180
161
  }, panels.map(panel => {
181
162
  switch (panel) {
182
163
  case 'COMPUTER':
@@ -202,7 +183,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
202
183
  height: modalBodyHeight
203
184
  }
204
185
  })));
205
-
206
186
  case 'URL':
207
187
  return /*#__PURE__*/React.createElement(Tabs.Panel, {
208
188
  key: panel,
@@ -219,7 +199,6 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
219
199
  fileUrl: fileUrl,
220
200
  setFileUrl: setFileUrl
221
201
  })));
222
-
223
202
  default:
224
203
  if (UploadCanvasPanelIds.includes(panel)) {
225
204
  return /*#__PURE__*/React.createElement(Tabs.Panel, {
@@ -238,10 +217,10 @@ const UploadFileModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
238
217
  setFileUrl: setFileUrl
239
218
  })));
240
219
  }
241
-
242
220
  return null;
243
221
  }
244
- })), // We shouldn't show the accordions until the session data is loaded.
222
+ })),
223
+ // We shouldn't show the accordions until the session data is loaded.
245
224
  Object.keys(contentProps.session || {}).length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, selectedPanel === 'COMPUTER' && requiresUsageRights && /*#__PURE__*/React.createElement(View, {
246
225
  as: "div",
247
226
  role: "group",
@@ -304,6 +283,5 @@ UploadFileModal.propTypes = {
304
283
  forBlockEditorUse: bool,
305
284
  uploading: bool,
306
285
  preselectedFile: object // JS File
307
-
308
286
  };
309
287
  export default UploadFileModal;
@@ -15,15 +15,15 @@
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';
21
22
  import formatMessage from '../../../../format-message';
22
- export default function UrlPanel(_ref) {
23
- let {
24
- fileUrl,
25
- setFileUrl
26
- } = _ref;
23
+ export default function UrlPanel({
24
+ fileUrl,
25
+ setFileUrl
26
+ }) {
27
27
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextInput, {
28
28
  name: "file-url",
29
29
  renderLabel: formatMessage('File URL'),
@@ -15,19 +15,18 @@
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 formatMessage from '../../../../format-message';
21
22
  import { SimpleSelect } from '@instructure/ui-simple-select';
22
23
  import { View } from '@instructure/ui-view';
23
24
  import { TextInput } from '@instructure/ui-text-input';
24
-
25
- const ShowCreativeCommonsOptions = _ref => {
26
- let {
27
- ccLicense,
28
- setCCLicense,
29
- licenseOptions
30
- } = _ref;
25
+ const ShowCreativeCommonsOptions = ({
26
+ ccLicense,
27
+ setCCLicense,
28
+ licenseOptions
29
+ }) => {
31
30
  const onlyCC = licenseOptions.filter(license => license.id.indexOf('cc') === 0);
32
31
  return /*#__PURE__*/React.createElement(View, {
33
32
  as: "div",
@@ -36,19 +35,15 @@ const ShowCreativeCommonsOptions = _ref => {
36
35
  renderLabel: formatMessage('Creative Commons License:'),
37
36
  assistiveText: formatMessage('Use arrow keys to navigate options.'),
38
37
  value: ccLicense,
39
- onChange: (e, _ref2) => {
40
- let {
41
- id
42
- } = _ref2;
43
- return setCCLicense(id);
44
- }
38
+ onChange: (e, {
39
+ id
40
+ }) => setCCLicense(id)
45
41
  }, onlyCC.map(license => /*#__PURE__*/React.createElement(SimpleSelect.Option, {
46
42
  key: license.id,
47
43
  id: license.id,
48
44
  value: license.id
49
45
  }, license.name))));
50
46
  };
51
-
52
47
  const ShowMessage = () => {
53
48
  return /*#__PURE__*/React.createElement("div", {
54
49
  className: "alert"
@@ -60,15 +55,13 @@ const ShowMessage = () => {
60
55
  }
61
56
  }, formatMessage("If you do not select usage rights now, this file will be unpublished after it's uploaded."))));
62
57
  };
63
-
64
- const UsageRightsSelectBox = _ref3 => {
65
- let {
66
- contextType,
67
- contextId,
68
- showMessage: showMessageProp,
69
- usageRightsState,
70
- setUsageRightsState
71
- } = _ref3;
58
+ const UsageRightsSelectBox = ({
59
+ contextType,
60
+ contextId,
61
+ showMessage: showMessageProp,
62
+ usageRightsState,
63
+ setUsageRightsState
64
+ }) => {
72
65
  const {
73
66
  usageRight,
74
67
  ccLicense,
@@ -100,23 +93,19 @@ const UsageRightsSelectBox = _ref3 => {
100
93
  function getUsageRightsOptions() {
101
94
  fetch(apiUrl()).then(res => res.text()).then(res => setLicenseOptions(JSON.parse(res))).catch(() => {});
102
95
  }
103
-
104
96
  function apiUrl() {
105
97
  const context = contextType.replace(/([^s])$/, '$1s'); // pluralize
106
-
107
98
  return `/api/v1/${context}/${contextId}/content_licenses`;
108
99
  }
109
-
110
100
  getUsageRightsOptions();
111
101
  }, [contextType, contextId]);
112
-
113
102
  function handleChange(value) {
114
- setUsageRightsState(state => ({ ...state,
103
+ setUsageRightsState(state => ({
104
+ ...state,
115
105
  usageRight: value
116
106
  }));
117
107
  setShowMessage(showMessageProp && value === 'choose');
118
108
  }
119
-
120
109
  return /*#__PURE__*/React.createElement(View, {
121
110
  as: "div"
122
111
  }, /*#__PURE__*/React.createElement(View, {
@@ -125,10 +114,9 @@ const UsageRightsSelectBox = _ref3 => {
125
114
  }, /*#__PURE__*/React.createElement(SimpleSelect, {
126
115
  renderLabel: formatMessage('Usage Right:'),
127
116
  assistiveText: formatMessage('Use arrow keys to navigate options.'),
128
- onChange: (e, _ref4) => {
129
- let {
130
- id
131
- } = _ref4;
117
+ onChange: (e, {
118
+ id
119
+ }) => {
132
120
  handleChange(id);
133
121
  },
134
122
  value: usageRight
@@ -138,7 +126,8 @@ const UsageRightsSelectBox = _ref3 => {
138
126
  value: contentOption.value
139
127
  }, contentOption.display)))), showCreativeCommonsOptions && /*#__PURE__*/React.createElement(ShowCreativeCommonsOptions, {
140
128
  ccLicese: ccLicense,
141
- setCCLicense: license => setUsageRightsState(state => ({ ...state,
129
+ setCCLicense: license => setUsageRightsState(state => ({
130
+ ...state,
142
131
  ccLicense: license
143
132
  })),
144
133
  licenseOptions: licenseOptions
@@ -148,7 +137,8 @@ const UsageRightsSelectBox = _ref3 => {
148
137
  }, /*#__PURE__*/React.createElement(TextInput, {
149
138
  renderLabel: formatMessage('Copyright Holder:'),
150
139
  value: copyrightHolder,
151
- onChange: (e, value) => setUsageRightsState(state => ({ ...state,
140
+ onChange: (e, value) => setUsageRightsState(state => ({
141
+ ...state,
152
142
  copyrightHolder: value
153
143
  })),
154
144
  placeholder: formatMessage('(c) 2001 Acme Inc.')
@@ -157,7 +147,6 @@ const UsageRightsSelectBox = _ref3 => {
157
147
  margin: "medium 0"
158
148
  }, showMessage && /*#__PURE__*/React.createElement(ShowMessage, null)));
159
149
  };
160
-
161
150
  UsageRightsSelectBox.propTypes = {
162
151
  usageRightsState: PropTypes.shape({
163
152
  ccLicense: PropTypes.string,
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import ReactDOM from 'react-dom';
19
20
  import formatMessage from '../../../../format-message';
20
21
  import React from 'react';
@@ -25,39 +26,35 @@ export default function doFileUpload(ed, document, opts) {
25
26
  accept,
26
27
  panels,
27
28
  preselectedFile
28
- } = { ...opts
29
+ } = {
30
+ ...opts
29
31
  };
30
- const title = accept !== null && accept !== void 0 && accept.startsWith('image/') ? formatMessage('Upload Image') : formatMessage('Upload File');
32
+ const title = accept?.startsWith('image/') ? formatMessage('Upload Image') : formatMessage('Upload File');
31
33
  let shownResolve;
32
34
  const shownPromise = new Promise(resolve => shownResolve = resolve);
33
- const closedPromise = import('./UploadFile').then(_ref => {
34
- let {
35
- UploadFile
36
- } = _ref;
37
-
35
+ const closedPromise = import('./UploadFile').then(({
36
+ UploadFile
37
+ }) => {
38
38
  const container = document.querySelector('.canvas-rce-upload-container') || (() => {
39
39
  const elem = document.createElement('div');
40
40
  elem.className = 'canvas-rce-upload-container';
41
41
  document.body.appendChild(elem);
42
42
  return elem;
43
43
  })();
44
-
45
44
  return new Promise(resolve => {
46
45
  const handleDismiss = () => {
47
46
  ReactDOM.unmountComponentAtNode(container);
48
47
  ed.focus(false);
49
48
  resolve('dismissed');
50
49
  };
51
-
52
- const wrappedSubmit = function () {
50
+ const wrappedSubmit = (...args) => {
53
51
  try {
54
- return handleSubmit(...arguments);
52
+ return handleSubmit(...args);
55
53
  } finally {
56
54
  resolve('submitted');
57
55
  }
58
56
  };
59
-
60
- ReactDOM.render( /*#__PURE__*/React.createElement(UploadFile, {
57
+ ReactDOM.render(/*#__PURE__*/React.createElement(UploadFile, {
61
58
  preselectedFile: preselectedFile,
62
59
  accept: accept,
63
60
  editor: ed,
@@ -15,5 +15,6 @@
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 { UploadFilePanelIds, handleSubmit, UploadFile } from './UploadFile';
19
20
  export { UploadFilePanelIds, handleSubmit, UploadFile };
@@ -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,20 +16,19 @@ import _pt from "prop-types";
17
16
  * You should have received a copy of the GNU Affero General Public License along
18
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
18
  */
19
+
20
20
  import React from 'react';
21
21
  import formatMessage from '../../../../format-message';
22
22
  import { Button, CloseButton } from '@instructure/ui-buttons';
23
23
  import { Heading } from '@instructure/ui-heading';
24
24
  import { Modal } from '@instructure/ui-modal';
25
-
26
- const AIResponseModal = _ref => {
27
- let {
28
- open,
29
- html,
30
- onClose,
31
- onInsert,
32
- onReplace
33
- } = _ref;
25
+ const AIResponseModal = ({
26
+ open,
27
+ html,
28
+ onClose,
29
+ onInsert,
30
+ onReplace
31
+ }) => {
34
32
  return /*#__PURE__*/React.createElement(Modal, {
35
33
  open: open,
36
34
  onDismiss: onClose,
@@ -59,7 +57,6 @@ const AIResponseModal = _ref => {
59
57
  margin: "medium 0 0 medium"
60
58
  }, formatMessage('Insert'))));
61
59
  };
62
-
63
60
  AIResponseModal.propTypes = {
64
61
  open: _pt.bool.isRequired,
65
62
  html: _pt.string.isRequired,