@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.
- package/CHANGELOG.md +46 -0
- package/__tests__/common/indicate.test.js +5 -6
- package/es/bridge/Bridge.js +2 -4
- package/es/canvasFileBrowser/FileBrowser.js +2 -4
- package/es/common/browser.js +2 -2
- package/es/common/fileUrl.js +13 -3
- package/es/defaultTinymceConfig.d.ts +1 -1
- package/es/defaultTinymceConfig.js +149 -114
- package/es/enhance-user-content/enhance_user_content.js +7 -1
- package/es/enhance-user-content/instructure_helper.js +4 -0
- package/es/enhance-user-content/youtube_overlay.d.ts +1 -0
- package/es/enhance-user-content/youtube_overlay.js +87 -0
- package/es/format-message.d.js +1 -0
- package/es/format-message.js +5 -0
- package/es/index.d.ts +1 -1
- package/es/rce/RCE.d.ts +0 -1
- package/es/rce/RCE.js +5 -10
- package/es/rce/RCEGlobals.d.ts +0 -2
- package/es/rce/RCEGlobals.js +0 -1
- package/es/rce/RCEVariants.d.ts +8 -3
- package/es/rce/RCEVariants.js +36 -10
- package/es/rce/RCEWrapper.d.ts +3 -5
- package/es/rce/RCEWrapper.js +68 -83
- package/es/rce/RCEWrapperProps.d.ts +1 -1
- package/es/rce/ShowOnFocusButton/index.js +4 -2
- package/es/rce/StatusBar.js +61 -15
- package/es/rce/alertHandler.js +6 -7
- package/es/rce/plugins/instructure-ui-icons/plugin.js +2 -2
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.d.ts +1 -1
- package/es/rce/plugins/instructure_equation/EquationEditorModal/index.js +6 -10
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.d.ts +5 -15
- package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js +4 -10
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.d.ts +7 -0
- package/es/rce/plugins/instructure_image/ImageEmbedOptions.js +49 -9
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.d.ts +1 -8
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialog.js +13 -33
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.d.ts +1 -2
- package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolDialog/ExternalToolDialogModal.js +2 -1
- package/es/rce/plugins/instructure_record/AudioOptionsTray/TrayController.js +1 -2
- package/es/rce/plugins/instructure_record/VideoOptionsTray/TrayController.js +2 -4
- package/es/rce/plugins/instructure_record/VideoOptionsTray/index.js +10 -7
- package/es/rce/plugins/shared/ContentSelection.js +4 -7
- package/es/rce/plugins/shared/DimensionsInput/index.js +3 -3
- package/es/rce/plugins/shared/FixedContentTray.d.ts +7 -23
- package/es/rce/plugins/shared/FixedContentTray.js +7 -16
- package/es/rce/plugins/shared/ImageCropper/constants.d.ts +1 -1
- package/es/rce/plugins/shared/ImageCropper/constants.js +1 -1
- package/es/rce/plugins/shared/ImageCropper/controls/CustomNumberInput.js +1 -1
- package/es/rce/plugins/shared/PreviewIcon.js +1 -1
- package/es/rce/plugins/shared/ai_tools/aiicons.d.ts +3 -3
- package/es/rce/plugins/shared/ai_tools/aiicons.js +11 -11
- package/es/rce/plugins/shared/fileTypeUtils.js +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/components/checker.js +7 -1
- package/es/rce/plugins/tinymce-a11y-checker/plugin.js +50 -52
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.d.ts +1 -1
- package/es/rce/plugins/tinymce-a11y-checker/utils/indicate.js +1 -1
- package/es/rce/style.js +47 -45
- package/es/rcs/api.d.ts +4 -1
- package/es/rcs/api.js +9 -13
- package/es/translations/locales/ar.js +29 -5
- package/es/translations/locales/ca.js +32 -8
- package/es/translations/locales/cy.js +29 -5
- package/es/translations/locales/da-x-k12.js +29 -5
- package/es/translations/locales/da.js +29 -5
- package/es/translations/locales/de.js +29 -5
- package/es/translations/locales/en-AU-x-unimelb.js +29 -5
- package/es/translations/locales/en-GB-x-ukhe.js +29 -5
- package/es/translations/locales/en.js +20 -5
- package/es/translations/locales/en_AU.js +29 -5
- package/es/translations/locales/en_CA.js +29 -5
- package/es/translations/locales/en_CY.js +29 -5
- package/es/translations/locales/en_GB.js +29 -5
- package/es/translations/locales/es.js +29 -5
- package/es/translations/locales/es_ES.js +29 -5
- package/es/translations/locales/fa_IR.js +0 -3
- package/es/translations/locales/fi.js +29 -5
- package/es/translations/locales/fr.js +29 -5
- package/es/translations/locales/fr_CA.js +30 -6
- package/es/translations/locales/ga.js +46 -22
- package/es/translations/locales/hi.js +29 -5
- package/es/translations/locales/ht.js +29 -5
- package/es/translations/locales/hu.js +0 -6
- package/es/translations/locales/id.js +29 -5
- package/es/translations/locales/is.js +23 -5
- package/es/translations/locales/it.js +29 -5
- package/es/translations/locales/ja.js +29 -5
- package/es/translations/locales/mi.js +29 -5
- package/es/translations/locales/ms.js +29 -5
- package/es/translations/locales/nb-x-k12.js +29 -5
- package/es/translations/locales/nb.js +29 -5
- package/es/translations/locales/nl.js +29 -5
- package/es/translations/locales/nn.js +0 -6
- package/es/translations/locales/pl.js +29 -5
- package/es/translations/locales/pt.js +29 -5
- package/es/translations/locales/pt_BR.js +29 -5
- package/es/translations/locales/ru.js +29 -5
- package/es/translations/locales/sl.js +29 -5
- package/es/translations/locales/sv-x-k12.js +29 -5
- package/es/translations/locales/sv.js +29 -5
- package/es/translations/locales/th.js +29 -5
- package/es/translations/locales/uk_UA.js +0 -6
- package/es/translations/locales/vi.js +29 -5
- package/es/translations/locales/zh-Hans.js +29 -5
- package/es/translations/locales/zh-Hant.js +29 -5
- package/es/translations/locales/zh.js +29 -5
- package/es/translations/locales/zh_HK.js +29 -5
- package/es/util/contextHelper.d.ts +7 -0
- package/{testcafe/axe.test.js → es/util/contextHelper.js} +10 -21
- package/es/util/loadingPlaceholder.js +11 -11
- package/eslint.config.js +3 -25
- package/jest/jest-setup.js +27 -2
- package/jest.config.js +5 -1
- package/package.json +62 -85
- package/testcafe/RCEWrapper.test.js +0 -319
- package/testcafe/StatusBar.test.js +0 -108
- package/testcafe/enhanceUserContent.html +0 -58
- package/testcafe/enhanceUserContent.test.js +0 -44
- package/testcafe/entry.jsx +0 -77
- package/testcafe/testcafe.html +0 -14
- package/webpack.testcafe.config.js +0 -61
package/es/rce/plugins/instructure_icon_maker/components/CreateIconMakerForm/ImageSection/Course.js
CHANGED
|
@@ -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 '
|
|
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
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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(
|
|
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
|
-
})
|
|
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:
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
-
},
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
|
3
|
-
isOpen
|
|
4
|
-
onDismiss
|
|
5
|
-
onUnmount
|
|
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
|
|
11
|
-
shouldJoinBodyAndFooter
|
|
12
|
-
shouldCloseOnDocumentClick
|
|
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
|
};
|
|
@@ -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 = '#
|
|
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 = (
|
|
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));
|
|
@@ -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=\"#
|
|
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=\"#
|
|
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=\"#
|
|
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 };
|