@instructure/canvas-rce 7.3.0 → 7.3.1

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 (59) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/es/enhance-user-content/doc_previews.js +5 -0
  3. package/es/enhance-user-content/enhance_user_content.js +1 -1
  4. package/es/enhance-user-content/instructure_helper.js +1 -0
  5. package/es/rce/AlertMessageArea.d.ts +2 -2
  6. package/es/rce/AlertMessageArea.js +3 -3
  7. package/es/rce/KeyboardShortcutModal.js +1 -1
  8. package/es/rce/RCEWrapper.d.ts +11 -11
  9. package/es/rce/RCEWrapper.js +216 -191
  10. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.d.ts +1 -1
  11. package/es/rce/plugins/instructure_rce_external_tools/components/ExternalToolSelectionDialog/ExternalToolSelectionDialog.js +25 -25
  12. package/es/rce/plugins/instructure_studio_media_options/plugin.js +4 -2
  13. package/es/rce/plugins/instructure_wordcount/components/WordCountModal.js +1 -0
  14. package/es/rce/plugins/shared/StudioLtiSupportUtils.d.ts +2 -1
  15. package/es/rce/plugins/shared/StudioLtiSupportUtils.js +17 -1
  16. package/es/translations/locales/ar.js +15 -0
  17. package/es/translations/locales/ca.js +15 -0
  18. package/es/translations/locales/cy.js +15 -0
  19. package/es/translations/locales/da-x-k12.js +15 -0
  20. package/es/translations/locales/da.js +15 -0
  21. package/es/translations/locales/de.js +15 -0
  22. package/es/translations/locales/en-AU-x-unimelb.js +15 -0
  23. package/es/translations/locales/en-GB-x-ukhe.js +15 -0
  24. package/es/translations/locales/en.js +6 -0
  25. package/es/translations/locales/en_AU.js +15 -0
  26. package/es/translations/locales/en_CA.js +15 -0
  27. package/es/translations/locales/en_CY.js +15 -0
  28. package/es/translations/locales/en_GB.js +15 -0
  29. package/es/translations/locales/es.js +15 -0
  30. package/es/translations/locales/es_ES.js +15 -0
  31. package/es/translations/locales/fi.js +15 -0
  32. package/es/translations/locales/fr.js +15 -0
  33. package/es/translations/locales/fr_CA.js +15 -0
  34. package/es/translations/locales/ga.js +15 -0
  35. package/es/translations/locales/hi.js +15 -0
  36. package/es/translations/locales/ht.js +15 -0
  37. package/es/translations/locales/id.js +15 -0
  38. package/es/translations/locales/is.js +15 -0
  39. package/es/translations/locales/it.js +15 -0
  40. package/es/translations/locales/ja.js +15 -0
  41. package/es/translations/locales/mi.js +15 -0
  42. package/es/translations/locales/ms.js +15 -0
  43. package/es/translations/locales/nb-x-k12.js +15 -0
  44. package/es/translations/locales/nb.js +15 -0
  45. package/es/translations/locales/nl.js +15 -0
  46. package/es/translations/locales/pl.js +15 -0
  47. package/es/translations/locales/pt.js +15 -0
  48. package/es/translations/locales/pt_BR.js +15 -0
  49. package/es/translations/locales/ru.js +15 -0
  50. package/es/translations/locales/sl.js +15 -0
  51. package/es/translations/locales/sv-x-k12.js +15 -0
  52. package/es/translations/locales/sv.js +15 -0
  53. package/es/translations/locales/th.js +15 -0
  54. package/es/translations/locales/vi.js +15 -0
  55. package/es/translations/locales/zh-Hans.js +15 -0
  56. package/es/translations/locales/zh-Hant.js +15 -0
  57. package/es/translations/locales/zh.js +15 -0
  58. package/es/translations/locales/zh_HK.js +15 -0
  59. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { RceToolWrapper } from "../../RceToolWrapper";
1
+ import { RceToolWrapper } from '../../RceToolWrapper';
2
2
  /**
3
3
  * Returns a filtered list of items based on the term.
4
4
  *
@@ -17,22 +17,22 @@ import _pt from "prop-types";
17
17
  * with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
  */
19
19
 
20
- import React, { useState } from "react";
21
- import { Modal } from "@instructure/ui-modal";
22
- import { Button, CloseButton } from "@instructure/ui-buttons";
23
- import { Heading } from "@instructure/ui-heading";
24
- import { View } from "@instructure/ui-view";
25
- import { ScreenReaderContent } from "@instructure/ui-a11y-content";
26
- import { List } from "@instructure/ui-list";
27
- import { Flex } from "@instructure/ui-flex";
28
- import { TextInput } from "@instructure/ui-text-input";
29
- import { IconSearchLine } from "@instructure/ui-icons";
30
- import { Alert } from "@instructure/ui-alerts";
31
- import formatMessage from "../../../../../format-message";
32
- import ExternalToolSelectionItem from "./ExternalToolSelectionItem";
33
- import { instuiPopupMountNodeFn } from "../../../../../util/fullscreenHelpers";
20
+ import React, { useState } from 'react';
21
+ import { Modal } from '@instructure/ui-modal';
22
+ import { Button, CloseButton } from '@instructure/ui-buttons';
23
+ import { Heading } from '@instructure/ui-heading';
24
+ import { View } from '@instructure/ui-view';
25
+ import { ScreenReaderContent } from '@instructure/ui-a11y-content';
26
+ import { List } from '@instructure/ui-list';
27
+ import { Flex } from '@instructure/ui-flex';
28
+ import { TextInput } from '@instructure/ui-text-input';
29
+ import { IconSearchLine } from '@instructure/ui-icons';
30
+ import { Alert } from '@instructure/ui-alerts';
31
+ import formatMessage from '../../../../../format-message';
32
+ import ExternalToolSelectionItem from './ExternalToolSelectionItem';
33
+ import { instuiPopupMountNodeFn } from '../../../../../util/fullscreenHelpers';
34
34
  // TODO: we really need a way for the client to pass this to the RCE
35
- const getLiveRegion = () => document.getElementById("flash_screenreader_holder");
35
+ const getLiveRegion = () => document.getElementById('flash_screenreader_holder');
36
36
 
37
37
  /**
38
38
  * Returns a filtered list of items based on the term.
@@ -51,7 +51,7 @@ export function filterItemsByTitleSubstring(searchString, items) {
51
51
  return items.filter(item => item.title.toLocaleLowerCase().includes(lowerTerm));
52
52
  }
53
53
  export function ExternalToolSelectionDialog(props) {
54
- const [filterTerm, setFilterTerm] = useState("");
54
+ const [filterTerm, setFilterTerm] = useState('');
55
55
  const [filteredResults, setFilteredResults] = useState(props.ltiButtons);
56
56
  const handleFilterChange = e => {
57
57
  setFilterTerm(e.target?.value);
@@ -63,31 +63,31 @@ export function ExternalToolSelectionDialog(props) {
63
63
  liveRegion: getLiveRegion,
64
64
  size: "medium",
65
65
  themeOverride: {
66
- mediumMaxWidth: "42rem"
66
+ mediumMaxWidth: '42rem'
67
67
  },
68
- label: formatMessage("Apps"),
68
+ label: formatMessage('Apps'),
69
69
  mountNode: instuiPopupMountNodeFn(),
70
70
  onDismiss: props.onDismiss,
71
71
  open: true,
72
72
  shouldCloseOnDocumentClick: false
73
73
  }, /*#__PURE__*/React.createElement(Modal.Header, {
74
74
  themeOverride: {
75
- padding: "0.5rem"
75
+ padding: '0.5rem'
76
76
  }
77
77
  }, /*#__PURE__*/React.createElement(CloseButton, {
78
78
  placement: "end",
79
79
  offset: "medium",
80
80
  onClick: props.onDismiss,
81
- screenReaderLabel: formatMessage("Close")
81
+ screenReaderLabel: formatMessage('Close')
82
82
  }), /*#__PURE__*/React.createElement(Heading, {
83
83
  margin: "small"
84
- }, formatMessage("All Apps")), /*#__PURE__*/React.createElement(View, {
84
+ }, formatMessage('All Apps')), /*#__PURE__*/React.createElement(View, {
85
85
  as: "div",
86
86
  padding: "x-small none x-small medium"
87
87
  }, /*#__PURE__*/React.createElement(TextInput, {
88
88
  type: "search",
89
- renderLabel: /*#__PURE__*/React.createElement(ScreenReaderContent, null, formatMessage("Search")),
90
- placeholder: formatMessage("Search"),
89
+ renderLabel: /*#__PURE__*/React.createElement(ScreenReaderContent, null, formatMessage('Search')),
90
+ placeholder: formatMessage('Search'),
91
91
  renderAfterInput: /*#__PURE__*/React.createElement(IconSearchLine, {
92
92
  inline: false
93
93
  }),
@@ -105,7 +105,7 @@ export function ExternalToolSelectionDialog(props) {
105
105
  liveRegion: getLiveRegion,
106
106
  variant: "info",
107
107
  screenReaderOnly: !filterEmpty
108
- }, filterEmpty && formatMessage("No results found for {filterTerm}", {
108
+ }, filterEmpty && formatMessage('No results found for {filterTerm}', {
109
109
  filterTerm
110
110
  }), !filterEmpty && formatMessage(`Found { count, plural,
111
111
  =0 {# results}
@@ -116,7 +116,7 @@ export function ExternalToolSelectionDialog(props) {
116
116
  })), renderTools(filteredResults)))), /*#__PURE__*/React.createElement(Modal.Footer, null, /*#__PURE__*/React.createElement(Button, {
117
117
  onClick: props.onDismiss,
118
118
  color: "primary"
119
- }, formatMessage("Done"))));
119
+ }, formatMessage('Done'))));
120
120
  function renderTools(ltiButtons) {
121
121
  return /*#__PURE__*/React.createElement(List, {
122
122
  isUnstyled: true
@@ -17,7 +17,7 @@
17
17
  */
18
18
 
19
19
  import tinymce from 'tinymce';
20
- import { isStudioEmbeddedMedia, handleBeforeObjectSelected, notifyStudioEmbedTypeChange, updateStudioIframeDimensions, isValidDimension, isValidEmbedType } from '../shared/StudioLtiSupportUtils';
20
+ import { isStudioEmbeddedMedia, handleBeforeObjectSelected, notifyStudioEmbedTypeChange, updateStudioIframeDimensions, isValidDimension, isValidEmbedType, isValidResizable } from '../shared/StudioLtiSupportUtils';
21
21
  import VideoTrayController from '../instructure_record/VideoOptionsTray/TrayController';
22
22
  import formatMessage from '../../../format-message';
23
23
  import RCEGlobals from '../../RCEGlobals';
@@ -25,7 +25,9 @@ import { thumbnailViewIcon, learnViewIcon, collabViewIcon, optionsIcon, removeIc
25
25
  const studioTrayController = new VideoTrayController();
26
26
  const handleStudioMessage = e => {
27
27
  if (e.data && e.data.subject === 'studio.embedTypeChanged.response' && isValidDimension(e.data.width) && isValidDimension(e.data.height) && isValidEmbedType(e.data.embedType)) {
28
- updateStudioIframeDimensions(tinymce.activeEditor, e.data.width, e.data.height, e.data.embedType);
28
+ // resizable is optional - only pass it if it's a valid boolean
29
+ const resizable = isValidResizable(e.data.resizable) ? e.data.resizable : undefined;
30
+ updateStudioIframeDimensions(tinymce.activeEditor, e.data.width, e.data.height, e.data.embedType, resizable);
29
31
  }
30
32
  };
31
33
  tinymce.PluginManager.add('instructure_studio_media_options', function (ed) {
@@ -56,6 +56,7 @@ export const WordCountModal = ({
56
56
  label: formatMessage('Word Count'),
57
57
  mountNode: instuiPopupMountNodeFn(),
58
58
  open: true,
59
+ onDismiss: onDismiss,
59
60
  "data-mce-component": true
60
61
  }, /*#__PURE__*/React.createElement(Modal.Header, null, /*#__PURE__*/React.createElement(CloseButton, {
61
62
  placement: "end",
@@ -38,8 +38,9 @@ export declare function handleBeforeObjectSelected(e: EditorEvent<Events.ObjectS
38
38
  export declare function findStudioLtiIframeFromSelection(selectedNode: Node): HTMLIFrameElement | null;
39
39
  export declare const notifyStudioEmbedTypeChange: (editor: Editor, embedType: "thumbnail_embed" | "learn_embed" | "collaboration_embed") => void;
40
40
  export type EmbedType = 'thumbnail_embed' | 'learn_embed' | 'collaboration_embed';
41
- export declare const updateStudioIframeDimensions: (editor: Editor, width: number, height: number, embedType: EmbedType) => void;
41
+ export declare const updateStudioIframeDimensions: (editor: Editor, width: number, height: number, embedType: EmbedType, resizable?: boolean) => void;
42
42
  type ValidStudioEmbedType = 'thumbnail_embed' | 'learn_embed' | 'collaboration_embed';
43
43
  export declare const isValidEmbedType: (embedType: any) => embedType is ValidStudioEmbedType;
44
44
  export declare const isValidDimension: (value: any) => value is number;
45
+ export declare const isValidResizable: (value: any) => value is boolean;
45
46
  export {};
@@ -123,7 +123,7 @@ export const notifyStudioEmbedTypeChange = (editor, embedType) => {
123
123
  }, '*');
124
124
  }
125
125
  };
126
- export const updateStudioIframeDimensions = (editor, width, height, embedType) => {
126
+ export const updateStudioIframeDimensions = (editor, width, height, embedType, resizable) => {
127
127
  const selectedNode = editor.selection.getNode();
128
128
  const videoContainer = findMediaPlayerIframe(selectedNode);
129
129
  if (videoContainer?.tagName !== 'IFRAME') {
@@ -141,6 +141,19 @@ export const updateStudioIframeDimensions = (editor, width, height, embedType) =
141
141
  width: `${width}px`,
142
142
  height: `${height}px`
143
143
  });
144
+ if (resizable !== undefined) {
145
+ // Update both the actual attribute and the TinyMCE prefixed version
146
+ // This ensures they stay in sync when content is saved and reloaded
147
+ editor.dom.setAttrib(tinymceIframeShim, 'data-studio-resizable', String(resizable));
148
+ editor.dom.setAttrib(tinymceIframeShim, 'data-mce-p-data-studio-resizable', String(resizable));
149
+
150
+ // Force TinyMCE to update the overlay by setting/removing data-mce-resize
151
+ if (!resizable) {
152
+ tinymceIframeShim.setAttribute('data-mce-resize', 'false');
153
+ } else {
154
+ tinymceIframeShim.removeAttribute('data-mce-resize');
155
+ }
156
+ }
144
157
  const href = editor.dom.getAttrib(tinymceIframeShim, 'data-mce-p-src');
145
158
  if (href && embedType) {
146
159
  if (embedType) {
@@ -164,4 +177,7 @@ export const isValidEmbedType = embedType => {
164
177
  };
165
178
  export const isValidDimension = value => {
166
179
  return typeof value === 'number' && !isNaN(value) && isFinite(value) && value > 0;
180
+ };
181
+ export const isValidResizable = value => {
182
+ return typeof value === 'boolean';
167
183
  };
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Clubs (Suit)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "التعاون"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "الأعمال الجماعية"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "نص كبير"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "تعلم"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "معرفة المزيد عن الارتباطات المتجاورة"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "المشغلون"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "الخيارات"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "أو"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "إزالة الارتباط"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "إزالة وسائط Studio"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "استبدال الكل"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "بالرغم من أن مقطع الفيديو الخاص بك سيشتمل على العنوان الصحيح في المستعرض، لم نتمكن من تحديثه في قاعدة البيانات."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "صورة مصغرة"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Timebar"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Trèvols (coll de cartes)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Col·labora"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Col·laboracions"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Text gran"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Aprèn"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Obteniu més informació sobre els enllaços adjacents"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operadors"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Opcions"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "O"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Elimina l''enllaç"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Suprimiu l''element multimèdia de l’Studio"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Substitueix-ho tot"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Tot i que el títol del vídeo que es mostra al explorador és el correcte, no hem pogut actualitzar-lo a la base de dades."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Miniatura"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Barra temporal"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Clubs (Suit)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Cydweithio"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Cydweithrediadau"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Testun mawr"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Dysgu"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Dysgu mwy am ddolenni cyfagos"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Gweithredyddion"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Opsiynau"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Neu"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Tynnu Dolen"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Dileu Cyfryngau Studio"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Cyfnewid pob un"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Er y bydd gan eich fideo y teitl cywir yn y porwr, nid ydym ni wedi gallu ei ddiweddaru yn y gronfa ddata."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Mân-lun"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Bar amser"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Klør (kulør)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Samarbejde"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Samarbejde"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Stor tekst"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Lær"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Få mere at vide om tilstødende links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operatører"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Muligheder"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Eller"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Fjern link"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Fjern Studio-medier"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Erstat alle"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Selvom din video har den rigtige titel i browseren, kunne vi ikke opdatere den i databasen."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Thumbnail"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Tidslinje"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Klør (kulør)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Samarbejde"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Samarbejde"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Stor tekst"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Lær"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Få mere at vide om tilstødende links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operatører"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Muligheder"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Eller"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Fjern link"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Fjern Studio-medier"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Erstat alle"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Selvom din video har den rigtige titel i browseren, kunne vi ikke opdatere den i databasen."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Thumbnail"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Tidslinje"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Kreuz (Spielkartenfarbe)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Collab"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Collaborations"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Großer Text"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Lernen"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Weitere Informationen über nebenstehende Links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operatoren"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Optionen"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Oder"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Link entfernen"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Studio-Medien entfernen"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Alle ersetzen"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Obwohl Ihr Video im Browser den korrekten Titel hat, konnten wir ihn in der Datenbank nicht aktualisieren."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Miniaturansicht"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Zeitleiste"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Clubs (Suit)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Collab"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Collaborations"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Large text"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Learn"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Learn more about adjacent links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operators"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Options"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Or"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Remove Link"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Remove Studio Media"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Replace All"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Though your video will have the correct title in the browser, we failed to update it in the database."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Thumbnail"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Timebar"
2331
2346
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Clubs (Suit)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Collab"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Collaborations"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Large text"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Learn"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Learn more about adjacent links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operators"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Options"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Or"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Remove Link"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Remove Studio Media"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Replace All"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Though your video will have the correct title in the browser, we failed to update it in the database."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Thumbnail"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Time bar"
2331
2346
  },
@@ -795,6 +795,12 @@ const locale = {
795
795
  "file_name_8fd421ff": {
796
796
  "message": "File name"
797
797
  },
798
+ "file_preview_21667a6e": {
799
+ "message": "File preview"
800
+ },
801
+ "file_preview_for_filename_ab314195": {
802
+ "message": "File preview for { fileName }"
803
+ },
798
804
  "file_storage_quota_exceeded_b7846cd1": {
799
805
  "message": "File storage quota exceeded"
800
806
  },
@@ -334,6 +334,9 @@ const locale = {
334
334
  "clubs_suit_c1ffedff": {
335
335
  "message": "Clubs (Suit)"
336
336
  },
337
+ "collab_575ac7bc": {
338
+ "message": "Collab"
339
+ },
337
340
  "collaborations_5c56c15f": {
338
341
  "message": "Collaborations"
339
342
  },
@@ -1180,6 +1183,9 @@ const locale = {
1180
1183
  "large_text_e7ba08cd": {
1181
1184
  "message": "Large text"
1182
1185
  },
1186
+ "learn_ad3b3505": {
1187
+ "message": "Learn"
1188
+ },
1183
1189
  "learn_more_about_adjacent_links_2cb9762c": {
1184
1190
  "message": "Learn more about adjacent links"
1185
1191
  },
@@ -1582,6 +1588,9 @@ const locale = {
1582
1588
  "operators_a2ef9a93": {
1583
1589
  "message": "Operators"
1584
1590
  },
1591
+ "options_3ab0ea65": {
1592
+ "message": "Options"
1593
+ },
1585
1594
  "or_9b70ccaa": {
1586
1595
  "message": "Or"
1587
1596
  },
@@ -1837,6 +1846,9 @@ const locale = {
1837
1846
  "remove_link_d1f2f4d0": {
1838
1847
  "message": "Remove Link"
1839
1848
  },
1849
+ "remove_studio_media_f913e502": {
1850
+ "message": "Remove Studio Media"
1851
+ },
1840
1852
  "replace_all_d3d68b3": {
1841
1853
  "message": "Replace All"
1842
1854
  },
@@ -2326,6 +2338,9 @@ const locale = {
2326
2338
  "though_your_video_will_have_the_correct_title_in_t_90e427f3": {
2327
2339
  "message": "Though your video will have the correct title in the browser, we failed to update it in the database."
2328
2340
  },
2341
+ "thumbnail_e0de666f": {
2342
+ "message": "Thumbnail"
2343
+ },
2329
2344
  "timebar_a4d18443": {
2330
2345
  "message": "Timebar"
2331
2346
  },