@instructure/canvas-rce 5.14.0 → 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 (484) hide show
  1. package/CHANGELOG.md +33 -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/__tests__/sidebar/reducers/all_files.test.js +28 -0
  17. package/babel.config.js +3 -1
  18. package/build.sh +7 -7
  19. package/es/bridge/Bridge.js +8 -56
  20. package/es/bridge/index.js +1 -0
  21. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  22. package/es/canvasFileBrowser/en-US.js +3 -6
  23. package/es/common/FlashAlert.js +7 -28
  24. package/es/common/browser.js +4 -2
  25. package/es/common/fileUrl.js +104 -59
  26. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  27. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  28. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  29. package/es/common/incremental-loading/index.js +1 -0
  30. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  31. package/es/common/indicate.js +15 -8
  32. package/es/common/mimeClass.js +3 -4
  33. package/es/common/natcompare.js +1 -4
  34. package/es/defaultTinymceConfig.js +5 -3
  35. package/es/elementDenylist.js +1 -0
  36. package/es/enhance-user-content/doc_previews.js +17 -28
  37. package/es/enhance-user-content/enhance_user_content.js +28 -60
  38. package/es/enhance-user-content/external_links.js +5 -8
  39. package/es/enhance-user-content/index.js +1 -0
  40. package/es/enhance-user-content/instructure_helper.js +25 -38
  41. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  42. package/es/enhance-user-content/mathml.js +35 -82
  43. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  44. package/es/format-message.js +3 -4
  45. package/es/getThemeVars.js +8 -6
  46. package/es/getTranslations.js +1 -78
  47. package/es/index.js +3 -1
  48. package/es/rce/AlertMessageArea.js +1 -1
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +1 -0
  51. package/es/rce/RCE.js +12 -11
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +27 -10
  54. package/es/rce/RCEWrapper.js +167 -386
  55. package/es/rce/RCEWrapperProps.js +8 -3
  56. package/es/rce/RceHtmlEditor.js +5 -8
  57. package/es/rce/ResizeHandle.js +3 -8
  58. package/es/rce/RestoreAutoSaveModal.js +1 -2
  59. package/es/rce/ShowOnFocusButton/index.js +0 -6
  60. package/es/rce/StatusBar.js +8 -37
  61. package/es/rce/alertHandler.js +1 -4
  62. package/es/rce/contentInsertion.js +35 -57
  63. package/es/rce/contentInsertionUtils.js +6 -8
  64. package/es/rce/contentRendering.js +7 -12
  65. package/es/rce/customEvents.js +1 -0
  66. package/es/rce/editorLanguage.js +22 -10
  67. package/es/rce/indicatorRegion.js +6 -5
  68. package/es/rce/normalizeLocale.js +5 -3
  69. package/es/rce/normalizeProps.js +3 -1
  70. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  71. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  74. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  75. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  76. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  77. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  83. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  84. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  85. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  86. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  95. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  96. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  97. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  98. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  99. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  100. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  101. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  102. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  103. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  127. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  128. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  129. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  130. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  131. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  132. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  134. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  135. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  136. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  137. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  138. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  139. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  140. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  141. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  144. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  147. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  148. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  149. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  150. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  153. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  154. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  155. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  156. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  159. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  164. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  165. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  166. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  167. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  168. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  169. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  170. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  171. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  172. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  173. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  174. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  175. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  176. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  184. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  185. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  186. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  187. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  188. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  198. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  199. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  201. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  202. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  204. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  205. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  206. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  207. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  208. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  210. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  211. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  212. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  213. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  214. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  215. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  216. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  217. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  218. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  219. package/es/rce/plugins/shared/CanvasContentTray.js +43 -63
  220. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  221. package/es/rce/plugins/shared/ColorInput.js +5 -14
  222. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  223. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  224. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  225. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  226. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  227. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  228. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  229. package/es/rce/plugins/shared/EventUtils.js +1 -3
  230. package/es/rce/plugins/shared/Filter.js +8 -38
  231. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  232. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  233. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  234. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  235. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  236. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  237. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  239. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  240. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  241. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  242. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  244. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  245. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  247. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  248. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  250. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  251. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  252. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  253. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  254. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  255. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  256. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  257. package/es/rce/plugins/shared/Previewable.js +1 -0
  258. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  259. package/es/rce/plugins/shared/StoreContext.js +1 -2
  260. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  261. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  262. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  263. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  264. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  265. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  266. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  267. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  268. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  269. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  270. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  271. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  272. package/es/rce/plugins/shared/Upload/index.js +1 -0
  273. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  274. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  275. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  276. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  277. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  278. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  279. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  280. package/es/rce/plugins/shared/dateUtils.js +1 -1
  281. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  282. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  283. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  284. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  285. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  286. package/es/rce/plugins/shared/fileShape.js +4 -9
  287. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  288. package/es/rce/plugins/shared/fileUtils.js +1 -2
  289. package/es/rce/plugins/shared/linkUtils.js +1 -16
  290. package/es/rce/plugins/shared/round.js +1 -0
  291. package/es/rce/plugins/shared/trayUtils.js +4 -3
  292. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  293. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  294. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  295. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  296. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  297. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  299. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  300. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  321. package/es/rce/root.js +9 -8
  322. package/es/rce/sanitizePlugins.js +1 -3
  323. package/es/rce/style.js +1 -4
  324. package/es/rce/tinyRCE.js +13 -9
  325. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  326. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  327. package/es/rce/transformContent.js +8 -10
  328. package/es/rce/types.js +1 -0
  329. package/es/rce/userOS.js +1 -1
  330. package/es/rce/wrapInitCb.js +50 -43
  331. package/es/rcs/api.js +61 -116
  332. package/es/rcs/buildError.js +5 -17
  333. package/es/rcs/fake.js +4 -13
  334. package/es/sidebar/actions/all_files.js +2 -0
  335. package/es/sidebar/actions/data.js +4 -7
  336. package/es/sidebar/actions/documents.js +9 -6
  337. package/es/sidebar/actions/files.js +3 -6
  338. package/es/sidebar/actions/filter.js +1 -0
  339. package/es/sidebar/actions/flickr.js +1 -1
  340. package/es/sidebar/actions/images.js +12 -11
  341. package/es/sidebar/actions/links.js +1 -0
  342. package/es/sidebar/actions/media.js +12 -10
  343. package/es/sidebar/actions/session.js +1 -3
  344. package/es/sidebar/actions/ui.js +1 -0
  345. package/es/sidebar/actions/upload.js +14 -39
  346. package/es/sidebar/containers/Sidebar.js +1 -2
  347. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  348. package/es/sidebar/dragHtml.js +5 -3
  349. package/es/sidebar/reducers/all_files.js +4 -3
  350. package/es/sidebar/reducers/collection.js +12 -13
  351. package/es/sidebar/reducers/collections.js +5 -5
  352. package/es/sidebar/reducers/documents.js +6 -13
  353. package/es/sidebar/reducers/files.js +3 -3
  354. package/es/sidebar/reducers/filter.js +1 -8
  355. package/es/sidebar/reducers/flickr.js +9 -9
  356. package/es/sidebar/reducers/folder.js +15 -15
  357. package/es/sidebar/reducers/folders.js +3 -3
  358. package/es/sidebar/reducers/images.js +3 -13
  359. package/es/sidebar/reducers/index.js +3 -1
  360. package/es/sidebar/reducers/media.js +6 -13
  361. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  362. package/es/sidebar/reducers/noop.js +1 -0
  363. package/es/sidebar/reducers/rootFolderId.js +1 -2
  364. package/es/sidebar/reducers/session.js +3 -3
  365. package/es/sidebar/reducers/ui.js +3 -16
  366. package/es/sidebar/reducers/upload.js +8 -40
  367. package/es/sidebar/store/configureStore.js +1 -0
  368. package/es/sidebar/store/initialState.js +13 -24
  369. package/es/translations/locales/ab.js +1 -0
  370. package/es/translations/locales/ar.js +67 -9
  371. package/es/translations/locales/ca.js +67 -9
  372. package/es/translations/locales/cs.js +1 -0
  373. package/es/translations/locales/cs_CZ.js +1 -0
  374. package/es/translations/locales/cy.js +67 -9
  375. package/es/translations/locales/da-x-k12.js +67 -9
  376. package/es/translations/locales/da.js +67 -9
  377. package/es/translations/locales/da_DK.js +1 -0
  378. package/es/translations/locales/de.js +67 -9
  379. package/es/translations/locales/el.js +4 -0
  380. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  381. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  382. package/es/translations/locales/en.js +72 -8
  383. package/es/translations/locales/en_AU.js +67 -9
  384. package/es/translations/locales/en_CA.js +67 -9
  385. package/es/translations/locales/en_CY.js +67 -9
  386. package/es/translations/locales/en_GB.js +67 -9
  387. package/es/translations/locales/en_NZ.js +1 -0
  388. package/es/translations/locales/en_SE.js +1 -0
  389. package/es/translations/locales/en_US.js +1 -0
  390. package/es/translations/locales/es.js +67 -9
  391. package/es/translations/locales/es_ES.js +67 -9
  392. package/es/translations/locales/es_GT.js +1 -0
  393. package/es/translations/locales/fa_IR.js +7 -0
  394. package/es/translations/locales/fi.js +67 -9
  395. package/es/translations/locales/fr.js +67 -9
  396. package/es/translations/locales/fr_CA.js +68 -10
  397. package/es/translations/locales/ga.js +5 -13
  398. package/es/translations/locales/he.js +7 -0
  399. package/es/translations/locales/hi.js +67 -9
  400. package/es/translations/locales/ht.js +67 -9
  401. package/es/translations/locales/hu.js +7 -6
  402. package/es/translations/locales/hu_HU.js +1 -0
  403. package/es/translations/locales/hy.js +1 -0
  404. package/es/translations/locales/id.js +67 -9
  405. package/es/translations/locales/id_ID.js +1 -0
  406. package/es/translations/locales/is.js +67 -9
  407. package/es/translations/locales/it.js +67 -9
  408. package/es/translations/locales/ja.js +67 -9
  409. package/es/translations/locales/ko.js +1 -0
  410. package/es/translations/locales/ko_KR.js +1 -0
  411. package/es/translations/locales/lt.js +1 -0
  412. package/es/translations/locales/lt_LT.js +1 -0
  413. package/es/translations/locales/mi.js +67 -9
  414. package/es/translations/locales/mn_MN.js +1 -0
  415. package/es/translations/locales/ms.js +67 -9
  416. package/es/translations/locales/nb-x-k12.js +67 -9
  417. package/es/translations/locales/nb.js +67 -9
  418. package/es/translations/locales/nl.js +67 -9
  419. package/es/translations/locales/nl_NL.js +1 -0
  420. package/es/translations/locales/nn.js +7 -6
  421. package/es/translations/locales/pl.js +67 -9
  422. package/es/translations/locales/pt.js +67 -9
  423. package/es/translations/locales/pt_BR.js +67 -9
  424. package/es/translations/locales/ro.js +1 -0
  425. package/es/translations/locales/ru.js +67 -9
  426. package/es/translations/locales/se.js +1 -0
  427. package/es/translations/locales/sl.js +67 -9
  428. package/es/translations/locales/sv-x-k12.js +67 -9
  429. package/es/translations/locales/sv.js +67 -9
  430. package/es/translations/locales/sv_SE.js +1 -0
  431. package/es/translations/locales/tg.js +1 -0
  432. package/es/translations/locales/th.js +67 -9
  433. package/es/translations/locales/th_TH.js +1 -0
  434. package/es/translations/locales/tl_PH.js +1 -0
  435. package/es/translations/locales/tr.js +7 -0
  436. package/es/translations/locales/uk_UA.js +7 -0
  437. package/es/translations/locales/vi.js +67 -9
  438. package/es/translations/locales/vi_VN.js +1 -0
  439. package/es/translations/locales/zh-Hans.js +67 -9
  440. package/es/translations/locales/zh-Hant.js +67 -9
  441. package/es/translations/locales/zh.js +67 -9
  442. package/es/translations/locales/zh_HK.js +67 -9
  443. package/es/translations/locales/zh_TW.Big5.js +1 -0
  444. package/es/translations/locales/zh_TW.js +1 -0
  445. package/es/translations/tinymce/ar_SA.js +1 -0
  446. package/es/translations/tinymce/fi.js +1 -0
  447. package/es/translations/tinymce/ga.js +1 -0
  448. package/es/translations/tinymce/id.js +1 -0
  449. package/es/translations/tinymce/ru.js +1 -0
  450. package/es/translations/tinymce/ru_RU.js +1 -0
  451. package/es/translations/tinymce/sl.js +1 -0
  452. package/es/translations/tinymce/sr.js +1 -0
  453. package/es/translations/tinymce/th.js +1 -0
  454. package/es/translations/tinymce/uk_UA.js +1 -0
  455. package/es/translations/tinymce/vi_VN.js +1 -0
  456. package/es/util/TypedDict.js +4 -2
  457. package/es/util/encrypted-storage.js +3 -13
  458. package/es/util/file-url-util.js +1 -6
  459. package/es/util/fullscreenHelpers.js +4 -1
  460. package/es/util/instui-icon-helper.js +4 -3
  461. package/es/util/loadingPlaceholder.js +38 -39
  462. package/es/util/simpleCache.js +0 -3
  463. package/es/util/string-util.js +1 -1
  464. package/es/util/textarea-editing-util.js +3 -7
  465. package/es/util/tinymce-plugin-util.js +0 -5
  466. package/es/util/url-util.js +16 -25
  467. package/eslint.config.js +239 -0
  468. package/jest.config.js +1 -1
  469. package/package.json +77 -82
  470. package/scripts/build-canvas +2 -1
  471. package/scripts/build.js +4 -4
  472. package/scripts/publish_to_npm.sh +1 -1
  473. package/testcafe/RCEWrapper.test.js +0 -1
  474. package/testcafe/StatusBar.test.js +0 -1
  475. package/testcafe/axe.test.js +3 -4
  476. package/testcafe/enhanceUserContent.test.js +0 -1
  477. package/tsconfig.json +20 -15
  478. package/.eslintrc +0 -45
  479. package/.prettierignore +0 -6
  480. package/es/common/components/FileTree/File.js +0 -64
  481. package/es/common/components/FileTree/Folder.js +0 -110
  482. package/es/common/components/FileTree/index.js +0 -84
  483. package/es/common/components/FileTree/styles.js +0 -72
  484. package/es/common/components/Loading.js +0 -83
@@ -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';
@@ -15,13 +15,13 @@
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
25
  const ShowCreativeCommonsOptions = _ref => {
26
26
  let {
27
27
  ccLicense,
@@ -48,7 +48,6 @@ const ShowCreativeCommonsOptions = _ref => {
48
48
  value: license.id
49
49
  }, license.name))));
50
50
  };
51
-
52
51
  const ShowMessage = () => {
53
52
  return /*#__PURE__*/React.createElement("div", {
54
53
  className: "alert"
@@ -60,7 +59,6 @@ const ShowMessage = () => {
60
59
  }
61
60
  }, formatMessage("If you do not select usage rights now, this file will be unpublished after it's uploaded."))));
62
61
  };
63
-
64
62
  const UsageRightsSelectBox = _ref3 => {
65
63
  let {
66
64
  contextType,
@@ -100,23 +98,19 @@ const UsageRightsSelectBox = _ref3 => {
100
98
  function getUsageRightsOptions() {
101
99
  fetch(apiUrl()).then(res => res.text()).then(res => setLicenseOptions(JSON.parse(res))).catch(() => {});
102
100
  }
103
-
104
101
  function apiUrl() {
105
102
  const context = contextType.replace(/([^s])$/, '$1s'); // pluralize
106
-
107
103
  return `/api/v1/${context}/${contextId}/content_licenses`;
108
104
  }
109
-
110
105
  getUsageRightsOptions();
111
106
  }, [contextType, contextId]);
112
-
113
107
  function handleChange(value) {
114
- setUsageRightsState(state => ({ ...state,
108
+ setUsageRightsState(state => ({
109
+ ...state,
115
110
  usageRight: value
116
111
  }));
117
112
  setShowMessage(showMessageProp && value === 'choose');
118
113
  }
119
-
120
114
  return /*#__PURE__*/React.createElement(View, {
121
115
  as: "div"
122
116
  }, /*#__PURE__*/React.createElement(View, {
@@ -138,7 +132,8 @@ const UsageRightsSelectBox = _ref3 => {
138
132
  value: contentOption.value
139
133
  }, contentOption.display)))), showCreativeCommonsOptions && /*#__PURE__*/React.createElement(ShowCreativeCommonsOptions, {
140
134
  ccLicese: ccLicense,
141
- setCCLicense: license => setUsageRightsState(state => ({ ...state,
135
+ setCCLicense: license => setUsageRightsState(state => ({
136
+ ...state,
142
137
  ccLicense: license
143
138
  })),
144
139
  licenseOptions: licenseOptions
@@ -148,7 +143,8 @@ const UsageRightsSelectBox = _ref3 => {
148
143
  }, /*#__PURE__*/React.createElement(TextInput, {
149
144
  renderLabel: formatMessage('Copyright Holder:'),
150
145
  value: copyrightHolder,
151
- onChange: (e, value) => setUsageRightsState(state => ({ ...state,
146
+ onChange: (e, value) => setUsageRightsState(state => ({
147
+ ...state,
152
148
  copyrightHolder: value
153
149
  })),
154
150
  placeholder: formatMessage('(c) 2001 Acme Inc.')
@@ -157,7 +153,6 @@ const UsageRightsSelectBox = _ref3 => {
157
153
  margin: "medium 0"
158
154
  }, showMessage && /*#__PURE__*/React.createElement(ShowMessage, null)));
159
155
  };
160
-
161
156
  UsageRightsSelectBox.propTypes = {
162
157
  usageRightsState: PropTypes.shape({
163
158
  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,7 +26,8 @@ export default function doFileUpload(ed, document, opts) {
25
26
  accept,
26
27
  panels,
27
28
  preselectedFile
28
- } = { ...opts
29
+ } = {
30
+ ...opts
29
31
  };
30
32
  const title = accept !== null && accept !== void 0 && accept.startsWith('image/') ? formatMessage('Upload Image') : formatMessage('Upload File');
31
33
  let shownResolve;
@@ -34,21 +36,18 @@ export default function doFileUpload(ed, document, opts) {
34
36
  let {
35
37
  UploadFile
36
38
  } = _ref;
37
-
38
39
  const container = document.querySelector('.canvas-rce-upload-container') || (() => {
39
40
  const elem = document.createElement('div');
40
41
  elem.className = 'canvas-rce-upload-container';
41
42
  document.body.appendChild(elem);
42
43
  return elem;
43
44
  })();
44
-
45
45
  return new Promise(resolve => {
46
46
  const handleDismiss = () => {
47
47
  ReactDOM.unmountComponentAtNode(container);
48
48
  ed.focus(false);
49
49
  resolve('dismissed');
50
50
  };
51
-
52
51
  const wrappedSubmit = function () {
53
52
  try {
54
53
  return handleSubmit(...arguments);
@@ -56,8 +55,7 @@ export default function doFileUpload(ed, document, opts) {
56
55
  resolve('submitted');
57
56
  }
58
57
  };
59
-
60
- ReactDOM.render( /*#__PURE__*/React.createElement(UploadFile, {
58
+ ReactDOM.render(/*#__PURE__*/React.createElement(UploadFile, {
61
59
  preselectedFile: preselectedFile,
62
60
  accept: accept,
63
61
  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,12 +16,12 @@ 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
25
  const AIResponseModal = _ref => {
27
26
  let {
28
27
  open,
@@ -59,7 +58,6 @@ const AIResponseModal = _ref => {
59
58
  margin: "medium 0 0 medium"
60
59
  }, formatMessage('Insert'))));
61
60
  };
62
-
63
61
  AIResponseModal.propTypes = {
64
62
  open: _pt.bool.isRequired,
65
63
  html: _pt.string.isRequired,
@@ -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, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
21
21
  import formatMessage from '../../../../format-message';
22
22
  import { Button, CloseButton, CondensedButton, IconButton } from '@instructure/ui-buttons';
@@ -35,9 +35,7 @@ import { showFlashAlert } from '../../../../common/FlashAlert';
35
35
  import doFetchApi from '../do-fetch-api-effect';
36
36
  import { AIWandSVG, AIAvatarSVG, InsertSVG, CopySVG, RefreshSVG, DislikeSVG } from './aiicons';
37
37
  import { AIResponseModal } from './AIResponseModal';
38
-
39
38
  const msgid = () => uid('msg', 3);
40
-
41
39
  const modifyAllTaskMessage = formatMessage('Hello. Please describe the modifications you would like to make to your composition.');
42
40
  const modifySelectionTaskMessage = formatMessage('Hello. Please describe the modifications you would like to make to your selection.');
43
41
  const generateTaskMessage = formatMessage('Please decribe what you would like to compose.');
@@ -62,7 +60,6 @@ export const AIToolsTray = _ref => {
62
60
  transition: container.style.transition
63
61
  };
64
62
  }
65
-
66
63
  return {};
67
64
  });
68
65
  const [isOpen, setIsOpen] = useState(open);
@@ -95,7 +92,6 @@ export const AIToolsTray = _ref => {
95
92
  }, [initChatMessages]);
96
93
  useLayoutEffect(() => {
97
94
  var _chatContainerRef$cur;
98
-
99
95
  const lastbox = (_chatContainerRef$cur = chatContainerRef.current) === null || _chatContainerRef$cur === void 0 ? void 0 : _chatContainerRef$cur.querySelector('.ai-chat-box:last-child');
100
96
  lastbox === null || lastbox === void 0 ? void 0 : lastbox.scrollIntoView({
101
97
  behavior: 'smooth',
@@ -121,7 +117,6 @@ export const AIToolsTray = _ref => {
121
117
  const ed_rect = ed.getBoundingClientRect();
122
118
  const padding = parseInt(edstyle.paddingRight, 10);
123
119
  const tray_left = window.innerWidth - trayRef.offsetWidth;
124
-
125
120
  if (ed_rect.right > tray_left) {
126
121
  ed.style.boxSizing = 'border-box';
127
122
  ed.style.width = `${ed_rect.width - (ed_rect.right - tray_left - padding)}px`;
@@ -135,9 +130,10 @@ export const AIToolsTray = _ref => {
135
130
  }
136
131
  }, [containerStyle, open, trayRef]);
137
132
  const getResponse = useCallback(prompt => {
138
- setWaitingForResponse(true); // the .finally triggered the error even though there is a .catch
139
- // eslint-disable-next-line promise/catch-or-return
133
+ setWaitingForResponse(true);
140
134
 
135
+ // the .finally triggered the error even though there is a .catch
136
+ // eslint-disable-next-line promise/catch-or-return
141
137
  doFetchApi({
142
138
  path: '/api/v1/rich_content/generate',
143
139
  method: 'POST',
@@ -156,7 +152,6 @@ export const AIToolsTray = _ref => {
156
152
  const {
157
153
  json
158
154
  } = result;
159
-
160
155
  if (json.error) {
161
156
  chatMessagesRef.current.push({
162
157
  id: msgid(),
@@ -217,7 +212,6 @@ export const AIToolsTray = _ref => {
217
212
  }, [onInsertContent]);
218
213
  const handleCopyResponse = useCallback(async responseText => {
219
214
  try {
220
- // @ts-expect-error ClipboardItem.supports really does exist
221
215
  if (ClipboardItem.supports('text/html')) {
222
216
  const htmlBlob = new Blob([responseText], {
223
217
  type: 'text/html'
@@ -230,7 +224,6 @@ export const AIToolsTray = _ref => {
230
224
  div.innerHTML = responseText;
231
225
  await navigator.clipboard.writeText(div.textContent || '');
232
226
  }
233
-
234
227
  showFlashAlert({
235
228
  message: formatMessage('Response copied to clipboard'),
236
229
  type: 'success',
@@ -254,7 +247,6 @@ export const AIToolsTray = _ref => {
254
247
  const handleShowWholeResponse = useCallback(event => {
255
248
  const msgId = event.target.dataset.messageId;
256
249
  const message = chatMessagesRef.current.find(msg => msg.id === msgId);
257
-
258
250
  if (message) {
259
251
  setResponseHtml(message.message);
260
252
  }
@@ -270,7 +262,6 @@ export const AIToolsTray = _ref => {
270
262
  onReplaceContent(responseHtml);
271
263
  handleCloseResponseModal();
272
264
  }, [handleCloseResponseModal, onReplaceContent, responseHtml]);
273
-
274
265
  const sharkfin = () => {
275
266
  return /*#__PURE__*/React.createElement("svg", {
276
267
  width: "14",
@@ -288,14 +279,11 @@ export const AIToolsTray = _ref => {
288
279
  strokeWidth: "2"
289
280
  }));
290
281
  };
291
-
292
282
  const renderResponse = msgId => {
293
283
  const message = chatMessagesRef.current.find(msg => msg.id === msgId);
294
-
295
284
  if (!message) {
296
285
  return /*#__PURE__*/React.createElement("span", null, formatMessage("I'm sorry, but I cannot find the AI's answer"));
297
286
  }
298
-
299
287
  const div = document.createElement('div');
300
288
  div.innerHTML = message.message;
301
289
  return /*#__PURE__*/React.createElement("div", {
@@ -313,9 +301,9 @@ export const AIToolsTray = _ref => {
313
301
  onClick: handleShowWholeResponse,
314
302
  "data-message-id": msgId
315
303
  }, formatMessage('Show all'))));
316
- }; // TODO: should the response box get truncated?
317
-
304
+ };
318
305
 
306
+ // TODO: should the response box get truncated?
319
307
  const renderChatBox = (message, key) => {
320
308
  return /*#__PURE__*/React.createElement("div", {
321
309
  id: message.id,
@@ -346,11 +334,9 @@ export const AIToolsTray = _ref => {
346
334
  top: '-18px',
347
335
  // Adjust this value to position the sharkfin
348
336
  left: '40px' // Adjust this value to align the sharkfin horizontally
349
-
350
337
  }
351
338
  }, sharkfin())), message.type === 'response' ?
352
339
  /*#__PURE__*/
353
-
354
340
  /* TODO: why is it to wide w/o maxWidth? */
355
341
  React.createElement("div", {
356
342
  style: {
@@ -394,12 +380,10 @@ export const AIToolsTray = _ref => {
394
380
  size: "x-small"
395
381
  }))) : null);
396
382
  };
397
-
398
383
  const renderChatMessages = () => {
399
384
  const messages = chatMessagesRef.current.map(message => {
400
385
  return renderChatBox(message, message.id);
401
386
  });
402
-
403
387
  if (waitingForResponse) {
404
388
  messages.push(renderChatBox({
405
389
  id: msgid(),
@@ -407,10 +391,8 @@ export const AIToolsTray = _ref => {
407
391
  message: formatMessage('Waiting for response')
408
392
  }, 'ai-waiting-message'));
409
393
  }
410
-
411
394
  return messages;
412
395
  };
413
-
414
396
  return /*#__PURE__*/React.createElement(Tray, {
415
397
  contentRef: el => setTrayRef(el),
416
398
  label: "AIToolsTray",
@@ -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
  // @ts-expect-error
19
20
  import { IconCopyLine, IconRefreshLine } from '@instructure/ui-icons/es/svg';
20
21
  const AIWandSVG = `<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export * from './aiicons';
19
20
  export * from './AIToolsTray';
20
21
  export * from './AIResponseModal';
@@ -18,14 +18,12 @@
18
18
  import { ICON_MAKER_PARAM } from '../instructure_icon_maker/svg/constants';
19
19
  export default function buildDownloadUrl(url) {
20
20
  let downloadUrl;
21
-
22
21
  try {
23
22
  downloadUrl = new URL(url);
24
23
  } catch (e) {
25
24
  // eslint-disable-next-line no-throw-literal
26
25
  throw `Error parsing ${url}. 'buildDownloadUrl' only supports absolute URLs.`;
27
26
  }
28
-
29
27
  downloadUrl.searchParams.append(ICON_MAKER_PARAM, 1);
30
28
  return downloadUrl.toString();
31
29
  }