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