@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,32 +15,28 @@
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 { createSvgElement } from './utils';
19
20
  import { CLIP_PATH_ID } from './clipPath';
20
21
  import { Shape } from './shape';
21
22
  import { Size, STROKE_WIDTH, BASE_SIZE, ICON_PADDING } from './constants';
22
23
  const STOCK_IMAGE_TYPES = ['SingleColor', 'MultiColor'];
23
-
24
- const calculateImageHeight = _ref => {
25
- let {
26
- size,
27
- outlineSize
28
- } = _ref;
24
+ const calculateImageHeight = ({
25
+ size,
26
+ outlineSize
27
+ }) => {
29
28
  // Subtract the padding at the top and the bottom
30
29
  // to get the true height of the shape in the icon
31
- const iconHeightLessPadding = BASE_SIZE[size] - 2 * ICON_PADDING; // Shrink it by the size of the stroke width so the
32
- // border doesn't cover parts of the cropped image
30
+ const iconHeightLessPadding = BASE_SIZE[size] - 2 * ICON_PADDING;
33
31
 
32
+ // Shrink it by the size of the stroke width so the
33
+ // border doesn't cover parts of the cropped image
34
34
  return iconHeightLessPadding - STROKE_WIDTH[outlineSize];
35
35
  };
36
-
37
36
  export function buildImage(settings) {
38
- var _settings$imageSettin;
39
-
40
37
  // Don't attempt to embed an image if none exist
41
- if (!((_settings$imageSettin = settings.imageSettings) !== null && _settings$imageSettin !== void 0 && _settings$imageSettin.image)) return;
38
+ if (!settings.imageSettings?.image) return;
42
39
  let imageAttributes;
43
-
44
40
  if (STOCK_IMAGE_TYPES.includes(settings.imageSettings.mode)) {
45
41
  imageAttributes = {
46
42
  x: settings.x,
@@ -63,7 +59,6 @@ export function buildImage(settings) {
63
59
  href: settings.embedImage
64
60
  };
65
61
  }
66
-
67
62
  const group = createSvgElement('g', {
68
63
  'clip-path': `url(#${CLIP_PATH_ID})`
69
64
  });
@@ -71,6 +66,7 @@ export function buildImage(settings) {
71
66
  group.appendChild(image);
72
67
  return group;
73
68
  }
69
+
74
70
  /**
75
71
  * Calculates the transformation props for a given
76
72
  * shape and size.
@@ -90,242 +86,232 @@ export function buildImage(settings) {
90
86
  *
91
87
  * @returns Transform
92
88
  */
93
-
94
89
  export function transformForShape(shape, size) {
95
90
  switch (shape) {
96
91
  case Shape.Pentagon:
97
92
  return transformForPentagon(size);
98
-
99
93
  case Shape.Triangle:
100
94
  return transformForTriangle(size);
101
-
102
95
  case Shape.Star:
103
96
  return transformForStar(size);
104
-
105
97
  case Shape.Square:
106
98
  return transformForSquare(size);
107
-
108
99
  case Shape.Circle:
109
100
  return transformForCircle(size);
110
-
111
101
  case Shape.Hexagon:
112
102
  return transformForHexagon(size);
113
-
114
103
  case Shape.Octagon:
115
104
  return transformForOctagon(size);
116
-
117
105
  case Shape.Diamond:
118
106
  return transformForDiamond(size);
119
-
120
107
  default:
121
108
  return transformForDefault(size);
122
109
  }
123
110
  }
124
-
125
111
  function transformForPentagon(size) {
126
112
  switch (size) {
127
113
  case Size.ExtraSmall:
128
- return { ...transformForDefault(size),
114
+ return {
115
+ ...transformForDefault(size),
129
116
  ...dimensionAttrsFor(40),
130
117
  y: '55%'
131
118
  };
132
-
133
119
  case Size.Small:
134
- return { ...transformForDefault(size),
120
+ return {
121
+ ...transformForDefault(size),
135
122
  ...dimensionAttrsFor(80),
136
123
  y: '55%'
137
124
  };
138
-
139
125
  case Size.Medium:
140
- return { ...transformForDefault(size),
126
+ return {
127
+ ...transformForDefault(size),
141
128
  ...dimensionAttrsFor(110),
142
129
  y: '55%'
143
130
  };
144
-
145
131
  case Size.Large:
146
- return { ...transformForDefault(size),
132
+ return {
133
+ ...transformForDefault(size),
147
134
  ...dimensionAttrsFor(140),
148
135
  y: '55%'
149
136
  };
150
137
  }
151
138
  }
152
-
153
139
  function transformForTriangle(size) {
154
140
  switch (size) {
155
141
  case Size.ExtraSmall:
156
- return { ...transformForDefault(size),
142
+ return {
143
+ ...transformForDefault(size),
157
144
  ...dimensionAttrsFor(24),
158
145
  y: '65%'
159
146
  };
160
-
161
147
  case Size.Small:
162
- return { ...transformForDefault(size),
148
+ return {
149
+ ...transformForDefault(size),
163
150
  ...dimensionAttrsFor(50),
164
151
  y: '65%'
165
152
  };
166
-
167
153
  case Size.Medium:
168
- return { ...transformForDefault(size),
154
+ return {
155
+ ...transformForDefault(size),
169
156
  ...dimensionAttrsFor(80),
170
157
  y: '65%'
171
158
  };
172
-
173
159
  case Size.Large:
174
- return { ...transformForDefault(size),
160
+ return {
161
+ ...transformForDefault(size),
175
162
  ...dimensionAttrsFor(112),
176
163
  y: '65%'
177
164
  };
178
165
  }
179
166
  }
180
-
181
167
  function transformForStar(size) {
182
168
  switch (size) {
183
169
  case Size.ExtraSmall:
184
- return { ...transformForDefault(size),
170
+ return {
171
+ ...transformForDefault(size),
185
172
  ...dimensionAttrsFor(8),
186
173
  y: '55%'
187
174
  };
188
-
189
175
  case Size.Small:
190
- return { ...transformForDefault(size),
176
+ return {
177
+ ...transformForDefault(size),
191
178
  ...dimensionAttrsFor(24),
192
179
  y: '55%'
193
180
  };
194
-
195
181
  case Size.Medium:
196
- return { ...transformForDefault(size),
182
+ return {
183
+ ...transformForDefault(size),
197
184
  ...dimensionAttrsFor(44),
198
185
  y: '55%'
199
186
  };
200
-
201
187
  case Size.Large:
202
- return { ...transformForDefault(size),
188
+ return {
189
+ ...transformForDefault(size),
203
190
  ...dimensionAttrsFor(72),
204
191
  y: '55%'
205
192
  };
206
193
  }
207
194
  }
208
-
209
195
  function transformForSquare(size) {
210
196
  switch (size) {
211
197
  case Size.ExtraSmall:
212
- return { ...transformForDefault(size),
198
+ return {
199
+ ...transformForDefault(size),
213
200
  ...dimensionAttrsFor(60)
214
201
  };
215
-
216
202
  case Size.Small:
217
- return { ...transformForDefault(size),
203
+ return {
204
+ ...transformForDefault(size),
218
205
  ...dimensionAttrsFor(108)
219
206
  };
220
-
221
207
  case Size.Medium:
222
- return { ...transformForDefault(size),
208
+ return {
209
+ ...transformForDefault(size),
223
210
  ...dimensionAttrsFor(142)
224
211
  };
225
-
226
212
  case Size.Large:
227
- return { ...transformForDefault(size),
213
+ return {
214
+ ...transformForDefault(size),
228
215
  ...dimensionAttrsFor(200)
229
216
  };
230
217
  }
231
218
  }
232
-
233
219
  function transformForCircle(size) {
234
220
  switch (size) {
235
221
  case Size.ExtraSmall:
236
- return { ...transformForDefault(size),
222
+ return {
223
+ ...transformForDefault(size),
237
224
  ...dimensionAttrsFor(54)
238
225
  };
239
-
240
226
  case Size.Small:
241
- return { ...transformForDefault(size),
227
+ return {
228
+ ...transformForDefault(size),
242
229
  ...dimensionAttrsFor(100)
243
230
  };
244
-
245
231
  case Size.Medium:
246
- return { ...transformForDefault(size),
232
+ return {
233
+ ...transformForDefault(size),
247
234
  ...dimensionAttrsFor(132)
248
235
  };
249
-
250
236
  case Size.Large:
251
- return { ...transformForDefault(size),
237
+ return {
238
+ ...transformForDefault(size),
252
239
  ...dimensionAttrsFor(180)
253
240
  };
254
241
  }
255
242
  }
256
-
257
243
  function transformForHexagon(size) {
258
244
  switch (size) {
259
245
  case Size.ExtraSmall:
260
- return { ...transformForDefault(size),
246
+ return {
247
+ ...transformForDefault(size),
261
248
  ...dimensionAttrsFor(28)
262
249
  };
263
-
264
250
  case Size.Small:
265
- return { ...transformForDefault(size),
251
+ return {
252
+ ...transformForDefault(size),
266
253
  ...dimensionAttrsFor(68)
267
254
  };
268
-
269
255
  case Size.Medium:
270
- return { ...transformForDefault(size),
256
+ return {
257
+ ...transformForDefault(size),
271
258
  ...dimensionAttrsFor(100)
272
259
  };
273
-
274
260
  case Size.Large:
275
- return { ...transformForDefault(size),
261
+ return {
262
+ ...transformForDefault(size),
276
263
  ...dimensionAttrsFor(160)
277
264
  };
278
265
  }
279
266
  }
280
-
281
267
  function transformForOctagon(size) {
282
268
  switch (size) {
283
269
  case Size.ExtraSmall:
284
- return { ...transformForDefault(size),
270
+ return {
271
+ ...transformForDefault(size),
285
272
  ...dimensionAttrsFor(36)
286
273
  };
287
-
288
274
  case Size.Small:
289
- return { ...transformForDefault(size),
275
+ return {
276
+ ...transformForDefault(size),
290
277
  ...dimensionAttrsFor(80)
291
278
  };
292
-
293
279
  case Size.Medium:
294
- return { ...transformForDefault(size),
280
+ return {
281
+ ...transformForDefault(size),
295
282
  ...dimensionAttrsFor(110)
296
283
  };
297
-
298
284
  case Size.Large:
299
- return { ...transformForDefault(size),
285
+ return {
286
+ ...transformForDefault(size),
300
287
  ...dimensionAttrsFor(180)
301
288
  };
302
289
  }
303
290
  }
304
-
305
291
  function transformForDiamond(size) {
306
292
  switch (size) {
307
293
  case Size.ExtraSmall:
308
- return { ...transformForDefault(size),
294
+ return {
295
+ ...transformForDefault(size),
309
296
  ...dimensionAttrsFor(30)
310
297
  };
311
-
312
298
  case Size.Small:
313
- return { ...transformForDefault(size),
299
+ return {
300
+ ...transformForDefault(size),
314
301
  ...dimensionAttrsFor(60)
315
302
  };
316
-
317
303
  case Size.Medium:
318
- return { ...transformForDefault(size),
304
+ return {
305
+ ...transformForDefault(size),
319
306
  ...dimensionAttrsFor(80)
320
307
  };
321
-
322
308
  case Size.Large:
323
- return { ...transformForDefault(size),
309
+ return {
310
+ ...transformForDefault(size),
324
311
  ...dimensionAttrsFor(120)
325
312
  };
326
313
  }
327
314
  }
328
-
329
315
  function transformForDefault(size) {
330
316
  const dimensions = {
331
317
  [Size.ExtraSmall]: 60,
@@ -339,11 +325,9 @@ function transformForDefault(size) {
339
325
  ...dimensionAttrsFor(dimensions[size])
340
326
  };
341
327
  }
342
-
343
328
  function translationFor(width) {
344
329
  return width / 2 * -1;
345
330
  }
346
-
347
331
  function dimensionAttrsFor(width) {
348
332
  return {
349
333
  width,
@@ -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 { BASE_SIZE, DEFAULT_SETTINGS, STROKE_WIDTH } from './constants';
19
20
  import { createSvgElement } from './utils';
20
21
  import { buildMetadata } from './metadata';
@@ -23,46 +24,42 @@ import { buildImage } from './image';
23
24
  import { buildClipPath } from './clipPath';
24
25
  import { buildText, buildTextBackground, getContainerWidth, getContainerHeight } from './text';
25
26
  import base64EncodedFont from './font';
26
- export function buildSvg(settings) {
27
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
28
- settings = { ...DEFAULT_SETTINGS,
27
+ export function buildSvg(settings, options = {}) {
28
+ settings = {
29
+ ...DEFAULT_SETTINGS,
29
30
  ...settings
30
31
  };
31
32
  const mainContainer = buildSvgContainer(settings, options);
32
33
  const shapeWrapper = buildSvgWrapper(settings);
33
-
34
34
  if (!options.isPreview) {
35
35
  const metadata = buildMetadata(settings);
36
36
  mainContainer.appendChild(metadata);
37
37
  }
38
-
39
38
  const fillGroup = buildGroup(settings, {
40
39
  fill: true
41
40
  }); // The shape with the fill color
42
-
43
41
  const borderGroup = buildGroup(settings); // The shape with the outline and image
44
-
45
42
  const clipPath = buildClipPath(settings); // A clip path used to crop the image
46
-
47
43
  const shape = buildShape(settings); // The actual path of the shape being built
48
-
49
44
  const image = buildImage(settings); // The embedded image. Cropped by clipPath
45
+
50
46
  // Don't append an image if none has been selected
51
47
  // Also add image here so it sits beneath the outline,
52
48
  // which is added below to the borderGroup
53
-
54
49
  if (image) {
55
50
  borderGroup.appendChild(image);
56
51
  }
52
+ clipPath.appendChild(shape);
57
53
 
58
- clipPath.appendChild(shape); // These are required to make the group have the right shape
59
-
60
- fillGroup.appendChild(shape.cloneNode(true)); // These are required to make the group have the right shape
54
+ // These are required to make the group have the right shape
55
+ fillGroup.appendChild(shape.cloneNode(true));
61
56
 
57
+ // These are required to make the group have the right shape
62
58
  borderGroup.appendChild(clipPath.cloneNode(true));
63
- borderGroup.appendChild(shape.cloneNode(true)); // Add fill group before the main group so the fill
64
- // sits behind the image and outline
59
+ borderGroup.appendChild(shape.cloneNode(true));
65
60
 
61
+ // Add fill group before the main group so the fill
62
+ // sits behind the image and outline
66
63
  shapeWrapper.appendChild(fillGroup);
67
64
  shapeWrapper.appendChild(borderGroup);
68
65
  mainContainer.appendChild(shapeWrapper);
@@ -102,21 +99,17 @@ export function buildSvgContainer(settings, options) {
102
99
  if (options.isPreview) attributes.style = 'padding: 16px';
103
100
  return createSvgElement('svg', attributes);
104
101
  }
105
- export function buildGroup(_ref) {
106
- let {
107
- color,
108
- outlineColor,
109
- outlineSize
110
- } = _ref;
111
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
102
+ export function buildGroup({
103
+ color,
104
+ outlineColor,
105
+ outlineSize
106
+ }, options = {}) {
112
107
  const g = createSvgElement('g');
113
-
114
108
  if (options.fill) {
115
109
  g.setAttribute('fill', color || 'none');
116
110
  } else if (outlineColor) {
117
111
  g.setAttribute('stroke', outlineColor);
118
112
  g.setAttribute('stroke-width', STROKE_WIDTH[outlineSize]);
119
113
  }
120
-
121
114
  return g;
122
115
  }
@@ -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 { createSvgElement } from './utils';
19
20
  export function buildMetadata(settings) {
20
21
  // Pull off any instance specific 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 { useState, useEffect, useReducer } from 'react';
19
20
  import { svgSettings as svgSettingsReducer, defaultState } from '../reducers/svgSettings';
20
21
  import { ICON_MAKER_ATTRIBUTE, ICON_MAKER_DOWNLOAD_URL_ATTR } from './constants';
@@ -27,58 +28,58 @@ export const statuses = {
27
28
  LOADING: 'loading',
28
29
  IDLE: 'idle'
29
30
  };
30
-
31
31
  const getImageNode = (editor, editing) => {
32
- var _editor$selection;
33
-
34
32
  // If the user is creating an icon rather then editing, no sense trying
35
33
  // to get an existing SVG URL
36
34
  if (!editing) return;
37
- const selectedNode = editor === null || editor === void 0 ? void 0 : (_editor$selection = editor.selection) === null || _editor$selection === void 0 ? void 0 : _editor$selection.getNode(); // No selection made, return
35
+ const selectedNode = editor?.selection?.getNode();
38
36
 
39
- if (!selectedNode) return; // The icon maker image is selected. return it
37
+ // No selection made, return
38
+ if (!selectedNode) return;
40
39
 
41
- if (selectedNode.getAttribute(ICON_MAKER_ATTRIBUTE)) return selectedNode; // The icon maker image element is not selected, but it's possible
40
+ // The icon maker image is selected. return it
41
+ if (selectedNode.getAttribute(ICON_MAKER_ATTRIBUTE)) return selectedNode;
42
+
43
+ // The icon maker image element is not selected, but it's possible
42
44
  // an element wrapping it is. Look for a icon maker image in the
43
45
  // selection's children
46
+ const iconMaker = selectedNode.querySelector(`img[${ICON_MAKER_ATTRIBUTE}="true"]`);
44
47
 
45
- const iconMaker = selectedNode.querySelector(`img[${ICON_MAKER_ATTRIBUTE}="true"]`); // Icon maker still not found in the selection's children. Return
48
+ // Icon maker still not found in the selection's children. Return
49
+ if (!iconMaker) return;
46
50
 
47
- if (!iconMaker) return; // Icon maker found in the selections children. Return it and set the
51
+ // Icon maker found in the selections children. Return it and set the
48
52
  // editor's selection to it as well
49
-
50
53
  editor.selection.select(iconMaker);
51
54
  return iconMaker;
52
55
  };
53
-
54
56
  const buildMetadataUrl = (fileId, canvasOrigin) => {
55
57
  // http://canvas.docker/api/v1/files/2169/icon_metadata
58
+
56
59
  const downloadURL = new URL(`${canvasOrigin}/api/v1/files/${fileId}/icon_metadata`);
57
60
  return downloadURL.toString();
58
61
  };
59
-
60
62
  export function useSvgSettings(editor, editing, canvasOrigin) {
61
63
  const [settings, dispatch] = useReducer(svgSettingsReducer, defaultState);
62
64
  const [status, setStatus] = useState(statuses.IDLE);
63
65
  const imgNode = getImageNode(editor, editing);
64
- const urlFromNode = imgNode === null || imgNode === void 0 ? void 0 : imgNode.getAttribute(ICON_MAKER_DOWNLOAD_URL_ATTR);
65
- const altText = imgNode === null || imgNode === void 0 ? void 0 : imgNode.getAttribute('alt');
66
- const customStyle = imgNode === null || imgNode === void 0 ? void 0 : imgNode.getAttribute('style');
67
- const customWidth = imgNode === null || imgNode === void 0 ? void 0 : imgNode.getAttribute('width');
68
- const customHeight = imgNode === null || imgNode === void 0 ? void 0 : imgNode.getAttribute('height');
66
+ const urlFromNode = imgNode?.getAttribute(ICON_MAKER_DOWNLOAD_URL_ATTR);
67
+ const altText = imgNode?.getAttribute('alt');
68
+ const customStyle = imgNode?.getAttribute('style');
69
+ const customWidth = imgNode?.getAttribute('width');
70
+ const customHeight = imgNode?.getAttribute('height');
69
71
  useEffect(() => {
70
72
  const fetchSvgSettings = async () => {
71
73
  if (!urlFromNode) return;
72
-
73
74
  try {
74
- var _urlFromNode$split$;
75
+ setStatus(statuses.LOADING);
75
76
 
76
- setStatus(statuses.LOADING); // Parse out the file ID from something like
77
+ // Parse out the file ID from something like
77
78
  // /courses/1/files/3/preview?...
79
+ const fileId = urlFromNode.split('files/')[1]?.split('/')[0];
80
+ const downloadUrl = buildMetadataUrl(fileId, canvasOrigin);
78
81
 
79
- const fileId = (_urlFromNode$split$ = urlFromNode.split('files/')[1]) === null || _urlFromNode$split$ === void 0 ? void 0 : _urlFromNode$split$.split('/')[0];
80
- const downloadUrl = buildMetadataUrl(fileId, canvasOrigin); // Download icon metadata. If no metadata found, return defaults
81
-
82
+ // Download icon metadata. If no metadata found, return defaults
82
83
  const response = await fetch(downloadUrl);
83
84
  const metadata = await response.text();
84
85
  if (!metadata) return;
@@ -86,93 +87,82 @@ export function useSvgSettings(editor, editing, canvasOrigin) {
86
87
  const fileName = metadataJson.name.replace(/\.[^\.]+$/, '');
87
88
  metadataJson.name = fileName;
88
89
  metadataJson.originalName = fileName;
89
-
90
90
  if (altText === '') {
91
91
  metadataJson.isDecorative = true;
92
92
  } else if (altText) {
93
93
  metadataJson.alt = altText;
94
- } // Include external details on metadata
95
-
94
+ }
96
95
 
96
+ // Include external details on metadata
97
97
  if (customWidth && customHeight) {
98
98
  metadataJson.externalWidth = customWidth;
99
99
  metadataJson.externalHeight = customHeight;
100
100
  }
101
-
102
101
  if (customStyle) {
103
102
  metadataJson.externalStyle = customStyle;
104
103
  }
105
-
106
104
  processMetadataForBackwardCompatibility(metadataJson);
107
105
  const {
108
106
  imageSettings
109
107
  } = metadataJson;
110
-
111
- if (imageSettings !== null && imageSettings !== void 0 && imageSettings.cropperSettings) {
108
+ if (imageSettings?.cropperSettings) {
112
109
  const generatedSvg = await createCroppedImageSvg(imageSettings.cropperSettings, imageSettings.image);
113
110
  metadataJson.embedImage = await convertFileToBase64(new Blob([generatedSvg.outerHTML], {
114
111
  type: 'image/svg+xml'
115
112
  }));
116
113
  } else {
117
- metadataJson.embedImage = (imageSettings === null || imageSettings === void 0 ? void 0 : imageSettings.image) || defaultState.embedImage;
118
- } // settings found, return parsed results
119
-
114
+ metadataJson.embedImage = imageSettings?.image || defaultState.embedImage;
115
+ }
120
116
 
117
+ // settings found, return parsed results
121
118
  dispatch(metadataJson);
122
119
  setStatus(statuses.IDLE);
123
120
  } catch (e) {
124
121
  setStatus(statuses.ERROR);
125
122
  }
126
- }; // If we are editing rather than creating, fetch existing settings
127
-
123
+ };
128
124
 
125
+ // If we are editing rather than creating, fetch existing settings
129
126
  if (editing) fetchSvgSettings();
130
127
  }, [editor, editing, urlFromNode, canvasOrigin, altText, customWidth, customHeight, customStyle]);
131
128
  return [settings, status, dispatch];
132
129
  }
133
-
134
130
  function processMetadataForBackwardCompatibility(metadataJson) {
135
- var _metadataJson$imageSe, _metadataJson$imageSe2, _metadataJson$imageSe3, _metadataJson$imageSe4, _metadataJson$imageSe5, _metadataJson$imageSe6, _metadataJson$imageSe7, _metadataJson$imageSe8;
136
-
137
- const icon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe = metadataJson.imageSettings) === null || _metadataJson$imageSe === void 0 ? void 0 : _metadataJson$imageSe.icon;
138
- const mode = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe2 = metadataJson.imageSettings) === null || _metadataJson$imageSe2 === void 0 ? void 0 : _metadataJson$imageSe2.mode;
139
-
131
+ const icon = metadataJson?.imageSettings?.icon;
132
+ const mode = metadataJson?.imageSettings?.mode;
140
133
  if (mode === modes.singleColorImages.type && typeof icon === 'object') {
141
134
  const foundIconId = iconsLabels[icon.label];
142
-
143
135
  if (foundIconId) {
144
136
  metadataJson.imageSettings.icon = foundIconId;
145
137
  } else {
146
138
  metadataJson.imageSettings = null;
147
139
  }
148
- } // On old icons we stored the original image inside cropper settings
149
- // If that's the case we are copying it to the correct place
150
-
151
-
152
- const cropperSettingsImage = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe3 = metadataJson.imageSettings) === null || _metadataJson$imageSe3 === void 0 ? void 0 : (_metadataJson$imageSe4 = _metadataJson$imageSe3.cropperSettings) === null || _metadataJson$imageSe4 === void 0 ? void 0 : _metadataJson$imageSe4.image;
153
- const imageSettingsImage = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe5 = metadataJson.imageSettings) === null || _metadataJson$imageSe5 === void 0 ? void 0 : _metadataJson$imageSe5.image;
154
- const encodedImage = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.encodedImage;
140
+ }
155
141
 
142
+ // On old icons we stored the original image inside cropper settings
143
+ // If that's the case we are copying it to the correct place
144
+ const cropperSettingsImage = metadataJson?.imageSettings?.cropperSettings?.image;
145
+ const imageSettingsImage = metadataJson?.imageSettings?.image;
146
+ const encodedImage = metadataJson?.encodedImage;
156
147
  if (imageSettingsImage && cropperSettingsImage && imageSettingsImage !== cropperSettingsImage) {
157
148
  metadataJson.imageSettings.image = cropperSettingsImage || imageSettingsImage || encodedImage || '';
158
149
  delete metadataJson.imageSettings.cropperSettings.image;
159
- } // Removes old and unused encoded image fields from metadata
160
-
150
+ }
161
151
 
152
+ // Removes old and unused encoded image fields from metadata
162
153
  delete metadataJson.encodedImage;
163
154
  delete metadataJson.encodedImageType;
164
- delete metadataJson.encodedImageName; // Cleans image settings if there is no image or icon
165
-
166
- const imageSettingsIcon = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe6 = metadataJson.imageSettings) === null || _metadataJson$imageSe6 === void 0 ? void 0 : _metadataJson$imageSe6.icon;
155
+ delete metadataJson.encodedImageName;
167
156
 
157
+ // Cleans image settings if there is no image or icon
158
+ const imageSettingsIcon = metadataJson?.imageSettings?.icon;
168
159
  if (!imageSettingsImage && !imageSettingsIcon) {
169
160
  metadataJson.imageSettings = null;
170
- } // Replaces cropper settings' shape using icon's shape
171
-
172
-
173
- const cropperSettingsShape = metadataJson === null || metadataJson === void 0 ? void 0 : (_metadataJson$imageSe7 = metadataJson.imageSettings) === null || _metadataJson$imageSe7 === void 0 ? void 0 : (_metadataJson$imageSe8 = _metadataJson$imageSe7.cropperSettings) === null || _metadataJson$imageSe8 === void 0 ? void 0 : _metadataJson$imageSe8.shape;
174
- const shape = metadataJson === null || metadataJson === void 0 ? void 0 : metadataJson.shape;
161
+ }
175
162
 
163
+ // Replaces cropper settings' shape using icon's shape
164
+ const cropperSettingsShape = metadataJson?.imageSettings?.cropperSettings?.shape;
165
+ const shape = metadataJson?.shape;
176
166
  if (shape && cropperSettingsShape && shape !== cropperSettingsShape) {
177
167
  metadataJson.imageSettings.cropperSettings.shape = shape;
178
168
  }