@instructure/canvas-rce 6.0.0 → 7.2.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 (120) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/__tests__/common/indicate.test.js +5 -6
  3. package/es/bridge/Bridge.js +2 -4
  4. package/es/canvasFileBrowser/FileBrowser.js +2 -4
  5. package/es/common/browser.js +2 -2
  6. package/es/common/fileUrl.js +13 -3
  7. package/es/defaultTinymceConfig.d.ts +1 -1
  8. package/es/defaultTinymceConfig.js +149 -114
  9. package/es/enhance-user-content/enhance_user_content.js +7 -1
  10. package/es/enhance-user-content/instructure_helper.js +4 -0
  11. package/es/enhance-user-content/youtube_overlay.d.ts +1 -0
  12. package/es/enhance-user-content/youtube_overlay.js +87 -0
  13. package/es/format-message.d.js +1 -0
  14. package/es/format-message.js +5 -0
  15. package/es/index.d.ts +1 -1
  16. package/es/rce/RCE.d.ts +0 -1
  17. package/es/rce/RCE.js +5 -10
  18. package/es/rce/RCEGlobals.d.ts +0 -2
  19. package/es/rce/RCEGlobals.js +0 -1
  20. package/es/rce/RCEVariants.d.ts +8 -3
  21. package/es/rce/RCEVariants.js +36 -10
  22. package/es/rce/RCEWrapper.d.ts +3 -5
  23. package/es/rce/RCEWrapper.js +68 -83
  24. package/es/rce/RCEWrapperProps.d.ts +1 -1
  25. package/es/rce/ShowOnFocusButton/index.js +4 -2
  26. package/es/rce/StatusBar.js +61 -15
  27. package/es/rce/alertHandler.js +6 -7
  28. package/es/rce/plugins/instructure-ui-icons/plugin.js +2 -2
  29. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.d.ts +1 -1
  30. package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +6 -10
  31. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.d.ts +5 -15
  32. package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +4 -10
  33. package/es/rce/plugins/instructure_image/ImageEmbedOptions.d.ts +7 -0
  34. package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +49 -9
  35. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.d.ts +1 -8
  36. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +13 -33
  37. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.d.ts +1 -2
  38. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +2 -1
  39. package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -2
  40. package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +2 -4
  41. package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +10 -7
  42. package/es/rce/plugins/shared/ContentSelection.js +4 -7
  43. package/es/rce/plugins/shared/DimensionsInput/index.js +3 -3
  44. package/es/rce/plugins/shared/FixedContentTray.d.ts +7 -23
  45. package/es/rce/plugins/shared/FixedContentTray.js +7 -16
  46. package/es/rce/plugins/shared/ImageCropper/constants.d.ts +1 -1
  47. package/es/rce/plugins/shared/ImageCropper/constants.js +1 -1
  48. package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +1 -1
  49. package/es/rce/plugins/shared/PreviewIcon.js +1 -1
  50. package/es/rce/plugins/shared/ai_tools/aiicons.d.ts +3 -3
  51. package/es/rce/plugins/shared/ai_tools/aiicons.js +11 -11
  52. package/es/rce/plugins/shared/fileTypeUtils.js +1 -1
  53. package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +7 -1
  54. package/es/rce/plugins/tinymce-a11y-checker/plugin.js +50 -52
  55. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.d.ts +1 -1
  56. package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +1 -1
  57. package/es/rce/style.js +47 -45
  58. package/es/rcs/api.d.ts +4 -1
  59. package/es/rcs/api.js +9 -13
  60. package/es/translations/locales/ar.js +29 -5
  61. package/es/translations/locales/ca.js +32 -8
  62. package/es/translations/locales/cy.js +29 -5
  63. package/es/translations/locales/da-x-k12.js +29 -5
  64. package/es/translations/locales/da.js +29 -5
  65. package/es/translations/locales/de.js +29 -5
  66. package/es/translations/locales/en-AU-x-unimelb.js +29 -5
  67. package/es/translations/locales/en-GB-x-ukhe.js +29 -5
  68. package/es/translations/locales/en.js +20 -5
  69. package/es/translations/locales/en_AU.js +29 -5
  70. package/es/translations/locales/en_CA.js +29 -5
  71. package/es/translations/locales/en_CY.js +29 -5
  72. package/es/translations/locales/en_GB.js +29 -5
  73. package/es/translations/locales/es.js +29 -5
  74. package/es/translations/locales/es_ES.js +29 -5
  75. package/es/translations/locales/fa_IR.js +0 -3
  76. package/es/translations/locales/fi.js +29 -5
  77. package/es/translations/locales/fr.js +29 -5
  78. package/es/translations/locales/fr_CA.js +30 -6
  79. package/es/translations/locales/ga.js +46 -22
  80. package/es/translations/locales/hi.js +29 -5
  81. package/es/translations/locales/ht.js +29 -5
  82. package/es/translations/locales/hu.js +0 -6
  83. package/es/translations/locales/id.js +29 -5
  84. package/es/translations/locales/is.js +23 -5
  85. package/es/translations/locales/it.js +29 -5
  86. package/es/translations/locales/ja.js +29 -5
  87. package/es/translations/locales/mi.js +29 -5
  88. package/es/translations/locales/ms.js +29 -5
  89. package/es/translations/locales/nb-x-k12.js +29 -5
  90. package/es/translations/locales/nb.js +29 -5
  91. package/es/translations/locales/nl.js +29 -5
  92. package/es/translations/locales/nn.js +0 -6
  93. package/es/translations/locales/pl.js +29 -5
  94. package/es/translations/locales/pt.js +29 -5
  95. package/es/translations/locales/pt_BR.js +29 -5
  96. package/es/translations/locales/ru.js +29 -5
  97. package/es/translations/locales/sl.js +29 -5
  98. package/es/translations/locales/sv-x-k12.js +29 -5
  99. package/es/translations/locales/sv.js +29 -5
  100. package/es/translations/locales/th.js +29 -5
  101. package/es/translations/locales/uk_UA.js +0 -6
  102. package/es/translations/locales/vi.js +29 -5
  103. package/es/translations/locales/zh-Hans.js +29 -5
  104. package/es/translations/locales/zh-Hant.js +29 -5
  105. package/es/translations/locales/zh.js +29 -5
  106. package/es/translations/locales/zh_HK.js +29 -5
  107. package/es/util/contextHelper.d.ts +7 -0
  108. package/{testcafe/axe.test.js → es/util/contextHelper.js} +10 -21
  109. package/es/util/loadingPlaceholder.js +11 -11
  110. package/eslint.config.js +3 -25
  111. package/jest/jest-setup.js +27 -2
  112. package/jest.config.js +5 -1
  113. package/package.json +62 -85
  114. package/testcafe/RCEWrapper.test.js +0 -319
  115. package/testcafe/StatusBar.test.js +0 -108
  116. package/testcafe/enhanceUserContent.html +0 -58
  117. package/testcafe/enhanceUserContent.test.js +0 -44
  118. package/testcafe/entry.jsx +0 -77
  119. package/testcafe/testcafe.html +0 -14
  120. package/webpack.testcafe.config.js +0 -61
@@ -80,10 +80,10 @@ const dispatchImage = async (dispatch, onChange, dataUrl, dataBlob) => {
80
80
  });
81
81
  };
82
82
  const Course = ({
83
- dispatch,
84
- onChange,
85
- onLoading,
86
- onLoaded,
83
+ dispatch = () => {},
84
+ onChange = () => {},
85
+ onLoading = () => {},
86
+ onLoaded = () => {},
87
87
  canvasOrigin
88
88
  }) => {
89
89
  const storeProps = useStoreProps();
@@ -161,10 +161,4 @@ Course.propTypes = {
161
161
  onLoaded: PropTypes.func,
162
162
  canvasOrigin: PropTypes.string.isRequired
163
163
  };
164
- Course.defaultProps = {
165
- dispatch: () => {},
166
- onChange: () => {},
167
- onLoading: () => {},
168
- onLoaded: () => {}
169
- };
170
164
  export default Course;
@@ -35,6 +35,10 @@ export function scaleToSize(imageSize: any, naturalWidth: any, naturalHeight: an
35
35
  width: any;
36
36
  height: any;
37
37
  };
38
+ export function scaleVideoSize(videoSize: any, naturalWidth: any, naturalHeight: any): {
39
+ width: any;
40
+ height: any;
41
+ };
38
42
  export function labelForImageSize(imageSize: any): string;
39
43
  export const MIN_HEIGHT: 10;
40
44
  export const MIN_WIDTH: 10;
@@ -47,3 +51,6 @@ export const EXTRA_LARGE: "extra-large";
47
51
  export const CUSTOM: "custom";
48
52
  export const imageSizes: string[];
49
53
  export const videoSizes: string[];
54
+ export const studioPlayerSizes: string[];
55
+ export const MIN_WIDTH_STUDIO_PLAYER: number;
56
+ export const MIN_HEIGHT_STUDIO_PLAYER: number;
@@ -18,7 +18,7 @@
18
18
 
19
19
  import formatMessage from '../../../format-message';
20
20
  import { scaleForHeight, scaleForWidth } from '../shared/DimensionUtils';
21
- import RCEGlobals from '../../RCEGlobals';
21
+ import RCEGlobals from '../../../rce/RCEGlobals';
22
22
  export const MIN_HEIGHT = 10;
23
23
  export const MIN_WIDTH = 10;
24
24
  export const MIN_WIDTH_VIDEO = 320;
@@ -30,12 +30,29 @@ export const EXTRA_LARGE = 'extra-large';
30
30
  export const CUSTOM = 'custom';
31
31
  export const imageSizes = [SMALL, MEDIUM, LARGE, EXTRA_LARGE, CUSTOM];
32
32
  export const videoSizes = [MEDIUM, LARGE, EXTRA_LARGE, CUSTOM];
33
+ export const studioPlayerSizes = [SMALL, MEDIUM, LARGE, CUSTOM];
33
34
  const sizeByMaximumDimension = {
34
35
  200: SMALL,
35
36
  320: MEDIUM,
36
37
  400: LARGE,
37
38
  640: EXTRA_LARGE
38
39
  };
40
+ const studioPlayerDimensions = {
41
+ [SMALL]: {
42
+ width: 320,
43
+ height: 254
44
+ },
45
+ [MEDIUM]: {
46
+ width: 480,
47
+ height: 300
48
+ },
49
+ [LARGE]: {
50
+ width: 700,
51
+ height: 441
52
+ }
53
+ };
54
+ export const MIN_WIDTH_STUDIO_PLAYER = studioPlayerDimensions[SMALL].width;
55
+ export const MIN_HEIGHT_STUDIO_PLAYER = studioPlayerDimensions[SMALL].height;
39
56
  function parsedOrNull($element, attribute) {
40
57
  // when the image is first inserted into the rce, it's size
41
58
  // is constrained by a style attribute with max-width, max-height.
@@ -50,6 +67,9 @@ function imageSizeFromKnownOptions(imageOptions) {
50
67
  const largestDimension = Math.max(intendedWidth, intendedHeight);
51
68
  return sizeByMaximumDimension[largestDimension] || CUSTOM;
52
69
  }
70
+ function hasHeightAndWidth($element) {
71
+ return $element.hasAttribute('width') && $element.hasAttribute('height');
72
+ }
53
73
  function getPercentageUnitsFromAttributes($element) {
54
74
  const getAttribute = attribute => $element.hasAttribute(attribute) ? $element.getAttribute(attribute) : $element[attribute];
55
75
  const widthValue = getAttribute('width');
@@ -66,7 +86,8 @@ export function fromImageEmbed($element) {
66
86
  naturalWidth: $element.naturalWidth,
67
87
  naturalHeight: $element.naturalHeight,
68
88
  appliedPercentage: percentageUnits || 100,
69
- usePercentageUnits: !!percentageUnits,
89
+ // by default use percentage units
90
+ usePercentageUnits: hasHeightAndWidth($element) ? !!percentageUnits : true,
70
91
  altText: altText || '',
71
92
  isDecorativeImage: altText !== null && altText.replace(/\s/g, '') === '',
72
93
  url: $element.src
@@ -116,13 +137,16 @@ export function fromVideoEmbed($element) {
116
137
  } catch (_ignore) {
117
138
  // bad json?
118
139
  }
119
- videoOptions.videoSize = imageSizeFromKnownOptions(videoOptions);
120
- if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
121
- const source = $videoIframe.getAttribute('src');
122
- const matches = source?.match(/\/media_attachments_iframe\/(\d+)/);
123
- if (matches) {
124
- videoOptions.attachmentId = matches[1];
125
- }
140
+ if (RCEGlobals.getFeatures()?.consolidated_media_player) {
141
+ const width = videoOptions.appliedWidth || videoOptions.naturalWidth;
142
+ videoOptions.videoSize = [SMALL, MEDIUM, LARGE].find(size => width === studioPlayerDimensions[size].width) || CUSTOM;
143
+ } else {
144
+ videoOptions.videoSize = imageSizeFromKnownOptions(videoOptions);
145
+ }
146
+ const source = $videoIframe.getAttribute('src');
147
+ const matches = source?.match(/\/media_attachments_iframe\/(\d+)/);
148
+ if (matches) {
149
+ videoOptions.attachmentId = matches[1];
126
150
  }
127
151
  return videoOptions;
128
152
  }
@@ -154,6 +178,22 @@ export function scaleToSize(imageSize, naturalWidth, naturalHeight) {
154
178
  width: Math.round(naturalWidth * scaleFactor)
155
179
  };
156
180
  }
181
+ export function scaleVideoSize(videoSize, naturalWidth, naturalHeight) {
182
+ if (videoSize === CUSTOM) {
183
+ return {
184
+ width: naturalWidth,
185
+ height: naturalHeight
186
+ };
187
+ }
188
+ const {
189
+ width,
190
+ height
191
+ } = studioPlayerDimensions[videoSize];
192
+ return {
193
+ width,
194
+ height
195
+ };
196
+ }
157
197
  export function labelForImageSize(imageSize) {
158
198
  switch (imageSize) {
159
199
  case SMALL:
@@ -10,29 +10,22 @@ export default class ExternalToolDialog extends React.Component<ExternalToolDial
10
10
  static defaultProps: Partial<ExternalToolDialogProps>;
11
11
  state: ExternalToolDialogState;
12
12
  formRef: React.RefObject<HTMLFormElement>;
13
- beforeInfoAlertRef: React.RefObject<HTMLDivElement>;
14
- afterInfoAlertRef: React.RefObject<HTMLDivElement>;
15
13
  iframeRef: React.RefObject<HTMLIFrameElement>;
16
14
  open(button: RceToolWrapper): void;
17
15
  close(): void;
18
16
  handleBeforeUnload: (ev: Event) => string;
19
17
  private handleExternalContentReady;
20
18
  get resourceSelectionOrigin(): string;
21
- handlePostedMessage: (ev: Pick<MessageEvent, "origin" | "data">) => void;
19
+ handlePostedMessage: (ev: Pick<MessageEvent, "origin" | "data" | "source">) => void;
22
20
  handleClose: () => void;
23
21
  handleOpen: () => void;
24
22
  handleRemove: () => void;
25
- handleInfoAlertFocus: (ev: {
26
- target: Element;
27
- }) => void;
28
- handleInfoAlertBlur: () => void;
29
23
  calcIFrameHeight: () => string;
30
24
  render(): React.JSX.Element;
31
25
  }
32
26
  interface ExternalToolDialogState {
33
27
  open: boolean;
34
28
  button: RceToolWrapper | null;
35
- infoAlert: Element | null;
36
29
  form: ExternalToolDialogForm;
37
30
  iframeLoaded: boolean;
38
31
  }
@@ -21,7 +21,6 @@ import _pt from "prop-types";
21
21
 
22
22
  import { replaceTags } from '../../helpers/tags';
23
23
  import React, { createRef } from 'react';
24
- import { Alert } from '@instructure/ui-alerts';
25
24
  import { Spinner } from '@instructure/ui-spinner';
26
25
  import { Flex } from '@instructure/ui-flex';
27
26
  import ToolLaunchIframe from '../util/ToolLaunchIframe';
@@ -39,13 +38,10 @@ export default class ExternalToolDialog extends React.Component {
39
38
  this.state = {
40
39
  open: false,
41
40
  button: null,
42
- infoAlert: null,
43
41
  form: EMPTY_FORM,
44
42
  iframeLoaded: false
45
43
  };
46
44
  this.formRef = /*#__PURE__*/createRef();
47
- this.beforeInfoAlertRef = /*#__PURE__*/createRef();
48
- this.afterInfoAlertRef = /*#__PURE__*/createRef();
49
45
  this.iframeRef = /*#__PURE__*/createRef();
50
46
  this.handleBeforeUnload = ev => ev.returnValue = formatMessage('Changes you made may not be saved.');
51
47
  this.handleExternalContentReady = data => {
@@ -78,6 +74,7 @@ export default class ExternalToolDialog extends React.Component {
78
74
  this.close();
79
75
  };
80
76
  this.handlePostedMessage = ev => {
77
+ // messages from Canvas in the tool launch frame
81
78
  if (ev.origin === this.resourceSelectionOrigin) {
82
79
  const data = ev.data;
83
80
  if (data?.subject === 'LtiDeepLinkingResponse') {
@@ -89,6 +86,16 @@ export default class ExternalToolDialog extends React.Component {
89
86
  this.handleExternalContentReady(ev.data);
90
87
  }
91
88
  }
89
+ // messages from the tool
90
+ const data = ev.data;
91
+ if (data?.subject === 'lti.close') {
92
+ // Note we currently don't support this message from the forwarder
93
+ // iframe as it's not required by 1EdTech spec and requires more
94
+ // complicated source checking here (see INTEROP-9213)
95
+ if (ev.source === this.iframeRef?.current?.contentWindow) {
96
+ this.handleClose();
97
+ }
98
+ }
92
99
  };
93
100
  this.handleClose = () => {
94
101
  const msg = formatMessage('Are you sure you want to cancel? Changes you made may not be saved.');
@@ -108,12 +115,6 @@ export default class ExternalToolDialog extends React.Component {
108
115
  // force tinyMCE to redraw sticky toolbar otherwise it never goes away
109
116
  window.dispatchEvent(new Event('resize'));
110
117
  };
111
- this.handleInfoAlertFocus = ev => this.setState({
112
- infoAlert: ev.target
113
- });
114
- this.handleInfoAlertBlur = () => this.setState({
115
- infoAlert: null
116
- });
117
118
  this.calcIFrameHeight = () => {
118
119
  if (this.state.button?.use_tray) {
119
120
  return '100%';
@@ -239,16 +240,7 @@ export default class ExternalToolDialog extends React.Component {
239
240
  onClose: this.handleRemove,
240
241
  onCloseButton: this.handleClose,
241
242
  name: (_state$button$title = state.button?.title) !== null && _state$button$title !== void 0 ? _state$button$title : ' '
242
- }, /*#__PURE__*/React.createElement("div", {
243
- ref: this.beforeInfoAlertRef,
244
- tabIndex: 0 // eslint-disable-line jsx-a11y/no-noninteractive-tabindex
245
- ,
246
- onFocus: this.handleInfoAlertFocus,
247
- onBlur: this.handleInfoAlertBlur,
248
- className: this.beforeInfoAlertRef.current != null && state.infoAlert === this.beforeInfoAlertRef.current ? '' : 'screenreader-only'
249
- }, /*#__PURE__*/React.createElement(Alert, {
250
- margin: "small"
251
- }, formatMessage('The following content is partner provided'))), !state.iframeLoaded && /*#__PURE__*/React.createElement(Flex, {
243
+ }, !state.iframeLoaded && /*#__PURE__*/React.createElement(Flex, {
252
244
  alignItems: "center",
253
245
  justifyItems: "center"
254
246
  }, /*#__PURE__*/React.createElement(Flex.Item, null, /*#__PURE__*/React.createElement(Spinner, {
@@ -272,19 +264,7 @@ export default class ExternalToolDialog extends React.Component {
272
264
  onLoad: () => this.setState({
273
265
  iframeLoaded: true
274
266
  })
275
- }), /*#__PURE__*/React.createElement("div", {
276
- ref: this.afterInfoAlertRef,
277
- tabIndex: 0 // eslint-disable-line jsx-a11y/no-noninteractive-tabindex
278
- ,
279
- onFocus: this.handleInfoAlertFocus,
280
- onBlur: this.handleInfoAlertBlur,
281
- style: this.afterInfoAlertRef.current != null && state.infoAlert === this.afterInfoAlertRef.current ? {} : {
282
- bottom: '0'
283
- },
284
- className: this.afterInfoAlertRef.current != null && state.infoAlert === this.afterInfoAlertRef.current ? '' : 'screenreader-only'
285
- }, /*#__PURE__*/React.createElement(Alert, {
286
- margin: "small"
287
- }, formatMessage('The preceding content is partner provided')))));
267
+ })));
288
268
  }
289
269
  }
290
270
  ExternalToolDialog.propTypes = {
@@ -1,8 +1,7 @@
1
1
  import React from 'react';
2
- import { ReactNodeLike } from 'prop-types';
3
2
  import { ModalProps } from '@instructure/ui-modal/types';
4
3
  export declare function ExternalToolDialogModal(props: Pick<ModalProps, 'label' | 'open' | 'onOpen' | 'onClose' | 'mountNode'> & {
5
4
  onCloseButton: () => void;
6
5
  name: string;
7
- children: ReactNodeLike;
6
+ children: React.ReactNode;
8
7
  }): React.JSX.Element;
@@ -30,7 +30,8 @@ export function ExternalToolDialogModal(props) {
30
30
  open: props.open,
31
31
  onOpen: props.onOpen,
32
32
  onClose: props.onClose,
33
- mountNode: props.mountNode
33
+ mountNode: props.mountNode,
34
+ shouldCloseOnDocumentClick: false
34
35
  }, /*#__PURE__*/React.createElement(Modal.Header, null, /*#__PURE__*/React.createElement(Heading, null, props.name), /*#__PURE__*/React.createElement(CloseButton, {
35
36
  placement: "end",
36
37
  offset: "medium",
@@ -21,7 +21,6 @@ import ReactDOM from 'react-dom';
21
21
  import bridge from '../../../../bridge';
22
22
  import { asAudioElement, findMediaPlayerIframe } from '../../shared/ContentSelection';
23
23
  import AudioOptionsTray from '.';
24
- import RCEGlobals from '../../../RCEGlobals';
25
24
  export const CONTAINER_ID = 'instructure-audio-options-tray-container';
26
25
  export default class TrayController {
27
26
  constructor() {
@@ -74,7 +73,7 @@ export default class TrayController {
74
73
  return elem.parentNode.removeChild(elem);
75
74
  }
76
75
  _applyAudioOptions(audioOptions) {
77
- const hasAttachmentId = RCEGlobals.getFeatures().media_links_use_attachment_id && audioOptions.attachment_id;
76
+ const hasAttachmentId = audioOptions.attachment_id;
78
77
  if (!hasAttachmentId && (!audioOptions.media_object_id || audioOptions.media_object_id === 'undefined')) {
79
78
  return;
80
79
  }
@@ -118,11 +118,9 @@ export default class TrayController {
118
118
  const data = {
119
119
  media_object_id: videoOptions.media_object_id,
120
120
  title: videoOptions.titleText,
121
- subtitles: videoOptions.subtitles
121
+ subtitles: videoOptions.subtitles,
122
+ attachment_id: videoOptions.attachment_id
122
123
  };
123
- if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
124
- data.attachment_id = videoOptions.attachment_id;
125
- }
126
124
 
127
125
  // If the video just edited came from a file uploaded to canvas
128
126
  // and not notorious, we probably don't have a media_object_id.
@@ -32,7 +32,7 @@ import { Tooltip } from '@instructure/ui-tooltip';
32
32
  import { Tray } from '@instructure/ui-tray';
33
33
  import { StoreProvider } from '../../shared/StoreContext';
34
34
  import { ClosedCaptionPanel } from '@instructure/canvas-media';
35
- import { CUSTOM, MIN_WIDTH_VIDEO, MIN_PERCENTAGE, videoSizes, labelForImageSize, scaleToSize } from '../../instructure_image/ImageEmbedOptions';
35
+ import { CUSTOM, MIN_WIDTH_VIDEO, MIN_PERCENTAGE, videoSizes, studioPlayerSizes, labelForImageSize, scaleVideoSize, scaleToSize, MIN_WIDTH_STUDIO_PLAYER, MIN_HEIGHT_STUDIO_PLAYER } from '../../instructure_image/ImageEmbedOptions';
36
36
  import Bridge from '../../../../bridge';
37
37
  import RceApiSource from '../../../../rcs/api';
38
38
  import formatMessage from '../../../../format-message';
@@ -40,6 +40,7 @@ import DimensionsInput, { useDimensionsState } from '../../shared/DimensionsInpu
40
40
  import { getTrayHeight } from '../../shared/trayUtils';
41
41
  import { instuiPopupMountNodeFn } from '../../../../util/fullscreenHelpers';
42
42
  import { parsedStudioOptionsPropType } from '../../shared/StudioLtiSupportUtils';
43
+ import RCEGlobals from '../../../../rce/RCEGlobals';
43
44
  const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
44
45
  export default function VideoOptionsTray({
45
46
  videoOptions,
@@ -54,6 +55,7 @@ export default function VideoOptionsTray({
54
55
  studioOptions = null,
55
56
  forBlockEditorUse = false
56
57
  }) {
58
+ const isConsolidatedMediaPlayer = RCEGlobals.getFeatures()?.consolidated_media_player;
57
59
  const {
58
60
  naturalHeight,
59
61
  naturalWidth
@@ -66,8 +68,8 @@ export default function VideoOptionsTray({
66
68
  const [videoHeight, setVideoHeight] = useState(currentHeight);
67
69
  const [videoWidth, setVideoWidth] = useState(currentWidth);
68
70
  const [subtitles, setSubtitles] = useState(videoOptions.tracks || []);
69
- const [minWidth] = useState(MIN_WIDTH_VIDEO);
70
- const [minHeight] = useState(Math.round(videoHeight / videoWidth * MIN_WIDTH_VIDEO));
71
+ const [minWidth] = useState(isConsolidatedMediaPlayer ? MIN_WIDTH_STUDIO_PLAYER : MIN_WIDTH_VIDEO);
72
+ const [minHeight] = useState(isConsolidatedMediaPlayer ? MIN_HEIGHT_STUDIO_PLAYER : Math.round(videoHeight / videoWidth * MIN_WIDTH_VIDEO));
71
73
  const [minPercentage] = useState(MIN_PERCENTAGE);
72
74
  const [editLocked, setEditLocked] = useState(null);
73
75
  const [loading, setLoading] = useState(true);
@@ -80,6 +82,7 @@ export default function VideoOptionsTray({
80
82
  minPercentage
81
83
  });
82
84
  const api = new RceApiSource(trayProps);
85
+ const videoSizeOptions = isConsolidatedMediaPlayer ? studioPlayerSizes : videoSizes;
83
86
  useEffect(() => {
84
87
  if (videoOptions.attachmentId) {
85
88
  api.getFile(videoOptions.attachmentId, {
@@ -87,7 +90,7 @@ export default function VideoOptionsTray({
87
90
  }).then(response => {
88
91
  setEditLocked(response?.restricted_by_master_course && response?.is_master_course_child_content);
89
92
  setLoading(false);
90
- }).catch(error => {
93
+ }).catch(_error => {
91
94
  setLoading(false);
92
95
  });
93
96
  }
@@ -102,7 +105,7 @@ export default function VideoOptionsTray({
102
105
  event.target.focus();
103
106
  setDisplayAs(event.target.value);
104
107
  }
105
- function handleVideoSizeChange(event, selectedOption) {
108
+ function handleVideoSizeChange(_event, selectedOption) {
106
109
  setVideoSize(selectedOption.value);
107
110
  if (selectedOption.value === CUSTOM) {
108
111
  setVideoHeight(currentHeight);
@@ -111,7 +114,7 @@ export default function VideoOptionsTray({
111
114
  const {
112
115
  height,
113
116
  width
114
- } = scaleToSize(selectedOption.value, naturalWidth, naturalHeight);
117
+ } = isConsolidatedMediaPlayer ? scaleVideoSize(selectedOption.value, naturalWidth, naturalHeight) : scaleToSize(selectedOption.value, naturalWidth, naturalHeight);
115
118
  setVideoHeight(height);
116
119
  setVideoWidth(width);
117
120
  }
@@ -267,7 +270,7 @@ export default function VideoOptionsTray({
267
270
  assistiveText: formatMessage('Use arrow keys to navigate options.'),
268
271
  onChange: handleVideoSizeChange,
269
272
  value: videoSize
270
- }, videoSizes.map(size => /*#__PURE__*/React.createElement(SimpleSelect.Option, {
273
+ }, videoSizeOptions.map(size => /*#__PURE__*/React.createElement(SimpleSelect.Option, {
271
274
  id: `${id}-size-${size}`,
272
275
  key: size,
273
276
  value: size
@@ -20,7 +20,6 @@ import { fromImageEmbed, fromVideoEmbed } from '../instructure_image/ImageEmbedO
20
20
  import { isOnlyTextSelected } from '../../contentInsertionUtils';
21
21
  import formatMessage from '../../../format-message';
22
22
  import { isStudioEmbeddedMedia } from './StudioLtiSupportUtils';
23
- import RCEGlobals from '../../RCEGlobals';
24
23
  import { parseUrlPath } from '../../../util/url-util';
25
24
  const FILE_DOWNLOAD_PATH_REGEX = /^\/(courses\/\d+\/)?files\/\d+\/download$/;
26
25
  export const LINK_TYPE = 'link';
@@ -124,12 +123,10 @@ export function asAudioElement($element) {
124
123
  // eslint-disable-next-line no-empty
125
124
  } catch (e) {}
126
125
  }
127
- if (RCEGlobals.getFeatures().media_links_use_attachment_id) {
128
- const source = $audioIframe.getAttribute('src');
129
- const matches = source?.match(/\/media_attachments_iframe\/(\d+)/);
130
- if (matches) {
131
- audioOptions.attachmentId = matches[1];
132
- }
126
+ const source = $audioIframe.getAttribute('src');
127
+ const matches = source?.match(/\/media_attachments_iframe\/(\d+)/);
128
+ if (matches) {
129
+ audioOptions.attachmentId = matches[1];
133
130
  }
134
131
  return audioOptions;
135
132
  }
@@ -113,11 +113,11 @@ export default function DimensionsInput(props) {
113
113
  onChange: handleDimensionTypeChange,
114
114
  value: dimensionsState.usePercentageUnits ? 'percentage' : 'pixels'
115
115
  }, /*#__PURE__*/React.createElement(RadioInput, {
116
- label: formatMessage('Pixels'),
117
- value: "pixels"
118
- }), /*#__PURE__*/React.createElement(RadioInput, {
119
116
  label: formatMessage('Percentage'),
120
117
  value: "percentage"
118
+ }), /*#__PURE__*/React.createElement(RadioInput, {
119
+ label: formatMessage('Pixels'),
120
+ value: "pixels"
121
121
  }))), /*#__PURE__*/React.createElement(Flex.Item, {
122
122
  padding: "small"
123
123
  }, /*#__PURE__*/React.createElement(FormFieldGroup, {
@@ -1,15 +1,15 @@
1
1
  export function FixedContentTray({ title, isOpen, onDismiss, onUnmount, mountNode, renderHeader, renderBody, renderFooter, bodyAs, shouldJoinBodyAndFooter, shouldCloseOnDocumentClick, }: {
2
- title: any;
3
- isOpen: any;
4
- onDismiss: any;
5
- onUnmount: any;
2
+ title?: null | undefined;
3
+ isOpen?: boolean | undefined;
4
+ onDismiss?: (() => void) | undefined;
5
+ onUnmount?: (() => void) | undefined;
6
6
  mountNode: any;
7
7
  renderHeader: any;
8
8
  renderBody: any;
9
9
  renderFooter: any;
10
- bodyAs: any;
11
- shouldJoinBodyAndFooter: any;
12
- shouldCloseOnDocumentClick: any;
10
+ bodyAs?: string | undefined;
11
+ shouldJoinBodyAndFooter?: boolean | undefined;
12
+ shouldCloseOnDocumentClick?: boolean | undefined;
13
13
  }): React.JSX.Element;
14
14
  export namespace FixedContentTray {
15
15
  namespace propTypes {
@@ -25,22 +25,6 @@ export namespace FixedContentTray {
25
25
  let shouldJoinBodyAndFooter: PropTypes.Requireable<boolean>;
26
26
  let shouldCloseOnDocumentClick: PropTypes.Requireable<boolean>;
27
27
  }
28
- namespace defaultProps {
29
- let title_1: null;
30
- export { title_1 as title };
31
- let isOpen_1: boolean;
32
- export { isOpen_1 as isOpen };
33
- export function onDismiss_1(): void;
34
- export { onDismiss_1 as onDismiss };
35
- export function onUnmount_1(): void;
36
- export { onUnmount_1 as onUnmount };
37
- let bodyAs_1: string;
38
- export { bodyAs_1 as bodyAs };
39
- let shouldJoinBodyAndFooter_1: boolean;
40
- export { shouldJoinBodyAndFooter_1 as shouldJoinBodyAndFooter };
41
- let shouldCloseOnDocumentClick_1: boolean;
42
- export { shouldCloseOnDocumentClick_1 as shouldCloseOnDocumentClick };
43
- }
44
28
  }
45
29
  import React from 'react';
46
30
  import PropTypes from 'prop-types';
@@ -49,17 +49,17 @@ function renderJoinedItem(bodyAs, renderBody, renderFooter) {
49
49
  }, renderFooter()))));
50
50
  }
51
51
  export const FixedContentTray = ({
52
- title,
53
- isOpen,
54
- onDismiss,
55
- onUnmount,
52
+ title = null,
53
+ isOpen = false,
54
+ onDismiss = () => {},
55
+ onUnmount = () => {},
56
56
  mountNode,
57
57
  renderHeader,
58
58
  renderBody,
59
59
  renderFooter,
60
- bodyAs,
61
- shouldJoinBodyAndFooter,
62
- shouldCloseOnDocumentClick
60
+ bodyAs = 'div',
61
+ shouldJoinBodyAndFooter = false,
62
+ shouldCloseOnDocumentClick = true
63
63
  }) => {
64
64
  return /*#__PURE__*/React.createElement(Tray, {
65
65
  "data-mce-component": true,
@@ -105,13 +105,4 @@ FixedContentTray.propTypes = {
105
105
  bodyAs: PropTypes.string,
106
106
  shouldJoinBodyAndFooter: PropTypes.bool,
107
107
  shouldCloseOnDocumentClick: PropTypes.bool
108
- };
109
- FixedContentTray.defaultProps = {
110
- title: null,
111
- isOpen: false,
112
- onDismiss: () => {},
113
- onUnmount: () => {},
114
- bodyAs: 'div',
115
- shouldJoinBodyAndFooter: false,
116
- shouldCloseOnDocumentClick: true
117
108
  };
@@ -1,4 +1,4 @@
1
- export const PREVIEW_BACKGROUND_COLOR: "#394B58";
1
+ export const PREVIEW_BACKGROUND_COLOR: "#334451";
2
2
  export const PREVIEW_WIDTH: 942;
3
3
  export const PREVIEW_HEIGHT: 350;
4
4
  export const SHAPE_CONTAINER_LENGTH: 350;
@@ -16,7 +16,7 @@
16
16
  * with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
 
19
- export const PREVIEW_BACKGROUND_COLOR = '#394B58';
19
+ export const PREVIEW_BACKGROUND_COLOR = '#334451';
20
20
  export const PREVIEW_WIDTH = 942;
21
21
  export const PREVIEW_HEIGHT = 350;
22
22
  export const SHAPE_CONTAINER_LENGTH = 350;
@@ -37,7 +37,7 @@ export const CustomNumberInput = ({
37
37
  formatValueCallback,
38
38
  onChange
39
39
  });
40
- const handleChange = (event, newValue) => digestNewValue(newValue.trim());
40
+ const handleChange = (_event, newValue) => digestNewValue(newValue.trim());
41
41
  const handleBlur = () => digestCurrentValue();
42
42
  const handleIncrement = () => onChange(processValueCallback(value + 1));
43
43
  const handleDecrement = () => onChange(processValueCallback(value - 1));
@@ -43,7 +43,7 @@ const PreviewIcon = ({
43
43
  };
44
44
  }
45
45
  return {
46
- border: '1px solid #73818C',
46
+ border: '1px solid #6A7883',
47
47
  borderRadius: '3px',
48
48
  background: color || `
49
49
  linear-gradient(
@@ -1,7 +1,7 @@
1
- declare const AIWandSVG = "<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<mask id=\"mask0_5548_26552\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"18\" height=\"18\">\n<path d=\"M8.48511 5.85958C8.34447 5.71049 8.11666 5.71049 7.97603 5.85958L6.54795 7.3735C6.40731 7.52256 6.40731 7.76409 6.54795 7.91315L8.75896 10.2571L8.75968 10.2582L8.76075 10.259L15.9574 17.8882C16.0277 17.9627 16.1198 18 16.2119 18C16.304 18 16.3961 17.9627 16.4664 17.8882L17.8945 16.3743C18.0352 16.2252 18.0352 15.9837 17.8945 15.8346L8.48511 5.85958ZM8.23057 6.66907L9.93327 8.47413L9.01436 9.44848L7.31157 7.64331L8.23057 6.66907ZM16.2119 17.0787L9.52344 9.98813L10.4423 9.01378L17.1309 16.1044L16.2119 17.0787Z\" fill=\"#2D3B45\"/>\n<path d=\"M6.9677 4.52528C6.98177 4.52716 6.99581 4.52789 7.00988 4.52789C7.13082 4.52789 7.24473 4.46343 7.3119 4.35423L7.89726 3.3986L8.97165 3.3688C9.10875 3.3647 9.23182 3.27899 9.28912 3.14703C9.34641 3.01511 9.32815 2.86005 9.242 2.74714L8.56629 1.86119L8.8711 0.769191C8.91013 0.629809 8.87074 0.479228 8.77021 0.380468C8.66999 0.281678 8.52444 0.251498 8.39683 0.304431L7.39345 0.712163L6.50783 0.0674013C6.395 -0.0153617 6.24769 -0.0224389 6.12816 0.0491233C6.00862 0.119925 5.93726 0.256733 5.94426 0.401699L6.00018 1.53956L5.14798 2.23316C5.03898 2.32151 4.98731 2.46759 5.01402 2.61033C5.04075 2.75272 5.1413 2.86675 5.27383 2.90442L6.31166 3.19959L6.67062 4.27372C6.71633 4.4105 6.83164 4.50815 6.9677 4.52528ZM6.16471 2.36772L6.58872 2.0226C6.68292 1.94618 6.73531 1.82543 6.72932 1.7002L6.70157 1.13443L7.14172 1.45495C7.23946 1.52614 7.36393 1.54216 7.47466 1.49672L7.97354 1.29396L7.822 1.83698C7.78827 1.95773 7.81287 2.08781 7.88741 2.18546L8.2235 2.62601L7.68912 2.64089C7.57063 2.64425 7.46131 2.70912 7.39662 2.81458L7.10552 3.28978L6.92693 2.75571C6.88753 2.63718 6.79542 2.54699 6.68083 2.51455L6.16471 2.36772Z\" fill=\"#2D3B45\"/>\n<path d=\"M5.00785 9.67232L5.31265 8.58029C5.35166 8.4409 5.31229 8.29032 5.21174 8.19156C5.11119 8.0928 4.96636 8.06262 4.83838 8.11553L3.83536 8.52329L2.94939 7.8785C2.83617 7.79614 2.68853 7.78904 2.56968 7.86025C2.45015 7.93105 2.37878 8.06783 2.38582 8.21282L2.44171 9.35068L1.5895 10.0443C1.48054 10.1326 1.42884 10.2787 1.45557 10.4215C1.48227 10.5638 1.58283 10.6779 1.71538 10.7155L2.75358 11.0107L3.11251 12.0845C3.15822 12.2212 3.27353 12.3189 3.40959 12.336C3.42366 12.3379 3.43773 12.3386 3.45179 12.3386C3.57273 12.3386 3.68664 12.2742 3.75379 12.1649L4.33915 11.2097L5.41354 11.1799C5.55067 11.1758 5.6737 11.0901 5.731 10.9582C5.78833 10.8262 5.77004 10.6712 5.68391 10.5582L5.00785 9.67232ZM4.13101 10.452C4.01255 10.4554 3.90319 10.5202 3.8385 10.6257L3.54741 11.1009L3.36881 10.5668C3.32945 10.4483 3.23734 10.3581 3.12271 10.3257L2.6066 10.1788L3.03024 9.83369C3.12448 9.7573 3.17687 9.63655 3.17088 9.51133L3.1431 8.94517L3.58363 9.26608C3.68137 9.33764 3.80581 9.35329 3.91655 9.30781L4.41509 9.10506L4.26356 9.6481C4.22982 9.76886 4.25443 9.89894 4.32894 9.99659L4.66541 10.4371L4.13101 10.452Z\" fill=\"#2D3B45\"/>\n<path d=\"M1.96063 6.47752C1.97467 6.47936 1.98874 6.48012 2.00281 6.48012C2.12375 6.48012 2.23765 6.41563 2.3048 6.30643L2.89016 5.35083L3.96458 5.321C4.10168 5.3169 4.22472 5.23119 4.28204 5.09923C4.33934 4.96731 4.32105 4.81225 4.23492 4.69934L3.55922 3.81343L3.86402 2.72139C3.90303 2.58201 3.86366 2.43143 3.76311 2.33267C3.66292 2.23391 3.51701 2.2037 3.38975 2.25663L2.38637 2.66437L1.50076 2.0196C1.38754 1.93687 1.24095 1.92976 1.12106 2.00133C1.00152 2.07216 0.930156 2.20894 0.937191 2.3539L0.993081 3.49176L0.140875 4.18536C0.0319077 4.27371 -0.0197896 4.41982 0.00694182 4.56256C0.0336457 4.70493 0.134199 4.81898 0.266753 4.85662L1.30459 5.15179L1.66355 6.22592C1.70923 6.3627 1.82457 6.46035 1.96063 6.47752ZM1.15764 4.31992L1.58161 3.9748C1.67585 3.89838 1.72824 3.77763 1.72225 3.6524L1.69447 3.08666L2.13464 3.40718C2.23274 3.47872 2.35718 3.49439 2.46759 3.44892L2.96646 3.24616L2.81493 3.78918C2.78119 3.90996 2.8058 4.04001 2.88031 4.13766L3.21643 4.57821L2.68204 4.59312C2.56356 4.59646 2.45421 4.66132 2.38954 4.76678L2.09842 5.24198L1.91983 4.70791C1.88046 4.58938 1.78835 4.49919 1.67373 4.46676L1.15764 4.31992Z\" fill=\"#2D3B45\"/>\n</mask>\n<g mask=\"url(#mask0_5548_26552)\">\n<rect width=\"18\" height=\"18\" fill=\"currentColor\"/>\n</g>\n</svg>\n";
2
- declare const InsertSVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M16.9455 16.9451H12.375V18H18V12.375H16.9455V16.9451Z\" fill=\"#2D3B45\"/>\n <path d=\"M1.05487 1.0545H5.625V0H0V5.625H1.0545L1.05487 1.0545Z\" fill=\"#2D3B45\"/>\n <path d=\"M12.375 0V1.0545H16.9455V5.625H18V0H12.375Z\" fill=\"#2D3B45\"/>\n <path d=\"M1.05487 12.375H0V18H5.625V16.9451H1.05487V12.375Z\" fill=\"#2D3B45\"/>\n <path d=\"M3.59082 14.4093H14.4099V3.59058H3.59082V14.4093ZM4.64532 4.64508H13.3551V13.3548H4.64532V4.64508Z\" fill=\"#2D3B45\"/>\n <path d=\"M9.52752 6.92065H8.47302V8.47278H6.9209V9.52728H8.47302V11.0794H9.52752V9.52728H11.0796V8.47278H9.52752V6.92065Z\" fill=\"#2D3B45\"/>\n</svg>";
1
+ declare const AIWandSVG = "<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<mask id=\"mask0_5548_26552\" style=\"mask-type:alpha\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"18\" height=\"18\">\n<path d=\"M8.48511 5.85958C8.34447 5.71049 8.11666 5.71049 7.97603 5.85958L6.54795 7.3735C6.40731 7.52256 6.40731 7.76409 6.54795 7.91315L8.75896 10.2571L8.75968 10.2582L8.76075 10.259L15.9574 17.8882C16.0277 17.9627 16.1198 18 16.2119 18C16.304 18 16.3961 17.9627 16.4664 17.8882L17.8945 16.3743C18.0352 16.2252 18.0352 15.9837 17.8945 15.8346L8.48511 5.85958ZM8.23057 6.66907L9.93327 8.47413L9.01436 9.44848L7.31157 7.64331L8.23057 6.66907ZM16.2119 17.0787L9.52344 9.98813L10.4423 9.01378L17.1309 16.1044L16.2119 17.0787Z\" fill=\"#273540\"/>\n<path d=\"M6.9677 4.52528C6.98177 4.52716 6.99581 4.52789 7.00988 4.52789C7.13082 4.52789 7.24473 4.46343 7.3119 4.35423L7.89726 3.3986L8.97165 3.3688C9.10875 3.3647 9.23182 3.27899 9.28912 3.14703C9.34641 3.01511 9.32815 2.86005 9.242 2.74714L8.56629 1.86119L8.8711 0.769191C8.91013 0.629809 8.87074 0.479228 8.77021 0.380468C8.66999 0.281678 8.52444 0.251498 8.39683 0.304431L7.39345 0.712163L6.50783 0.0674013C6.395 -0.0153617 6.24769 -0.0224389 6.12816 0.0491233C6.00862 0.119925 5.93726 0.256733 5.94426 0.401699L6.00018 1.53956L5.14798 2.23316C5.03898 2.32151 4.98731 2.46759 5.01402 2.61033C5.04075 2.75272 5.1413 2.86675 5.27383 2.90442L6.31166 3.19959L6.67062 4.27372C6.71633 4.4105 6.83164 4.50815 6.9677 4.52528ZM6.16471 2.36772L6.58872 2.0226C6.68292 1.94618 6.73531 1.82543 6.72932 1.7002L6.70157 1.13443L7.14172 1.45495C7.23946 1.52614 7.36393 1.54216 7.47466 1.49672L7.97354 1.29396L7.822 1.83698C7.78827 1.95773 7.81287 2.08781 7.88741 2.18546L8.2235 2.62601L7.68912 2.64089C7.57063 2.64425 7.46131 2.70912 7.39662 2.81458L7.10552 3.28978L6.92693 2.75571C6.88753 2.63718 6.79542 2.54699 6.68083 2.51455L6.16471 2.36772Z\" fill=\"#273540\"/>\n<path d=\"M5.00785 9.67232L5.31265 8.58029C5.35166 8.4409 5.31229 8.29032 5.21174 8.19156C5.11119 8.0928 4.96636 8.06262 4.83838 8.11553L3.83536 8.52329L2.94939 7.8785C2.83617 7.79614 2.68853 7.78904 2.56968 7.86025C2.45015 7.93105 2.37878 8.06783 2.38582 8.21282L2.44171 9.35068L1.5895 10.0443C1.48054 10.1326 1.42884 10.2787 1.45557 10.4215C1.48227 10.5638 1.58283 10.6779 1.71538 10.7155L2.75358 11.0107L3.11251 12.0845C3.15822 12.2212 3.27353 12.3189 3.40959 12.336C3.42366 12.3379 3.43773 12.3386 3.45179 12.3386C3.57273 12.3386 3.68664 12.2742 3.75379 12.1649L4.33915 11.2097L5.41354 11.1799C5.55067 11.1758 5.6737 11.0901 5.731 10.9582C5.78833 10.8262 5.77004 10.6712 5.68391 10.5582L5.00785 9.67232ZM4.13101 10.452C4.01255 10.4554 3.90319 10.5202 3.8385 10.6257L3.54741 11.1009L3.36881 10.5668C3.32945 10.4483 3.23734 10.3581 3.12271 10.3257L2.6066 10.1788L3.03024 9.83369C3.12448 9.7573 3.17687 9.63655 3.17088 9.51133L3.1431 8.94517L3.58363 9.26608C3.68137 9.33764 3.80581 9.35329 3.91655 9.30781L4.41509 9.10506L4.26356 9.6481C4.22982 9.76886 4.25443 9.89894 4.32894 9.99659L4.66541 10.4371L4.13101 10.452Z\" fill=\"#273540\"/>\n<path d=\"M1.96063 6.47752C1.97467 6.47936 1.98874 6.48012 2.00281 6.48012C2.12375 6.48012 2.23765 6.41563 2.3048 6.30643L2.89016 5.35083L3.96458 5.321C4.10168 5.3169 4.22472 5.23119 4.28204 5.09923C4.33934 4.96731 4.32105 4.81225 4.23492 4.69934L3.55922 3.81343L3.86402 2.72139C3.90303 2.58201 3.86366 2.43143 3.76311 2.33267C3.66292 2.23391 3.51701 2.2037 3.38975 2.25663L2.38637 2.66437L1.50076 2.0196C1.38754 1.93687 1.24095 1.92976 1.12106 2.00133C1.00152 2.07216 0.930156 2.20894 0.937191 2.3539L0.993081 3.49176L0.140875 4.18536C0.0319077 4.27371 -0.0197896 4.41982 0.00694182 4.56256C0.0336457 4.70493 0.134199 4.81898 0.266753 4.85662L1.30459 5.15179L1.66355 6.22592C1.70923 6.3627 1.82457 6.46035 1.96063 6.47752ZM1.15764 4.31992L1.58161 3.9748C1.67585 3.89838 1.72824 3.77763 1.72225 3.6524L1.69447 3.08666L2.13464 3.40718C2.23274 3.47872 2.35718 3.49439 2.46759 3.44892L2.96646 3.24616L2.81493 3.78918C2.78119 3.90996 2.8058 4.04001 2.88031 4.13766L3.21643 4.57821L2.68204 4.59312C2.56356 4.59646 2.45421 4.66132 2.38954 4.76678L2.09842 5.24198L1.91983 4.70791C1.88046 4.58938 1.78835 4.49919 1.67373 4.46676L1.15764 4.31992Z\" fill=\"#273540\"/>\n</mask>\n<g mask=\"url(#mask0_5548_26552)\">\n<rect width=\"18\" height=\"18\" fill=\"currentColor\"/>\n</g>\n</svg>\n";
2
+ declare const InsertSVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path d=\"M16.9455 16.9451H12.375V18H18V12.375H16.9455V16.9451Z\" fill=\"#273540\"/>\n <path d=\"M1.05487 1.0545H5.625V0H0V5.625H1.0545L1.05487 1.0545Z\" fill=\"#273540\"/>\n <path d=\"M12.375 0V1.0545H16.9455V5.625H18V0H12.375Z\" fill=\"#273540\"/>\n <path d=\"M1.05487 12.375H0V18H5.625V16.9451H1.05487V12.375Z\" fill=\"#273540\"/>\n <path d=\"M3.59082 14.4093H14.4099V3.59058H3.59082V14.4093ZM4.64532 4.64508H13.3551V13.3548H4.64532V4.64508Z\" fill=\"#273540\"/>\n <path d=\"M9.52752 6.92065H8.47302V8.47278H6.9209V9.52728H8.47302V11.0794H9.52752V9.52728H11.0796V8.47278H9.52752V6.92065Z\" fill=\"#273540\"/>\n</svg>";
3
3
  declare const CopySVG: any;
4
4
  declare const RefreshSVG: any;
5
- declare const DislikeSVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.17647 7.41176L3.2353 7.41176L3.2353 6.35294C2.65189 6.35294 2.17647 5.87859 2.17647 5.29411C2.17647 4.70964 2.65189 4.23529 3.2353 4.23529L4.29412 4.23529L4.29412 3.17647C3.71071 3.17647 3.2353 2.70211 3.2353 2.11764C3.2353 1.53317 3.71071 1.05882 4.29412 1.05882L13.2941 1.05882C14.7532 1.05882 15.9412 2.24576 15.9412 3.70588L15.9412 9.52941L14.9417 9.52941C13.6277 9.52941 12.3698 10.0694 11.4888 11.0086C10.2267 12.3554 8.738 14.4445 8.54953 16.9412L8.20859 16.9412C7.7353 16.9412 7.28953 16.7315 6.98671 16.3652C6.68071 15.9946 6.55683 15.5107 6.64788 15.0385C6.86071 13.9267 7.21224 12.8255 7.69083 11.7656C7.91424 11.2733 7.87188 10.71 7.58071 10.2568C7.28635 9.80153 6.78659 9.52941 6.24341 9.52941L2.17647 9.52941C1.59306 9.52941 1.11765 9.05506 1.11765 8.47059C1.11765 7.88611 1.59306 7.41176 2.17647 7.41176ZM0.0588235 8.47059C0.0588234 9.63847 1.00859 10.5882 2.17647 10.5882L6.24341 10.5882C6.42765 10.5882 6.59071 10.6761 6.69024 10.8307C6.78765 10.9821 6.80141 11.1642 6.72624 11.3294C6.21377 12.4645 5.83682 13.6461 5.60706 14.8405C5.45776 15.624 5.66212 16.4255 6.17035 17.0396C6.67541 17.6495 7.41871 18 8.20859 18L9.58824 18L9.58824 17.4706C9.58824 15.0851 11.042 13.0341 12.2607 11.7328C12.9426 11.0065 13.9199 10.5882 14.9416 10.5882L17 10.5882L17 3.70588C17 1.66235 15.3376 -1.45327e-07 13.2941 -3.23979e-07L4.29412 -1.11078e-06C3.12624 -1.21288e-06 2.17647 0.949763 2.17647 2.11765C2.17647 2.55282 2.30882 2.95835 2.53435 3.29506C1.71059 3.58518 1.11765 4.37188 1.11765 5.29412C1.11765 5.72929 1.25 6.13482 1.47553 6.47153C0.651767 6.76164 0.0588235 7.54835 0.0588235 8.47059Z\" fill=\"#2D3B45\"/>\n</svg>";
5
+ declare const DislikeSVG = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.17647 7.41176L3.2353 7.41176L3.2353 6.35294C2.65189 6.35294 2.17647 5.87859 2.17647 5.29411C2.17647 4.70964 2.65189 4.23529 3.2353 4.23529L4.29412 4.23529L4.29412 3.17647C3.71071 3.17647 3.2353 2.70211 3.2353 2.11764C3.2353 1.53317 3.71071 1.05882 4.29412 1.05882L13.2941 1.05882C14.7532 1.05882 15.9412 2.24576 15.9412 3.70588L15.9412 9.52941L14.9417 9.52941C13.6277 9.52941 12.3698 10.0694 11.4888 11.0086C10.2267 12.3554 8.738 14.4445 8.54953 16.9412L8.20859 16.9412C7.7353 16.9412 7.28953 16.7315 6.98671 16.3652C6.68071 15.9946 6.55683 15.5107 6.64788 15.0385C6.86071 13.9267 7.21224 12.8255 7.69083 11.7656C7.91424 11.2733 7.87188 10.71 7.58071 10.2568C7.28635 9.80153 6.78659 9.52941 6.24341 9.52941L2.17647 9.52941C1.59306 9.52941 1.11765 9.05506 1.11765 8.47059C1.11765 7.88611 1.59306 7.41176 2.17647 7.41176ZM0.0588235 8.47059C0.0588234 9.63847 1.00859 10.5882 2.17647 10.5882L6.24341 10.5882C6.42765 10.5882 6.59071 10.6761 6.69024 10.8307C6.78765 10.9821 6.80141 11.1642 6.72624 11.3294C6.21377 12.4645 5.83682 13.6461 5.60706 14.8405C5.45776 15.624 5.66212 16.4255 6.17035 17.0396C6.67541 17.6495 7.41871 18 8.20859 18L9.58824 18L9.58824 17.4706C9.58824 15.0851 11.042 13.0341 12.2607 11.7328C12.9426 11.0065 13.9199 10.5882 14.9416 10.5882L17 10.5882L17 3.70588C17 1.66235 15.3376 -1.45327e-07 13.2941 -3.23979e-07L4.29412 -1.11078e-06C3.12624 -1.21288e-06 2.17647 0.949763 2.17647 2.11765C2.17647 2.55282 2.30882 2.95835 2.53435 3.29506C1.71059 3.58518 1.11765 4.37188 1.11765 5.29412C1.11765 5.72929 1.25 6.13482 1.47553 6.47153C0.651767 6.76164 0.0588235 7.54835 0.0588235 8.47059Z\" fill=\"#273540\"/>\n</svg>";
6
6
  declare const AIAvatarSVG = "\n<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"Avatar - AI\">\n<rect id=\"Rectangle 2318\" x=\"0.5\" y=\"0.5\" width=\"39\" height=\"39\" rx=\"19.5\" fill=\"white\" stroke=\"#C7CDD1\"/>\n<rect id=\"Untitled-4 1\" x=\"8\" y=\"9\" width=\"24\" height=\"23.4915\" fill=\"url(#pattern0_5509_72095)\"/>\n</g>\n<defs>\n<pattern id=\"pattern0_5509_72095\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n<use xlink:href=\"#image0_5509_72095\" transform=\"scale(0.0313 0.0313)\"/>\n</pattern>\n<image id=\"image0_5509_72095\" data-name=\"Untitled-4.png\" width=\"32\" height=\"32\" xlink:href=\"data:image/png;base64,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\"/>\n</defs>\n</svg>\n";
7
7
  export { AIWandSVG, AIAvatarSVG, InsertSVG, CopySVG, RefreshSVG, DislikeSVG };