@flozy/editor 5.3.8 → 5.4.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 (192) hide show
  1. package/dist/Editor/ChatEditor.js +25 -34
  2. package/dist/Editor/CommonEditor.js +29 -15
  3. package/dist/Editor/Editor.css +100 -18
  4. package/dist/Editor/Elements/AI/AIInput.js +0 -1
  5. package/dist/Editor/Elements/AI/CustomSelect.js +19 -11
  6. package/dist/Editor/Elements/AI/PopoverAIInput.js +58 -52
  7. package/dist/Editor/Elements/AI/Styles.js +24 -6
  8. package/dist/Editor/Elements/Accordion/Accordion.js +8 -1
  9. package/dist/Editor/Elements/AppHeader/AppHeader.js +6 -6
  10. package/dist/Editor/Elements/Button/EditorButton.js +9 -2
  11. package/dist/Editor/Elements/Carousel/CarouselItem.js +11 -3
  12. package/dist/Editor/Elements/Color Picker/ColorButtons.js +7 -5
  13. package/dist/Editor/Elements/Color Picker/Styles.js +7 -3
  14. package/dist/Editor/Elements/Color Picker/defaultColors.js +2 -2
  15. package/dist/Editor/Elements/DataView/DataView.js +124 -0
  16. package/dist/Editor/Elements/DataView/DataViewButton.js +23 -0
  17. package/dist/Editor/Elements/DataView/Layouts/ColumnView.js +67 -0
  18. package/dist/Editor/Elements/DataView/Layouts/DataTypes/CheckType.js +33 -0
  19. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/Select.js +162 -0
  20. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/SimpleSelect.js +40 -0
  21. package/dist/Editor/Elements/DataView/Layouts/DataTypes/Components/styles.js +67 -0
  22. package/dist/Editor/Elements/DataView/Layouts/DataTypes/DateType.js +35 -0
  23. package/dist/Editor/Elements/DataView/Layouts/DataTypes/MultiSelectType.js +39 -0
  24. package/dist/Editor/Elements/DataView/Layouts/DataTypes/NumberType.js +30 -0
  25. package/dist/Editor/Elements/DataView/Layouts/DataTypes/PersonType.js +30 -0
  26. package/dist/Editor/Elements/DataView/Layouts/DataTypes/SelectType.js +35 -0
  27. package/dist/Editor/Elements/DataView/Layouts/DataTypes/TextType.js +36 -0
  28. package/dist/Editor/Elements/DataView/Layouts/DataTypes/index.js +17 -0
  29. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseField.js +29 -0
  30. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/ChooseSort.js +38 -0
  31. package/dist/Editor/Elements/DataView/Layouts/FilterSort/SortOptions/index.js +74 -0
  32. package/dist/Editor/Elements/DataView/Layouts/FilterSort/index.js +64 -0
  33. package/dist/Editor/Elements/DataView/Layouts/FilterSort/styles.js +106 -0
  34. package/dist/Editor/Elements/DataView/Layouts/FilterView.js +174 -0
  35. package/dist/Editor/Elements/DataView/Layouts/Formula.js +29 -0
  36. package/dist/Editor/Elements/DataView/Layouts/Options/AddOptions.js +113 -0
  37. package/dist/Editor/Elements/DataView/Layouts/Options/AddProperty.js +37 -0
  38. package/dist/Editor/Elements/DataView/Layouts/Options/AllProperties.js +111 -0
  39. package/dist/Editor/Elements/DataView/Layouts/Options/ChangeProperty.js +60 -0
  40. package/dist/Editor/Elements/DataView/Layouts/Options/ColumnsList.js +36 -0
  41. package/dist/Editor/Elements/DataView/Layouts/Options/Constants.js +101 -0
  42. package/dist/Editor/Elements/DataView/Layouts/Options/EditOption.js +160 -0
  43. package/dist/Editor/Elements/DataView/Layouts/Options/EditProperty.js +190 -0
  44. package/dist/Editor/Elements/DataView/Layouts/Options/FilterProperty.js +42 -0
  45. package/dist/Editor/Elements/DataView/Layouts/Options/PropertyList.js +30 -0
  46. package/dist/Editor/Elements/DataView/Layouts/Options/index.js +110 -0
  47. package/dist/Editor/Elements/DataView/Layouts/Options/styles.js +179 -0
  48. package/dist/Editor/Elements/DataView/Layouts/TableStyles.js +112 -0
  49. package/dist/Editor/Elements/DataView/Layouts/TableView.js +227 -0
  50. package/dist/Editor/Elements/DataView/Layouts/ViewData.js +80 -0
  51. package/dist/Editor/Elements/DataView/Layouts/colStyles.js +10 -0
  52. package/dist/Editor/Elements/DataView/Layouts/index.js +25 -0
  53. package/dist/Editor/Elements/DataView/Providers/DataViewProvider.js +281 -0
  54. package/dist/Editor/Elements/DataView/Utils/globalSearch.js +15 -0
  55. package/dist/Editor/Elements/DataView/Utils/multiSortRows.js +74 -0
  56. package/dist/Editor/Elements/DataView/styles.js +154 -0
  57. package/dist/Editor/Elements/Divider/Divider.js +36 -20
  58. package/dist/Editor/Elements/Embed/Image.js +51 -16
  59. package/dist/Editor/Elements/Embed/Video.js +26 -3
  60. package/dist/Editor/Elements/Form/Form.js +39 -2
  61. package/dist/Editor/Elements/Form/FormElements/FormCheckbox.js +7 -1
  62. package/dist/Editor/Elements/Form/FormElements/FormDate.js +7 -1
  63. package/dist/Editor/Elements/Form/FormElements/FormEmail.js +7 -1
  64. package/dist/Editor/Elements/Form/FormElements/FormNumbers.js +7 -1
  65. package/dist/Editor/Elements/Form/FormElements/FormRadioButton.js +7 -1
  66. package/dist/Editor/Elements/Form/FormElements/FormText.js +7 -1
  67. package/dist/Editor/Elements/Form/FormElements/FormTextArea.js +6 -1
  68. package/dist/Editor/Elements/Form/FormPopup.js +12 -9
  69. package/dist/Editor/Elements/FreeGrid/FreeGrid.js +1 -1
  70. package/dist/Editor/Elements/FreeGrid/FreeGridItem.js +20 -1
  71. package/dist/Editor/Elements/FreeGrid/breakpointConstants.js +4 -4
  72. package/dist/Editor/Elements/FreeGrid/styles.js +2 -1
  73. package/dist/Editor/Elements/Grid/GridButton.js +2 -2
  74. package/dist/Editor/Elements/Grid/GridItem.js +47 -36
  75. package/dist/Editor/Elements/Grid/Styles.js +50 -0
  76. package/dist/Editor/Elements/Link/LinkButton.js +1 -1
  77. package/dist/Editor/Elements/List/CheckList.js +2 -1
  78. package/dist/Editor/Elements/Search/SearchAttachment.js +1 -0
  79. package/dist/Editor/Elements/Search/SearchButton.js +1 -0
  80. package/dist/Editor/Elements/Signature/Signature.css +1 -1
  81. package/dist/Editor/Elements/Signature/SignatureOptions/TypeSignature.js +2 -2
  82. package/dist/Editor/Elements/Signature/SignaturePopup.js +17 -52
  83. package/dist/Editor/Elements/SimpleText/index.js +8 -1
  84. package/dist/Editor/Elements/SimpleText/style.js +20 -1
  85. package/dist/Editor/Elements/Table/AddRowCol.js +77 -0
  86. package/dist/Editor/Elements/Table/DragButton.js +142 -0
  87. package/dist/Editor/Elements/Table/DragStyles.js +70 -0
  88. package/dist/Editor/Elements/Table/Draggable.js +25 -0
  89. package/dist/Editor/Elements/Table/Droppable.js +53 -0
  90. package/dist/Editor/Elements/Table/Styles.js +82 -79
  91. package/dist/Editor/Elements/Table/Table.js +258 -140
  92. package/dist/Editor/Elements/Table/TableCell.js +365 -111
  93. package/dist/Editor/Elements/Table/TablePopup.js +9 -3
  94. package/dist/Editor/Elements/Table/TableRow.js +10 -2
  95. package/dist/Editor/Elements/Table/TableTool.js +101 -0
  96. package/dist/Editor/Elements/Table/tableHelper.js +71 -0
  97. package/dist/Editor/Elements/TopBanner/TopBanner.js +2 -1
  98. package/dist/Editor/MiniEditor.js +15 -1
  99. package/dist/Editor/Styles/EditorStyles.js +13 -4
  100. package/dist/Editor/Toolbar/FormatTools/BlockButton.js +10 -0
  101. package/dist/Editor/Toolbar/FormatTools/Dropdown.js +7 -12
  102. package/dist/Editor/Toolbar/FormatTools/FontFamilyAutocomplete.js +26 -4
  103. package/dist/Editor/Toolbar/FormatTools/MarkButton.js +3 -0
  104. package/dist/Editor/Toolbar/FormatTools/TextSize.js +5 -5
  105. package/dist/Editor/Toolbar/Mini/MiniToolbar.js +3 -6
  106. package/dist/Editor/Toolbar/Mini/Styles.js +4 -1
  107. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/InfinityAITool.js +7 -3
  108. package/dist/Editor/Toolbar/PopupTool/MiniTextFormat/index.js +6 -4
  109. package/dist/Editor/Toolbar/PopupTool/PopperHeader.js +19 -15
  110. package/dist/Editor/Toolbar/PopupTool/PopupToolStyle.js +555 -57
  111. package/dist/Editor/Toolbar/PopupTool/TextFormat.js +73 -16
  112. package/dist/Editor/Toolbar/PopupTool/index.js +3 -5
  113. package/dist/Editor/Toolbar/Toolbar.js +6 -0
  114. package/dist/Editor/Toolbar/toolbarGroups.js +4 -0
  115. package/dist/Editor/assets/svg/BrainIcon.js +2 -2
  116. package/dist/Editor/assets/svg/SettingsIcon.js +4 -4
  117. package/dist/Editor/assets/svg/TableIcons.js +220 -0
  118. package/dist/Editor/common/ColorPickerButton.js +85 -45
  119. package/dist/Editor/common/DnD/Draggable.js +2 -1
  120. package/dist/Editor/common/FontLoader/FontLoader.js +4 -4
  121. package/dist/Editor/common/Icon.js +23 -20
  122. package/dist/Editor/common/ImageSelector/Options/Upload.js +2 -1
  123. package/dist/Editor/common/ImageSelector/Styles.js +47 -6
  124. package/dist/Editor/common/ImageSelector/UploadStyles.js +18 -6
  125. package/dist/Editor/common/LinkSettings/NavComponents.js +2 -1
  126. package/dist/Editor/common/LinkSettings/index.js +2 -1
  127. package/dist/Editor/common/MentionsPopup/Styles.js +143 -8
  128. package/dist/Editor/common/MentionsPopup/index.js +1 -1
  129. package/dist/Editor/common/RnD/ElementSettings/Settings/FormSettings.js +108 -12
  130. package/dist/Editor/common/RnD/GuideLines/styles.js +3 -3
  131. package/dist/Editor/common/RnD/ShadowElement.js +1 -1
  132. package/dist/Editor/common/RnD/SwitchViewport/SwitchViewport.js +14 -2
  133. package/dist/Editor/common/RnD/Utils/gridDropItem.js +9 -6
  134. package/dist/Editor/common/RnD/VirtualElement/index.js +5 -1
  135. package/dist/Editor/common/RnD/index.js +3 -2
  136. package/dist/Editor/common/Section/index.js +3 -3
  137. package/dist/Editor/common/Section/styles.js +5 -1
  138. package/dist/Editor/common/Select/index.js +20 -0
  139. package/dist/Editor/common/Select/styles.js +17 -0
  140. package/dist/Editor/common/Shorthands/elements.js +13 -1
  141. package/dist/Editor/common/StyleBuilder/fieldStyle.js +2 -1
  142. package/dist/Editor/common/StyleBuilder/fieldTypes/backgroundImage.js +9 -3
  143. package/dist/Editor/common/StyleBuilder/fieldTypes/bannerSpacing.js +35 -7
  144. package/dist/Editor/common/StyleBuilder/fieldTypes/borderRadius.js +15 -2
  145. package/dist/Editor/common/StyleBuilder/fieldTypes/card.js +10 -2
  146. package/dist/Editor/common/StyleBuilder/fieldTypes/color.js +2 -1
  147. package/dist/Editor/common/StyleBuilder/fieldTypes/fontSize.js +1 -1
  148. package/dist/Editor/common/StyleBuilder/fieldTypes/icons.js +2 -0
  149. package/dist/Editor/common/StyleBuilder/fieldTypes/index.js +3 -1
  150. package/dist/Editor/common/StyleBuilder/fieldTypes/lineSpacing.js +79 -0
  151. package/dist/Editor/common/StyleBuilder/fieldTypes/radiusStyle.js +11 -11
  152. package/dist/Editor/common/StyleBuilder/fieldTypes/saveAsTemplate.js +22 -6
  153. package/dist/Editor/common/StyleBuilder/fieldTypes/selectBox.js +21 -2
  154. package/dist/Editor/common/StyleBuilder/fieldTypes/text.js +20 -4
  155. package/dist/Editor/common/StyleBuilder/fieldTypes/textOptions.js +12 -2
  156. package/dist/Editor/common/StyleBuilder/formStyle.js +268 -149
  157. package/dist/Editor/common/StyleBuilder/index.js +101 -20
  158. package/dist/Editor/common/StyleBuilder/pageSettingsStyle.js +4 -0
  159. package/dist/Editor/common/StyleBuilder/tableStyle.js +69 -25
  160. package/dist/Editor/common/SwipeableDrawer/style.js +15 -4
  161. package/dist/Editor/common/ToolbarIcon.js +1 -1
  162. package/dist/Editor/common/Uploader.js +46 -36
  163. package/dist/Editor/common/iconListV2.js +616 -60
  164. package/dist/Editor/common/iconslist.js +23 -17
  165. package/dist/Editor/commonStyle.js +417 -11
  166. package/dist/Editor/helper/deserialize/index.js +19 -7
  167. package/dist/Editor/helper/enforceDateFormat.js +41 -0
  168. package/dist/Editor/helper/index.js +17 -4
  169. package/dist/Editor/helper/theme.js +24 -1
  170. package/dist/Editor/hooks/useMouseMove.js +5 -2
  171. package/dist/Editor/hooks/useTable.js +210 -0
  172. package/dist/Editor/plugins/withCustomDeleteBackward.js +36 -4
  173. package/dist/Editor/plugins/withEmbeds.js +30 -26
  174. package/dist/Editor/plugins/withHTML.js +61 -10
  175. package/dist/Editor/plugins/withLayout.js +1 -0
  176. package/dist/Editor/utils/SlateUtilityFunctions.js +39 -12
  177. package/dist/Editor/utils/brains.js +1 -1
  178. package/dist/Editor/utils/button.js +4 -4
  179. package/dist/Editor/utils/chatEditor/SlateUtilityFunctions.js +26 -1
  180. package/dist/Editor/utils/customHooks/useResize.js +7 -4
  181. package/dist/Editor/utils/customHooks/useTableResize.js +6 -2
  182. package/dist/Editor/utils/dataView.js +43 -0
  183. package/dist/Editor/utils/embed.js +2 -1
  184. package/dist/Editor/utils/events.js +0 -1
  185. package/dist/Editor/utils/font.js +11 -4
  186. package/dist/Editor/utils/formfield.js +8 -4
  187. package/dist/Editor/utils/helper.js +103 -2
  188. package/dist/Editor/utils/insertNewLine.js +19 -1
  189. package/dist/Editor/utils/pageSettings.js +14 -2
  190. package/dist/Editor/utils/serializeToText.js +2 -0
  191. package/dist/Editor/utils/table.js +228 -24
  192. package/package.json +2 -2
@@ -1,122 +1,166 @@
1
- import React, { useState } from "react";
2
- import { Transforms } from "slate";
3
- import { useSelected, useSlateStatic } from "slate-react";
4
- import { Box, IconButton, Tooltip, Table as TableComp, TableBody, useTheme } from "@mui/material";
5
- import AlignHorizontalLeftIcon from "@mui/icons-material/AlignHorizontalLeft";
6
- import AlignHorizontalRightIcon from "@mui/icons-material/AlignHorizontalRight";
7
- import AlignVerticalTopIcon from "@mui/icons-material/AlignVerticalTop";
8
- import AlignVerticalBottomIcon from "@mui/icons-material/AlignVerticalBottom";
9
- import DeleteForeverIcon from "@mui/icons-material/DeleteForever";
10
- import MoreVertIcon from "@mui/icons-material/MoreVert";
11
- import SettingsIcon from "@mui/icons-material/Settings";
12
- import DeleteCellIcon from "./DeleteCellIcon";
13
- import DeleteRowIcon from "./DeleteRowIcon";
1
+ import React, { useEffect, useRef, useState } from "react";
2
+ import { Editor, Transforms } from "slate";
3
+ import { ReactEditor, useSelected, useSlateStatic } from "slate-react";
4
+ import { Box, IconButton, Tooltip, Table as TableComp, TableBody, useTheme, Popper, ClickAwayListener } from "@mui/material";
14
5
  import { TableUtil } from "../../utils/table";
15
6
  import TablePopup from "./TablePopup";
16
- import { useEditorSelection } from "../../hooks/useMouseMove";
7
+ import { useEditorContext, useEditorSelection } from "../../hooks/useMouseMove";
17
8
  import TableStyles from "./Styles";
18
9
  import "./table.css";
19
10
  import { groupByBreakpoint } from "../../helper/theme";
11
+ import useTable, { TableProvider, getDefaultTableSelection } from "../../hooks/useTable";
12
+ import AddRowCol from "./AddRowCol";
13
+ import TableTool from "./TableTool";
14
+ import { MoreIcon, SettingsIcon } from "../../assets/svg/TableIcons";
15
+ import { getSelectedCls } from "../../utils/helper";
16
+ import SwipeableDrawerComponent from "../../common/SwipeableDrawer";
20
17
  import { jsx as _jsx } from "react/jsx-runtime";
21
18
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
- const TABLE_MENUS = [{
23
- Icon: AlignHorizontalRightIcon,
24
- text: "Insert Columns to the Right",
25
- action: {
26
- type: "insertColumn",
27
- position: "after"
19
+ const hideRowDragBtns = (hide, dragRowBtnCls) => {
20
+ const rowDragBtns = document.querySelectorAll(`.${dragRowBtnCls}`);
21
+ if (rowDragBtns?.length) {
22
+ rowDragBtns?.forEach(btn => btn.style.display = hide);
28
23
  }
29
- }, {
30
- Icon: AlignHorizontalLeftIcon,
31
- text: "Insert Columns to the Left",
32
- action: {
33
- type: "insertColumn",
34
- position: "at"
35
- }
36
- }, {
37
- Icon: AlignVerticalTopIcon,
38
- text: "Insert Row Above",
39
- action: {
40
- type: "insertRow",
41
- positon: "at"
42
- }
43
- }, {
44
- Icon: AlignVerticalBottomIcon,
45
- text: "Insert Row Below",
46
- action: {
47
- type: "insertRow",
48
- position: "after"
49
- }
50
- }, {
51
- Icon: DeleteRowIcon,
52
- text: "Delete Row",
53
- action: {
54
- type: "deleteRow"
55
- }
56
- }, {
57
- Icon: DeleteCellIcon,
58
- text: "Delete Column",
59
- action: {
60
- type: "deleteColumn"
61
- }
62
- }, {
63
- Icon: SettingsIcon,
64
- text: "Settings",
65
- action: {
66
- type: "settings"
67
- }
68
- }, {
69
- Icon: DeleteForeverIcon,
70
- text: "Remove Table",
71
- action: {
72
- type: "remove"
73
- }
74
- }];
24
+ };
25
+ const ToolTableComponent = props => {
26
+ const {
27
+ handleAction,
28
+ editorTheme
29
+ } = props;
30
+ const {
31
+ updateTableSelection
32
+ } = useTable();
33
+ return /*#__PURE__*/_jsx("div", {
34
+ children: /*#__PURE__*/_jsx(TableTool, {
35
+ theme: editorTheme,
36
+ handleToolAction: (type, option) => {
37
+ handleAction(type, option);
38
+ if (type === "duplicate") {
39
+ updateTableSelection(getDefaultTableSelection());
40
+ }
41
+ }
42
+ })
43
+ });
44
+ };
45
+ const MoreTableSettings = props => {
46
+ const {
47
+ exandTools,
48
+ handleAction,
49
+ editorTheme,
50
+ setExpandTools
51
+ } = props;
52
+ const isMobile = window.matchMedia("(max-width: 899px)")?.matches || false;
53
+ return isMobile ? /*#__PURE__*/_jsx(SwipeableDrawerComponent, {
54
+ open: Boolean(exandTools),
55
+ onClose: () => {
56
+ setExpandTools(false);
57
+ },
58
+ swipeableDrawer: false,
59
+ children: /*#__PURE__*/_jsx(ToolTableComponent, {
60
+ handleAction: handleAction,
61
+ editorTheme: editorTheme
62
+ })
63
+ }) : /*#__PURE__*/_jsx(Popper, {
64
+ open: Boolean(exandTools),
65
+ anchorEl: exandTools,
66
+ contentEditable: false,
67
+ sx: {
68
+ zIndex: 2000
69
+ },
70
+ placement: "bottom-start",
71
+ children: /*#__PURE__*/_jsx(ClickAwayListener, {
72
+ onClickAway: () => setExpandTools(false),
73
+ children: /*#__PURE__*/_jsx(ToolTableComponent, {
74
+ handleAction: handleAction,
75
+ editorTheme: editorTheme
76
+ })
77
+ })
78
+ });
79
+ };
80
+ const ToolBar = props => {
81
+ const {
82
+ selected,
83
+ showTool,
84
+ classes,
85
+ handleExpand,
86
+ handleAction,
87
+ exandTools,
88
+ openSetttings
89
+ } = props;
90
+ const {
91
+ getSelectedCells
92
+ } = useTable();
93
+ const viewTool = selected && !showTool && getSelectedCells()?.length <= 1;
94
+ return viewTool ? /*#__PURE__*/_jsxs(Box, {
95
+ component: "div",
96
+ contentEditable: false,
97
+ className: `tableToolBar ${exandTools ? "active" : ""}`,
98
+ sx: classes.tableToolBar,
99
+ children: [/*#__PURE__*/_jsx(Tooltip, {
100
+ title: "Settings",
101
+ arrow: true,
102
+ onClick: () => handleAction("settings"),
103
+ children: /*#__PURE__*/_jsx(IconButton, {
104
+ className: getSelectedCls("toolbtn toggle", openSetttings),
105
+ children: /*#__PURE__*/_jsx(SettingsIcon, {})
106
+ })
107
+ }), /*#__PURE__*/_jsx(Tooltip, {
108
+ title: "Show Tools",
109
+ arrow: true,
110
+ onClick: handleExpand,
111
+ children: /*#__PURE__*/_jsx(IconButton, {
112
+ className: getSelectedCls("toolbtn toggle", exandTools),
113
+ children: /*#__PURE__*/_jsx(MoreIcon, {})
114
+ })
115
+ })]
116
+ }) : null;
117
+ };
75
118
  const Table = props => {
76
119
  const theme = useTheme();
120
+ const {
121
+ theme: editorTheme
122
+ } = useEditorContext();
77
123
  const {
78
124
  element,
79
125
  attributes,
80
126
  children,
81
127
  customProps
82
128
  } = props;
83
- const classes = TableStyles();
129
+ const classes = TableStyles(editorTheme);
84
130
  const {
85
- readOnly
131
+ readOnly,
132
+ isMobile
86
133
  } = customProps;
87
134
  const [openSetttings, setOpenSettings] = useState(false);
88
- const [exandTools, setExpandTools] = useState(false);
135
+ const [exandTools, setExpandTools] = useState(null);
89
136
  const {
90
137
  bgColor,
91
138
  borderColor,
92
- xsHidden
139
+ xsHidden,
140
+ fontFamily,
141
+ fontWeight,
142
+ textSize,
143
+ textColor
93
144
  } = element;
94
145
  const editor = useSlateStatic();
95
146
  const selected = useSelected();
96
147
  const table = new TableUtil(editor);
97
148
  const tableProps = table.getTableProps();
98
149
  const [showTool] = useEditorSelection(editor);
99
- const handleAction = ({
100
- type,
101
- position
102
- }) => () => {
150
+ const tableRef = useRef(null);
151
+ const containerRef = useRef(null);
152
+ const path = ReactEditor.findPath(editor, element);
153
+ const dragRowBtnCls = `table-${path?.toString()?.replaceAll(",", "-")}-row-drag-btn`;
154
+ const handleAction = type => {
103
155
  Transforms.select(editor, editor.selection);
104
156
  switch (type) {
105
- case "insertRow":
106
- table.insertRow(position);
107
- break;
108
- case "insertColumn":
109
- table.insertColumn(position);
110
- break;
111
- case "deleteRow":
112
- table.deleteRow();
113
- break;
114
- case "deleteColumn":
115
- table.deleteColumn();
116
- break;
117
- case "remove":
157
+ case "delete":
118
158
  table.removeTable();
119
159
  break;
160
+ case "duplicate":
161
+ table.duplicateTable();
162
+ setExpandTools(false);
163
+ break;
120
164
  case "settings":
121
165
  if (tableProps) {
122
166
  onSettings(true);
@@ -126,42 +170,16 @@ const Table = props => {
126
170
  return;
127
171
  }
128
172
  };
129
- const handleExpand = () => {
130
- setExpandTools(!exandTools);
131
- };
132
- const ToolBar = () => {
133
- return selected && !showTool ? /*#__PURE__*/_jsxs(Box, {
134
- component: "div",
135
- contentEditable: false,
136
- className: `tableToolBar ${exandTools ? "active" : ""}`,
137
- sx: classes.tableToolBar,
138
- children: [/*#__PURE__*/_jsx(Tooltip, {
139
- title: "Show Tools",
140
- arrow: true,
141
- onClick: handleExpand,
142
- children: /*#__PURE__*/_jsx(IconButton, {
143
- className: "toolbtn toggle",
144
- children: /*#__PURE__*/_jsx(MoreVertIcon, {})
145
- })
146
- }), TABLE_MENUS.map(({
147
- Icon,
148
- text,
149
- action
150
- }) => {
151
- return /*#__PURE__*/_jsx(Tooltip, {
152
- title: text,
153
- arrow: true,
154
- children: /*#__PURE__*/_jsx(IconButton, {
155
- className: `toolbtn ${action?.type}`,
156
- onClick: handleAction(action),
157
- children: /*#__PURE__*/_jsx(Icon, {})
158
- })
159
- }, text);
160
- })]
161
- }) : null;
173
+ const handleExpand = e => {
174
+ setExpandTools(prev => prev ? false : e.currentTarget);
162
175
  };
176
+ useEffect(() => {
177
+ if (!selected) {
178
+ setExpandTools(false);
179
+ }
180
+ }, [selected]);
163
181
  const onSettings = () => {
164
- setOpenSettings(true);
182
+ setOpenSettings(!openSetttings);
165
183
  };
166
184
  const onSave = data => {
167
185
  const updateData = {
@@ -183,28 +201,128 @@ const Table = props => {
183
201
  lg: "inline-block"
184
202
  }
185
203
  }, theme);
186
- return /*#__PURE__*/_jsxs("div", {
187
- style: {
188
- minWidth: "100%",
189
- maxWidth: "100%",
190
- position: "relative"
204
+ const addRow = () => {
205
+ const lastRow = element?.rows - 1;
206
+ const firstCol = 0;
207
+ const lastRowPath = [...path, lastRow, firstCol];
208
+ const position = Editor.start(editor, lastRowPath);
209
+ const selection = {
210
+ anchor: position,
211
+ focus: position
212
+ };
213
+
214
+ // select the last row first col to insert row below
215
+ Transforms.select(editor, selection);
216
+ table.insertRow("after");
217
+ Transforms.deselect(editor);
218
+ };
219
+ const addCol = () => {
220
+ const lastCol = element?.columns - 1;
221
+ const firstRow = 0;
222
+ const lastColumnPath = [...path, firstRow, lastCol];
223
+ const position = Editor.start(editor, lastColumnPath);
224
+ const selection = {
225
+ anchor: position,
226
+ focus: position
227
+ };
228
+
229
+ // select the last row first col to insert row below
230
+ Transforms.select(editor, selection);
231
+ table.insertColumn("after");
232
+ Transforms.deselect(editor);
233
+ };
234
+ const handleRowDragBtns = () => {
235
+ if (containerRef?.current?.scrollLeft > 0) {
236
+ hideRowDragBtns("none", dragRowBtnCls);
237
+ } else {
238
+ hideRowDragBtns("", dragRowBtnCls);
239
+ }
240
+ };
241
+ const handleScroll = () => {
242
+ handleRowDragBtns();
243
+ };
244
+ const onMouseOver = () => {
245
+ if (!isMobile) {
246
+ containerRef?.current?.classList.remove("hideScroll");
247
+ }
248
+ };
249
+ const onMouseLeave = () => {
250
+ if (!isMobile) {
251
+ containerRef?.current?.classList.add("hideScroll");
252
+ }
253
+ };
254
+ const commonAddBtnProps = {
255
+ tableRef,
256
+ containerRef,
257
+ readOnly,
258
+ tableNode: element
259
+ };
260
+ return /*#__PURE__*/_jsxs(TableProvider, {
261
+ editor: editor,
262
+ otherProps: {
263
+ dragRowBtnCls,
264
+ tablePath: path,
265
+ openSetttings,
266
+ exandTools
191
267
  },
192
- children: [/*#__PURE__*/_jsx(TableComp, {
193
- className: readOnly ? "readOnly" : "",
194
- sx: {
195
- ...classes.table,
196
- ...tableSX
197
- },
268
+ children: [/*#__PURE__*/_jsxs("div", {
198
269
  style: {
199
- background: bgColor,
200
- border: borderColor ? `1px solid ${borderColor}` : "",
201
- width: "auto"
270
+ minWidth: "100%",
271
+ maxWidth: "100%",
272
+ position: "relative",
273
+ overflowX: "auto",
274
+ display: "flex",
275
+ paddingTop: "10px",
276
+ lineHeight: 1.43
202
277
  },
203
- children: /*#__PURE__*/_jsx(TableBody, {
204
- ...attributes,
205
- children: children
206
- })
207
- }), !readOnly && /*#__PURE__*/_jsx(ToolBar, {}), openSetttings ? /*#__PURE__*/_jsx(TablePopup, {
278
+ ref: containerRef,
279
+ onScroll: handleScroll,
280
+ onMouseOver: onMouseOver,
281
+ onMouseLeave: onMouseLeave,
282
+ className: "custom-scroll",
283
+ children: [/*#__PURE__*/_jsx(TableComp, {
284
+ className: readOnly ? "readOnly" : "",
285
+ sx: {
286
+ ...classes.table,
287
+ ...tableSX
288
+ },
289
+ style: {
290
+ background: bgColor,
291
+ border: borderColor ? `1px solid ${borderColor}` : "",
292
+ width: "auto",
293
+ fontFamily,
294
+ fontWeight,
295
+ fontSize: textSize,
296
+ color: textColor
297
+ },
298
+ ref: tableRef,
299
+ children: /*#__PURE__*/_jsx(TableBody, {
300
+ ...attributes,
301
+ children: children
302
+ })
303
+ }), /*#__PURE__*/_jsx(AddRowCol, {
304
+ ...commonAddBtnProps,
305
+ addType: "col",
306
+ onAdd: addCol
307
+ })]
308
+ }), /*#__PURE__*/_jsx(AddRowCol, {
309
+ ...commonAddBtnProps,
310
+ addType: "row",
311
+ onAdd: addRow
312
+ }), !readOnly && /*#__PURE__*/_jsx(ToolBar, {
313
+ selected: selected,
314
+ showTool: showTool,
315
+ classes: classes,
316
+ handleExpand: handleExpand,
317
+ handleAction: handleAction,
318
+ exandTools: exandTools,
319
+ openSetttings: openSetttings
320
+ }), /*#__PURE__*/_jsx(MoreTableSettings, {
321
+ exandTools: exandTools,
322
+ handleAction: handleAction,
323
+ editorTheme: editorTheme,
324
+ setExpandTools: setExpandTools
325
+ }), openSetttings ? /*#__PURE__*/_jsx(TablePopup, {
208
326
  element: tableProps?.styleProps || {},
209
327
  onSave: onSave,
210
328
  onClose: onClose,