@instructure/canvas-rce 5.14.1 → 5.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/DEVELOPMENT.md +1 -1
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/plugins/shared/__mocks__/screenfull.js → __tests__/sidebar/reducers/all_files.test.js} +10 -6
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +8 -56
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +12 -59
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +7 -28
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +104 -59
  25. package/es/common/incremental-loading/LoadMoreButton.js +1 -0
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +1 -2
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +15 -8
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +17 -28
  36. package/es/enhance-user-content/enhance_user_content.js +28 -60
  37. package/es/enhance-user-content/external_links.js +5 -8
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +12 -34
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +35 -82
  42. package/es/enhance-user-content/media_comment_thumbnail.js +5 -17
  43. package/es/format-message.js +3 -4
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.js +3 -1
  47. package/es/rce/AlertMessageArea.js +1 -1
  48. package/es/rce/DraggingBlocker.js +4 -2
  49. package/es/rce/KeyboardShortcutModal.js +1 -0
  50. package/es/rce/RCE.js +12 -11
  51. package/es/rce/RCEGlobals.js +12 -10
  52. package/es/rce/RCEVariants.js +27 -10
  53. package/es/rce/RCEWrapper.js +167 -386
  54. package/es/rce/RCEWrapperProps.js +8 -3
  55. package/es/rce/RceHtmlEditor.js +5 -8
  56. package/es/rce/ResizeHandle.js +3 -8
  57. package/es/rce/RestoreAutoSaveModal.js +1 -2
  58. package/es/rce/ShowOnFocusButton/index.js +0 -6
  59. package/es/rce/StatusBar.js +8 -37
  60. package/es/rce/alertHandler.js +1 -4
  61. package/es/rce/contentInsertion.js +35 -57
  62. package/es/rce/contentInsertionUtils.js +6 -8
  63. package/es/rce/contentRendering.js +7 -12
  64. package/es/rce/customEvents.js +1 -0
  65. package/es/rce/editorLanguage.js +22 -10
  66. package/es/rce/indicatorRegion.js +6 -5
  67. package/es/rce/normalizeLocale.js +5 -3
  68. package/es/rce/normalizeProps.js +3 -1
  69. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  70. package/es/rce/plugins/instructure_color/clickCallback.js +84 -0
  71. package/es/rce/plugins/instructure_color/components/ColorPicker.js +299 -0
  72. package/es/rce/plugins/instructure_color/components/ColorPopup.js +68 -0
  73. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  74. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  75. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  76. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  78. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +22 -15
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +1 -2
  82. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  83. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  84. package/es/rce/plugins/instructure_documents/components/Link.js +3 -18
  85. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  86. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  87. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +12 -29
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +11 -12
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +4 -3
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  92. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +13 -7
  93. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +4 -7
  94. package/es/rce/plugins/instructure_equation/MathIcon/index.js +1 -1
  95. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  96. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  97. package/es/rce/plugins/instructure_equation/mathlive/index.js +1 -1
  98. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  99. package/es/rce/plugins/instructure_fullscreen/plugin.js +3 -6
  100. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  101. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  102. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +2 -4
  103. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +1 -2
  104. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +1 -0
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +1 -0
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +1 -0
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +1 -2
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +25 -22
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +7 -11
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +27 -23
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +5 -4
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +11 -9
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +5 -4
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +1 -3
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +7 -7
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +1 -0
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +27 -20
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +4 -4
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +1 -2
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +1 -5
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  126. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +18 -33
  127. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  128. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  129. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  130. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  131. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +1 -3
  132. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  133. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  134. package/es/rce/plugins/instructure_icon_maker/svg/image.js +69 -83
  135. package/es/rce/plugins/instructure_icon_maker/svg/index.js +11 -15
  136. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  137. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +32 -39
  138. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +1 -49
  139. package/es/rce/plugins/instructure_icon_maker/svg/text.js +7 -92
  140. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +1 -7
  141. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +2 -6
  142. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  143. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  144. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +1 -1
  145. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  146. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  147. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +6 -24
  148. package/es/rce/plugins/instructure_image/ImageList/Image.js +1 -6
  149. package/es/rce/plugins/instructure_image/ImageList/index.js +1 -2
  150. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +7 -27
  151. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +3 -16
  152. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  153. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  154. package/es/rce/plugins/instructure_image/plugin.js +13 -18
  155. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_links/components/AccordionSection.js +1 -0
  157. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  158. package/es/rce/plugins/instructure_links/components/Link.js +7 -19
  159. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +1 -21
  160. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +1 -4
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +1 -12
  163. package/es/rce/plugins/instructure_links/components/LinkSet.js +4 -20
  164. package/es/rce/plugins/instructure_links/components/LinksPanel.js +1 -2
  165. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  166. package/es/rce/plugins/instructure_links/components/NoResults.js +1 -7
  167. package/es/rce/plugins/instructure_links/plugin.js +17 -40
  168. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  169. package/es/rce/plugins/instructure_media_embed/clickCallback.js +2 -5
  170. package/es/rce/plugins/instructure_media_embed/components/Embed.js +1 -0
  171. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  172. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  173. package/es/rce/plugins/instructure_paste/plugin.js +27 -29
  174. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +14 -53
  175. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +21 -49
  176. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +11 -42
  177. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +2 -10
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  181. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  182. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  183. package/es/rce/{__mocks__/_mockStudioPlayer.js → plugins/instructure_rce_external_tools/constants.js} +11 -3
  184. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +19 -4
  185. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  186. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +130 -136
  187. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +100 -95
  188. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  189. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +2 -19
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +1 -14
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +18 -10
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +4 -4
  197. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +7 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  199. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -25
  200. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +1 -4
  201. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  202. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +8 -51
  203. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +4 -17
  204. package/es/rce/plugins/instructure_record/clickCallback.js +7 -15
  205. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  206. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  207. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +2 -5
  208. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +20 -35
  209. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +3 -18
  210. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  211. package/es/rce/plugins/instructure_search_and_replace/plugin.js +1 -3
  212. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  213. package/es/rce/plugins/instructure_wordcount/clickCallback.js +2 -5
  214. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -4
  215. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  216. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +1 -8
  217. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +1 -0
  218. package/es/rce/plugins/shared/CanvasContentTray.js +22 -49
  219. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  220. package/es/rce/plugins/shared/ColorInput.js +5 -14
  221. package/es/rce/plugins/shared/ConditionalTooltip.js +1 -0
  222. package/es/rce/plugins/shared/ContentSelection.js +17 -58
  223. package/es/rce/plugins/shared/DimensionUtils.js +1 -8
  224. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  225. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  226. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  227. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  228. package/es/rce/plugins/shared/EventUtils.js +1 -3
  229. package/es/rce/plugins/shared/Filter.js +8 -38
  230. package/es/rce/plugins/shared/FixedContentTray.js +3 -3
  231. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +1 -8
  232. package/es/rce/plugins/shared/ImageCropper/Modal.js +4 -7
  233. package/es/rce/plugins/shared/ImageCropper/Preview.js +7 -11
  234. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  235. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +2 -5
  236. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +1 -0
  237. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +1 -10
  238. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +1 -0
  239. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +1 -11
  240. package/es/rce/plugins/shared/ImageCropper/controls/index.js +1 -0
  241. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +3 -16
  242. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  243. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +1 -10
  244. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  245. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  246. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  247. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  249. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +1 -17
  250. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +19 -46
  252. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  253. package/es/rce/plugins/shared/ImageOptionsForm.js +1 -2
  254. package/es/rce/plugins/shared/LinkDisplay.js +1 -2
  255. package/es/rce/plugins/shared/PreviewIcon.js +1 -6
  256. package/es/rce/plugins/shared/Previewable.js +1 -0
  257. package/es/rce/plugins/shared/RceFileBrowser.js +5 -7
  258. package/es/rce/plugins/shared/StoreContext.js +1 -2
  259. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +10 -6
  260. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  261. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +13 -18
  262. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +1 -1
  263. package/es/rce/plugins/shared/Upload/ComputerPanel.js +8 -26
  264. package/es/rce/plugins/shared/Upload/PanelFilter.js +3 -12
  265. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  266. package/es/rce/plugins/shared/Upload/UploadFile.js +15 -18
  267. package/es/rce/plugins/shared/Upload/UploadFileModal.js +9 -25
  268. package/es/rce/plugins/shared/Upload/UrlPanel.js +1 -0
  269. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +7 -12
  270. package/es/rce/plugins/shared/Upload/doFileUpload.js +4 -6
  271. package/es/rce/plugins/shared/Upload/index.js +1 -0
  272. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +1 -3
  273. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +6 -24
  274. package/es/rce/plugins/shared/ai_tools/aiicons.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  276. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  277. package/es/rce/plugins/shared/canvasContentUtils.js +6 -9
  278. package/es/rce/plugins/shared/compressionUtils.js +1 -8
  279. package/es/rce/plugins/shared/dateUtils.js +1 -1
  280. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  281. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +7 -10
  282. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  283. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  284. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  285. package/es/rce/plugins/shared/fileShape.js +4 -9
  286. package/es/rce/plugins/shared/fileTypeUtils.js +32 -42
  287. package/es/rce/plugins/shared/fileUtils.js +1 -2
  288. package/es/rce/plugins/shared/linkUtils.js +1 -16
  289. package/es/rce/plugins/shared/round.js +1 -0
  290. package/es/rce/plugins/shared/trayUtils.js +4 -3
  291. package/es/rce/plugins/shared/useDataUrl.js +9 -9
  292. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  293. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +2 -6
  294. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +5 -63
  295. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  296. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  297. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  298. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +1 -6
  299. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +4 -7
  300. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  301. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  302. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +1 -5
  303. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +1 -4
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +1 -6
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  314. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  315. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  316. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +1 -26
  317. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +16 -15
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +7 -10
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  320. package/es/rce/root.js +9 -8
  321. package/es/rce/sanitizePlugins.js +1 -3
  322. package/es/rce/style.js +1 -4
  323. package/es/rce/tinyRCE.js +13 -9
  324. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  325. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  326. package/es/rce/transformContent.js +8 -10
  327. package/es/rce/types.js +1 -0
  328. package/es/rce/userOS.js +1 -1
  329. package/es/rce/wrapInitCb.js +50 -43
  330. package/es/rcs/api.js +61 -116
  331. package/es/rcs/buildError.js +5 -17
  332. package/es/rcs/fake.js +4 -13
  333. package/es/sidebar/actions/all_files.js +2 -0
  334. package/es/sidebar/actions/data.js +4 -7
  335. package/es/sidebar/actions/documents.js +9 -6
  336. package/es/sidebar/actions/files.js +3 -6
  337. package/es/sidebar/actions/filter.js +1 -0
  338. package/es/sidebar/actions/flickr.js +1 -1
  339. package/es/sidebar/actions/images.js +12 -11
  340. package/es/sidebar/actions/links.js +1 -0
  341. package/es/sidebar/actions/media.js +12 -10
  342. package/es/sidebar/actions/session.js +1 -3
  343. package/es/sidebar/actions/ui.js +1 -0
  344. package/es/sidebar/actions/upload.js +14 -39
  345. package/es/sidebar/containers/Sidebar.js +1 -2
  346. package/es/sidebar/containers/sidebarHandlers.js +3 -1
  347. package/es/sidebar/dragHtml.js +5 -3
  348. package/es/sidebar/reducers/all_files.js +4 -3
  349. package/es/sidebar/reducers/collection.js +12 -13
  350. package/es/sidebar/reducers/collections.js +5 -5
  351. package/es/sidebar/reducers/documents.js +6 -13
  352. package/es/sidebar/reducers/files.js +3 -3
  353. package/es/sidebar/reducers/filter.js +1 -8
  354. package/es/sidebar/reducers/flickr.js +9 -9
  355. package/es/sidebar/reducers/folder.js +15 -15
  356. package/es/sidebar/reducers/folders.js +3 -3
  357. package/es/sidebar/reducers/images.js +3 -13
  358. package/es/sidebar/reducers/index.js +3 -1
  359. package/es/sidebar/reducers/media.js +6 -13
  360. package/es/sidebar/reducers/newPageLinkExpanded.js +1 -2
  361. package/es/sidebar/reducers/noop.js +1 -0
  362. package/es/sidebar/reducers/rootFolderId.js +1 -2
  363. package/es/sidebar/reducers/session.js +3 -3
  364. package/es/sidebar/reducers/ui.js +3 -16
  365. package/es/sidebar/reducers/upload.js +8 -40
  366. package/es/sidebar/store/configureStore.js +1 -0
  367. package/es/sidebar/store/initialState.js +13 -24
  368. package/es/translations/locales/ab.js +1 -0
  369. package/es/translations/locales/ar.js +67 -9
  370. package/es/translations/locales/ca.js +67 -9
  371. package/es/translations/locales/cs.js +1 -0
  372. package/es/translations/locales/cs_CZ.js +1 -0
  373. package/es/translations/locales/cy.js +67 -9
  374. package/es/translations/locales/da-x-k12.js +67 -9
  375. package/es/translations/locales/da.js +67 -9
  376. package/es/translations/locales/da_DK.js +1 -0
  377. package/es/translations/locales/de.js +67 -9
  378. package/es/translations/locales/el.js +4 -0
  379. package/es/translations/locales/en-AU-x-unimelb.js +67 -9
  380. package/es/translations/locales/en-GB-x-ukhe.js +67 -9
  381. package/es/translations/locales/en.js +72 -8
  382. package/es/translations/locales/en_AU.js +67 -9
  383. package/es/translations/locales/en_CA.js +67 -9
  384. package/es/translations/locales/en_CY.js +67 -9
  385. package/es/translations/locales/en_GB.js +67 -9
  386. package/es/translations/locales/en_NZ.js +1 -0
  387. package/es/translations/locales/en_SE.js +1 -0
  388. package/es/translations/locales/en_US.js +1 -0
  389. package/es/translations/locales/es.js +67 -9
  390. package/es/translations/locales/es_ES.js +67 -9
  391. package/es/translations/locales/es_GT.js +1 -0
  392. package/es/translations/locales/fa_IR.js +7 -0
  393. package/es/translations/locales/fi.js +67 -9
  394. package/es/translations/locales/fr.js +67 -9
  395. package/es/translations/locales/fr_CA.js +68 -10
  396. package/es/translations/locales/ga.js +5 -13
  397. package/es/translations/locales/he.js +7 -0
  398. package/es/translations/locales/hi.js +67 -9
  399. package/es/translations/locales/ht.js +67 -9
  400. package/es/translations/locales/hu.js +7 -6
  401. package/es/translations/locales/hu_HU.js +1 -0
  402. package/es/translations/locales/hy.js +1 -0
  403. package/es/translations/locales/id.js +67 -9
  404. package/es/translations/locales/id_ID.js +1 -0
  405. package/es/translations/locales/is.js +67 -9
  406. package/es/translations/locales/it.js +67 -9
  407. package/es/translations/locales/ja.js +67 -9
  408. package/es/translations/locales/ko.js +1 -0
  409. package/es/translations/locales/ko_KR.js +1 -0
  410. package/es/translations/locales/lt.js +1 -0
  411. package/es/translations/locales/lt_LT.js +1 -0
  412. package/es/translations/locales/mi.js +67 -9
  413. package/es/translations/locales/mn_MN.js +1 -0
  414. package/es/translations/locales/ms.js +67 -9
  415. package/es/translations/locales/nb-x-k12.js +67 -9
  416. package/es/translations/locales/nb.js +67 -9
  417. package/es/translations/locales/nl.js +67 -9
  418. package/es/translations/locales/nl_NL.js +1 -0
  419. package/es/translations/locales/nn.js +7 -6
  420. package/es/translations/locales/pl.js +67 -9
  421. package/es/translations/locales/pt.js +67 -9
  422. package/es/translations/locales/pt_BR.js +67 -9
  423. package/es/translations/locales/ro.js +1 -0
  424. package/es/translations/locales/ru.js +67 -9
  425. package/es/translations/locales/se.js +1 -0
  426. package/es/translations/locales/sl.js +67 -9
  427. package/es/translations/locales/sv-x-k12.js +67 -9
  428. package/es/translations/locales/sv.js +67 -9
  429. package/es/translations/locales/sv_SE.js +1 -0
  430. package/es/translations/locales/tg.js +1 -0
  431. package/es/translations/locales/th.js +67 -9
  432. package/es/translations/locales/th_TH.js +1 -0
  433. package/es/translations/locales/tl_PH.js +1 -0
  434. package/es/translations/locales/tr.js +7 -0
  435. package/es/translations/locales/uk_UA.js +7 -0
  436. package/es/translations/locales/vi.js +67 -9
  437. package/es/translations/locales/vi_VN.js +1 -0
  438. package/es/translations/locales/zh-Hans.js +67 -9
  439. package/es/translations/locales/zh-Hant.js +67 -9
  440. package/es/translations/locales/zh.js +67 -9
  441. package/es/translations/locales/zh_HK.js +67 -9
  442. package/es/translations/locales/zh_TW.Big5.js +1 -0
  443. package/es/translations/locales/zh_TW.js +1 -0
  444. package/es/translations/tinymce/ar_SA.js +1 -0
  445. package/es/translations/tinymce/fi.js +1 -0
  446. package/es/translations/tinymce/ga.js +1 -0
  447. package/es/translations/tinymce/id.js +1 -0
  448. package/es/translations/tinymce/ru.js +1 -0
  449. package/es/translations/tinymce/ru_RU.js +1 -0
  450. package/es/translations/tinymce/sl.js +1 -0
  451. package/es/translations/tinymce/sr.js +1 -0
  452. package/es/translations/tinymce/th.js +1 -0
  453. package/es/translations/tinymce/uk_UA.js +1 -0
  454. package/es/translations/tinymce/vi_VN.js +1 -0
  455. package/es/util/TypedDict.js +4 -2
  456. package/es/util/encrypted-storage.js +3 -13
  457. package/es/util/file-url-util.js +1 -6
  458. package/es/util/fullscreenHelpers.js +4 -1
  459. package/es/util/instui-icon-helper.js +4 -3
  460. package/es/util/loadingPlaceholder.js +38 -39
  461. package/es/util/simpleCache.js +0 -3
  462. package/es/util/string-util.js +1 -1
  463. package/es/util/textarea-editing-util.js +3 -7
  464. package/es/util/tinymce-plugin-util.js +0 -5
  465. package/es/util/url-util.js +16 -25
  466. package/eslint.config.js +239 -0
  467. package/jest.config.js +1 -1
  468. package/package.json +76 -81
  469. package/scripts/build-canvas +2 -1
  470. package/scripts/build.js +4 -4
  471. package/testcafe/RCEWrapper.test.js +0 -1
  472. package/testcafe/StatusBar.test.js +0 -1
  473. package/testcafe/axe.test.js +3 -4
  474. package/testcafe/enhanceUserContent.test.js +0 -1
  475. package/tsconfig.json +20 -15
  476. package/.eslintrc +0 -45
  477. package/.prettierignore +0 -6
  478. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  479. package/es/rce/__mocks__/styleMock.js +0 -18
  480. package/es/rce/__mocks__/tinymceReact.js +0 -55
  481. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,52 +15,45 @@
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
  function scaleEvenly(width, height, scaleFactor, constraints) {
19
20
  const minHeight = constraints.minHeight || 0;
20
21
  const minWidth = constraints.minWidth || 0;
21
22
  const scaledWidth = width * scaleFactor;
22
23
  const scaledHeight = height * scaleFactor;
23
24
  let minimumScaleFactor = scaleFactor;
24
-
25
25
  if (scaledWidth < minWidth) {
26
26
  const atLeastMinWidth = Math.max(scaledWidth, minWidth);
27
27
  minimumScaleFactor = atLeastMinWidth / width;
28
28
  }
29
-
30
29
  if (scaledHeight < minHeight) {
31
30
  const atLeastMinHeight = Math.max(scaledHeight, minHeight);
32
31
  minimumScaleFactor = Math.max(atLeastMinHeight / height, minimumScaleFactor);
33
32
  }
34
-
35
33
  return {
36
34
  height: Math.round(height * minimumScaleFactor),
37
35
  width: Math.round(width * minimumScaleFactor)
38
36
  };
39
37
  }
40
-
41
38
  export function scaleForHeight(width, height, targetHeight) {
42
39
  let constraints = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
43
-
44
40
  if (targetHeight == null) {
45
41
  return {
46
42
  height: null,
47
43
  width: null
48
44
  };
49
45
  }
50
-
51
46
  const scaleFactor = targetHeight / height;
52
47
  return scaleEvenly(width, height, scaleFactor, constraints);
53
48
  }
54
49
  export function scaleForWidth(width, height, targetWidth) {
55
50
  let constraints = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
56
-
57
51
  if (targetWidth == null) {
58
52
  return {
59
53
  height: null,
60
54
  width: null
61
55
  };
62
56
  }
63
-
64
57
  const scaleFactor = targetWidth / width;
65
58
  return scaleEvenly(width, height, scaleFactor, constraints);
66
59
  }
@@ -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 { func, shape, string } from 'prop-types';
20
21
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
@@ -22,34 +23,33 @@ import { NumberInput } from '@instructure/ui-number-input';
22
23
  export default function DimensionInput(props) {
23
24
  const {
24
25
  dimensionState,
25
- label
26
+ label,
27
+ messages
26
28
  } = props;
27
29
  const {
28
30
  addOffset,
29
31
  inputValue,
30
32
  setInputValue
31
33
  } = dimensionState;
32
-
33
34
  function handleChange(_event, value) {
34
35
  setInputValue(value);
35
36
  }
36
-
37
37
  function handleDecrement() {
38
38
  addOffset(-1);
39
39
  }
40
-
41
40
  function handleIncrement() {
42
41
  addOffset(1);
43
42
  }
44
-
45
43
  return /*#__PURE__*/React.createElement(NumberInput, {
44
+ allowStringValue: true,
46
45
  renderLabel: /*#__PURE__*/React.createElement(ScreenReaderContent, null, label),
47
46
  onChange: handleChange,
48
47
  onDecrement: handleDecrement,
49
48
  onIncrement: handleIncrement,
50
49
  isRequired: true,
51
50
  showArrows: false,
52
- value: inputValue
51
+ value: inputValue,
52
+ messages: messages
53
53
  });
54
54
  }
55
55
  DimensionInput.propTypes = {
@@ -15,24 +15,34 @@
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 { bool, func, number, shape, string } from 'prop-types';
20
21
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
21
22
  import { FormFieldGroup } from '@instructure/ui-form-field';
22
- import { IconLockLine } from '@instructure/ui-icons';
23
+ import { IconLockLine, IconWarningSolid } from '@instructure/ui-icons';
23
24
  import { Flex } from '@instructure/ui-flex';
24
25
  import { Text } from '@instructure/ui-text';
25
26
  import { RadioInput, RadioInputGroup } from '@instructure/ui-radio-input';
26
27
  import formatMessage from '../../../../format-message';
27
28
  import DimensionInput from './DimensionInput';
28
29
  export { default as useDimensionsState } from './useDimensionsState';
29
-
30
+ const errorMessage = message => {
31
+ return /*#__PURE__*/React.createElement(Flex, {
32
+ gap: "xx-small",
33
+ alignItems: "center"
34
+ }, /*#__PURE__*/React.createElement(IconWarningSolid, {
35
+ color: "error"
36
+ }), /*#__PURE__*/React.createElement(Text, {
37
+ color: "danger",
38
+ size: "small"
39
+ }, message));
40
+ };
30
41
  const getMessage = (dimensionsState, minWidth, minHeight, minPercentage) => {
31
42
  let result = {
32
43
  text: formatMessage('Aspect ratio will be preserved'),
33
44
  type: 'hint'
34
45
  };
35
-
36
46
  if (dimensionsState.usePercentageUnits) {
37
47
  if (!dimensionsState.isNumeric) {
38
48
  result = {
@@ -41,7 +51,7 @@ const getMessage = (dimensionsState, minWidth, minHeight, minPercentage) => {
41
51
  };
42
52
  } else if (!dimensionsState.isAtLeastMinimums) {
43
53
  result = {
44
- text: formatMessage('Must be at least {percentage}%', {
54
+ text: formatMessage('Percentage must be at least {percentage}%', {
45
55
  percentage: minPercentage
46
56
  }),
47
57
  type: 'error'
@@ -54,17 +64,15 @@ const getMessage = (dimensionsState, minWidth, minHeight, minPercentage) => {
54
64
  };
55
65
  } else if (!dimensionsState.isAtLeastMinimums) {
56
66
  result = {
57
- text: formatMessage('Must be at least {width} x {height}px', {
67
+ text: formatMessage('Pixels must be at least {width} x {height}px', {
58
68
  width: minWidth,
59
69
  height: minHeight
60
70
  }),
61
71
  type: 'error'
62
72
  };
63
73
  }
64
-
65
74
  return result;
66
75
  };
67
-
68
76
  export default function DimensionsInput(props) {
69
77
  const {
70
78
  dimensionsState,
@@ -73,12 +81,24 @@ export default function DimensionsInput(props) {
73
81
  minPercentage,
74
82
  hidePercentage
75
83
  } = props;
76
-
77
84
  const handleDimensionTypeChange = e => {
78
85
  dimensionsState.setUsePercentageUnits(e.target.value === 'percentage');
79
86
  };
80
-
81
87
  const message = getMessage(dimensionsState, minWidth, minHeight, minPercentage);
88
+ const secondaryMessage = {
89
+ ...message,
90
+ text: ''
91
+ };
92
+ const displayMessage = message => {
93
+ if (!message) {
94
+ return;
95
+ }
96
+ return /*#__PURE__*/React.createElement("div", {
97
+ "data-testid": "message"
98
+ }, message.type === 'error' ? errorMessage(message.text) : /*#__PURE__*/React.createElement(Text, {
99
+ size: "small"
100
+ }, message.text));
101
+ };
82
102
  return /*#__PURE__*/React.createElement(Flex, {
83
103
  direction: "column"
84
104
  }, /*#__PURE__*/React.createElement(Flex.Item, {
@@ -100,8 +120,7 @@ export default function DimensionsInput(props) {
100
120
  }))), /*#__PURE__*/React.createElement(Flex.Item, {
101
121
  padding: "small"
102
122
  }, /*#__PURE__*/React.createElement(FormFieldGroup, {
103
- description: /*#__PURE__*/React.createElement(ScreenReaderContent, null, formatMessage('Dimensions')),
104
- messages: [message]
123
+ description: /*#__PURE__*/React.createElement(ScreenReaderContent, null, formatMessage('Dimensions'))
105
124
  }, /*#__PURE__*/React.createElement(Flex, {
106
125
  alignItems: "start",
107
126
  direction: "row",
@@ -111,7 +130,8 @@ export default function DimensionsInput(props) {
111
130
  shouldGrow: true
112
131
  }, /*#__PURE__*/React.createElement(DimensionInput, {
113
132
  dimensionState: dimensionsState.percentageState,
114
- label: formatMessage('Percentage')
133
+ label: formatMessage('Percentage'),
134
+ messages: [secondaryMessage]
115
135
  })), /*#__PURE__*/React.createElement(Flex.Item, {
116
136
  padding: "x-small small"
117
137
  }, "%")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Flex.Item, {
@@ -119,7 +139,8 @@ export default function DimensionsInput(props) {
119
139
  }, /*#__PURE__*/React.createElement(DimensionInput, {
120
140
  dimensionState: dimensionsState.widthState,
121
141
  label: formatMessage('Width'),
122
- minValue: minWidth
142
+ minValue: minWidth,
143
+ messages: [secondaryMessage]
123
144
  })), /*#__PURE__*/React.createElement(Flex.Item, {
124
145
  padding: "x-small small"
125
146
  }, /*#__PURE__*/React.createElement(IconLockLine, null)), /*#__PURE__*/React.createElement(Flex.Item, {
@@ -127,8 +148,9 @@ export default function DimensionsInput(props) {
127
148
  }, /*#__PURE__*/React.createElement(DimensionInput, {
128
149
  dimensionState: dimensionsState.heightState,
129
150
  label: formatMessage('Height'),
130
- minValue: minHeight
131
- })))))));
151
+ minValue: minHeight,
152
+ messages: [secondaryMessage]
153
+ }))))), displayMessage(message)));
132
154
  }
133
155
  DimensionsInput.propTypes = {
134
156
  dimensionsState: shape({
@@ -15,30 +15,25 @@
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 { useState } from 'react';
19
20
  import { scaleForHeight, scaleForWidth } from '../DimensionUtils';
20
-
21
21
  function normalizedNumber(number) {
22
22
  if (number == null) {
23
23
  return null;
24
24
  }
25
-
26
25
  return Number.isFinite(number) ? Math.round(number) : NaN;
27
26
  }
28
-
29
27
  function parseAsInteger(inputString) {
30
28
  if (inputString.trim() === '') {
31
29
  return null;
32
30
  }
33
-
34
31
  const number = Number.parseFloat(inputString, 10);
35
32
  return Number.isFinite(number) ? Math.round(number) : NaN;
36
33
  }
37
-
38
34
  function inputValueFor(initialNumber) {
39
35
  return Number.isFinite(initialNumber) ? `${initialNumber}` : '';
40
36
  }
41
-
42
37
  export default function useDimensionsState(initialDimensions, constraints) {
43
38
  const {
44
39
  appliedHeight,
@@ -81,19 +76,17 @@ export default function useDimensionsState(initialDimensions, constraints) {
81
76
  height: scaleForHeight,
82
77
  width: scaleForWidth
83
78
  };
84
-
85
79
  function updateDimensions(attributes) {
86
- setDimensions({ ...dimensions,
80
+ setDimensions({
81
+ ...dimensions,
87
82
  ...attributes,
88
83
  numericHeight: normalizedNumber(attributes.numericHeight),
89
84
  numericWidth: normalizedNumber(attributes.numericWidth),
90
85
  numericPercentage: normalizedNumber(attributes.numericPercentage)
91
86
  });
92
87
  }
93
-
94
88
  function scaleDimensions(dimensionName, number, scaleConstraints) {
95
89
  let width, height, percentage;
96
-
97
90
  if (dimensionName === 'percentage') {
98
91
  width = naturalWidth;
99
92
  height = naturalHeight;
@@ -105,14 +98,12 @@ export default function useDimensionsState(initialDimensions, constraints) {
105
98
  height = scaledDimensions.height;
106
99
  percentage = initialNumericValues.percentage;
107
100
  }
108
-
109
101
  return {
110
102
  width,
111
103
  height,
112
104
  percentage
113
105
  };
114
106
  }
115
-
116
107
  function setNumericDimension(dimensionName, number) {
117
108
  const {
118
109
  height,
@@ -128,7 +119,6 @@ export default function useDimensionsState(initialDimensions, constraints) {
128
119
  inputPercentage: inputValueFor(percentage)
129
120
  });
130
121
  }
131
-
132
122
  function setDimensionValue(dimensionName, value) {
133
123
  const number = parseAsInteger(value);
134
124
  const {
@@ -145,63 +135,49 @@ export default function useDimensionsState(initialDimensions, constraints) {
145
135
  inputPercentage: dimensionName === 'percentage' ? value : inputValueFor(percentage)
146
136
  });
147
137
  }
148
-
149
138
  function offsetDimension(dimensionName, offset) {
150
139
  const minValue = dimensionMinimums[dimensionName];
151
140
  const initialNumber = initialNumericValues[dimensionName];
152
141
  const numericValue = currentNumericValues[dimensionName];
153
-
154
142
  if (numericValue != null && !Number.isFinite(numericValue)) {
155
143
  return;
156
144
  }
157
-
158
145
  const newNumber = numericValue == null ? initialNumber + offset : Math.max(minValue, Math.floor(numericValue + offset));
159
146
  setNumericDimension(dimensionName, newNumber);
160
147
  }
161
-
162
148
  const widthState = {
163
149
  inputValue: dimensions.inputWidth,
164
-
165
150
  addOffset(offset) {
166
151
  offsetDimension('width', offset);
167
152
  },
168
-
169
153
  setInputValue(value) {
170
154
  setDimensionValue('width', value);
171
155
  }
172
-
173
156
  };
174
157
  const heightState = {
175
158
  inputValue: dimensions.inputHeight,
176
-
177
159
  addOffset(offset) {
178
160
  offsetDimension('height', offset);
179
161
  },
180
-
181
162
  setInputValue(value) {
182
163
  setDimensionValue('height', value);
183
164
  }
184
-
185
165
  };
186
166
  const percentageState = {
187
167
  inputValue: dimensions.inputPercentage,
188
-
189
168
  addOffset(offset) {
190
169
  offsetDimension('percentage', offset);
191
170
  },
192
-
193
171
  setInputValue(value) {
194
172
  setDimensionValue('percentage', value);
195
173
  }
196
-
197
174
  };
198
-
199
175
  const handleUsePercentageUnitsChange = value => {
200
- setDimensions({ ...dimensions,
176
+ setDimensions({
177
+ ...dimensions,
201
178
  usePercentageUnits: value
202
179
  });
203
180
  };
204
-
205
181
  const isNumeric = dimensions.usePercentageUnits ? Number.isFinite(dimensions.numericPercentage) : [dimensions.numericHeight, dimensions.numericWidth].every(Number.isFinite);
206
182
  const isAtLeastMinimums = dimensions.usePercentageUnits ? dimensions.numericPercentage >= minPercentage : dimensions.numericHeight >= minHeight && dimensions.numericWidth >= minWidth;
207
183
  return {
@@ -17,8 +17,9 @@
17
17
  */
18
18
  import React from 'react';
19
19
  import PropTypes from 'prop-types';
20
- import formatMessage from '../../../format-message'; // TODO: a placeholder. Design a better one. See CORE-2826
20
+ import formatMessage from '../../../format-message';
21
21
 
22
+ // TODO: a placeholder. Design a better one. See CORE-2826
22
23
  export default class ErrorBoundary extends React.Component {
23
24
  constructor(props) {
24
25
  super(props);
@@ -26,7 +27,6 @@ export default class ErrorBoundary extends React.Component {
26
27
  hasError: false
27
28
  };
28
29
  }
29
-
30
30
  static getDerivedStateFromError(error) {
31
31
  // Update state so the next render will show the fallback UI.
32
32
  return {
@@ -34,7 +34,6 @@ export default class ErrorBoundary extends React.Component {
34
34
  error
35
35
  };
36
36
  }
37
-
38
37
  render() {
39
38
  if (this.state.hasError) {
40
39
  const msg = this.state.error.message ? this.state.error.message : this.state.error.toString();
@@ -44,10 +43,8 @@ export default class ErrorBoundary extends React.Component {
44
43
  }
45
44
  }, /*#__PURE__*/React.createElement("h2", null, formatMessage('Something went wrong.')), /*#__PURE__*/React.createElement("p", null, msg));
46
45
  }
47
-
48
46
  return this.props.children;
49
47
  }
50
-
51
48
  }
52
49
  ErrorBoundary.propTypes = {
53
50
  children: PropTypes.node
@@ -15,17 +15,16 @@
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
  // Microsoft word will include an image of the text being pasted on the clipboard
19
20
  // Let's look at the text/html to see if it's word before deciding to paste the image
20
21
  // Assumes we've already confirmed that cbdata includes files
21
22
  export function isMicrosoftWordContentInEvent(event) {
22
23
  const cbdata = event.type === 'paste' ? event.clipboardData : event.dataTransfer;
23
-
24
24
  if ((cbdata === null || cbdata === void 0 ? void 0 : cbdata.files[0].type.indexOf('image/')) === 0 && cbdata.types.includes('text/html')) {
25
25
  const html = cbdata.getData('text/html');
26
26
  return isMicrosoftWordContent(html);
27
27
  }
28
-
29
28
  return false;
30
29
  }
31
30
  export function isMicrosoftWordContent(html) {
@@ -34,6 +33,5 @@ export function isMicrosoftWordContent(html) {
34
33
  const doc = parser.parseFromString(html, 'text/html');
35
34
  return Array.from(doc.documentElement.attributes).some(attr => /schemas[-.]microsoft[-.]com/.test(attr.value)) || /<o:|class="Mso/.test(doc.body.innerHTML || '');
36
35
  }
37
-
38
36
  return false;
39
37
  }
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { useEffect, useState } from 'react';
19
20
  import { bool, element, func, oneOf, oneOfType, string } from 'prop-types';
20
21
  import formatMessage from '../../../format-message';
@@ -26,24 +27,19 @@ import { IconButton } from '@instructure/ui-buttons';
26
27
  import { ScreenReaderContent } from '@instructure/ui-a11y-content';
27
28
  import { ICON_MAKER_ICONS } from '../instructure_icon_maker/svg/constants';
28
29
  import { IconLinkLine, IconFolderLine, IconImageLine, IconDocumentLine, IconAttachMediaLine, IconSearchLine, IconXLine } from '@instructure/ui-icons';
29
-
30
30
  function fileLabelFromContext(contextType) {
31
31
  switch (contextType) {
32
32
  case 'user':
33
33
  return formatMessage('User Files');
34
-
35
34
  case 'course':
36
35
  return formatMessage('Course Files');
37
-
38
36
  case 'group':
39
37
  return formatMessage('Group Files');
40
-
41
38
  case 'files':
42
39
  default:
43
40
  return formatMessage('Files');
44
41
  }
45
42
  }
46
-
47
43
  function renderTypeOptions(contentType, contentSubtype, userContextType) {
48
44
  const options = [/*#__PURE__*/React.createElement(SimpleSelect.Option, {
49
45
  key: "links",
@@ -51,38 +47,34 @@ function renderTypeOptions(contentType, contentSubtype, userContextType) {
51
47
  value: "links",
52
48
  renderBeforeLabel: IconLinkLine
53
49
  }, formatMessage('Links'))];
54
-
55
50
  if (userContextType === 'course' && contentType !== 'links' && contentSubtype !== 'all') {
56
- options.push( /*#__PURE__*/React.createElement(SimpleSelect.Option, {
51
+ options.push(/*#__PURE__*/React.createElement(SimpleSelect.Option, {
57
52
  key: "course_files",
58
53
  id: "course_files",
59
54
  value: "course_files",
60
55
  renderBeforeLabel: IconFolderLine
61
56
  }, fileLabelFromContext('course')));
62
57
  }
63
-
64
58
  if (userContextType === 'group' && contentType !== 'links' && contentSubtype !== 'all') {
65
- options.push( /*#__PURE__*/React.createElement(SimpleSelect.Option, {
59
+ options.push(/*#__PURE__*/React.createElement(SimpleSelect.Option, {
66
60
  key: "group_files",
67
61
  id: "group_files",
68
62
  value: "group_files",
69
63
  renderBeforeLabel: IconFolderLine
70
64
  }, fileLabelFromContext('group')));
71
- } // Icon Maker icons are only stored in course folders.
72
-
65
+ }
73
66
 
67
+ // Icon Maker icons are only stored in course folders.
74
68
  if (contentSubtype !== ICON_MAKER_ICONS) {
75
- options.push( /*#__PURE__*/React.createElement(SimpleSelect.Option, {
69
+ options.push(/*#__PURE__*/React.createElement(SimpleSelect.Option, {
76
70
  key: "user_files",
77
71
  id: "user_files",
78
72
  value: "user_files",
79
73
  renderBeforeLabel: IconFolderLine
80
74
  }, fileLabelFromContext(contentType === 'links' || contentSubtype === 'all' ? 'files' : 'user')));
81
75
  }
82
-
83
76
  return options;
84
77
  }
85
-
86
78
  function renderType(contentType, contentSubtype, mountNode, onChange, userContextType, containingContextType) {
87
79
  // Check containingContextType so that we always show context links
88
80
  if (containingContextType === 'course' || containingContextType === 'group') {
@@ -95,12 +87,10 @@ function renderType(contentType, contentSubtype, mountNode, onChange, userContex
95
87
  const changed = {
96
88
  contentType: selection.value
97
89
  };
98
-
99
90
  if (contentType === 'links') {
100
91
  // when changing away from links, go to all user files
101
92
  changed.contentSubtype = 'all';
102
93
  }
103
-
104
94
  onChange(changed);
105
95
  },
106
96
  value: contentType
@@ -115,11 +105,9 @@ function renderType(contentType, contentSubtype, mountNode, onChange, userContex
115
105
  }, /*#__PURE__*/React.createElement(ScreenReaderContent, null, formatMessage('Content Type')), fileLabelFromContext('user', contentSubtype));
116
106
  }
117
107
  }
118
-
119
108
  function shouldSearch(searchString) {
120
109
  return searchString.length === 0 || searchString.length >= 3;
121
110
  }
122
-
123
111
  export default function Filter(props) {
124
112
  const {
125
113
  contentType,
@@ -133,8 +121,9 @@ export default function Filter(props) {
133
121
  containingContextType
134
122
  } = props;
135
123
  const [pendingSearchString, setPendingSearchString] = useState(searchString);
136
- const [searchInputTimer, setSearchInputTimer] = useState(0); // only run on mounting to trigger change to correct contextType
124
+ const [searchInputTimer, setSearchInputTimer] = useState(0);
137
125
 
126
+ // only run on mounting to trigger change to correct contextType
138
127
  useEffect(() => {
139
128
  onChange({
140
129
  contentType
@@ -147,28 +136,22 @@ export default function Filter(props) {
147
136
  window.clearTimeout(searchInputTimer);
148
137
  setSearchInputTimer(0);
149
138
  }
150
-
151
139
  onChange({
152
140
  searchString: value
153
141
  });
154
142
  }
155
143
  }
156
-
157
144
  function handleChangeSearch(value) {
158
145
  setPendingSearchString(value);
159
-
160
146
  if (searchInputTimer) {
161
147
  window.clearTimeout(searchInputTimer);
162
148
  }
163
-
164
149
  const tid = window.setTimeout(() => doSearch(value), 250);
165
150
  setSearchInputTimer(tid);
166
151
  }
167
-
168
152
  function handleClear() {
169
153
  handleChangeSearch('');
170
154
  }
171
-
172
155
  function renderClearButton() {
173
156
  if (pendingSearchString) {
174
157
  return /*#__PURE__*/React.createElement(IconButton, {
@@ -179,10 +162,8 @@ export default function Filter(props) {
179
162
  size: "small"
180
163
  }, /*#__PURE__*/React.createElement(IconXLine, null));
181
164
  }
182
-
183
165
  return undefined;
184
166
  }
185
-
186
167
  const searchMessage = formatMessage('Enter at least 3 characters to search');
187
168
  const loadingMessage = formatMessage('Loading, please wait');
188
169
  const msg = isContentLoading ? loadingMessage : searchMessage;
@@ -205,7 +186,6 @@ export default function Filter(props) {
205
186
  const changed = {
206
187
  contentSubtype: selection.value
207
188
  };
208
-
209
189
  if (changed.contentSubtype === 'all') {
210
190
  // when flipped to All, the context needs to be user
211
191
  // so we can get media_objects, which are all returned in the user context
@@ -214,7 +194,6 @@ export default function Filter(props) {
214
194
  // Icon Maker icons only belong to Courses.
215
195
  changed.contentType = 'course_files';
216
196
  }
217
-
218
197
  onChange(changed);
219
198
  },
220
199
  value: contentSubtype
@@ -287,48 +266,39 @@ Filter.propTypes = {
287
266
  * `contentType` is set to "files"
288
267
  */
289
268
  contentSubtype: string.isRequired,
290
-
291
269
  /**
292
270
  * `contentType` is the primary filter setting (e.g. links, files)
293
271
  */
294
272
  contentType: oneOf(['links', 'user_files', 'course_files', 'group_files']).isRequired,
295
-
296
273
  /**
297
274
  * `mountNode` is where INSTUI popups should mount. This is necessary for them
298
275
  * to work correctly when the RCE is in fullscreen
299
276
  */
300
277
  mountNode: oneOfType([element, func]),
301
-
302
278
  /**
303
279
  * `onChange` is called when any of the Filter settings are changed
304
280
  */
305
281
  onChange: func.isRequired,
306
-
307
282
  /**
308
283
  * `sortValue` defines how items in the CanvasContentTray are sorted
309
284
  */
310
285
  sortValue: string.isRequired,
311
-
312
286
  /**
313
287
  * `searchString` is used to search for matching file names. Must be >3 chars long
314
288
  */
315
289
  searchString: string.isRequired,
316
-
317
290
  /**
318
291
  * The user's context
319
292
  */
320
293
  userContextType: oneOf(['user', 'course', 'group']),
321
-
322
294
  /**
323
295
  * Is my content currently loading?
324
296
  */
325
297
  isContentLoading: bool,
326
-
327
298
  /**
328
299
  * The page context
329
300
  */
330
301
  containingContextType: oneOf(['user', 'course', 'group']),
331
-
332
302
  /**
333
303
  * Should include Icon Maker?
334
304
  */
@@ -15,17 +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 { Flex } from '@instructure/ui-flex';
21
22
  import { Tray } from '@instructure/ui-tray';
22
23
  import { View } from '@instructure/ui-view';
23
- import { getTrayHeight } from './trayUtils'; // Need these styles for drawing over <ColorInput /> popup.
24
+ import { getTrayHeight } from './trayUtils';
24
25
 
26
+ // Need these styles for drawing over <ColorInput /> popup.
25
27
  const topElementStyles = {
26
28
  zIndex: 10000
27
29
  };
28
-
29
30
  function renderJoinedItem(bodyAs, renderBody, renderFooter) {
30
31
  return /*#__PURE__*/React.createElement(Flex.Item, {
31
32
  height: "0",
@@ -47,7 +48,6 @@ function renderJoinedItem(bodyAs, renderBody, renderFooter) {
47
48
  borderWidth: "small none none none"
48
49
  }, renderFooter()))));
49
50
  }
50
-
51
51
  export const FixedContentTray = _ref => {
52
52
  let {
53
53
  title,