@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,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 PropTypes from 'prop-types';
20
21
  import formatMessage from '../../../../../../format-message';
@@ -24,19 +25,21 @@ import { UploadFile } from '../../../../shared/Upload/UploadFile';
24
25
  import { canCompressImage, compressImage, shouldCompressImage } from '../../../../shared/compressionUtils';
25
26
  import { isAnUnsupportedGifPngImage, MAX_GIF_PNG_SIZE_BYTES } from './utils';
26
27
  import { PREVIEW_HEIGHT, PREVIEW_WIDTH } from '../../../../shared/ImageCropper/constants';
27
-
28
28
  function dispatchCompressedImage(theFile, dispatch, onChange) {
29
- dispatch({ ...actions.SET_IMAGE,
29
+ dispatch({
30
+ ...actions.SET_IMAGE,
30
31
  payload: ''
31
32
  });
32
33
  onChange({
33
34
  type: svgActions.SET_EMBED_IMAGE,
34
35
  payload: ''
35
36
  });
36
- dispatch({ ...actions.SET_CROPPER_OPEN,
37
+ dispatch({
38
+ ...actions.SET_CROPPER_OPEN,
37
39
  payload: true
38
40
  });
39
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
41
+ dispatch({
42
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
40
43
  payload: false
41
44
  });
42
45
  return compressImage({
@@ -44,42 +47,46 @@ function dispatchCompressedImage(theFile, dispatch, onChange) {
44
47
  previewWidth: PREVIEW_WIDTH,
45
48
  previewHeight: PREVIEW_HEIGHT
46
49
  }).then(blob => {
47
- dispatch({ ...actions.SET_COMPRESSION_STATUS,
50
+ dispatch({
51
+ ...actions.SET_COMPRESSION_STATUS,
48
52
  payload: true
49
53
  });
50
- dispatch({ ...actions.SET_IMAGE,
54
+ dispatch({
55
+ ...actions.SET_IMAGE,
51
56
  payload: blob
52
57
  });
53
58
  onChange({
54
59
  type: svgActions.SET_EMBED_IMAGE,
55
60
  payload: blob
56
61
  });
57
- dispatch({ ...actions.SET_IMAGE_NAME,
62
+ dispatch({
63
+ ...actions.SET_IMAGE_NAME,
58
64
  payload: theFile.name
59
65
  });
60
66
  }).catch(() => {
61
67
  // If compression fails, use the original one
62
68
  // TODO: We can show the user that compression failed in some way
63
- dispatch({ ...actions.SET_IMAGE,
69
+ dispatch({
70
+ ...actions.SET_IMAGE,
64
71
  payload: theFile.preview
65
72
  });
66
73
  onChange({
67
74
  type: svgActions.SET_EMBED_IMAGE,
68
75
  payload: theFile.preview
69
76
  });
70
- dispatch({ ...actions.SET_IMAGE_NAME,
77
+ dispatch({
78
+ ...actions.SET_IMAGE_NAME,
71
79
  payload: theFile.name
72
80
  });
73
81
  });
74
82
  }
75
-
76
83
  export const onSubmit = (dispatch, onChange) => (_editor, _accept, _selectedPanel, uploadData) => {
77
84
  const {
78
85
  theFile
79
86
  } = uploadData;
80
-
81
87
  if (isAnUnsupportedGifPngImage(theFile)) {
82
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
88
+ dispatch({
89
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
83
90
  payload: false
84
91
  });
85
92
  return onChange({
@@ -89,29 +96,30 @@ export const onSubmit = (dispatch, onChange) => (_editor, _accept, _selectedPane
89
96
  })
90
97
  });
91
98
  }
92
-
93
99
  if (canCompressImage() && shouldCompressImage(theFile)) {
94
100
  return dispatchCompressedImage(theFile, dispatch, onChange);
95
101
  }
96
-
97
- dispatch({ ...actions.SET_IMAGE,
102
+ dispatch({
103
+ ...actions.SET_IMAGE,
98
104
  payload: theFile.preview
99
105
  });
100
106
  onChange({
101
107
  type: svgActions.SET_EMBED_IMAGE,
102
108
  payload: theFile.preview
103
109
  });
104
- dispatch({ ...actions.SET_IMAGE_NAME,
110
+ dispatch({
111
+ ...actions.SET_IMAGE_NAME,
105
112
  payload: theFile.name
106
113
  });
107
- dispatch({ ...actions.SET_IMAGE_COLLECTION_OPEN,
114
+ dispatch({
115
+ ...actions.SET_IMAGE_COLLECTION_OPEN,
108
116
  payload: false
109
117
  });
110
- dispatch({ ...actions.SET_CROPPER_OPEN,
118
+ dispatch({
119
+ ...actions.SET_CROPPER_OPEN,
111
120
  payload: true
112
121
  });
113
122
  };
114
-
115
123
  const Upload = _ref => {
116
124
  let {
117
125
  editor,
@@ -134,7 +142,6 @@ const Upload = _ref => {
134
142
  canvasOrigin: canvasOrigin
135
143
  });
136
144
  };
137
-
138
145
  Upload.propTypes = {
139
146
  editor: PropTypes.object.isRequired,
140
147
  dispatch: PropTypes.func,
@@ -15,4 +15,5 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export { ImageSection } from './ImageSection';
@@ -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 PropTypes from 'prop-types';
19
20
  import { ImageCropperSettingsPropTypes } from '../../../../shared/ImageCropper/propTypes';
20
21
  export const ImageSettingsPropTypes = PropTypes.shape({
@@ -15,6 +15,7 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export const MAX_GIF_PNG_SIZE_BYTES = 250 * 1024;
19
20
  export const isAnUnsupportedGifPngImage = _ref => {
20
21
  let {
@@ -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, useRef } from 'react';
19
20
  import { View } from '@instructure/ui-view';
20
21
  import { buildSvg } from '../../svg';
@@ -38,23 +39,22 @@ export const Preview = _ref => {
38
39
  as: "div"
39
40
  }, /*#__PURE__*/React.createElement(ScreenReaderContent, null, previewMessage), /*#__PURE__*/React.createElement("div", {
40
41
  "aria-hidden": "true",
41
- style: { ...checkerboardStyle(SQUARE_SIZE),
42
+ style: {
43
+ ...checkerboardStyle(SQUARE_SIZE),
42
44
  display: 'flex',
43
45
  justifyContent: 'center'
44
46
  },
45
47
  ref: wrapper
46
48
  }));
47
49
  };
50
+
48
51
  /**
49
52
  * Remove the node contents and append the svg element.
50
53
  */
51
-
52
54
  function appendSvg(svg, node) {
53
55
  if (!node) return;
54
-
55
56
  while (node.firstChild) {
56
57
  node.removeChild(node.lastChild);
57
58
  }
58
-
59
59
  node.appendChild(svg);
60
60
  }
@@ -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 { Flex } from '@instructure/ui-flex';
20
21
  import { SimpleSelect } from '@instructure/ui-simple-select';
@@ -23,9 +24,7 @@ import { Shape } from '../../svg/shape';
23
24
  import { Size } from '../../svg/constants';
24
25
  const SIZES = [Size.ExtraSmall, Size.Small, Size.Medium, Size.Large];
25
26
  const SHAPE_SECTION_ID = 'icons-tray-shape-section';
26
-
27
27
  const getShapeSection = () => document.querySelector(`#${SHAPE_SECTION_ID}`);
28
-
29
28
  export const ShapeSection = _ref => {
30
29
  let {
31
30
  settings,
@@ -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 { Flex } from '@instructure/ui-flex';
20
21
  import { TextInput } from '@instructure/ui-text-input';
@@ -26,12 +27,9 @@ import { MAX_TOTAL_TEXT_CHARS } from '../../svg/constants';
26
27
  import useDebouncedValue from '../../utils/useDebouncedValue';
27
28
  const TEXT_SIZES = ['small', 'medium', 'large', 'x-large'];
28
29
  const TEXT_POSITIONS = ['middle', 'bottom-third', 'below'];
29
-
30
30
  const getTextSection = () => document.querySelector('#icons-tray-text-section');
31
-
32
31
  const processText = (oldValue, newValue) => {
33
32
  let result = newValue;
34
-
35
33
  if (newValue.length > MAX_TOTAL_TEXT_CHARS) {
36
34
  if (oldValue.length >= MAX_TOTAL_TEXT_CHARS) {
37
35
  // When typing chars
@@ -41,10 +39,8 @@ const processText = (oldValue, newValue) => {
41
39
  result = result.substring(0, MAX_TOTAL_TEXT_CHARS);
42
40
  }
43
41
  }
44
-
45
42
  return result;
46
43
  };
47
-
48
44
  export const TextSection = _ref => {
49
45
  let {
50
46
  settings,
@@ -15,4 +15,5 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  export { CreateIconMakerForm } from './CreateIconMakerForm';
@@ -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, { useCallback, useState, useEffect, useRef, useMemo } from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { CloseButton } from '@instructure/ui-buttons';
@@ -40,7 +41,6 @@ import { shouldIgnoreClose } from '../utils/IconMakerClose';
40
41
  import { instuiPopupMountNode } from '../../../../util/fullscreenHelpers';
41
42
  const INVALID_MESSAGE = formatMessage('One of the following styles must be added to save an icon: Icon Color, Outline Size, Icon Text, or Image');
42
43
  const UNSAVED_CHANGES_MESSAGE = formatMessage('You have unsaved changes in the Icon Maker tray. Do you want to continue without saving these changes?');
43
-
44
44
  function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
45
45
  return /*#__PURE__*/React.createElement(View, {
46
46
  as: "div",
@@ -76,7 +76,6 @@ function renderHeader(title, settings, onKeyDown, onAlertDismissal, onClose) {
76
76
  settings: settings
77
77
  }))));
78
78
  }
79
-
80
79
  function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRef, canvasOrigin, isLoading) {
81
80
  return isLoading() ? /*#__PURE__*/React.createElement(Flex, {
82
81
  justifyItems: "center"
@@ -93,7 +92,6 @@ function renderBody(settings, dispatch, editor, editing, allowNameChange, nameRe
93
92
  canvasOrigin: canvasOrigin
94
93
  });
95
94
  }
96
-
97
95
  function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setReplaceAll, applyRef, isModified) {
98
96
  return /*#__PURE__*/React.createElement(View, {
99
97
  as: "div",
@@ -111,7 +109,6 @@ function renderFooter(status, onClose, handleSubmit, editing, replaceAll, setRep
111
109
  isModified: isModified
112
110
  }));
113
111
  }
114
-
115
112
  export function IconMakerTray(_ref) {
116
113
  let {
117
114
  editor,
@@ -126,16 +123,18 @@ export function IconMakerTray(_ref) {
126
123
  const title = editing ? formatMessage('Edit Icon') : formatMessage('Create Icon');
127
124
  const [settings, settingsStatus, dispatch] = useSvgSettings(editor, editing, canvasOrigin);
128
125
  const [status, setStatus] = useState(statuses.IDLE);
129
- const [initialSettings, setInitialSettings] = useState({ ...defaultState
126
+ const [initialSettings, setInitialSettings] = useState({
127
+ ...defaultState
130
128
  });
131
129
  const isModified = useRef(false);
132
130
  const [mountNode, setMountNode] = useState(instuiPopupMountNode());
133
131
  const handleFullscreenChange = useCallback(() => {
134
132
  setMountNode(instuiPopupMountNode());
135
- }, []); // These useRef objects are needed because when the tray is closed using the escape key
133
+ }, []);
134
+
135
+ // These useRef objects are needed because when the tray is closed using the escape key
136
136
  // objects created by useState are not available, causing the comparison between
137
137
  // initialSettings and settings to behave unexpectedly
138
-
139
138
  const initialSettingsRef = useRef(initialSettings);
140
139
  const settingsRef = useRef(settings);
141
140
  const statusRef = useRef(status);
@@ -144,11 +143,9 @@ export function IconMakerTray(_ref) {
144
143
  initialSettingsRef.current = useMemo(() => initialSettings, [initialSettings]);
145
144
  useEffect(() => {
146
145
  var _editor$rceWrapper, _editor$rceWrapper$_e, _editor$rceWrapper$_e2;
147
-
148
146
  editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper = editor.rceWrapper) === null || _editor$rceWrapper === void 0 ? void 0 : (_editor$rceWrapper$_e = _editor$rceWrapper._elementRef) === null || _editor$rceWrapper$_e === void 0 ? void 0 : (_editor$rceWrapper$_e2 = _editor$rceWrapper$_e.current) === null || _editor$rceWrapper$_e2 === void 0 ? void 0 : _editor$rceWrapper$_e2.addEventListener('fullscreenchange', handleFullscreenChange);
149
147
  return () => {
150
148
  var _editor$rceWrapper2, _editor$rceWrapper2$_, _editor$rceWrapper2$_2;
151
-
152
149
  editor === null || editor === void 0 ? void 0 : (_editor$rceWrapper2 = editor.rceWrapper) === null || _editor$rceWrapper2 === void 0 ? void 0 : (_editor$rceWrapper2$_ = _editor$rceWrapper2._elementRef) === null || _editor$rceWrapper2$_ === void 0 ? void 0 : (_editor$rceWrapper2$_2 = _editor$rceWrapper2$_.current) === null || _editor$rceWrapper2$_2 === void 0 ? void 0 : _editor$rceWrapper2$_2.removeEventListener('fullscreenchange', handleFullscreenChange);
153
150
  };
154
151
  }, [editor, handleFullscreenChange]);
@@ -157,34 +154,28 @@ export function IconMakerTray(_ref) {
157
154
  isModified.current = formHasChanges.hasChanges();
158
155
  }, [settings, initialSettings]);
159
156
  const storeProps = useStoreProps();
160
-
161
157
  const onClose = event => {
162
158
  if (shouldIgnoreClose(event === null || event === void 0 ? void 0 : event.target, editor === null || editor === void 0 ? void 0 : editor.id)) return;
163
- if ((statusRef === null || statusRef === void 0 ? void 0 : statusRef.current) === statuses.LOADING) return; // Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
164
-
165
- if (!!hasOpenModal()) return; // RCE already uses browser's confirm dialog for unsaved changes
159
+ if ((statusRef === null || statusRef === void 0 ? void 0 : statusRef.current) === statuses.LOADING) return;
160
+ // Uploading an image creates a modal on the page. If that modal is open, we don't want to close the tray
161
+ // eslint-disable-next-line no-extra-boolean-cast
162
+ if (!!hasOpenModal()) return;
163
+ // RCE already uses browser's confirm dialog for unsaved changes
166
164
  // Its use here in the Icon Maker tray keeps that consistency
167
165
  // eslint-disable-next-line no-restricted-globals, no-alert
168
-
169
166
  if (isModified.current && !confirm(UNSAVED_CHANGES_MESSAGE)) {
170
167
  return;
171
168
  }
172
-
173
169
  setIsOpen(false);
174
170
  };
175
-
176
171
  const hasOpenModal = () => document.querySelector('[data-cid="Modal"]');
177
-
178
172
  const isLoading = () => status === statuses.LOADING;
179
-
180
173
  const onKeyDown = event => {
181
174
  var _applyRef$current, _nameRef$current;
182
-
183
175
  if (event.keyCode !== 9) return;
184
176
  event.preventDefault();
185
177
  event.shiftKey ? (_applyRef$current = applyRef.current) === null || _applyRef$current === void 0 ? void 0 : _applyRef$current.focus() : (_nameRef$current = nameRef.current) === null || _nameRef$current === void 0 ? void 0 : _nameRef$current.focus();
186
178
  };
187
-
188
179
  useEffect(() => {
189
180
  setReplaceAll(false);
190
181
  }, [settings.name]);
@@ -195,16 +186,14 @@ export function IconMakerTray(_ref) {
195
186
  payload: null
196
187
  });
197
188
  setStatus(statuses.IDLE);
198
- } // eslint-disable-next-line react-hooks/exhaustive-deps
199
-
189
+ }
190
+ // eslint-disable-next-line react-hooks/exhaustive-deps
200
191
  }, [settings.color, settings.textColor, settings.text, settings.textSize, settings.textBackgroundColor, settings.textPosition, settings.imageSettings, settings.outlineColor, settings.outlineSize, settings.name]);
201
-
202
192
  const handleSubmit = _ref2 => {
203
193
  let {
204
194
  replaceFile = false
205
195
  } = _ref2;
206
196
  setStatus(statuses.LOADING);
207
-
208
197
  if (!validIcon(settings)) {
209
198
  dispatch({
210
199
  type: actions.SET_ERROR,
@@ -213,7 +202,6 @@ export function IconMakerTray(_ref) {
213
202
  setStatus(statuses.ERROR);
214
203
  return;
215
204
  }
216
-
217
205
  const svg = buildSvg(settings, {
218
206
  isPreview: false
219
207
  });
@@ -229,7 +217,6 @@ export function IconMakerTray(_ref) {
229
217
  setStatus(statuses.ERROR);
230
218
  });
231
219
  };
232
-
233
220
  const writeIconToRCE = _ref3 => {
234
221
  let {
235
222
  url,
@@ -254,12 +241,12 @@ export function IconMakerTray(_ref) {
254
241
  STYLE: externalStyle,
255
242
  // DON'T CHANGE BEFORE READING COMMENT ABOVE
256
243
  width: externalWidth
257
- }; // Mark the image as an icon maker icon.
244
+ };
258
245
 
246
+ // Mark the image as an icon maker icon.
259
247
  addIconMakerAttributes(imageAttributes);
260
248
  bridge.embedImage(imageAttributes);
261
249
  };
262
-
263
250
  const defaultImageSettings = () => {
264
251
  return {
265
252
  mode: '',
@@ -270,7 +257,6 @@ export function IconMakerTray(_ref) {
270
257
  cropperSettings: null
271
258
  };
272
259
  };
273
-
274
260
  const replaceInitialSettings = () => {
275
261
  const name = editing ? settings.name : undefined;
276
262
  const textPosition = editing ? settings.textPosition : defaultState.textPosition;
@@ -291,17 +277,16 @@ export function IconMakerTray(_ref) {
291
277
  imageSettings
292
278
  });
293
279
  };
294
-
295
280
  useEffect(() => {
296
281
  setStatus(settingsStatus);
297
- replaceInitialSettings(); // eslint-disable-next-line react-hooks/exhaustive-deps
298
- }, [settingsStatus]);
282
+ replaceInitialSettings();
299
283
 
284
+ // eslint-disable-next-line react-hooks/exhaustive-deps
285
+ }, [settingsStatus]);
300
286
  const handleAlertDismissal = () => dispatch({
301
287
  type: actions.SET_ERROR,
302
288
  payload: null
303
289
  });
304
-
305
290
  return /*#__PURE__*/React.createElement(FixedContentTray, {
306
291
  title: title,
307
292
  isOpen: isOpen,
@@ -15,13 +15,13 @@
15
15
  * You should have received a copy of the GNU Affero General Public License along
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
+
18
19
  import React from 'react';
19
20
  import PropTypes from 'prop-types';
20
21
  import { View } from '@instructure/ui-view';
21
22
  import Images from '../../instructure_image/Images';
22
23
  import { contentTrayDocumentShape } from '../../shared/fileShape';
23
24
  import { ICON_MAKER_ICONS } from '../svg/constants';
24
-
25
25
  const SavedIconMakerList = props => {
26
26
  const {
27
27
  sortBy,
@@ -31,7 +31,8 @@ const SavedIconMakerList = props => {
31
31
  fetchInitialImages,
32
32
  fetchNextImages,
33
33
  contextType
34
- } = { ...props
34
+ } = {
35
+ ...props
35
36
  };
36
37
  const {
37
38
  files,
@@ -62,9 +63,8 @@ const SavedIconMakerList = props => {
62
63
  isIconMaker: true
63
64
  }));
64
65
  };
65
- /* eslint-disable react/no-unused-prop-types */
66
-
67
66
 
67
+ /* eslint-disable react/no-unused-prop-types */
68
68
  SavedIconMakerList.propTypes = {
69
69
  sortBy: PropTypes.shape({
70
70
  sort: PropTypes.oneOf(['date_added', 'alphabetical']).isRequired,
@@ -1,5 +1,3 @@
1
- // @ts-nocheck
2
-
3
1
  /*
4
2
  * Copyright (C) 2021 - present Instructure, Inc.
5
3
  *
@@ -17,13 +15,13 @@
17
15
  * You should have received a copy of the GNU Affero General Public License along
18
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
19
17
  */
18
+
20
19
  import bridge from '../../../bridge';
21
20
  import formatMessage from '../../../format-message';
22
21
  import { isOKToLink } from '../../contentInsertionUtils';
23
22
  import clickCallback, { CREATE_ICON_MAKER, EDIT_ICON_MAKER, LIST_ICON_MAKER } from './clickCallback';
24
23
  import registerEditToolbar from './registerEditToolbar';
25
24
  import tinymce from 'tinymce';
26
-
27
25
  function getMenuItems() {
28
26
  return [{
29
27
  text: formatMessage('Create Icon Maker Icon'),
@@ -33,27 +31,24 @@ function getMenuItems() {
33
31
  value: 'instructure_list_icon_maker'
34
32
  }];
35
33
  }
36
-
37
34
  function handleOptionSelected(ed, value) {
38
35
  switch (value) {
39
36
  case 'instructure_create_icon_maker':
40
37
  ed.focus(true);
41
38
  ed.execCommand('instructureTrayForIconMakerPlugin', false, CREATE_ICON_MAKER);
42
39
  break;
43
-
44
40
  case 'instructure_list_icon_maker':
45
41
  ed.focus(true);
46
42
  ed.execCommand('instructureTrayForIconMakerPlugin', false, LIST_ICON_MAKER);
47
43
  break;
48
-
49
44
  case 'instructure_edit_icon_maker':
50
45
  ed.focus(true);
51
46
  ed.execCommand('instructureTrayForIconMakerPlugin', false, EDIT_ICON_MAKER);
52
47
  break;
53
48
  }
54
- } // Register plugin
55
-
49
+ }
56
50
 
51
+ // Register plugin
57
52
  tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
58
53
  // Register tray control command
59
54
  ed.addCommand('instructureTrayForIconMakerPlugin', (_ui, type) => {
@@ -62,8 +57,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
62
57
  } else {
63
58
  clickCallback(ed, document, type);
64
59
  }
65
- }); // Register menu items
60
+ });
66
61
 
62
+ // Register menu items
67
63
  ed.ui.registry.addNestedMenuItem('instructure_icon_maker', {
68
64
  text: formatMessage('Icon Maker Icons'),
69
65
  icon: 'buttons',
@@ -76,8 +72,9 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
76
72
  return () => {};
77
73
  }
78
74
  }))
79
- }); // Register button
75
+ });
80
76
 
77
+ // Register button
81
78
  ed.ui.registry.addMenuButton('instructure_icon_maker', {
82
79
  tooltip: formatMessage('Icon Maker Icons'),
83
80
  icon: 'buttons',
@@ -87,21 +84,20 @@ tinymce.PluginManager.add('instructure_icon_maker', function (ed) {
87
84
  value: item.value,
88
85
  onAction: () => handleOptionSelected(ed, item.value)
89
86
  }))),
90
-
91
87
  onSetup(api) {
92
88
  function handleNodeChange(_e) {
93
89
  api.setDisabled(!isOKToLink(ed.selection.getContent()));
94
90
  }
95
-
96
91
  setTimeout(handleNodeChange);
97
92
  ed.on('NodeChange', handleNodeChange);
98
93
  return () => {
99
94
  ed.off('NodeChange', handleNodeChange);
100
95
  };
101
96
  }
97
+ });
102
98
 
103
- }); // Register context toolbar for editing existing icon maker icons
104
-
99
+ // Register context toolbar for editing existing icon maker icons
100
+ // @ts-expect-error
105
101
  registerEditToolbar(ed, api => {
106
102
  if (!api.isDisabled()) {
107
103
  handleOptionSelected(ed, 'instructure_edit_icon_maker');