@instructure/canvas-rce 5.14.1 → 5.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/DEVELOPMENT.md +2 -2
  3. package/README.md +0 -8
  4. package/__tests__/common/indicate.test.js +84 -0
  5. package/__tests__/common/mimeClass.test.js +85 -0
  6. package/__tests__/module/contentInsertionUtils.test.js +52 -0
  7. package/__tests__/module/indicatorRegion.test.js +75 -0
  8. package/__tests__/module/normalizeLocale.test.js +46 -0
  9. package/__tests__/module/normalizeProps.test.js +51 -0
  10. package/__tests__/module/sanitizePlugins.test.js +48 -0
  11. package/__tests__/module/wrapInitCb.test.js +56 -0
  12. package/__tests__/rcs/api.test.js +819 -0
  13. package/{mocha-reporter-config.js → __tests__/sidebar/actions/all_files.test.js} +10 -9
  14. package/__tests__/sidebar/actions/data.test.js +196 -0
  15. package/__tests__/sidebar/actions/utils.js +44 -0
  16. package/{es/rce/__mocks__/_mockStudioPlayer.js → __tests__/sidebar/reducers/all_files.test.js} +12 -4
  17. package/babel.config.js +3 -1
  18. package/es/bridge/Bridge.js +18 -73
  19. package/es/bridge/index.js +1 -0
  20. package/es/canvasFileBrowser/FileBrowser.js +21 -77
  21. package/es/canvasFileBrowser/en-US.js +3 -6
  22. package/es/common/FlashAlert.js +15 -39
  23. package/es/common/browser.js +4 -2
  24. package/es/common/fileUrl.js +105 -64
  25. package/es/common/incremental-loading/LoadMoreButton.js +4 -4
  26. package/es/common/incremental-loading/LoadingIndicator.js +1 -2
  27. package/es/common/incremental-loading/LoadingStatus.js +5 -13
  28. package/es/common/incremental-loading/index.js +1 -0
  29. package/es/common/incremental-loading/useIncrementalLoading.js +1 -3
  30. package/es/common/indicate.js +16 -10
  31. package/es/common/mimeClass.js +3 -4
  32. package/es/common/natcompare.js +1 -4
  33. package/es/defaultTinymceConfig.js +5 -3
  34. package/es/elementDenylist.js +1 -0
  35. package/es/enhance-user-content/doc_previews.js +24 -35
  36. package/es/enhance-user-content/enhance_user_content.js +32 -67
  37. package/es/enhance-user-content/external_links.js +6 -9
  38. package/es/enhance-user-content/index.js +1 -0
  39. package/es/enhance-user-content/instructure_helper.js +22 -50
  40. package/es/enhance-user-content/jqueryish_funcs.js +8 -11
  41. package/es/enhance-user-content/mathml.js +48 -107
  42. package/es/enhance-user-content/media_comment_thumbnail.js +6 -25
  43. package/es/format-message.js +4 -5
  44. package/es/getThemeVars.js +8 -6
  45. package/es/getTranslations.js +1 -78
  46. package/es/index.d.ts +59 -0
  47. package/es/index.js +6 -6
  48. package/es/rce/AlertMessageArea.js +15 -16
  49. package/es/rce/DraggingBlocker.js +4 -2
  50. package/es/rce/KeyboardShortcutModal.js +3 -2
  51. package/es/rce/RCE.js +16 -17
  52. package/es/rce/RCEGlobals.js +12 -10
  53. package/es/rce/RCEVariants.js +29 -14
  54. package/es/rce/RCEWrapper.js +530 -641
  55. package/es/rce/RCEWrapper.utils.js +131 -0
  56. package/es/rce/RCEWrapperProps.js +9 -5
  57. package/es/rce/RceHtmlEditor.js +17 -19
  58. package/es/rce/ResizeHandle.js +4 -10
  59. package/es/rce/RestoreAutoSaveModal.js +1 -2
  60. package/es/rce/ShowOnFocusButton/index.js +2 -8
  61. package/es/rce/StatusBar.js +10 -44
  62. package/es/rce/alertHandler.js +1 -4
  63. package/es/rce/contentInsertion.js +36 -59
  64. package/es/rce/contentInsertionUtils.js +6 -8
  65. package/es/rce/contentRendering.js +13 -17
  66. package/es/rce/customEvents.js +1 -0
  67. package/es/rce/editorLanguage.js +23 -11
  68. package/es/rce/indicatorRegion.js +7 -7
  69. package/es/rce/normalizeLocale.js +5 -3
  70. package/es/rce/normalizeProps.js +7 -5
  71. package/es/rce/plugins/instructure-ui-icons/plugin.js +21 -3
  72. package/es/rce/plugins/instructure_color/clickCallback.js +82 -0
  73. package/es/rce/plugins/instructure_color/components/ColorPicker.js +294 -0
  74. package/es/rce/plugins/instructure_color/components/ColorPopup.js +67 -0
  75. package/es/rce/plugins/instructure_color/components/colorUtils.js +60 -0
  76. package/es/rce/plugins/instructure_color/plugin.js +40 -0
  77. package/es/rce/plugins/instructure_condensed_buttons/core/ListUtils.js +10 -3
  78. package/es/rce/plugins/instructure_condensed_buttons/plugin.js +1 -0
  79. package/es/rce/plugins/instructure_condensed_buttons/ui/alignment-button.js +1 -2
  80. package/es/rce/plugins/instructure_condensed_buttons/ui/directionality-button.js +3 -2
  81. package/es/rce/plugins/instructure_condensed_buttons/ui/indent-outdent-button.js +1 -0
  82. package/es/rce/plugins/instructure_condensed_buttons/ui/list-button.js +26 -25
  83. package/es/rce/plugins/instructure_condensed_buttons/ui/subscript-superscript-button.js +2 -3
  84. package/es/rce/plugins/instructure_documents/clickCallback.js +1 -0
  85. package/es/rce/plugins/instructure_documents/components/DocumentsPanel.js +1 -9
  86. package/es/rce/plugins/instructure_documents/components/Link.js +4 -20
  87. package/es/rce/plugins/instructure_documents/plugin.js +7 -14
  88. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedOnlySyntax.js +4 -2
  89. package/es/rce/plugins/instructure_equation/EquationEditorModal/advancedPreference.js +1 -2
  90. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +17 -37
  91. package/es/rce/plugins/instructure_equation/EquationEditorModal/latexTextareaUtil.js +14 -15
  92. package/es/rce/plugins/instructure_equation/EquationEditorModal/parseLatex.js +6 -5
  93. package/es/rce/plugins/instructure_equation/EquationEditorModal/styles.js +4 -2
  94. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/buttons.js +14 -8
  95. package/es/rce/plugins/instructure_equation/EquationEditorToolbar/index.js +13 -18
  96. package/es/rce/plugins/instructure_equation/MathIcon/index.js +4 -5
  97. package/es/rce/plugins/instructure_equation/MathIcon/svgs.js +1 -1
  98. package/es/rce/plugins/instructure_equation/clickCallback.js +2 -5
  99. package/es/rce/plugins/instructure_equation/mathlive/index.js +167 -16
  100. package/es/rce/plugins/instructure_equation/plugin.js +7 -10
  101. package/es/rce/plugins/instructure_fullscreen/plugin.js +1 -6
  102. package/es/rce/plugins/instructure_html_view/clickCallback.js +1 -0
  103. package/es/rce/plugins/instructure_html_view/plugin.js +5 -4
  104. package/es/rce/plugins/instructure_icon_maker/clickCallback.js +5 -8
  105. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ColorSection.js +47 -51
  106. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/CreateIconMakerForm.js +10 -10
  107. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Footer.js +11 -11
  108. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Group.js +6 -6
  109. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Header.js +8 -10
  110. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +32 -31
  111. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageOptions.js +24 -35
  112. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ImageSection.js +32 -32
  113. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/ModeSelect.js +11 -11
  114. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/index.js +16 -15
  115. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/MultiColor/svg.js +1 -0
  116. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGList.js +11 -11
  117. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SVGThumbnail.js +9 -13
  118. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/index.js +12 -13
  119. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/SingleColor/svg.js +33 -80
  120. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Upload.js +34 -28
  121. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/index.js +1 -0
  122. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/propTypes.js +1 -0
  123. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/utils.js +5 -5
  124. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/Preview.js +7 -8
  125. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ShapeSection.js +5 -7
  126. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/TextSection.js +5 -10
  127. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/index.js +1 -0
  128. package/es/rce/plugins/instructure_icon_maker/components/IconMakerTray.js +38 -60
  129. package/es/rce/plugins/instructure_icon_maker/components/SavedIconMakerList.js +4 -4
  130. package/es/rce/plugins/instructure_icon_maker/plugin.js +10 -14
  131. package/es/rce/plugins/instructure_icon_maker/reducers/imageSection.js +37 -38
  132. package/es/rce/plugins/instructure_icon_maker/reducers/svgSettings.js +24 -24
  133. package/es/rce/plugins/instructure_icon_maker/registerEditToolbar.js +2 -4
  134. package/es/rce/plugins/instructure_icon_maker/svg/constants.js +4 -3
  135. package/es/rce/plugins/instructure_icon_maker/svg/font.js +3 -1
  136. package/es/rce/plugins/instructure_icon_maker/svg/image.js +74 -90
  137. package/es/rce/plugins/instructure_icon_maker/svg/index.js +17 -24
  138. package/es/rce/plugins/instructure_icon_maker/svg/metadata.js +1 -0
  139. package/es/rce/plugins/instructure_icon_maker/svg/settings.js +48 -58
  140. package/es/rce/plugins/instructure_icon_maker/svg/shape.js +5 -54
  141. package/es/rce/plugins/instructure_icon_maker/svg/text.js +35 -124
  142. package/es/rce/plugins/instructure_icon_maker/svg/utils.js +3 -11
  143. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerClose.js +4 -9
  144. package/es/rce/plugins/instructure_icon_maker/utils/IconMakerFormHasChanges.js +1 -15
  145. package/es/rce/plugins/instructure_icon_maker/utils/addIconMakerAttributes.js +3 -4
  146. package/es/rce/plugins/instructure_icon_maker/utils/iconValidation.js +2 -3
  147. package/es/rce/plugins/instructure_icon_maker/utils/iconsLabels.js +1 -0
  148. package/es/rce/plugins/instructure_icon_maker/utils/useDebouncedValue.js +12 -13
  149. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +9 -31
  150. package/es/rce/plugins/instructure_image/ImageList/Image.js +8 -14
  151. package/es/rce/plugins/instructure_image/ImageList/index.js +8 -10
  152. package/es/rce/plugins/instructure_image/ImageOptionsTray/TrayController.js +9 -31
  153. package/es/rce/plugins/instructure_image/ImageOptionsTray/index.js +6 -19
  154. package/es/rce/plugins/instructure_image/Images/index.js +1 -3
  155. package/es/rce/plugins/instructure_image/clickCallback.js +1 -0
  156. package/es/rce/plugins/instructure_image/plugin.js +14 -20
  157. package/es/rce/plugins/instructure_links/clickCallback.js +1 -0
  158. package/es/rce/plugins/instructure_links/components/AccordionSection.js +8 -8
  159. package/es/rce/plugins/instructure_links/components/CollectionPanel.js +1 -3
  160. package/es/rce/plugins/instructure_links/components/Link.js +68 -84
  161. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/LinkOptionsDialogController.js +2 -23
  162. package/es/rce/plugins/instructure_links/components/LinkOptionsDialog/index.js +3 -6
  163. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/LinkOptionsTrayController.js +3 -20
  164. package/es/rce/plugins/instructure_links/components/LinkOptionsTray/index.js +3 -14
  165. package/es/rce/plugins/instructure_links/components/LinkSet.js +32 -57
  166. package/es/rce/plugins/instructure_links/components/LinksPanel.js +22 -10
  167. package/es/rce/plugins/instructure_links/components/NavigationPanel.js +7 -9
  168. package/es/rce/plugins/instructure_links/components/NoResults.js +7 -14
  169. package/es/rce/plugins/instructure_links/plugin.js +23 -49
  170. package/es/rce/plugins/instructure_links/validateURL.js +81 -36
  171. package/es/rce/plugins/instructure_media_embed/clickCallback.js +5 -9
  172. package/es/rce/plugins/instructure_media_embed/components/Embed.js +7 -7
  173. package/es/rce/plugins/instructure_media_embed/plugin.js +7 -3
  174. package/es/rce/plugins/instructure_paste/pasteMenuCommand.js +1 -5
  175. package/es/rce/plugins/instructure_paste/plugin.js +29 -33
  176. package/es/rce/plugins/instructure_rce_external_tools/ExternalToolsEnv.js +31 -79
  177. package/es/rce/plugins/instructure_rce_external_tools/RceToolWrapper.js +24 -83
  178. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +39 -69
  179. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +1 -2
  180. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogTray.js +1 -1
  181. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +5 -14
  182. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionItem.js +1 -2
  183. package/es/rce/plugins/instructure_rce_external_tools/components/util/ExpandoText.js +1 -0
  184. package/es/rce/plugins/instructure_rce_external_tools/components/util/ToolLaunchIframe.js +2 -1
  185. package/es/rce/plugins/instructure_rce_external_tools/constants.js +28 -0
  186. package/es/rce/plugins/instructure_rce_external_tools/dialog-helper.js +20 -6
  187. package/es/rce/plugins/instructure_rce_external_tools/helpers/tags.js +0 -2
  188. package/es/rce/plugins/instructure_rce_external_tools/jquery/jquery.dropdownList.js +129 -136
  189. package/es/rce/plugins/instructure_rce_external_tools/lti11-content-items/RceLti11ContentItem.js +110 -112
  190. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/Lti13ContentItemJson.js +1 -0
  191. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/RceLti13ContentItem.js +4 -21
  192. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/BaseLinkContentItem.js +5 -19
  193. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/HtmlFragmentContentItem.js +1 -6
  194. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ImageContentItem.js +1 -9
  195. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/LinkContentItem.js +1 -1
  196. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/models/ResourceLinkContentItem.js +3 -5
  197. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/processEditorContentItems.js +23 -16
  198. package/es/rce/plugins/instructure_rce_external_tools/lti13-content-items/rceLti13ContentItemFromJson.js +3 -4
  199. package/es/rce/plugins/instructure_rce_external_tools/plugin.js +11 -20
  200. package/es/rce/plugins/instructure_rce_external_tools/util/addParentFrameContextToUrl.js +1 -1
  201. package/es/rce/plugins/instructure_rce_external_tools/util/externalToolsForToolbar.js +42 -0
  202. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +6 -35
  203. package/es/rce/plugins/instructure_record/AudioOptionsTray/index.js +13 -17
  204. package/es/rce/plugins/instructure_record/MediaPanel/index.js +1 -9
  205. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +16 -66
  206. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +21 -35
  207. package/es/rce/plugins/instructure_record/clickCallback.js +32 -44
  208. package/es/rce/plugins/instructure_record/mediaTranslations.js +1 -0
  209. package/es/rce/plugins/instructure_record/plugin.js +11 -18
  210. package/es/rce/plugins/instructure_search_and_replace/clickCallback.js +4 -8
  211. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTray.js +34 -51
  212. package/es/rce/plugins/instructure_search_and_replace/components/FindReplaceTrayController.js +12 -30
  213. package/es/rce/plugins/instructure_search_and_replace/getSelectionContext.js +2 -9
  214. package/es/rce/plugins/instructure_search_and_replace/plugin.js +2 -5
  215. package/es/rce/plugins/instructure_studio_media_options/plugin.js +1 -1
  216. package/es/rce/plugins/instructure_wordcount/clickCallback.js +5 -9
  217. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +27 -37
  218. package/es/rce/plugins/instructure_wordcount/plugin.js +1 -0
  219. package/es/rce/plugins/instructure_wordcount/utils/countContent.js +4 -11
  220. package/es/rce/plugins/instructure_wordcount/utils/tableContent.js +6 -8
  221. package/es/rce/plugins/shared/CanvasContentTray.js +29 -63
  222. package/es/rce/plugins/shared/CheckerboardStyling.js +1 -1
  223. package/es/rce/plugins/shared/ColorInput.js +27 -39
  224. package/es/rce/plugins/shared/ConditionalTooltip.js +6 -6
  225. package/es/rce/plugins/shared/ContentSelection.js +29 -78
  226. package/es/rce/plugins/shared/DimensionUtils.js +3 -12
  227. package/es/rce/plugins/shared/DimensionsInput/DimensionInput.js +6 -6
  228. package/es/rce/plugins/shared/DimensionsInput/index.js +37 -15
  229. package/es/rce/plugins/shared/DimensionsInput/useDimensionsState.js +5 -29
  230. package/es/rce/plugins/shared/ErrorBoundary.js +2 -5
  231. package/es/rce/plugins/shared/EventUtils.js +2 -4
  232. package/es/rce/plugins/shared/Filter.js +8 -38
  233. package/es/rce/plugins/shared/FixedContentTray.js +16 -17
  234. package/es/rce/plugins/shared/ImageCropper/DirectionRegion.js +4 -12
  235. package/es/rce/plugins/shared/ImageCropper/Modal.js +16 -20
  236. package/es/rce/plugins/shared/ImageCropper/Preview.js +18 -24
  237. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -0
  238. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +10 -14
  239. package/es/rce/plugins/shared/ImageCropper/controls/ResetControls.js +4 -4
  240. package/es/rce/plugins/shared/ImageCropper/controls/RotationControls.js +5 -15
  241. package/es/rce/plugins/shared/ImageCropper/controls/ShapeControls.js +8 -11
  242. package/es/rce/plugins/shared/ImageCropper/controls/ZoomControls.js +5 -16
  243. package/es/rce/plugins/shared/ImageCropper/controls/index.js +5 -5
  244. package/es/rce/plugins/shared/ImageCropper/controls/useDebouncedNumericValue.js +16 -31
  245. package/es/rce/plugins/shared/ImageCropper/controls/utils.js +1 -2
  246. package/es/rce/plugins/shared/ImageCropper/imageCropUtils.js +19 -31
  247. package/es/rce/plugins/shared/ImageCropper/index.js +1 -0
  248. package/es/rce/plugins/shared/ImageCropper/propTypes.js +1 -0
  249. package/es/rce/plugins/shared/ImageCropper/reducers/imageCropper.js +15 -14
  250. package/es/rce/plugins/shared/ImageCropper/shape.js +1 -0
  251. package/es/rce/plugins/shared/ImageCropper/svg/index.js +1 -2
  252. package/es/rce/plugins/shared/ImageCropper/svg/shape.js +5 -22
  253. package/es/rce/plugins/shared/ImageCropper/svg/utils.js +3 -4
  254. package/es/rce/plugins/shared/ImageCropper/useKeyMouseEvents.js +20 -50
  255. package/es/rce/plugins/shared/ImageCropper/useMouseWheel.js +8 -10
  256. package/es/rce/plugins/shared/ImageOptionsForm.js +18 -20
  257. package/es/rce/plugins/shared/LinkDisplay.js +9 -11
  258. package/es/rce/plugins/shared/PreviewIcon.js +9 -15
  259. package/es/rce/plugins/shared/Previewable.js +1 -0
  260. package/es/rce/plugins/shared/RceFileBrowser.js +7 -10
  261. package/es/rce/plugins/shared/StoreContext.js +9 -12
  262. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +15 -12
  263. package/es/rce/plugins/shared/UnknownFileTypePanel.js +1 -0
  264. package/es/rce/plugins/shared/Upload/CanvasContentPanel.js +19 -25
  265. package/es/rce/plugins/shared/Upload/CategoryProcessor.js +2 -3
  266. package/es/rce/plugins/shared/Upload/ComputerPanel.js +19 -40
  267. package/es/rce/plugins/shared/Upload/PanelFilter.js +10 -20
  268. package/es/rce/plugins/shared/Upload/SvgCategoryProcessor.js +4 -3
  269. package/es/rce/plugins/shared/Upload/UploadFile.js +32 -38
  270. package/es/rce/plugins/shared/Upload/UploadFileModal.js +37 -59
  271. package/es/rce/plugins/shared/Upload/UrlPanel.js +5 -5
  272. package/es/rce/plugins/shared/Upload/UsageRightsSelectBox.js +25 -36
  273. package/es/rce/plugins/shared/Upload/doFileUpload.js +10 -13
  274. package/es/rce/plugins/shared/Upload/index.js +1 -0
  275. package/es/rce/plugins/shared/ai_tools/AIResponseModal.js +8 -11
  276. package/es/rce/plugins/shared/ai_tools/AIToolsTray.js +19 -40
  277. package/es/rce/plugins/shared/ai_tools/aiicons.js +3 -2
  278. package/es/rce/plugins/shared/ai_tools/index.js +1 -0
  279. package/es/rce/plugins/shared/buildDownloadUrl.js +0 -2
  280. package/es/rce/plugins/shared/canvasContentUtils.js +7 -11
  281. package/es/rce/plugins/shared/compressionUtils.js +18 -28
  282. package/es/rce/plugins/shared/dateUtils.js +1 -1
  283. package/es/rce/plugins/shared/do-fetch-api-effect/defaultFetchOptions.js +4 -2
  284. package/es/rce/plugins/shared/do-fetch-api-effect/doFetchApi.js +18 -24
  285. package/es/rce/plugins/shared/do-fetch-api-effect/get-cookie.js +1 -1
  286. package/es/rce/plugins/shared/do-fetch-api-effect/index.js +1 -0
  287. package/es/rce/plugins/shared/do-fetch-api-effect/parse-link-header.js +6 -20
  288. package/es/rce/plugins/shared/do-fetch-api-effect/query-string-encoding.js +5 -3
  289. package/es/rce/plugins/shared/fileShape.js +4 -9
  290. package/es/rce/plugins/shared/fileTypeUtils.js +34 -47
  291. package/es/rce/plugins/shared/fileUtils.js +1 -2
  292. package/es/rce/plugins/shared/linkUtils.js +1 -16
  293. package/es/rce/plugins/shared/round.js +2 -2
  294. package/es/rce/plugins/shared/trayUtils.js +7 -3
  295. package/es/rce/plugins/shared/useDataUrl.js +13 -14
  296. package/es/rce/plugins/shared/useFilterSettings.js +3 -3
  297. package/es/rce/plugins/tinymce-a11y-checker/components/ColorField.js +4 -8
  298. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +12 -72
  299. package/es/rce/plugins/tinymce-a11y-checker/components/color-picker.js +1 -2
  300. package/es/rce/plugins/tinymce-a11y-checker/components/placeholder-svg.js +1 -0
  301. package/es/rce/plugins/tinymce-a11y-checker/components/pointer.js +1 -0
  302. package/es/rce/plugins/tinymce-a11y-checker/node-checker.js +2 -9
  303. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +18 -24
  304. package/es/rce/plugins/tinymce-a11y-checker/rules/adjacent-links.js +3 -26
  305. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-sequence.js +9 -38
  306. package/es/rce/plugins/tinymce-a11y-checker/rules/headings-start-at-h2.js +2 -7
  307. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-filename.js +1 -2
  308. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt-length.js +1 -1
  309. package/es/rce/plugins/tinymce-a11y-checker/rules/img-alt.js +1 -2
  310. package/es/rce/plugins/tinymce-a11y-checker/rules/index.js +1 -0
  311. package/es/rce/plugins/tinymce-a11y-checker/rules/large-text-contrast.js +2 -6
  312. package/es/rce/plugins/tinymce-a11y-checker/rules/list-structure.js +5 -24
  313. package/es/rce/plugins/tinymce-a11y-checker/rules/paragraphs-for-headings.js +1 -3
  314. package/es/rce/plugins/tinymce-a11y-checker/rules/small-text-contrast.js +2 -8
  315. package/es/rce/plugins/tinymce-a11y-checker/rules/table-caption.js +1 -3
  316. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header-scope.js +1 -2
  317. package/es/rce/plugins/tinymce-a11y-checker/rules/table-header.js +1 -9
  318. package/es/rce/plugins/tinymce-a11y-checker/utils/colors.js +1 -0
  319. package/es/rce/plugins/tinymce-a11y-checker/utils/describe.js +1 -7
  320. package/es/rce/plugins/tinymce-a11y-checker/utils/dom.js +3 -30
  321. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +18 -18
  322. package/es/rce/plugins/tinymce-a11y-checker/utils/rgb-hex.js +6 -12
  323. package/es/rce/plugins/tinymce-a11y-checker/utils/strings.js +1 -4
  324. package/es/rce/root.js +17 -16
  325. package/es/rce/sanitizePlugins.js +1 -3
  326. package/es/rce/style.js +1 -4
  327. package/es/rce/tinyRCE.js +14 -9
  328. package/es/rce/tinymce.oxide.content.min.css.js +1 -0
  329. package/es/rce/tinymce.oxide.skin.min.css.js +1 -0
  330. package/es/rce/transformContent.js +9 -11
  331. package/es/rce/types.js +1 -0
  332. package/es/rce/userOS.js +1 -1
  333. package/es/rce/wrapInitCb.js +50 -43
  334. package/es/rcs/api.js +100 -171
  335. package/es/rcs/buildError.js +8 -20
  336. package/es/rcs/fake.js +9 -20
  337. package/es/sidebar/actions/all_files.js +2 -0
  338. package/es/sidebar/actions/data.js +4 -7
  339. package/es/sidebar/actions/documents.js +19 -18
  340. package/es/sidebar/actions/files.js +21 -28
  341. package/es/sidebar/actions/filter.js +5 -5
  342. package/es/sidebar/actions/flickr.js +1 -1
  343. package/es/sidebar/actions/images.js +32 -37
  344. package/es/sidebar/actions/links.js +1 -0
  345. package/es/sidebar/actions/media.js +27 -28
  346. package/es/sidebar/actions/session.js +2 -5
  347. package/es/sidebar/actions/ui.js +1 -0
  348. package/es/sidebar/actions/upload.js +38 -74
  349. package/es/sidebar/containers/Sidebar.js +1 -2
  350. package/es/sidebar/containers/sidebarHandlers.js +9 -13
  351. package/es/sidebar/dragHtml.js +11 -5
  352. package/es/sidebar/reducers/all_files.js +5 -6
  353. package/es/sidebar/reducers/collection.js +12 -15
  354. package/es/sidebar/reducers/collections.js +6 -8
  355. package/es/sidebar/reducers/documents.js +7 -16
  356. package/es/sidebar/reducers/files.js +4 -6
  357. package/es/sidebar/reducers/filter.js +8 -23
  358. package/es/sidebar/reducers/flickr.js +10 -12
  359. package/es/sidebar/reducers/folder.js +16 -18
  360. package/es/sidebar/reducers/folders.js +4 -6
  361. package/es/sidebar/reducers/images.js +4 -16
  362. package/es/sidebar/reducers/index.js +3 -1
  363. package/es/sidebar/reducers/media.js +7 -16
  364. package/es/sidebar/reducers/newPageLinkExpanded.js +2 -5
  365. package/es/sidebar/reducers/noop.js +2 -2
  366. package/es/sidebar/reducers/rootFolderId.js +2 -5
  367. package/es/sidebar/reducers/session.js +4 -6
  368. package/es/sidebar/reducers/ui.js +6 -25
  369. package/es/sidebar/reducers/upload.js +16 -64
  370. package/es/sidebar/store/configureStore.js +1 -0
  371. package/es/sidebar/store/initialState.js +14 -26
  372. package/es/translations/locales/ab.js +1 -0
  373. package/es/translations/locales/ar.js +72 -8
  374. package/es/translations/locales/ca.js +72 -8
  375. package/es/translations/locales/cs.js +1 -0
  376. package/es/translations/locales/cs_CZ.js +1 -0
  377. package/es/translations/locales/cy.js +72 -8
  378. package/es/translations/locales/da-x-k12.js +72 -8
  379. package/es/translations/locales/da.js +72 -8
  380. package/es/translations/locales/da_DK.js +1 -0
  381. package/es/translations/locales/de.js +72 -8
  382. package/es/translations/locales/el.js +4 -0
  383. package/es/translations/locales/en-AU-x-unimelb.js +72 -8
  384. package/es/translations/locales/en-GB-x-ukhe.js +72 -8
  385. package/es/translations/locales/en.js +72 -8
  386. package/es/translations/locales/en_AU.js +72 -8
  387. package/es/translations/locales/en_CA.js +72 -8
  388. package/es/translations/locales/en_CY.js +72 -8
  389. package/es/translations/locales/en_GB.js +72 -8
  390. package/es/translations/locales/en_NZ.js +1 -0
  391. package/es/translations/locales/en_SE.js +1 -0
  392. package/es/translations/locales/en_US.js +1 -0
  393. package/es/translations/locales/es.js +72 -8
  394. package/es/translations/locales/es_ES.js +72 -8
  395. package/es/translations/locales/es_GT.js +1 -0
  396. package/es/translations/locales/fa_IR.js +7 -0
  397. package/es/translations/locales/fi.js +72 -8
  398. package/es/translations/locales/fr.js +72 -8
  399. package/es/translations/locales/fr_CA.js +73 -9
  400. package/es/translations/locales/ga.js +5 -13
  401. package/es/translations/locales/he.js +7 -0
  402. package/es/translations/locales/hi.js +72 -8
  403. package/es/translations/locales/ht.js +72 -8
  404. package/es/translations/locales/hu.js +7 -6
  405. package/es/translations/locales/hu_HU.js +1 -0
  406. package/es/translations/locales/hy.js +1 -0
  407. package/es/translations/locales/id.js +72 -8
  408. package/es/translations/locales/id_ID.js +1 -0
  409. package/es/translations/locales/is.js +72 -8
  410. package/es/translations/locales/it.js +72 -8
  411. package/es/translations/locales/ja.js +72 -8
  412. package/es/translations/locales/ko.js +1 -0
  413. package/es/translations/locales/ko_KR.js +1 -0
  414. package/es/translations/locales/lt.js +1 -0
  415. package/es/translations/locales/lt_LT.js +1 -0
  416. package/es/translations/locales/mi.js +72 -8
  417. package/es/translations/locales/mn_MN.js +1 -0
  418. package/es/translations/locales/ms.js +72 -8
  419. package/es/translations/locales/nb-x-k12.js +72 -8
  420. package/es/translations/locales/nb.js +72 -8
  421. package/es/translations/locales/nl.js +72 -8
  422. package/es/translations/locales/nl_NL.js +1 -0
  423. package/es/translations/locales/nn.js +7 -6
  424. package/es/translations/locales/pl.js +72 -8
  425. package/es/translations/locales/pt.js +72 -8
  426. package/es/translations/locales/pt_BR.js +72 -8
  427. package/es/translations/locales/ro.js +1 -0
  428. package/es/translations/locales/ru.js +72 -8
  429. package/es/translations/locales/se.js +1 -0
  430. package/es/translations/locales/sl.js +72 -8
  431. package/es/translations/locales/sv-x-k12.js +72 -8
  432. package/es/translations/locales/sv.js +72 -8
  433. package/es/translations/locales/sv_SE.js +1 -0
  434. package/es/translations/locales/tg.js +1 -0
  435. package/es/translations/locales/th.js +72 -8
  436. package/es/translations/locales/th_TH.js +1 -0
  437. package/es/translations/locales/tl_PH.js +1 -0
  438. package/es/translations/locales/tr.js +7 -0
  439. package/es/translations/locales/uk_UA.js +7 -0
  440. package/es/translations/locales/vi.js +72 -8
  441. package/es/translations/locales/vi_VN.js +1 -0
  442. package/es/translations/locales/zh-Hans.js +72 -8
  443. package/es/translations/locales/zh-Hant.js +72 -8
  444. package/es/translations/locales/zh.js +72 -8
  445. package/es/translations/locales/zh_HK.js +72 -8
  446. package/es/translations/locales/zh_TW.Big5.js +1 -0
  447. package/es/translations/locales/zh_TW.js +1 -0
  448. package/es/translations/tinymce/ar_SA.js +1 -0
  449. package/es/translations/tinymce/fi.js +1 -0
  450. package/es/translations/tinymce/ga.js +1 -0
  451. package/es/translations/tinymce/id.js +1 -0
  452. package/es/translations/tinymce/ru.js +1 -0
  453. package/es/translations/tinymce/ru_RU.js +1 -0
  454. package/es/translations/tinymce/sl.js +1 -0
  455. package/es/translations/tinymce/sr.js +1 -0
  456. package/es/translations/tinymce/th.js +1 -0
  457. package/es/translations/tinymce/uk_UA.js +1 -0
  458. package/es/translations/tinymce/vi_VN.js +1 -0
  459. package/es/util/TypedDict.js +4 -2
  460. package/es/util/elem-util.js +1 -1
  461. package/es/util/encrypted-storage.js +3 -13
  462. package/es/util/file-url-util.js +2 -7
  463. package/es/util/fullscreenHelpers.js +9 -9
  464. package/es/util/instui-icon-helper.js +4 -3
  465. package/es/util/loadingPlaceholder.js +39 -41
  466. package/es/util/simpleCache.js +1 -5
  467. package/es/util/string-util.js +1 -1
  468. package/es/util/textarea-editing-util.js +3 -7
  469. package/es/util/tinymce-plugin-util.js +0 -5
  470. package/es/util/url-util.js +20 -29
  471. package/eslint.config.js +250 -0
  472. package/jest.config.js +1 -1
  473. package/locales/en.json +190 -10
  474. package/package.json +78 -82
  475. package/scripts/build-canvas +2 -1
  476. package/scripts/build.js +4 -4
  477. package/scripts/installTranslations.js +7 -8
  478. package/testcafe/RCEWrapper.test.js +0 -1
  479. package/testcafe/StatusBar.test.js +0 -1
  480. package/testcafe/axe.test.js +3 -4
  481. package/testcafe/enhanceUserContent.test.js +0 -1
  482. package/tsconfig.json +21 -16
  483. package/{es/rce/__mocks__/styleMock.js → types/format-message-generate-id.d.ts} +6 -2
  484. package/{es/rce/plugins/shared/__mocks__/screenfull.js → types/js-beautify.d.ts} +4 -7
  485. package/.eslintrc +0 -45
  486. package/.prettierignore +0 -6
  487. package/es/rce/__mocks__/_mockCryptoEs.js +0 -124
  488. package/es/rce/__mocks__/tinymceReact.js +0 -55
  489. package/es/rce/plugins/tinymce-a11y-checker/rules/__mocks__/index.js +0 -53
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React, { Component } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { TextArea } from '@instructure/ui-text-area';
@@ -29,13 +30,14 @@ import formatMessage from '../../../../format-message';
29
30
  import MemoizedEquationEditorToolbar from '../EquationEditorToolbar';
30
31
  import { containsAdvancedSyntax } from './advancedOnlySyntax';
31
32
  import * as advancedPreference from './advancedPreference';
32
- import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
33
+ import { instuiPopupMountNodeFn } from '../../../../util/fullscreenHelpers';
33
34
  import { css } from 'aphrodite';
34
35
  import { MathJaxDirective, Mathml } from '../../../../enhance-user-content/mathml';
35
36
  import styles from './styles';
36
- import RCEGlobals from '../../../RCEGlobals'; // Import the <math-field> container and all
37
- // the relevant math fonts from mathlive
37
+ import RCEGlobals from '../../../RCEGlobals';
38
38
 
39
+ // Import the <math-field> container and all
40
+ // the relevant math fonts from mathlive
39
41
  import '../mathlive';
40
42
  import { insertTextIntoLatexTextarea } from './latexTextareaUtil';
41
43
  export default class EquationEditorModal extends Component {
@@ -47,14 +49,10 @@ export default class EquationEditorModal extends Component {
47
49
  };
48
50
  this.previewElement = /*#__PURE__*/React.createRef();
49
51
  this.advancedEditor = /*#__PURE__*/React.createRef();
50
-
51
52
  this.executeCommand = (cmd, advancedCmd) => {
52
53
  if (this.state.advanced) {
53
- var _this$advancedEditor$;
54
-
55
54
  const insertionText = advancedCmd || cmd;
56
- const textarea = (_this$advancedEditor$ = this.advancedEditor.current) === null || _this$advancedEditor$ === void 0 ? void 0 : _this$advancedEditor$._textarea;
57
-
55
+ const textarea = this.advancedEditor.current?._textarea;
58
56
  if (textarea) {
59
57
  insertTextIntoLatexTextarea(textarea, insertionText);
60
58
  this.setState({
@@ -67,25 +65,20 @@ export default class EquationEditorModal extends Component {
67
65
  });
68
66
  }
69
67
  };
70
-
71
68
  this.handleModalCancel = () => {
72
69
  this.props.onModalDismiss();
73
70
  };
74
-
75
71
  this.handleModalDone = () => {
76
72
  const {
77
73
  onModalDismiss,
78
74
  onEquationSubmit
79
75
  } = this.props;
80
76
  const output = this.state.advanced ? this.state.workingFormula : this.getMathFiled();
81
-
82
77
  if (output) {
83
78
  onEquationSubmit(output);
84
79
  }
85
-
86
80
  onModalDismiss();
87
81
  };
88
-
89
82
  this.renderMathInAdvancedPreview = debounce(() => {
90
83
  if (this.previewElement.current) {
91
84
  this.previewElement.current.innerHTML = String.raw`\(${this.state.workingFormula}\)`;
@@ -95,7 +88,6 @@ export default class EquationEditorModal extends Component {
95
88
  leading: false,
96
89
  trailing: true
97
90
  });
98
-
99
91
  this.toggleAdvanced = () => {
100
92
  this.setState(state => {
101
93
  if (state.advanced) {
@@ -113,12 +105,10 @@ export default class EquationEditorModal extends Component {
113
105
  });
114
106
  this.setPreviewElementContent();
115
107
  };
116
-
117
108
  this.toggleAndUpdatePreference = () => {
118
109
  this.toggleAdvanced();
119
110
  advancedPreference.isSet() ? advancedPreference.remove() : advancedPreference.set();
120
111
  };
121
-
122
112
  this.registerBasicEditorListener = () => {
123
113
  const basicEditor = document.querySelector('math-field');
124
114
  basicEditor.addEventListener('input', e => {
@@ -130,11 +120,9 @@ export default class EquationEditorModal extends Component {
130
120
  }
131
121
  });
132
122
  };
133
-
134
123
  this.handleFieldRef = node => {
135
124
  this.mathField = node;
136
125
  };
137
-
138
126
  this.renderFooter = () => {
139
127
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
140
128
  "data-testid": "equation-editor-modal-cancel",
@@ -146,7 +134,6 @@ export default class EquationEditorModal extends Component {
146
134
  color: "primary"
147
135
  }, formatMessage('Done')));
148
136
  };
149
-
150
137
  this.renderToggle = () => {
151
138
  const lockToggle = this.state.advanced && this.advancedModeOnly(this.state.workingFormula);
152
139
  return /*#__PURE__*/React.createElement(ConditionalTooltip, {
@@ -162,17 +149,14 @@ export default class EquationEditorModal extends Component {
162
149
  "data-testid": "advanced-toggle"
163
150
  }));
164
151
  };
165
-
166
152
  this.render = () => {
167
- var _RCEGlobals$getFeatur;
168
-
169
153
  const {
170
154
  onModalClose
171
155
  } = this.props;
172
156
  return /*#__PURE__*/React.createElement(Modal, {
173
157
  "data-mce-component": true,
174
158
  label: formatMessage('Equation Editor'),
175
- mountNode: instuiPopupMountNode,
159
+ mountNode: instuiPopupMountNodeFn,
176
160
  onClose: onModalClose,
177
161
  onDismiss: this.handleModalCancel,
178
162
  open: true,
@@ -234,16 +218,15 @@ export default class EquationEditorModal extends Component {
234
218
  }, /*#__PURE__*/React.createElement("span", {
235
219
  "data-testid": "mathml-preview-element",
236
220
  ref: this.previewElement,
237
- className: (_RCEGlobals$getFeatur = RCEGlobals.getFeatures()) !== null && _RCEGlobals$getFeatur !== void 0 && _RCEGlobals$getFeatur.explicit_latex_typesetting ? MathJaxDirective.Process : null
221
+ className: RCEGlobals.getFeatures()?.explicit_latex_typesetting ? MathJaxDirective.Process : null
238
222
  })))), /*#__PURE__*/React.createElement(Modal.Footer, null, this.renderFooter()));
239
223
  };
240
-
241
224
  this.mathml = new Mathml(RCEGlobals.getFeatures(), RCEGlobals.getConfig());
242
225
  }
243
-
244
226
  // **************** //
245
227
  // Helper functions //
246
228
  // **************** //
229
+
247
230
  insertNewRange() {
248
231
  const {
249
232
  editor,
@@ -260,15 +243,15 @@ export default class EquationEditorModal extends Component {
260
243
  range.setEnd(startContainer, rightIndex);
261
244
  editor.selection.setRng(range);
262
245
  }
263
-
264
246
  advancedModeOnly(latex) {
265
247
  const normalizedLatex = latex.replace(/\s+/, '');
266
248
  return containsAdvancedSyntax(normalizedLatex);
267
- } // ********* //
249
+ }
250
+
251
+ // ********* //
268
252
  // Callbacks //
269
253
  // ********* //
270
254
 
271
-
272
255
  setPreviewElementContent() {
273
256
  if (this.state.workingFormula) {
274
257
  this.renderMathInAdvancedPreview();
@@ -277,6 +260,10 @@ export default class EquationEditorModal extends Component {
277
260
  }
278
261
  }
279
262
 
263
+ // ******************* //
264
+ // Rendering functions //
265
+ // ******************* //
266
+
280
267
  componentDidMount() {
281
268
  this.registerBasicEditorListener();
282
269
  this.setPreviewElementContent();
@@ -284,33 +271,26 @@ export default class EquationEditorModal extends Component {
284
271
  if (!this.state.advanced) this.setMathField(this.state.workingFormula);
285
272
  this.insertNewRange();
286
273
  }
287
-
288
274
  componentDidUpdate(prevProps, prevState) {
289
275
  if (this.state.workingFormula !== prevState.workingFormula) {
290
276
  this.setPreviewElementContent();
291
277
  }
292
278
  }
293
-
294
279
  stubMacros() {
295
- var _this$mathField;
296
-
297
280
  // Mathlive's macros exist for a different use case;
298
281
  // we don't intend for our users to utilize them.
299
282
  // This effectively disables all of them to prevent
300
283
  // weird behaviors that users don't expect.
301
- (_this$mathField = this.mathField) === null || _this$mathField === void 0 ? void 0 : _this$mathField.setOptions({
284
+ this.mathField?.setOptions({
302
285
  macros: {}
303
286
  });
304
287
  }
305
-
306
288
  setMathField(formula) {
307
289
  this.mathField.setValue(formula);
308
290
  }
309
-
310
291
  getMathFiled() {
311
292
  return this.mathField.getValue();
312
293
  }
313
-
314
294
  }
315
295
  EquationEditorModal.debounceRate = 1000;
316
296
  EquationEditorModal.propTypes = {
@@ -15,7 +15,9 @@
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 { performTextEditActionOnTextarea } from '../../../../util/textarea-editing-util';
20
+
19
21
  /**
20
22
  * Inserts text into a textarea for editing LaTeX, handling selection and focus management.
21
23
  *
@@ -24,13 +26,11 @@ import { performTextEditActionOnTextarea } from '../../../../util/textarea-editi
24
26
  * @param textarea
25
27
  * @param insertionText
26
28
  */
27
-
28
29
  export function insertTextIntoLatexTextarea(textarea, insertionText) {
29
30
  var _textarea$value, _textarea$selectionSt, _textarea$selectionEn;
30
-
31
- const currentText = (_textarea$value = textarea === null || textarea === void 0 ? void 0 : textarea.value) !== null && _textarea$value !== void 0 ? _textarea$value : '';
32
- const selStart = (_textarea$selectionSt = textarea === null || textarea === void 0 ? void 0 : textarea.selectionStart) !== null && _textarea$selectionSt !== void 0 ? _textarea$selectionSt : currentText.length;
33
- const selEnd = (_textarea$selectionEn = textarea === null || textarea === void 0 ? void 0 : textarea.selectionEnd) !== null && _textarea$selectionEn !== void 0 ? _textarea$selectionEn : selStart;
31
+ const currentText = (_textarea$value = textarea?.value) !== null && _textarea$value !== void 0 ? _textarea$value : '';
32
+ const selStart = (_textarea$selectionSt = textarea?.selectionStart) !== null && _textarea$selectionSt !== void 0 ? _textarea$selectionSt : currentText.length;
33
+ const selEnd = (_textarea$selectionEn = textarea?.selectionEnd) !== null && _textarea$selectionEn !== void 0 ? _textarea$selectionEn : selStart;
34
34
  textarea.focus();
35
35
  planInsertTextIntoLatexTextarea({
36
36
  insertionText,
@@ -48,23 +48,24 @@ export function planInsertTextIntoLatexTextarea(args) {
48
48
  selStart,
49
49
  selEnd
50
50
  } = args;
51
- const selectedText = currentText.substring(selStart, selEnd); // Look for parameters ([] or {}) in the command text, because we'll want to wrap the current selection in the
52
- // command in that case
51
+ const selectedText = currentText.substring(selStart, selEnd);
53
52
 
54
- const singleParamParts = insertionText.match( // Match both [] and {}
53
+ // Look for parameters ([] or {}) in the command text, because we'll want to wrap the current selection in the
54
+ // command in that case
55
+ const singleParamParts = insertionText.match(
56
+ // Match both [] and {}
55
57
  /^(.*?\{)\s*(}.*)$|^(.*?\[)\s*(].*)$/);
56
- const doubleParamParts = insertionText.match( // Match two sets of [] and/or {}
57
- /^(?:(.*?\{)\s*(}.*?)|(.*?\[)\s*(].*?))(?:(.*?\{)\s*(}.*?)|(.*?\[)\s*(].*))$/ // 1 2 3 4 5 6 7 8
58
+ const doubleParamParts = insertionText.match(
59
+ // Match two sets of [] and/or {}
60
+ /^(?:(.*?\{)\s*(}.*?)|(.*?\[)\s*(].*?))(?:(.*?\{)\s*(}.*?)|(.*?\[)\s*(].*))$/
61
+ // 1 2 3 4 5 6 7 8
58
62
  );
59
-
60
63
  if (doubleParamParts) {
61
64
  var _ref, _m$, _ref2, _m$2, _ref3, _m$3, _ref4, _m$4;
62
-
63
65
  const m = doubleParamParts;
64
66
  const before = (_ref = (_m$ = m[1]) !== null && _m$ !== void 0 ? _m$ : m[3]) !== null && _ref !== void 0 ? _ref : '';
65
67
  const middle = ((_ref2 = (_m$2 = m[2]) !== null && _m$2 !== void 0 ? _m$2 : m[4]) !== null && _ref2 !== void 0 ? _ref2 : '') + ((_ref3 = (_m$3 = m[5]) !== null && _m$3 !== void 0 ? _m$3 : m[7]) !== null && _ref3 !== void 0 ? _ref3 : '');
66
68
  const after = (_ref4 = (_m$4 = m[6]) !== null && _m$4 !== void 0 ? _m$4 : m[8]) !== null && _ref4 !== void 0 ? _ref4 : '';
67
-
68
69
  if (selectedText.length) {
69
70
  // When there is a selection with a double-parameter command, the selection should fill the first parameter
70
71
  // and the cursor should be be placed in the second parameter
@@ -85,10 +86,8 @@ export function planInsertTextIntoLatexTextarea(args) {
85
86
  }
86
87
  } else if (singleParamParts) {
87
88
  var _singleParamParts$, _singleParamParts$2;
88
-
89
89
  const before = (_singleParamParts$ = singleParamParts[1]) !== null && _singleParamParts$ !== void 0 ? _singleParamParts$ : singleParamParts[3];
90
90
  const after = (_singleParamParts$2 = singleParamParts[2]) !== null && _singleParamParts$2 !== void 0 ? _singleParamParts$2 : singleParamParts[4];
91
-
92
91
  if (selectedText.length) {
93
92
  // When there is a selection and only a single parameter, the selection should be used as the parameter
94
93
  // and the cursor placed at the end of the command
@@ -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 { containsAdvancedSyntax } from './advancedOnlySyntax';
19
20
  // Used to detect inline latex delimited like: \( ... \) OR $$ ... $$
20
21
  const BOUNDARY_REGEX = /\\\((.+?)\\\)|\$\$(.+?)\$\$/g;
@@ -47,16 +48,17 @@ export const parseLatex = editor => {
47
48
  const selection = editor.selection.getContent();
48
49
  const selectionNode = editor.selection.getNode();
49
50
  const editorRange = editor.selection.getRng();
50
- const startContainer = editorRange === null || editorRange === void 0 ? void 0 : editorRange.startContainer;
51
- const wholeText = startContainer === null || startContainer === void 0 ? void 0 : startContainer.wholeText; // check if selection is inline latex
51
+ const startContainer = editorRange?.startContainer;
52
+ const wholeText = startContainer?.wholeText;
52
53
 
54
+ // check if selection is inline latex
53
55
  if (selection && selectionIsLatex(selection)) {
54
56
  const latex = cleanLatex(selection);
55
57
  return {
56
58
  latex,
57
59
  advancedOnly: containsAdvancedSyntax(latex)
58
60
  };
59
- } else if ((selectionNode === null || selectionNode === void 0 ? void 0 : selectionNode.tagName) === 'IMG' && selectionNode !== null && selectionNode !== void 0 && selectionNode.classList.contains('equation_image')) {
61
+ } else if (selectionNode?.tagName === 'IMG' && selectionNode?.classList.contains('equation_image')) {
60
62
  // check if we launched modal from an equation image
61
63
  try {
62
64
  const src = new URL(selectionNode.src);
@@ -72,18 +74,17 @@ export const parseLatex = editor => {
72
74
  }
73
75
  } else if (wholeText) {
74
76
  // check if the cursor was within inline latex when launched
77
+
75
78
  // The `wholeText` value is not sufficient, since we could be dealing with
76
79
  // a number of nested ranges. The `nodeValue` is the text in the range in
77
80
  // which we have found the cursor.
78
81
  const nodeValue = startContainer.nodeValue || '';
79
82
  const cursor = editorRange.startOffset;
80
83
  const parsedLatex = findLatex(nodeValue, cursor);
81
-
82
84
  if (parsedLatex.latex) {
83
85
  parsedLatex.startContainer = startContainer;
84
86
  parsedLatex.advancedOnly = containsAdvancedSyntax(parsedLatex.latex);
85
87
  }
86
-
87
88
  return parsedLatex;
88
89
  } else {
89
90
  return {};
@@ -15,12 +15,14 @@
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 { StyleSheet } from 'aphrodite';
19
20
  const cssRules = `#MathJax_MenuFrame {
20
21
  z-index: 10000 !important;
21
- }`; // Applying z-index for MathJax menu inside config shows the element but doesn't user interact with it.
22
- // Manually adding z-index as head style
22
+ }`;
23
23
 
24
+ // Applying z-index for MathJax menu inside config shows the element but doesn't user interact with it.
25
+ // Manually adding z-index as head style
24
26
  const style = document.createElement('style');
25
27
  style.appendChild(document.createTextNode(cssRules));
26
28
  document.head.appendChild(style);
@@ -15,9 +15,9 @@
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
- const formatMessage = require('../../../../format-message');
19
18
 
20
- module.exports = [{
19
+ import formatMessage from '../../../../format-message';
20
+ export default [{
21
21
  name: formatMessage('Basic'),
22
22
  commands: [{
23
23
  displayName: 'x_{\u2B1A}^{\\ }',
@@ -61,7 +61,8 @@ module.exports = [{
61
61
  advancedCommand: '\\binom{ }{ }',
62
62
  svgCommand: '\\binom{n}{m}',
63
63
  label: formatMessage('Binomial Coefficient')
64
- }, // TODO maybe re-add vector, after figuring out if it even works
64
+ },
65
+ // TODO maybe re-add vector, after figuring out if it even works
65
66
  {
66
67
  command: 'f',
67
68
  label: formatMessage('F (function)')
@@ -404,7 +405,8 @@ module.exports = [{
404
405
  }, {
405
406
  command: '\\ni',
406
407
  label: formatMessage('Contains')
407
- }, // TODO consider reenabling once mathlive supports it
408
+ },
409
+ // TODO consider reenabling once mathlive supports it
408
410
  // { command: '\\notni' },
409
411
  {
410
412
  command: '\\subset',
@@ -670,7 +672,8 @@ module.exports = [{
670
672
  }, {
671
673
  command: '\\spadesuit',
672
674
  label: formatMessage('Spades (Suit)')
673
- }, // TODO maybe readd caret, underscore once I figure out if they even worked
675
+ },
676
+ // TODO maybe readd caret, underscore once I figure out if they even worked
674
677
  {
675
678
  command: '\\backslash',
676
679
  label: formatMessage('Backslash')
@@ -686,7 +689,8 @@ module.exports = [{
686
689
  }, {
687
690
  command: '\\hbar',
688
691
  label: formatMessage('H Bar')
689
- }, // TODO consider renabling if we can not get stuck in text mode
692
+ },
693
+ // TODO consider renabling if we can not get stuck in text mode
690
694
  // { command: '\\text\\AA' },
691
695
  {
692
696
  command: '\\circ',
@@ -700,7 +704,8 @@ module.exports = [{
700
704
  }, {
701
705
  command: '\\neg',
702
706
  label: formatMessage('Not (Negation)')
703
- }, // TODO consider reenabling once mathlive supports it
707
+ },
708
+ // TODO consider reenabling once mathlive supports it
704
709
  // { command: '\\dots' },
705
710
  {
706
711
  command: '\\Re',
@@ -720,7 +725,8 @@ module.exports = [{
720
725
  }, {
721
726
  command: '^\\circ',
722
727
  label: formatMessage('Degree Symbol')
723
- }, // \\deg requires the gensymb package added to LaTex
728
+ },
729
+ // \\deg requires the gensymb package added to LaTex
724
730
  {
725
731
  command: '\\angle',
726
732
  label: formatMessage('Angle')
@@ -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, { useState } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { Tabs } from '@instructure/ui-tabs';
@@ -26,38 +27,34 @@ const buttonContainerStyle = {
26
27
  marginBottom: '5px',
27
28
  paddingRight: '5px'
28
29
  };
29
-
30
30
  function EquationEditorToolbar(props) {
31
31
  const [selectedTab, setSelectedTab] = useState('Basic');
32
-
33
- const handleTabChange = (event, _ref) => {
34
- let {
35
- index
36
- } = _ref;
32
+ const handleTabChange = (event, {
33
+ index
34
+ }) => {
37
35
  setSelectedTab(buttons[index].name);
38
36
  };
39
-
40
37
  const renderTabPanel = section => /*#__PURE__*/React.createElement(Tabs.Panel, {
41
38
  id: section.name,
42
39
  key: section.name,
43
40
  padding: "small small",
44
41
  renderTitle: section.name,
45
42
  isSelected: selectedTab === section.name
46
- }, section.commands.map(_ref2 => {
47
- let {
48
- displayName,
49
- command,
50
- advancedCommand,
51
- label
52
- } = _ref2;
43
+ }, section.commands.map(({
44
+ displayName,
45
+ command,
46
+ advancedCommand,
47
+ label
48
+ }) => {
53
49
  const name = displayName || command;
54
50
  const icon = /*#__PURE__*/React.createElement(MathIcon, {
55
51
  command: command
56
- }); // I'm inlining styles here because for some reason the RCE plugin plays
52
+ });
53
+
54
+ // I'm inlining styles here because for some reason the RCE plugin plays
57
55
  // poorly with the way webpack is compiling styles, causing rules from a
58
56
  // styles.css file to not show up. It would be nice to figure out how to
59
57
  // fix this, though.
60
-
61
58
  return /*#__PURE__*/React.createElement("div", {
62
59
  style: buttonContainerStyle,
63
60
  key: name
@@ -67,7 +64,6 @@ function EquationEditorToolbar(props) {
67
64
  screenReaderLabel: `${label}, LaTeX: ${name}`
68
65
  }));
69
66
  }));
70
-
71
67
  return /*#__PURE__*/React.createElement(Tabs, {
72
68
  variant: "secondary",
73
69
  onRequestTabChange: handleTabChange,
@@ -76,7 +72,6 @@ function EquationEditorToolbar(props) {
76
72
  maxWidth: "42rem"
77
73
  }, buttons.map(renderTabPanel));
78
74
  }
79
-
80
75
  EquationEditorToolbar.propTypes = {
81
76
  executeCommand: PropTypes.func.isRequired
82
77
  };
@@ -15,16 +15,15 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import { string } from 'prop-types';
20
21
  import { IconWarningLine } from '@instructure/ui-icons';
21
22
  import { SVGIcon } from '@instructure/ui-svg-images';
22
23
  import svgs from './svgs';
23
- export default function MathIcon(_ref) {
24
- let {
25
- command
26
- } = _ref;
27
-
24
+ export default function MathIcon({
25
+ command
26
+ }) {
28
27
  if (command in svgs) {
29
28
  return /*#__PURE__*/React.createElement(SVGIcon, {
30
29
  src: svgs[command],
@@ -17,8 +17,8 @@
17
17
  */
18
18
 
19
19
  /***** This is an auto-generated file. Please do not modify manually *****/
20
-
21
20
  /************ If you need to update, run 'yarn generate-svgs' ************/
21
+
22
22
  export default {
23
23
  '_{\\placeholder{}}': '<svg style="vertical-align: -0.339ex" xmlns="http://www.w3.org/2000/svg" width="2.727ex" height="1.339ex" role="img" focusable="false" viewBox="0 -442 1205.1 592" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="MJX-1-TEX-I-1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path id="MJX-1-TEX-I-25FB" d="M71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msub"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-1-TEX-I-1D465"></use></g><g data-mml-node="TeXAtom" transform="translate(605,-150) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="25FB" xlink:href="#MJX-1-TEX-I-25FB"></use></g></g></g></g></g></svg>',
24
24
  '^{\\placeholder{}}': '<svg style="vertical-align: -0.025ex" xmlns="http://www.w3.org/2000/svg" width="2.727ex" height="2.062ex" role="img" focusable="false" viewBox="0 -900.2 1205.1 911.2" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><path id="MJX-2-TEX-I-1D465" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path id="MJX-2-TEX-I-25FB" d="M71 0Q59 4 55 16V346L56 676Q64 686 70 689H709Q719 681 722 674V15Q719 10 709 1L390 0H71ZM682 40V649H95V40H682Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="scale(1,-1)"><g data-mml-node="math"><g data-mml-node="msup"><g data-mml-node="mi"><use data-c="1D465" xlink:href="#MJX-2-TEX-I-1D465"></use></g><g data-mml-node="TeXAtom" transform="translate(605,413) scale(0.707)" data-mjx-texclass="ORD"><g data-mml-node="mi"><use data-c="25FB" xlink:href="#MJX-2-TEX-I-25FB"></use></g></g></g></g></g></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
  import React from 'react';
19
20
  import ReactDOM from 'react-dom';
20
21
  import Bridge from '../../../bridge';
@@ -25,23 +26,19 @@ export default function (ed, document, _trayProps) {
25
26
  const rce = Bridge.activeEditor();
26
27
  const EquationEditorModal = module.default;
27
28
  let container = document.querySelector('.canvas-rce-equation-container');
28
-
29
29
  if (!container) {
30
30
  container = document.createElement('div');
31
31
  container.className = 'canvas-rce-equation-container';
32
32
  document.body.appendChild(container);
33
33
  }
34
-
35
34
  const handleDismiss = () => {
36
35
  ReactDOM.unmountComponentAtNode(container);
37
36
  ed.focus(false);
38
37
  };
39
-
40
38
  const handleSubmit = latex => {
41
39
  rce.insertMathEquation(latex);
42
40
  };
43
-
44
- ReactDOM.render( /*#__PURE__*/React.createElement(EquationEditorModal, {
41
+ ReactDOM.render(/*#__PURE__*/React.createElement(EquationEditorModal, {
45
42
  editor: ed,
46
43
  onModalDismiss: handleDismiss,
47
44
  onModalClose: handleDismiss,