@mirrormedia/lilith-draft-editor 1.0.0-beta → 1.0.0-beta2

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 (191) hide show
  1. package/lib/draft-js/block-renderer/background-image-block.js +123 -0
  2. package/lib/draft-js/block-renderer/background-video-block.js +133 -0
  3. package/lib/draft-js/block-renderer/color-box-block.js +92 -0
  4. package/lib/draft-js/block-renderer/divider-block.js +24 -0
  5. package/lib/draft-js/block-renderer/embedded-code-block.js +63 -0
  6. package/lib/draft-js/block-renderer/image-block.js +47 -0
  7. package/lib/draft-js/block-renderer/info-box-block.js +89 -0
  8. package/lib/draft-js/block-renderer/media-block.js +65 -0
  9. package/lib/draft-js/block-renderer/related-post-block.js +51 -0
  10. package/lib/draft-js/block-renderer/side-index-block.js +103 -0
  11. package/lib/draft-js/block-renderer/slideshow-block.js +71 -0
  12. package/lib/draft-js/block-renderer/table-block.js +408 -0
  13. package/lib/draft-js/buttons/annotation.js +117 -0
  14. package/lib/draft-js/buttons/background-color.js +123 -0
  15. package/lib/draft-js/buttons/background-image.js +222 -0
  16. package/lib/draft-js/buttons/background-video.js +222 -0
  17. package/lib/draft-js/buttons/color-box.js +172 -0
  18. package/lib/draft-js/buttons/divider.js +63 -0
  19. package/lib/draft-js/buttons/embedded-code.js +134 -0
  20. package/lib/draft-js/buttons/enlarge.js +24 -0
  21. package/lib/draft-js/buttons/font-color.js +116 -0
  22. package/lib/draft-js/buttons/image.js +68 -0
  23. package/lib/draft-js/buttons/info-box.js +147 -0
  24. package/lib/draft-js/buttons/link.js +107 -0
  25. package/lib/draft-js/buttons/media.js +121 -0
  26. package/lib/draft-js/buttons/related-post.js +71 -0
  27. package/lib/draft-js/buttons/selector/align-selector.js +71 -0
  28. package/lib/draft-js/buttons/selector/image-selector.js +428 -0
  29. package/lib/draft-js/buttons/selector/pagination.js +82 -0
  30. package/lib/draft-js/buttons/selector/post-selector.js +317 -0
  31. package/lib/draft-js/buttons/selector/search-box.js +46 -0
  32. package/lib/draft-js/buttons/selector/video-selector.js +284 -0
  33. package/lib/draft-js/buttons/side-index.js +200 -0
  34. package/lib/draft-js/buttons/slideshow.js +71 -0
  35. package/lib/draft-js/buttons/table.js +67 -0
  36. package/lib/draft-js/buttons/text-align.js +88 -0
  37. package/lib/draft-js/editor/basic-editor.js +366 -0
  38. package/lib/draft-js/editor/block-renderer-fn.js +117 -0
  39. package/lib/draft-js/editor/entity-decorator.js +16 -0
  40. package/lib/draft-js/editor/modifier.js +68 -0
  41. package/lib/draft-js/entity-decorator/annotation-decorator.js +86 -0
  42. package/lib/draft-js/entity-decorator/link-decorator.js +39 -0
  43. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.js +138 -0
  44. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +148 -0
  45. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +106 -0
  46. package/lib/website/mirrormedia/custom/block-renderer/divider-block.js +24 -0
  47. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.js +63 -0
  48. package/lib/website/mirrormedia/custom/block-renderer/image-block.js +47 -0
  49. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +103 -0
  50. package/lib/website/mirrormedia/custom/block-renderer/media-block.js +65 -0
  51. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.js +51 -0
  52. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +119 -0
  53. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.js +71 -0
  54. package/lib/website/mirrormedia/custom/block-renderer/table-block.js +455 -0
  55. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.js +86 -0
  56. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.js +39 -0
  57. package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
  58. package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
  59. package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
  60. package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
  61. package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
  62. package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
  63. package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
  64. package/lib/website/mirrormedia/draft-editor/entity-decorator.js +16 -0
  65. package/lib/website/mirrormedia/draft-editor/index.js +799 -0
  66. package/lib/website/mirrormedia/draft-renderer/block-renderer-fn.js +117 -0
  67. package/lib/website/mirrormedia/draft-renderer/entity-decorator.js +16 -0
  68. package/lib/website/mirrormedia/draft-renderer/index.js +160 -0
  69. package/lib/website/readr/custom/block-renderer/background-image-block.js +138 -0
  70. package/lib/website/readr/custom/block-renderer/background-video-block.js +148 -0
  71. package/lib/website/readr/custom/block-renderer/color-box-block.js +106 -0
  72. package/lib/website/readr/custom/block-renderer/divider-block.js +24 -0
  73. package/lib/website/readr/custom/block-renderer/embedded-code-block.js +63 -0
  74. package/lib/website/readr/custom/block-renderer/image-block.js +47 -0
  75. package/lib/website/readr/custom/block-renderer/info-box-block.js +103 -0
  76. package/lib/website/readr/custom/block-renderer/media-block.js +65 -0
  77. package/lib/website/readr/custom/block-renderer/related-post-block.js +51 -0
  78. package/lib/website/readr/custom/block-renderer/side-index-block.js +119 -0
  79. package/lib/website/readr/custom/block-renderer/slideshow-block.js +71 -0
  80. package/lib/website/readr/custom/block-renderer/table-block.js +455 -0
  81. package/lib/website/readr/custom/entity-decorator/annotation-decorator.js +86 -0
  82. package/lib/website/readr/custom/entity-decorator/link-decorator.js +39 -0
  83. package/lib/website/readr/custom/selector/align-selector.js +71 -0
  84. package/lib/website/readr/custom/selector/image-selector.js +427 -0
  85. package/lib/website/readr/custom/selector/pagination.js +82 -0
  86. package/lib/website/readr/custom/selector/post-selector.js +318 -0
  87. package/lib/website/readr/custom/selector/search-box.js +46 -0
  88. package/lib/website/readr/custom/selector/video-selector.js +282 -0
  89. package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
  90. package/lib/website/readr/draft-editor/entity-decorator.js +16 -0
  91. package/lib/website/readr/draft-editor/index.js +799 -0
  92. package/lib/website/readr/draft-renderer/block-renderer-fn.js +117 -0
  93. package/lib/website/readr/draft-renderer/entity-decorator.js +16 -0
  94. package/lib/website/readr/draft-renderer/index.js +160 -0
  95. package/package.json +1 -1
  96. package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
  97. package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
  98. package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
  99. package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
  100. package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
  101. package/lib/draft-js/block-renderer/image-block.tsx +0 -41
  102. package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
  103. package/lib/draft-js/block-renderer/media-block.tsx +0 -36
  104. package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
  105. package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
  106. package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
  107. package/lib/draft-js/block-renderer/table-block.tsx +0 -488
  108. package/lib/draft-js/buttons/annotation.tsx +0 -113
  109. package/lib/draft-js/buttons/background-color.tsx +0 -125
  110. package/lib/draft-js/buttons/background-image.tsx +0 -276
  111. package/lib/draft-js/buttons/background-video.tsx +0 -275
  112. package/lib/draft-js/buttons/color-box.tsx +0 -207
  113. package/lib/draft-js/buttons/divider.tsx +0 -56
  114. package/lib/draft-js/buttons/embedded-code.tsx +0 -126
  115. package/lib/draft-js/buttons/enlarge.tsx +0 -11
  116. package/lib/draft-js/buttons/font-color.tsx +0 -113
  117. package/lib/draft-js/buttons/image.tsx +0 -71
  118. package/lib/draft-js/buttons/info-box.tsx +0 -170
  119. package/lib/draft-js/buttons/link.tsx +0 -103
  120. package/lib/draft-js/buttons/media.tsx +0 -120
  121. package/lib/draft-js/buttons/related-post.tsx +0 -81
  122. package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
  123. package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
  124. package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
  125. package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
  126. package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
  127. package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
  128. package/lib/draft-js/buttons/side-index.tsx +0 -257
  129. package/lib/draft-js/buttons/slideshow.tsx +0 -81
  130. package/lib/draft-js/buttons/table.tsx +0 -63
  131. package/lib/draft-js/buttons/text-align.tsx +0 -88
  132. package/lib/draft-js/editor/basic-editor.tsx +0 -384
  133. package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
  134. package/lib/draft-js/editor/entity-decorator.tsx +0 -7
  135. package/lib/draft-js/editor/modifier.tsx +0 -71
  136. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
  137. package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
  138. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
  139. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
  140. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
  141. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
  142. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
  143. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
  144. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
  145. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
  146. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
  147. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
  148. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
  149. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
  150. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
  151. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
  152. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
  153. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
  154. package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
  155. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
  156. package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
  157. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
  158. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
  159. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
  160. package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
  161. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
  162. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
  163. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
  164. package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
  165. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
  166. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
  167. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
  168. package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
  169. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
  170. package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
  171. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
  172. package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
  173. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
  174. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
  175. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
  176. package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
  177. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
  178. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
  179. package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
  180. package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
  181. package/lib/website/readr/custom/selector/pagination.tsx +0 -83
  182. package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
  183. package/lib/website/readr/custom/selector/search-box.tsx +0 -39
  184. package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
  185. package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
  186. package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
  187. package/lib/website/readr/draft-editor/index.tsx +0 -909
  188. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
  189. package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
  190. package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
  191. package/lib/website/readr/draft-renderer/index.tsx +0 -150
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TableEditorBlock = exports.TableBlock = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _draftJs = require("draft-js");
13
+
14
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ const _ = {
23
+ cloneDeep: _cloneDeep.default
24
+ };
25
+ var ActionType;
26
+
27
+ (function (ActionType) {
28
+ ActionType["Insert"] = "insert";
29
+ ActionType["Delete"] = "delete";
30
+ ActionType["Update"] = "update";
31
+ })(ActionType || (ActionType = {}));
32
+
33
+ var TableEnum;
34
+
35
+ (function (TableEnum) {
36
+ TableEnum["Row"] = "row";
37
+ TableEnum["Column"] = "column";
38
+ })(TableEnum || (TableEnum = {}));
39
+
40
+ function createEmptyRow(colLen = 0, emptyValue) {
41
+ const rtn = [];
42
+
43
+ for (let i = 0; i < colLen; i++) {
44
+ rtn.push(emptyValue);
45
+ }
46
+
47
+ return rtn;
48
+ }
49
+
50
+ function resolveTableStyles(action, tableStyles) {
51
+ switch (action === null || action === void 0 ? void 0 : action.type) {
52
+ case ActionType.Insert:
53
+ {
54
+ if (action.target === TableEnum.Row) {
55
+ const rows = [...tableStyles.rows.slice(0, action.index), {}, ...tableStyles.rows.slice(action.index)];
56
+ return Object.assign({}, tableStyles, {
57
+ rows
58
+ });
59
+ } // TODO: handle target === TableEnum.Column if needed
60
+
61
+
62
+ return tableStyles;
63
+ }
64
+
65
+ case ActionType.Delete:
66
+ {
67
+ if (action.target === TableEnum.Row) {
68
+ const rows = [...tableStyles.rows.slice(0, action.index), ...tableStyles.rows.slice(action.index + 1)];
69
+ return Object.assign({}, tableStyles, {
70
+ rows
71
+ });
72
+ } // TODO: handle target === TableEnum.Column if needed
73
+
74
+
75
+ return tableStyles;
76
+ }
77
+ // TODO: handle action.type === ActionType.Update if needed
78
+
79
+ default:
80
+ {
81
+ return tableStyles;
82
+ }
83
+ }
84
+ }
85
+
86
+ function resolveTableData(action, tableData) {
87
+ switch (action === null || action === void 0 ? void 0 : action.type) {
88
+ case ActionType.Insert:
89
+ {
90
+ var _tableData$;
91
+
92
+ if (typeof (action === null || action === void 0 ? void 0 : action.index) !== 'number') {
93
+ return tableData;
94
+ }
95
+
96
+ if ((action === null || action === void 0 ? void 0 : action.target) === TableEnum.Column) {
97
+ // add the new column at specific position in each row
98
+ return tableData.map(r => [...r.slice(0, action === null || action === void 0 ? void 0 : action.index), _draftJs.EditorState.createEmpty(), ...r.slice(action === null || action === void 0 ? void 0 : action.index)]);
99
+ } // add the new row
100
+
101
+
102
+ return [...tableData.slice(0, action === null || action === void 0 ? void 0 : action.index), createEmptyRow(tableData === null || tableData === void 0 ? void 0 : (_tableData$ = tableData[0]) === null || _tableData$ === void 0 ? void 0 : _tableData$.length, _draftJs.EditorState.createEmpty()), ...tableData.slice(action === null || action === void 0 ? void 0 : action.index)];
103
+ }
104
+
105
+ case ActionType.Delete:
106
+ {
107
+ if (typeof (action === null || action === void 0 ? void 0 : action.index) !== 'number') {
108
+ return tableData;
109
+ }
110
+
111
+ if ((action === null || action === void 0 ? void 0 : action.target) === 'column') {
112
+ // delete the column at specific position in each row
113
+ return tableData.map(r => [...r.slice(0, action.index), ...r.slice(action.index + 1)]);
114
+ } // delete the column
115
+
116
+
117
+ return [...tableData.slice(0, action.index), ...tableData.slice(action.index + 1)];
118
+ }
119
+
120
+ case ActionType.Update:
121
+ {
122
+ // The reason we copy the array is to make sure
123
+ // that React component re-renders.
124
+ const copiedData = [...tableData];
125
+
126
+ if (typeof (action === null || action === void 0 ? void 0 : action.rIndex) !== 'number' || typeof (action === null || action === void 0 ? void 0 : action.cIndex) !== 'number') {
127
+ return copiedData;
128
+ }
129
+
130
+ copiedData[action.rIndex][action.cIndex] = action === null || action === void 0 ? void 0 : action.value;
131
+ return copiedData;
132
+ }
133
+
134
+ default:
135
+ {
136
+ return tableData;
137
+ }
138
+ }
139
+ }
140
+
141
+ function convertTableDataFromRaw(rawTableData) {
142
+ return rawTableData.map(rowData => {
143
+ return rowData.map(colData => {
144
+ const contentState = (0, _draftJs.convertFromRaw)(colData);
145
+ return _draftJs.EditorState.createWithContent(contentState);
146
+ });
147
+ });
148
+ }
149
+
150
+ function convertTableDataToRaw(tableData) {
151
+ return tableData.map(rowData => {
152
+ return rowData.map(colData => {
153
+ return (0, _draftJs.convertToRaw)(colData.getCurrentContent());
154
+ });
155
+ });
156
+ }
157
+
158
+ const Table = _styledComponents.default.div`
159
+ display: table;
160
+ width: 95%;
161
+ border-collapse: collapse;
162
+ `;
163
+ const Tr = _styledComponents.default.div`
164
+ display: table-row;
165
+ `;
166
+ const Td = _styledComponents.default.div`
167
+ display: table-cell;
168
+ border-width: 1px;
169
+ min-width: 100px;
170
+ min-height: 40px;
171
+ padding: 10px;
172
+ `;
173
+ const StyledFirstRow = _styledComponents.default.div`
174
+ display: table-row;
175
+ height: 10px;
176
+
177
+ div {
178
+ display: table-cell;
179
+ position: relative;
180
+ }
181
+
182
+ span {
183
+ cursor: pointer;
184
+ line-height: 10px;
185
+ }
186
+
187
+ span:first-child {
188
+ position: absolute;
189
+ right: 50%;
190
+ transform: translateX(50%);
191
+ }
192
+
193
+ span:first-child:before {
194
+ content: '•';
195
+ }
196
+
197
+ span:first-child:hover:before {
198
+ content: '➖';
199
+ }
200
+
201
+ span:last-child {
202
+ position: absolute;
203
+ right: -5px;
204
+ }
205
+
206
+ span:last-child:before {
207
+ content: '•';
208
+ }
209
+
210
+ span:last-child:hover:before {
211
+ content: '➕';
212
+ }
213
+ `;
214
+ const StyledFirstColumn = _styledComponents.default.div`
215
+ display: table-cell;
216
+ width: 10px;
217
+ position: relative;
218
+
219
+ span {
220
+ cursor: pointer;
221
+ }
222
+
223
+ span:first-child {
224
+ position: absolute;
225
+ bottom: 50%;
226
+ right: 0px;
227
+ transform: translateY(50%);
228
+ }
229
+
230
+ span:first-child:before {
231
+ content: '•';
232
+ }
233
+
234
+ span:first-child:hover:before {
235
+ content: '➖';
236
+ }
237
+
238
+ span:last-child {
239
+ position: absolute;
240
+ bottom: -10px;
241
+ right: 0px;
242
+ }
243
+
244
+ span:last-child:before {
245
+ content: '•';
246
+ }
247
+
248
+ span:last-child:hover:before {
249
+ content: '➕';
250
+ }
251
+ `;
252
+ const TableBlockContainer = _styledComponents.default.div`
253
+ margin: 15px 0;
254
+ position: relative;
255
+ overflow: scroll;
256
+ padding: 15px;
257
+ `;
258
+ const StyledTable = _styledComponents.default.div`
259
+ display: table;
260
+ width: 95%;
261
+ border-collapse: collapse;
262
+ `;
263
+ const StyledTr = _styledComponents.default.div`
264
+ display: table-row;
265
+ `;
266
+ const StyledTd = _styledComponents.default.div`
267
+ display: table-cell;
268
+ border: 1px solid #e1e5e9;
269
+ min-width: 100px;
270
+ min-height: 40px;
271
+ padding: 10px;
272
+ `;
273
+
274
+ const TableEditorBlock = props => {
275
+ var _tableData$2;
276
+
277
+ const {
278
+ block,
279
+ blockProps,
280
+ contentState
281
+ } = props;
282
+ const {
283
+ onEditStart,
284
+ onEditFinish,
285
+ getMainEditorReadOnly
286
+ } = blockProps;
287
+ const entityKey = block.getEntityAt(0);
288
+ const entity = contentState.getEntity(entityKey);
289
+ const {
290
+ tableData: rawTableData,
291
+ tableStyles: _tableStyles
292
+ } = entity.getData();
293
+ const [tableData, setTableData] = (0, _react.useState)(convertTableDataFromRaw(rawTableData)); // deep clone `_tableStyles` to prevent updating the entity data directly
294
+
295
+ const [tableStyles, setTableStyles] = (0, _react.useState)(_.cloneDeep(_tableStyles));
296
+ const tableRef = (0, _react.useRef)(null); // `TableBlock` will render other inner/nested DraftJS Editors inside the main Editor.
297
+ // However, main Editor's `readOnly` needs to be mutually exclusive with nested Editors' `readOnly`.
298
+ // If the main Editor and nested Editor are editable (`readOnly={false}`) at the same time,
299
+ // there will be a DraftJS Edtior Selection bug.
300
+
301
+ const [cellEditorReadOnly, setCellEditorReadOnly] = (0, _react.useState)(!getMainEditorReadOnly()); // The user clicks the table for editing
302
+
303
+ const onTableClick = () => {
304
+ // call `onEditStart` function to tell the main DraftJS Editor
305
+ // that we are going to interact with the custom atomic block.
306
+ onEditStart(); // make nested DraftJS Editors editable
307
+
308
+ setCellEditorReadOnly(false);
309
+ };
310
+
311
+ (0, _react.useEffect)(() => {
312
+ // The user clicks other places except the table,
313
+ // so we think he/she doesn't want to edit the table anymore.
314
+ // Therefore, we call `onEditFinish` function to pass modified table data
315
+ // back to the main DraftJS Edtior.
316
+ function handleClickOutside(event) {
317
+ // `!cellEditorReadOnly` condition is needed.
318
+ // If there are two tables in the main Editor,
319
+ // this `handleClickOutside` will only handle the just updated one.
320
+ if (tableRef.current && !tableRef.current.contains(event.target) && !cellEditorReadOnly) {
321
+ // make inner DraftJS Editors NOT editable
322
+ setCellEditorReadOnly(true); // call `onEditFinish` function tell the main DraftJS Editor
323
+ // that we are finishing interacting with the custom atomic block.
324
+
325
+ onEditFinish({
326
+ entityKey,
327
+ entityData: {
328
+ tableData: convertTableDataToRaw(tableData),
329
+ tableStyles
330
+ }
331
+ });
332
+ }
333
+ }
334
+
335
+ console.debug('(rich-text-editor/table): add click outside event listener');
336
+ document.addEventListener('mousedown', handleClickOutside);
337
+ return () => {
338
+ // Unbind the event listener on clean up
339
+ console.debug('(rich-text-editor/table): remove click outside event listener');
340
+ document.removeEventListener('mousedown', handleClickOutside);
341
+ };
342
+ }, // Skip running effect if `tableData` and `cellEditorReadOnly` are not changed.
343
+ [tableData, cellEditorReadOnly]);
344
+ return /*#__PURE__*/_react.default.createElement(TableBlockContainer, null, /*#__PURE__*/_react.default.createElement(Table, {
345
+ key: entityKey,
346
+ onClick: onTableClick,
347
+ ref: tableRef
348
+ }, /*#__PURE__*/_react.default.createElement(StyledFirstRow, null, /*#__PURE__*/_react.default.createElement("div", null), tableData === null || tableData === void 0 ? void 0 : (_tableData$2 = tableData[0]) === null || _tableData$2 === void 0 ? void 0 : _tableData$2.map((colData, cIndex) => {
349
+ return /*#__PURE__*/_react.default.createElement("div", {
350
+ key: `col_${cIndex + 1}`
351
+ }, /*#__PURE__*/_react.default.createElement("span", {
352
+ onClick: () => {
353
+ const deleteColumn = {
354
+ type: ActionType.Delete,
355
+ target: TableEnum.Column,
356
+ index: cIndex
357
+ };
358
+ const updatedTableData = resolveTableData(deleteColumn, tableData);
359
+ setTableData(updatedTableData);
360
+ }
361
+ }), /*#__PURE__*/_react.default.createElement("span", {
362
+ onClick: () => {
363
+ const insertColumn = {
364
+ type: ActionType.Insert,
365
+ target: TableEnum.Column,
366
+ index: cIndex + 1
367
+ };
368
+ const updatedTableData = resolveTableData(insertColumn, tableData);
369
+ setTableData(updatedTableData);
370
+ }
371
+ }));
372
+ })), tableData.map((rowData, rIndex) => {
373
+ var _tableStyles$rows;
374
+
375
+ const colsJsx = rowData.map((colData, cIndex) => {
376
+ return /*#__PURE__*/_react.default.createElement(Td, {
377
+ key: `col_${cIndex}`
378
+ }, /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
379
+ onChange: editorState => {
380
+ const updateAction = {
381
+ type: ActionType.Update,
382
+ cIndex,
383
+ rIndex,
384
+ value: editorState
385
+ };
386
+ const updatedTableData = resolveTableData(updateAction, tableData);
387
+ setTableData(updatedTableData);
388
+ },
389
+ editorState: colData,
390
+ readOnly: cellEditorReadOnly
391
+ }));
392
+ });
393
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
394
+ key: `row_${rIndex}`
395
+ }, /*#__PURE__*/_react.default.createElement(Tr, {
396
+ style: tableStyles === null || tableStyles === void 0 ? void 0 : (_tableStyles$rows = tableStyles.rows) === null || _tableStyles$rows === void 0 ? void 0 : _tableStyles$rows[rIndex]
397
+ }, /*#__PURE__*/_react.default.createElement(StyledFirstColumn, null, /*#__PURE__*/_react.default.createElement("span", {
398
+ onClick: () => {
399
+ const deleteRowAction = {
400
+ type: ActionType.Delete,
401
+ target: TableEnum.Row,
402
+ index: rIndex
403
+ };
404
+ const updatedTableData = resolveTableData(deleteRowAction, tableData);
405
+ setTableData(updatedTableData);
406
+ setTableStyles(resolveTableStyles(deleteRowAction, tableStyles));
407
+ }
408
+ }), /*#__PURE__*/_react.default.createElement("span", {
409
+ onClick: () => {
410
+ const addRowAction = {
411
+ type: ActionType.Insert,
412
+ target: TableEnum.Row,
413
+ index: rIndex + 1
414
+ };
415
+ const updatedTableData = resolveTableData(addRowAction, tableData);
416
+ setTableData(updatedTableData);
417
+ setTableStyles(resolveTableStyles(addRowAction, tableStyles));
418
+ }
419
+ })), colsJsx));
420
+ })));
421
+ };
422
+
423
+ exports.TableEditorBlock = TableEditorBlock;
424
+
425
+ const TableBlock = props => {
426
+ const {
427
+ block,
428
+ contentState
429
+ } = props;
430
+ const entityKey = block.getEntityAt(0);
431
+ const entity = contentState.getEntity(entityKey);
432
+ const {
433
+ tableData: rawTableData
434
+ } = entity.getData();
435
+ const [tableData] = (0, _react.useState)(convertTableDataFromRaw(rawTableData));
436
+ const tableRef = (0, _react.useRef)(null);
437
+ return /*#__PURE__*/_react.default.createElement(TableBlockContainer, null, /*#__PURE__*/_react.default.createElement(StyledTable, {
438
+ key: entityKey,
439
+ ref: tableRef
440
+ }, tableData.map((rowData, rIndex) => {
441
+ const colsJsx = rowData.map((colData, cIndex) => {
442
+ return /*#__PURE__*/_react.default.createElement(StyledTd, {
443
+ key: `col_${cIndex}`
444
+ }, /*#__PURE__*/_react.default.createElement(_draftJs.Editor, {
445
+ editorState: colData,
446
+ readOnly: true
447
+ }));
448
+ });
449
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
450
+ key: `row_${rIndex}`
451
+ }, /*#__PURE__*/_react.default.createElement(StyledTr, null, colsJsx));
452
+ })));
453
+ };
454
+
455
+ exports.TableBlock = TableBlock;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.annotationDecorator = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
+
18
+ const AnnotatedText = _styledComponents.default.span`
19
+ vertical-align: middle;
20
+ color: #d0a67d;
21
+
22
+ svg {
23
+ vertical-align: middle;
24
+ margin-left: 5px;
25
+ }
26
+ `;
27
+ const AnnotationBody = _styledComponents.default.div`
28
+ background-color: #f1f1f1;
29
+ padding: 10px;
30
+ margin-top: 5px;
31
+ margin-bottom: 10px;
32
+ `;
33
+
34
+ function indicatorSvg(shouldRotate) {
35
+ const transform = shouldRotate ? 'rotate(180 10 10)' : '';
36
+ return /*#__PURE__*/_react.default.createElement("svg", {
37
+ width: "20",
38
+ height: "20",
39
+ viewBox: "0 0 20 20",
40
+ fill: "none",
41
+ xmlns: "http://www.w3.org/2000/svg"
42
+ }, /*#__PURE__*/_react.default.createElement("circle", {
43
+ cx: "10",
44
+ cy: "10",
45
+ r: "10",
46
+ fill: "#f1f1f1"
47
+ }), /*#__PURE__*/_react.default.createElement("path", {
48
+ d: "M10 15L5.66987 7.5L14.3301 7.5L10 15Z",
49
+ fill: "#D0A67D",
50
+ transform: transform
51
+ }));
52
+ }
53
+
54
+ function AnnotationBlock(props) {
55
+ const {
56
+ children: annotated
57
+ } = props;
58
+ const [toShowAnnotation, setToShowAnnotation] = (0, _react.useState)(false);
59
+ const {
60
+ bodyHTML
61
+ } = props.contentState.getEntity(props.entityKey).getData();
62
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(AnnotatedText, null, annotated, /*#__PURE__*/_react.default.createElement("span", {
63
+ onClick: e => {
64
+ e.preventDefault();
65
+ setToShowAnnotation(!toShowAnnotation);
66
+ }
67
+ }, toShowAnnotation ? indicatorSvg(false) : indicatorSvg(true))), toShowAnnotation ? /*#__PURE__*/_react.default.createElement(AnnotationBody, {
68
+ contentEditable: false,
69
+ dangerouslySetInnerHTML: {
70
+ __html: bodyHTML
71
+ }
72
+ }) : null);
73
+ }
74
+
75
+ function findAnnotationEntities(contentBlock, callback, contentState) {
76
+ contentBlock.findEntityRanges(character => {
77
+ const entityKey = character.getEntity();
78
+ return entityKey !== null && contentState.getEntity(entityKey).getType() === 'ANNOTATION';
79
+ }, callback);
80
+ }
81
+
82
+ const annotationDecorator = {
83
+ strategy: findAnnotationEntities,
84
+ component: AnnotationBlock
85
+ };
86
+ exports.annotationDecorator = annotationDecorator;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.linkDecorator = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const LinkWrapper = _styledComponents.default.a`
15
+ color: #3b5998;
16
+ text-decoration: underline;
17
+ `;
18
+
19
+ function findLinkEntities(contentBlock, callback, contentState) {
20
+ contentBlock.findEntityRanges(character => {
21
+ const entityKey = character.getEntity();
22
+ return entityKey !== null && contentState.getEntity(entityKey).getType() === 'LINK';
23
+ }, callback);
24
+ }
25
+
26
+ const linkDecorator = {
27
+ strategy: findLinkEntities,
28
+ component: Link
29
+ };
30
+ exports.linkDecorator = linkDecorator;
31
+
32
+ function Link(props) {
33
+ const {
34
+ url
35
+ } = props.contentState.getEntity(props.entityKey).getData();
36
+ return /*#__PURE__*/_react.default.createElement(LinkWrapper, {
37
+ href: url
38
+ }, props.children);
39
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AlignSelector = AlignSelector;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _fields = require("@keystone-ui/fields");
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ const Label = _styledComponents.default.label`
21
+ display: block;
22
+ margin: 10px 0;
23
+ font-weight: 600;
24
+ `;
25
+ const AlignSelect = (0, _styledComponents.default)(_fields.Select)`
26
+ ${({
27
+ menuHeight
28
+ }) => {
29
+ return `margin-bottom: ${menuHeight}px;`;
30
+ }}
31
+ `;
32
+
33
+ function AlignSelector(props) {
34
+ const [isOpen, setIsOpen] = (0, _react.useState)(false);
35
+ const [menuHeight, setMenuHeight] = (0, _react.useState)(0);
36
+ const {
37
+ align,
38
+ options,
39
+ onChange,
40
+ onOpen
41
+ } = props;
42
+ (0, _react.useEffect)(() => {
43
+ const selectMenu = document.querySelector('.css-nabggt-menu');
44
+
45
+ if (selectMenu) {
46
+ const styles = window.getComputedStyle(selectMenu);
47
+ const margin = parseFloat(styles['marginTop']) + parseFloat(styles['marginBottom']);
48
+ setMenuHeight(selectMenu.offsetHeight + margin);
49
+ } else {
50
+ setMenuHeight(0);
51
+ }
52
+
53
+ if (isOpen && onOpen) {
54
+ onOpen();
55
+ }
56
+ }, [isOpen]);
57
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Label, {
58
+ htmlFor: "alignment"
59
+ }, "\u5C0D\u9F4A"), /*#__PURE__*/_react.default.createElement(AlignSelect, {
60
+ id: "alignment" // default align === undefined
61
+ ,
62
+ value: options.find(option => option.value === align),
63
+ options: options,
64
+ onChange: option => {
65
+ onChange(option.value);
66
+ },
67
+ onMenuOpen: () => setIsOpen(true),
68
+ onMenuClose: () => setIsOpen(false),
69
+ menuHeight: menuHeight
70
+ }));
71
+ }