@flozy/editor 11.0.8 → 11.1.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 (58) hide show
  1. package/dist/Editor/ChatEditor.js +10 -11
  2. package/dist/Editor/CommonEditor.js +14 -66
  3. package/dist/Editor/Editor.css +9 -4
  4. package/dist/Editor/Elements/AI/PopoverAIInput.js +3 -11
  5. package/dist/Editor/Elements/AI/Styles.js +0 -1
  6. package/dist/Editor/Elements/Accordion/Accordion.js +22 -28
  7. package/dist/Editor/Elements/Accordion/AccordionButton.js +3 -12
  8. package/dist/Editor/Elements/Button/EditorButton.js +0 -1
  9. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/MultiSelect.js +454 -0
  10. package/dist/Editor/Elements/Embed/Embed.js +2 -1
  11. package/dist/Editor/Elements/Embed/Image.js +14 -7
  12. package/dist/Editor/Elements/Embed/Video.js +40 -25
  13. package/dist/Editor/Elements/Form/Form.js +10 -35
  14. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +4 -2
  15. package/dist/Editor/Elements/FreeGrid/FreeGridBox.js +3 -3
  16. package/dist/Editor/Elements/FreeGrid/Options/More.js +7 -7
  17. package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +2 -3
  18. package/dist/Editor/Elements/Signature/SignaturePopup.js +6 -24
  19. package/dist/Editor/Elements/SimpleText/style.js +2 -2
  20. package/dist/Editor/Elements/Table/Table.js +3 -3
  21. package/dist/Editor/Elements/Title/title.js +6 -6
  22. package/dist/Editor/Elements/Variables/VariableButton.js +1 -10
  23. package/dist/Editor/MiniEditor.js +1 -2
  24. package/dist/Editor/Styles/EditorStyles.js +1 -5
  25. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/MiniColorPicker.js +2 -2
  26. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/SelectList.js +7 -25
  27. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +4 -10
  28. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +3 -5
  29. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +2 -7
  30. package/dist/Editor/Toolbar/PopupTool/index.js +0 -1
  31. package/dist/Editor/Toolbar/toolbarGroups.js +4 -8
  32. package/dist/Editor/common/ColorPickerButton.js +0 -3
  33. package/dist/Editor/common/FontLoader/FontLoader.js +0 -3
  34. package/dist/Editor/common/LinkSettings/NavComponents.js +2 -6
  35. package/dist/Editor/common/MentionsPopup/index.js +1 -9
  36. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +0 -1
  37. package/dist/Editor/common/RnD/ElementSettings/Settings/TextSettings.js +1 -7
  38. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +2 -11
  39. package/dist/Editor/common/RnD/VirtualElement/helper.js +62 -72
  40. package/dist/Editor/common/Shorthands/elements.js +4 -8
  41. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +0 -5
  42. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +8 -16
  43. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +3 -3
  44. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +1 -3
  45. package/dist/Editor/common/Uploader.js +6 -13
  46. package/dist/Editor/commonStyle.js +15 -30
  47. package/dist/Editor/helper/index.js +1 -6
  48. package/dist/Editor/hooks/useMouseMove.js +4 -1
  49. package/dist/Editor/plugins/withEmbeds.js +0 -11
  50. package/dist/Editor/plugins/withHTML.js +0 -2
  51. package/dist/Editor/utils/SlateUtilityFunctions.js +3 -30
  52. package/dist/Editor/utils/accordion.js +39 -67
  53. package/dist/Editor/utils/draftToSlate.js +2 -3
  54. package/dist/Editor/utils/events.js +89 -94
  55. package/dist/Editor/utils/helper.js +20 -24
  56. package/package.json +4 -4
  57. package/dist/Editor/common/StyleBuilder/fieldTypes/embedUpload.js +0 -115
  58. package/dist/Editor/helper/textIndeces.js +0 -58
@@ -0,0 +1,454 @@
1
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
2
+ import Autocomplete from "@mui/material/Autocomplete";
3
+ import Box from "@mui/material/Box";
4
+ import Chip from "@mui/material/Chip";
5
+ import Divider from "@mui/material/Divider";
6
+ import Popover from "@mui/material/Popover";
7
+ import TextField from "@mui/material/TextField";
8
+ import Typography from "@mui/material/Typography";
9
+ import List from "@mui/material/List";
10
+ import ListItem from "@mui/material/ListItem";
11
+ import ListItemButton from "@mui/material/ListItemButton";
12
+ import IconButton from "@mui/material/IconButton";
13
+ import SwipeableDrawer from "@mui/material/SwipeableDrawer";
14
+ import Tooltip from "@mui/material/Tooltip";
15
+ import { CloseIcon } from "../../../../../common/iconslist";
16
+ import { useEditorContext } from "../../../../../hooks/useMouseMove";
17
+ import Icon from "../../../../../common/Icon";
18
+ import { colors } from "../../../../Color Picker/defaultColors";
19
+ import PropertySettings from "../../Options";
20
+ import SnackbarAlert from "../../../../../common/SnackBar";
21
+ import { jsx as _jsx } from "react/jsx-runtime";
22
+ import { jsxs as _jsxs } from "react/jsx-runtime";
23
+ const EXCLUDED_COLORS = new Set(["#000000", "#0F172A", "#2563EB", "#FFFFFF", "#64748B"]);
24
+ const DEFAULT_COLORS = colors?.filter(f => !f?.includes("linear") && !EXCLUDED_COLORS?.has(f));
25
+ const generateRandomColor = () => {
26
+ const randomIndex = Math.floor(Math.random() * DEFAULT_COLORS?.length);
27
+ return DEFAULT_COLORS[randomIndex];
28
+ };
29
+ const MultiSelectWithPopover = props => {
30
+ const {
31
+ options = [],
32
+ value,
33
+ onChange,
34
+ onUpdate,
35
+ property,
36
+ wrapColumn = false,
37
+ translation
38
+ } = props;
39
+ const [anchorEl, setAnchorEl] = useState(null);
40
+ const [anchorElOption, setAnchorElOption] = useState(null);
41
+ const [currentIndex, setCurrentIndex] = useState(null);
42
+ const [selectedOptions, setSelectedOptions] = useState(value);
43
+ const [availableOptions, setAvailableOptions] = useState(options);
44
+ const [showSnackBar, setShowSnackBar] = useState(false);
45
+ const [chipColor, setChipColor] = useState(generateRandomColor());
46
+ const [inputValue, setInputValue] = useState("");
47
+ const {
48
+ theme
49
+ } = useEditorContext();
50
+ const isMobile = window.matchMedia("(max-width: 899px)")?.matches || false;
51
+ const PopoverComponent = isMobile ? SwipeableDrawer : Popover;
52
+ const mode = useMemo(() => ({
53
+ type: "editOptionMulti",
54
+ edit: {
55
+ label: "Multi Select",
56
+ visible: true,
57
+ key: property,
58
+ type: "multi-select",
59
+ options: options || [],
60
+ optionIndex: currentIndex,
61
+ hideBackButton: true
62
+ }
63
+ }), [options, property, currentIndex]);
64
+ const customScrollStyles = {
65
+ scrollbarWidth: "thin",
66
+ scrollbarColor: `${theme?.palette?.editor?.brainPopupScroll} transparent`,
67
+ "&::-webkit-scrollbar": {
68
+ width: "6px"
69
+ },
70
+ "&::-webkit-scrollbar-thumb": {
71
+ backgroundColor: theme?.palette?.editor?.brainPopupScroll,
72
+ borderRadius: "3px"
73
+ },
74
+ "&::-webkit-scrollbar-track": {
75
+ display: "none"
76
+ }
77
+ };
78
+ useEffect(() => {
79
+ if (inputValue?.trim() && !chipColor) {
80
+ setChipColor(generateRandomColor());
81
+ }
82
+ }, [inputValue, chipColor]);
83
+ useEffect(() => {
84
+ if (JSON.stringify(options) !== JSON.stringify(availableOptions)) {
85
+ setAvailableOptions(options);
86
+ }
87
+ }, [options, availableOptions]);
88
+ const handleOpenPopover = useCallback(event => {
89
+ setAnchorEl(event.currentTarget);
90
+ }, []);
91
+ const handleClosePopover = useCallback(e => {
92
+ e?.stopPropagation();
93
+ setAnchorEl(null);
94
+ }, []);
95
+ const handleAddOption = newValue => {
96
+ const trimmedValue = newValue?.trim();
97
+ if (!trimmedValue) return;
98
+ const newOption = {
99
+ value: trimmedValue,
100
+ color: chipColor
101
+ };
102
+ if (!availableOptions?.some(opt => opt?.value === trimmedValue)) {
103
+ setAvailableOptions(prev => [...prev, newOption]);
104
+ setSelectedOptions(prev => [...prev, newOption]);
105
+ onUpdate([newOption, ...availableOptions]);
106
+ }
107
+ setInputValue("");
108
+ setChipColor("");
109
+ };
110
+ const onClose = () => {
111
+ setAnchorEl(anchorElOption);
112
+ setAnchorElOption(null);
113
+ };
114
+ const onEditOption = (type, data) => {
115
+ const updateData = data?.edit ? data?.edit?.options : data?.options;
116
+ onUpdate(updateData);
117
+ if (data?.edit?.options) {
118
+ const updatedSelectedOptions = selectedOptions?.filter(selOption => updateData?.some(availOption => availOption?.value === selOption?.value && availOption?.color === selOption?.color));
119
+ setSelectedOptions(updatedSelectedOptions);
120
+ onClose();
121
+ }
122
+ };
123
+ const handleEditOption = (e, index) => {
124
+ e.stopPropagation();
125
+ setCurrentIndex(index);
126
+ setAnchorElOption(anchorEl);
127
+ setAnchorEl(null);
128
+ };
129
+ const handleSelectOption = option => {
130
+ if (!selectedOptions?.some(opt => opt?.value === option?.value)) {
131
+ const updatedOptions = [...selectedOptions, option];
132
+ setSelectedOptions(updatedOptions);
133
+ onChange(updatedOptions);
134
+ } else {
135
+ setShowSnackBar(true);
136
+ }
137
+ };
138
+ const handleClearSelection = () => {
139
+ setSelectedOptions([]);
140
+ };
141
+ const handleDeleteChip = (event, option) => {
142
+ event.stopPropagation();
143
+ setSelectedOptions(prev => {
144
+ const updatedOptions = prev.filter(selected => selected?.value !== option?.value);
145
+ onChange(updatedOptions);
146
+ return updatedOptions;
147
+ });
148
+ };
149
+ const filteredOptions = availableOptions?.filter(option => option?.value?.toLowerCase()?.includes(inputValue?.toLowerCase()));
150
+ const isExactMatch = availableOptions?.some(opt => opt?.value?.toLowerCase() === inputValue?.toLowerCase());
151
+ const open = Boolean(anchorEl);
152
+ const openEditOption = Boolean(anchorElOption);
153
+ const id = open ? "autocomplete-popover" : undefined;
154
+ return /*#__PURE__*/_jsxs("div", {
155
+ children: [/*#__PURE__*/_jsx(Box, {
156
+ sx: {
157
+ display: "flex",
158
+ flexWrap: wrapColumn ? "wrap" : "nowrap",
159
+ overflowX: wrapColumn ? "hidden" : "auto",
160
+ gap: 0.5,
161
+ padding: "8px",
162
+ cursor: "pointer"
163
+ },
164
+ onClick: handleOpenPopover,
165
+ children: selectedOptions?.map((option, index) => /*#__PURE__*/_jsx(Chip, {
166
+ label: option?.value,
167
+ onDelete: event => {
168
+ handleDeleteChip(event, option);
169
+ },
170
+ deleteIcon: /*#__PURE__*/_jsx(CloseIcon, {}),
171
+ variant: "filled",
172
+ sx: {
173
+ backgroundColor: option?.color,
174
+ color: '#0F172A',
175
+ "& .MuiChip-deleteIcon": {
176
+ flexShrink: 0,
177
+ "& path": {
178
+ stroke: '#0F172A !important'
179
+ }
180
+ },
181
+ "&:hover": {
182
+ opacity: 0.8
183
+ }
184
+ }
185
+ }, index))
186
+ }), /*#__PURE__*/_jsx(PopoverComponent, {
187
+ id: id,
188
+ open: open,
189
+ anchorEl: anchorEl,
190
+ anchor: "bottom",
191
+ onClose: e => handleClosePopover(e),
192
+ anchorOrigin: {
193
+ vertical: "top",
194
+ horizontal: "left"
195
+ },
196
+ transformOrigin: {
197
+ vertical: "top",
198
+ horizontal: "left"
199
+ },
200
+ sx: {
201
+ "& .MuiPaper-root": {
202
+ borderRadius: "20px",
203
+ background: theme?.palette?.editor?.textFormatBgColor,
204
+ border: `1px solid ${theme?.palette?.editor?.popUpBorderColor}`,
205
+ boxShadow: "0px 4px 10px 0px #00000029"
206
+ }
207
+ },
208
+ disableAutoFocus: true,
209
+ disableEnforceFocus: true,
210
+ disableRestoreFocus: true,
211
+ children: /*#__PURE__*/_jsxs(Box, {
212
+ sx: {
213
+ width: isMobile ? "100%" : 300
214
+ },
215
+ children: [/*#__PURE__*/_jsx(Autocomplete, {
216
+ multiple: true,
217
+ freeSolo: true,
218
+ disablePortal: true,
219
+ PopperComponent: () => null,
220
+ sx: {
221
+ "& .MuiFormControl-root": {
222
+ maxHeight: "250px",
223
+ overflowY: "auto",
224
+ overflowX: "hidden",
225
+ pr: '12px',
226
+ pl: '12px',
227
+ marginTop: '12px',
228
+ ...customScrollStyles
229
+ }
230
+ },
231
+ disableClearable: true,
232
+ options: [],
233
+ getOptionLabel: option => options?.value || "",
234
+ value: selectedOptions,
235
+ onChange: (event, newValues) => {
236
+ const addedOptions = newValues?.filter(value => typeof value === "object" || typeof value === "string" && value?.trim() !== "")?.map(value => typeof value === "string" ? {
237
+ value,
238
+ color: chipColor
239
+ } : value);
240
+ const isDuplicate = addedOptions?.some(newOpt => (selectedOptions || [])?.some(opt => opt.value === newOpt.value));
241
+ if (!isDuplicate) {
242
+ setSelectedOptions([...selectedOptions, ...addedOptions]);
243
+ }
244
+ },
245
+ inputValue: inputValue,
246
+ onInputChange: (event, newInputValue) => setInputValue(newInputValue),
247
+ onKeyDown: event => {
248
+ if (event.key === "Enter" && inputValue.trim()) {
249
+ event.preventDefault();
250
+ handleAddOption(inputValue);
251
+ }
252
+ },
253
+ filterOptions: (options, params) => options?.filter(option => option?.value?.toLowerCase()?.includes(params?.inputValue?.toLowerCase())),
254
+ renderInput: params => /*#__PURE__*/_jsx(TextField, {
255
+ ...params,
256
+ variant: "standard",
257
+ InputProps: {
258
+ ...params.InputProps,
259
+ disableUnderline: true,
260
+ sx: {
261
+ display: "flex",
262
+ flexWrap: "wrap",
263
+ fontFamily: "Inter",
264
+ fontWeight: 400,
265
+ fontSize: "12px",
266
+ color: theme?.palette?.editor?.secondaryTextColor,
267
+ "&::placeholder": {
268
+ color: theme?.palette?.editor?.secondaryTextColor
269
+ },
270
+ "& .MuiAutocomplete-input": {
271
+ minWidth: "100px !important"
272
+ }
273
+ },
274
+ endAdornment: /*#__PURE__*/_jsx(Tooltip, {
275
+ arrow: true,
276
+ title: "Clear Selected",
277
+ children: /*#__PURE__*/_jsx(IconButton, {
278
+ onClick: handleClearSelection,
279
+ sx: {
280
+ padding: 0,
281
+ minWidth: "unset",
282
+ "& .MuiSvgIcon-root": {
283
+ fontSize: 20
284
+ },
285
+ '& rect': {
286
+ fill: theme?.palette?.editor?.closeButtonSvgStroke
287
+ },
288
+ '&:hover': {
289
+ backgroundColor: 'transparent'
290
+ }
291
+ },
292
+ children: /*#__PURE__*/_jsx(Icon, {
293
+ icon: "resetIconNew"
294
+ })
295
+ })
296
+ })
297
+ },
298
+ sx: {
299
+ backgroundColor: "transparent",
300
+ fontFamily: 'Inter',
301
+ fontWeight: 400,
302
+ fontSize: '12px'
303
+ },
304
+ placeholder: "Create new one..."
305
+ }),
306
+ renderTags: (tagValues, getTagProps) => tagValues.map((option, index) => /*#__PURE__*/_jsx(Chip, {
307
+ variant: "filled",
308
+ label: option?.value,
309
+ ...getTagProps({
310
+ index
311
+ }),
312
+ onDelete: event => {
313
+ handleDeleteChip(event, option);
314
+ },
315
+ deleteIcon: /*#__PURE__*/_jsx(CloseIcon, {}),
316
+ sx: {
317
+ backgroundColor: option?.color,
318
+ color: '#0F172A',
319
+ "& .MuiChip-deleteIcon": {
320
+ flexShrink: 0,
321
+ "& path": {
322
+ stroke: '#0F172A !important'
323
+ }
324
+ },
325
+ "&:hover": {
326
+ opacity: 0.8
327
+ }
328
+ }
329
+ }, index))
330
+ }), /*#__PURE__*/_jsx(Divider, {
331
+ sx: {
332
+ mt: '12px',
333
+ borderBottom: `1px solid ${theme?.palette?.editor?.popUpBorderColor}`,
334
+ boxShadow: theme?.palette?.editor?.dividerDropShadow
335
+ }
336
+ }), /*#__PURE__*/_jsx(Box, {
337
+ sx: {
338
+ pl: '4px'
339
+ },
340
+ children: /*#__PURE__*/_jsxs(List, {
341
+ sx: {
342
+ maxHeight: "250px",
343
+ overflowY: "auto",
344
+ ...customScrollStyles
345
+ },
346
+ children: [/*#__PURE__*/_jsx(Typography, {
347
+ sx: {
348
+ mb: 1,
349
+ pl: '8px',
350
+ color: theme?.palette?.editor?.secondaryTextColor,
351
+ fontFamily: 'Inter',
352
+ fontWeight: 400,
353
+ fontSize: '12px'
354
+ },
355
+ children: "Choose an option or create one"
356
+ }), filteredOptions?.map((option, index) => /*#__PURE__*/_jsx(ListItem, {
357
+ sx: {
358
+ padding: 0
359
+ },
360
+ disablePadding: true,
361
+ children: /*#__PURE__*/_jsxs(ListItemButton, {
362
+ onClick: () => handleSelectOption(option),
363
+ sx: {
364
+ paddingTop: "4px",
365
+ paddingBottom: "4px",
366
+ justifyContent: 'space-between',
367
+ '&:hover': {
368
+ '& path': {
369
+ stroke: theme?.palette?.editor?.activeColor
370
+ },
371
+ borderRadius: '12px'
372
+ }
373
+ },
374
+ children: [/*#__PURE__*/_jsx(Chip, {
375
+ label: option?.value,
376
+ sx: {
377
+ backgroundColor: option?.color,
378
+ color: '#0F172A',
379
+ fontWeight: 500,
380
+ fontSize: "12px",
381
+ fontFamily: "Inter",
382
+ padding: "4px 12px",
383
+ borderRadius: "16px",
384
+ maxWidth: "180px",
385
+ whiteSpace: "nowrap",
386
+ overflow: "hidden",
387
+ textOverflow: "ellipsis"
388
+ }
389
+ }), /*#__PURE__*/_jsx(IconButton, {
390
+ size: "small",
391
+ sx: {
392
+ '& path': {
393
+ stroke: theme?.palette?.editor?.closeButtonSvgStroke
394
+ },
395
+ '&:hover': {
396
+ backgroundColor: 'transparent'
397
+ }
398
+ },
399
+ onClick: e => handleEditOption(e, index),
400
+ children: /*#__PURE__*/_jsx(Icon, {
401
+ icon: "rightArrow"
402
+ })
403
+ })]
404
+ })
405
+ }, index)), inputValue?.trim() && !isExactMatch && /*#__PURE__*/_jsx(ListItem, {
406
+ disablePadding: true,
407
+ children: /*#__PURE__*/_jsxs(ListItemButton, {
408
+ onClick: () => handleAddOption(inputValue),
409
+ sx: {
410
+ display: "flex",
411
+ alignItems: "center"
412
+ },
413
+ children: [/*#__PURE__*/_jsx(Typography, {
414
+ sx: {
415
+ color: theme?.palette?.editor?.secondaryTextColor,
416
+ marginRight: "6px",
417
+ fontSize: "14px",
418
+ fontFamily: "Inter"
419
+ },
420
+ children: "Create"
421
+ }), /*#__PURE__*/_jsx(Chip, {
422
+ label: `${inputValue}`,
423
+ sx: {
424
+ backgroundColor: chipColor,
425
+ color: '#0F172A',
426
+ fontWeight: 500,
427
+ fontSize: "12px",
428
+ fontFamily: "Inter",
429
+ borderRadius: "16px",
430
+ maxWidth: "180px",
431
+ whiteSpace: "nowrap",
432
+ overflow: "hidden",
433
+ textOverflow: "ellipsis"
434
+ }
435
+ })]
436
+ })
437
+ })]
438
+ })
439
+ })]
440
+ })
441
+ }), openEditOption ? /*#__PURE__*/_jsx(PropertySettings, {
442
+ open: openEditOption,
443
+ anchorEl: anchorElOption,
444
+ mode: mode,
445
+ onClose: onClose,
446
+ onEvent: onEditOption,
447
+ translation: translation
448
+ }) : null, showSnackBar ? /*#__PURE__*/_jsx(SnackbarAlert, {
449
+ message: "Option already selected!",
450
+ setShowSnackBar: setShowSnackBar
451
+ }) : null]
452
+ });
453
+ };
454
+ export default MultiSelectWithPopover;
@@ -1,8 +1,9 @@
1
1
  import React, { useRef, useState } from "react";
2
+ import { Transforms } from "slate";
2
3
  import { ReactEditor } from "slate-react";
3
4
  import Icon from "../../common/Icon";
4
5
  import { isBlockActive } from "../../utils/SlateUtilityFunctions";
5
- import { insertEmbed } from "../../utils/embed";
6
+ import { insertDefaultEmbed, insertEmbed } from "../../utils/embed";
6
7
  import "./Embed.css";
7
8
  import ToolbarIcon from "../../common/ToolbarIcon";
8
9
  import ImageSelector from "../../common/ImageSelector/ImageSelector";
@@ -77,6 +77,7 @@ const ImageContent = props => {
77
77
  objectFit,
78
78
  webAddress,
79
79
  readOnly,
80
+ setOpenSettings,
80
81
  handleImageClick,
81
82
  onTouchEnd,
82
83
  path,
@@ -114,29 +115,35 @@ const ImageContent = props => {
114
115
  children: uploadStatus?.isUploading ? /*#__PURE__*/_jsxs(Grid, {
115
116
  container: true,
116
117
  direction: "row",
117
- sx: {
118
- justifyContent: "space-between",
119
- alignItems: "center"
118
+ style: {
119
+ display: "flex",
120
+ justifyContent: "space-between"
120
121
  },
121
122
  children: [/*#__PURE__*/_jsx(Grid, {
123
+ style: {
124
+ width: "80%"
125
+ },
122
126
  children: /*#__PURE__*/_jsxs(Grid, {
123
127
  container: true,
124
128
  direction: "row",
125
129
  sx: {
126
- justifyContent: "space-between",
127
- alignItems: "center",
128
- gap: 1
130
+ justifyContent: "flex-start",
131
+ alignItems: "center"
132
+ // gap: 1,
129
133
  },
130
134
  children: [/*#__PURE__*/_jsx(Grid, {
131
135
  children: /*#__PURE__*/_jsx(Icon, {
132
136
  icon: "image"
133
137
  })
134
138
  }), /*#__PURE__*/_jsx(Grid, {
139
+ style: {
140
+ width: "80%"
141
+ },
135
142
  children: /*#__PURE__*/_jsxs(Box, {
136
143
  display: "flex",
137
144
  flexDirection: "column",
138
145
  alignItems: "flex-start",
139
- justifyContent: "space-between",
146
+ justifyContent: "flex-start",
140
147
  children: [/*#__PURE__*/_jsx(Box, {
141
148
  className: "truncateText",
142
149
  children: uploadStatus?.fileName
@@ -28,6 +28,10 @@ const TYPE_LABELS = {
28
28
  video: "Embed Video or Other",
29
29
  image: "Embed Image or Other"
30
30
  };
31
+ const detectUrlType = url => {
32
+ if (typeof url !== "string") return "iframe";
33
+ return /\.(mp4|webm|ogg|mov|avi|mkv|flv|wmv)$/i.test(url.trim()) ? "video" : "iframe";
34
+ };
31
35
  const VideoContent = props => {
32
36
  const {
33
37
  resizing,
@@ -40,12 +44,26 @@ const VideoContent = props => {
40
44
  videoSX
41
45
  } = props;
42
46
  const iframeRef = useRef(null);
47
+ const mediaType = detectUrlType(embedURL);
43
48
  useEffect(() => {
44
49
  if (iframeRef.current) {
45
50
  iframeRef.current.src = "about:blank"; // reloading the iframe
46
51
  iframeRef.current.src = embedURL;
47
52
  }
48
53
  }, [embedURL, iframeRef.current]);
54
+ const commonSx = {
55
+ border: "none",
56
+ position: "absolute",
57
+ width: "100%",
58
+ height: "100%",
59
+ maxWidth: "100%",
60
+ left: 0,
61
+ ...(gradientBorder(borderColor) || {}),
62
+ borderWidth: borderWidth || "1px",
63
+ borderStyle: borderStyle || "solid",
64
+ background: bgColor || "transparent",
65
+ ...videoSX
66
+ };
49
67
  return resizing ? /*#__PURE__*/_jsx("div", {
50
68
  style: {
51
69
  width: "100%",
@@ -59,24 +77,14 @@ const VideoContent = props => {
59
77
  icon: "videoPlayer"
60
78
  })
61
79
  }) : /*#__PURE__*/_jsx(Box, {
62
- ref: iframeRef,
63
- component: "iframe",
80
+ component: mediaType,
81
+ ref: mediaType === "iframe" ? iframeRef : undefined,
82
+ src: embedURL,
83
+ controls: mediaType === "video",
84
+ allowFullScreen: mediaType === "iframe",
64
85
  className: "embedd-iframe",
65
- sx: {
66
- border: "none",
67
- position: "absolute",
68
- width: "100%",
69
- height: "100%",
70
- maxWidth: "100%",
71
- left: "0px",
72
- ...(gradientBorder(borderColor) || {}),
73
- borderWidth: borderWidth || "1px",
74
- borderStyle: borderStyle || "solid",
75
- background: bgColor || "transparent",
76
- ...videoSX
77
- },
78
- title: alt,
79
- allowFullScreen: true
86
+ sx: commonSx,
87
+ title: alt
80
88
  });
81
89
  };
82
90
  const VideoPlaceholder = props => {
@@ -92,7 +100,8 @@ const VideoPlaceholder = props => {
92
100
  uploadTerminator,
93
101
  uniqueId,
94
102
  editor,
95
- path
103
+ path,
104
+ embedURL
96
105
  } = props;
97
106
  const cancelUpload = e => {
98
107
  e.stopPropagation();
@@ -115,29 +124,35 @@ const VideoPlaceholder = props => {
115
124
  children: uploadStatus?.isUploading ? /*#__PURE__*/_jsxs(Grid, {
116
125
  container: true,
117
126
  direction: "row",
118
- sx: {
119
- justifyContent: "space-between",
120
- alignItems: "center"
127
+ style: {
128
+ display: "flex",
129
+ justifyContent: "space-between"
121
130
  },
122
131
  children: [/*#__PURE__*/_jsx(Grid, {
132
+ style: {
133
+ width: "80%"
134
+ },
123
135
  children: /*#__PURE__*/_jsxs(Grid, {
124
136
  container: true,
125
137
  direction: "row",
126
138
  sx: {
127
- justifyContent: "space-between",
128
- alignItems: "center",
129
- gap: 1
139
+ justifyContent: "flex-start",
140
+ alignItems: "center"
141
+ // gap: 1,
130
142
  },
131
143
  children: [/*#__PURE__*/_jsx(Grid, {
132
144
  children: /*#__PURE__*/_jsx(Icon, {
133
145
  icon: "image"
134
146
  })
135
147
  }), /*#__PURE__*/_jsx(Grid, {
148
+ style: {
149
+ width: "80%"
150
+ },
136
151
  children: /*#__PURE__*/_jsxs(Box, {
137
152
  display: "flex",
138
153
  flexDirection: "column",
139
154
  alignItems: "flex-start",
140
- justifyContent: "space-between",
155
+ justifyContent: "flex-start",
141
156
  children: [/*#__PURE__*/_jsx(Box, {
142
157
  className: "truncateText",
143
158
  children: uploadStatus?.fileName