@kids-reporter/draft-editor 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +51 -0
  2. package/lib/.selector/align-selector.js +71 -0
  3. package/lib/.selector/audio-selector.js +268 -0
  4. package/lib/.selector/image-selector.js +430 -0
  5. package/lib/.selector/pagination.js +82 -0
  6. package/lib/.selector/post-selector.js +311 -0
  7. package/lib/.selector/search-box.js +46 -0
  8. package/lib/.selector/video-selector.js +285 -0
  9. package/lib/block-renderer/background-image-block.js +141 -0
  10. package/lib/block-renderer/background-video-block.js +151 -0
  11. package/lib/block-renderer/color-box-block.js +86 -0
  12. package/lib/block-renderer/info-box-block.js +86 -0
  13. package/lib/block-renderer/side-index-block.js +90 -0
  14. package/lib/block-renderer/table-block.js +408 -0
  15. package/lib/block-renderer-fn.js +131 -0
  16. package/lib/buttons/annotation.js +117 -0
  17. package/lib/buttons/audio.js +65 -0
  18. package/lib/buttons/background-color.js +122 -0
  19. package/lib/buttons/background-image.js +223 -0
  20. package/lib/buttons/background-video.js +223 -0
  21. package/lib/buttons/color-box.js +173 -0
  22. package/lib/buttons/divider.js +63 -0
  23. package/lib/buttons/embedded-code.js +109 -0
  24. package/lib/buttons/enlarge.js +24 -0
  25. package/lib/buttons/font-color.js +115 -0
  26. package/lib/buttons/image.js +70 -0
  27. package/lib/buttons/info-box.js +148 -0
  28. package/lib/buttons/link.js +107 -0
  29. package/lib/buttons/media.js +121 -0
  30. package/lib/buttons/related-post.js +71 -0
  31. package/lib/buttons/selector/align-selector.js +71 -0
  32. package/lib/buttons/selector/audio-selector.js +279 -0
  33. package/lib/buttons/selector/image-selector.js +417 -0
  34. package/lib/buttons/selector/pagination.js +82 -0
  35. package/lib/buttons/selector/post-selector.js +317 -0
  36. package/lib/buttons/selector/search-box.js +46 -0
  37. package/lib/buttons/selector/video-selector.js +281 -0
  38. package/lib/buttons/side-index.js +200 -0
  39. package/lib/buttons/slideshow.js +71 -0
  40. package/lib/buttons/table.js +67 -0
  41. package/lib/buttons/text-align.js +88 -0
  42. package/lib/buttons/video.js +65 -0
  43. package/lib/buttons/youtube.js +147 -0
  44. package/lib/const.js +18 -0
  45. package/lib/draft-converter/api-data-instance.js +58 -0
  46. package/lib/draft-converter/atomic-block-processor.js +233 -0
  47. package/lib/draft-converter/entities.js +76 -0
  48. package/lib/draft-converter/index.js +201 -0
  49. package/lib/draft-converter/inline-styles-processor.js +236 -0
  50. package/lib/draft-editor.js +918 -0
  51. package/lib/entity-decorator.js +20 -0
  52. package/lib/index.js +15 -0
  53. package/lib/modifier.js +68 -0
  54. package/lib/theme/index.js +39 -0
  55. package/package.json +41 -0
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.VideoSelector = VideoSelector;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
+
12
+ var _modals = require("@keystone-ui/modals");
13
+
14
+ var _apollo = require("@keystone-6/core/admin-ui/apollo");
15
+
16
+ var _searchBox = require("./search-box");
17
+
18
+ var _pagination = require("./pagination");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
+
22
+ 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); }
23
+
24
+ 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; }
25
+
26
+ const VideoSearchBox = (0, _styledComponents.default)(_searchBox.SearchBox)`
27
+ margin-top: 10px;
28
+ `;
29
+ const VideoSelectionWrapper = _styledComponents.default.div`
30
+ overflow: auto;
31
+ margin-top: 10px;
32
+ `;
33
+ const VideoGridsWrapper = _styledComponents.default.div`
34
+ display: flex;
35
+ flex-wrap: wrap;
36
+ overflow: auto;
37
+ `;
38
+ const VideoGridWrapper = _styledComponents.default.div`
39
+ flex: 0 0 33.3333%;
40
+ cursor: pointer;
41
+ padding: 0 10px 10px;
42
+ `;
43
+ const VideoMetaGridsWrapper = _styledComponents.default.div`
44
+ display: flex;
45
+ flex-wrap: wrap;
46
+ overflow: auto;
47
+ `;
48
+ const VideoMetaGridWrapper = _styledComponents.default.div`
49
+ flex: 0 0 33.3333%;
50
+ cursor: pointer;
51
+ padding: 0 10px 10px;
52
+ `;
53
+ const Video = _styledComponents.default.video`
54
+ display: block;
55
+ width: 100%;
56
+ aspect-ratio: 2;
57
+ object-fit: cover;
58
+ `;
59
+ const SeparationLine = _styledComponents.default.div`
60
+ border: #e1e5e9 1px solid;
61
+ margin-top: 10px;
62
+ margin-bottom: 10px;
63
+ `;
64
+ const VideoSelected = _styledComponents.default.div`
65
+ height: 1.4rem;
66
+ `;
67
+ const ErrorWrapper = _styledComponents.default.div`
68
+ & * {
69
+ margin: 0;
70
+ }
71
+ `;
72
+
73
+ function VideosGrids(props) {
74
+ const {
75
+ videos,
76
+ selected,
77
+ onSelect
78
+ } = props;
79
+ return /*#__PURE__*/_react.default.createElement(VideoGridsWrapper, null, videos.map(video => {
80
+ return /*#__PURE__*/_react.default.createElement(VideoGrid, {
81
+ key: video.id,
82
+ isSelected: selected === null || selected === void 0 ? void 0 : selected.includes(video),
83
+ onSelect: () => onSelect(video),
84
+ video: video
85
+ });
86
+ }));
87
+ }
88
+
89
+ function VideoGrid(props) {
90
+ var _video$videoFile;
91
+
92
+ const {
93
+ video,
94
+ onSelect,
95
+ isSelected
96
+ } = props;
97
+ return /*#__PURE__*/_react.default.createElement(VideoGridWrapper, {
98
+ key: video === null || video === void 0 ? void 0 : video.id,
99
+ onClick: () => onSelect(video)
100
+ }, /*#__PURE__*/_react.default.createElement(VideoSelected, null, isSelected ? /*#__PURE__*/_react.default.createElement("i", {
101
+ className: "fas fa-check-circle"
102
+ }) : null), /*#__PURE__*/_react.default.createElement(Video, {
103
+ muted: true,
104
+ loop: true
105
+ }, /*#__PURE__*/_react.default.createElement("source", {
106
+ src: video === null || video === void 0 ? void 0 : video.videoSrc
107
+ }), /*#__PURE__*/_react.default.createElement("source", {
108
+ src: video === null || video === void 0 ? void 0 : (_video$videoFile = video.videoFile) === null || _video$videoFile === void 0 ? void 0 : _video$videoFile.url
109
+ })));
110
+ }
111
+
112
+ function VideoMetaGrids(props) {
113
+ const {
114
+ videoMetas
115
+ } = props;
116
+ return /*#__PURE__*/_react.default.createElement(VideoMetaGridsWrapper, null, videoMetas.map(videoMeta => {
117
+ var _videoMeta$video;
118
+
119
+ return /*#__PURE__*/_react.default.createElement(VideoMetaGrid, {
120
+ key: videoMeta === null || videoMeta === void 0 ? void 0 : (_videoMeta$video = videoMeta.video) === null || _videoMeta$video === void 0 ? void 0 : _videoMeta$video.id,
121
+ videoMeta: videoMeta
122
+ });
123
+ }));
124
+ }
125
+
126
+ function VideoMetaGrid(props) {
127
+ var _video$videoFile2;
128
+
129
+ const {
130
+ videoMeta
131
+ } = props;
132
+ const {
133
+ video
134
+ } = videoMeta;
135
+ return /*#__PURE__*/_react.default.createElement(VideoMetaGridWrapper, null, /*#__PURE__*/_react.default.createElement(Video, {
136
+ muted: true,
137
+ autoPlay: true,
138
+ loop: true
139
+ }, /*#__PURE__*/_react.default.createElement("source", {
140
+ src: video === null || video === void 0 ? void 0 : video.videoSrc
141
+ }), /*#__PURE__*/_react.default.createElement("source", {
142
+ src: video === null || video === void 0 ? void 0 : (_video$videoFile2 = video.videoFile) === null || _video$videoFile2 === void 0 ? void 0 : _video$videoFile2.url
143
+ })));
144
+ }
145
+
146
+ const videosQuery = (0, _apollo.gql)`
147
+ query Videos($searchText: String!, $take: Int, $skip: Int) {
148
+ videosCount(where: { name: { contains: $searchText } })
149
+ videos(
150
+ where: { name: { contains: $searchText } }
151
+ take: $take
152
+ skip: $skip
153
+ ) {
154
+ id
155
+ name
156
+ description
157
+ file {
158
+ url
159
+ }
160
+ coverPhoto {
161
+ id
162
+ name
163
+ imageFile {
164
+ url
165
+ }
166
+ resized {
167
+ original
168
+ }
169
+ }
170
+ }
171
+ }
172
+ `;
173
+
174
+ function VideoSelector(props) {
175
+ const [queryVideos, {
176
+ loading,
177
+ error,
178
+ data: {
179
+ videos = [],
180
+ videosCount = 0
181
+ } = {}
182
+ }] = (0, _apollo.useLazyQuery)(videosQuery, {
183
+ fetchPolicy: 'no-cache'
184
+ });
185
+ const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
186
+
187
+ const [searchText, setSearchText] = (0, _react.useState)('');
188
+ const [selected, setSelected] = (0, _react.useState)([]);
189
+ const pageSize = 6;
190
+ const {
191
+ onChange
192
+ } = props;
193
+
194
+ const onSave = () => {
195
+ onChange(selected);
196
+ };
197
+
198
+ const onCancel = () => {
199
+ onChange([]);
200
+ };
201
+
202
+ const onSearchBoxChange = async searchInput => {
203
+ setSearchText(searchInput);
204
+ setCurrentPage(1);
205
+ };
206
+
207
+ const onVideosGridSelect = videoEntity => {
208
+ setSelected(selected => {
209
+ const filterdSelected = selected.filter(ele => {
210
+ var _ele$video;
211
+
212
+ return ((_ele$video = ele.video) === null || _ele$video === void 0 ? void 0 : _ele$video.id) !== videoEntity.id;
213
+ }); // deselect the video
214
+
215
+ if (filterdSelected.length !== selected.length) {
216
+ return filterdSelected;
217
+ } // single select
218
+
219
+
220
+ return [{
221
+ video: videoEntity
222
+ }];
223
+ });
224
+ };
225
+
226
+ const selectedVideos = selected.map(ele => {
227
+ return ele.video;
228
+ });
229
+ (0, _react.useEffect)(() => {
230
+ if (currentPage !== 0) {
231
+ queryVideos({
232
+ variables: {
233
+ searchText: searchText,
234
+ skip: (currentPage - 1) * pageSize,
235
+ take: pageSize
236
+ }
237
+ });
238
+ }
239
+ }, [currentPage, searchText]);
240
+
241
+ let searchResult = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(VideosGrids, {
242
+ videos: videos,
243
+ selected: selectedVideos,
244
+ onSelect: onVideosGridSelect
245
+ }), /*#__PURE__*/_react.default.createElement(_pagination.Pagination, {
246
+ currentPage: currentPage,
247
+ total: videosCount,
248
+ pageSize: pageSize,
249
+ onChange: pageIndex => {
250
+ setCurrentPage(pageIndex);
251
+ }
252
+ }));
253
+
254
+ if (loading) {
255
+ searchResult = /*#__PURE__*/_react.default.createElement("p", null, "searching...");
256
+ }
257
+
258
+ if (error) {
259
+ searchResult = /*#__PURE__*/_react.default.createElement(ErrorWrapper, null, /*#__PURE__*/_react.default.createElement("h3", null, "Errors occurs in the `videos` query"), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Message:"), /*#__PURE__*/_react.default.createElement("div", null, error.message), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Stack:"), /*#__PURE__*/_react.default.createElement("div", null, error.stack), /*#__PURE__*/_react.default.createElement("br", null), /*#__PURE__*/_react.default.createElement("b", null, "Query:"), /*#__PURE__*/_react.default.createElement("pre", null, videosQuery.loc.source.body)));
260
+ }
261
+
262
+ return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
263
+ isOpen: true
264
+ }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
265
+ title: "Select video",
266
+ actions: {
267
+ cancel: {
268
+ label: 'Cancel',
269
+ action: onCancel
270
+ },
271
+ confirm: {
272
+ label: 'Confirm',
273
+ action: onSave
274
+ }
275
+ }
276
+ }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(VideoSearchBox, {
277
+ onChange: onSearchBoxChange
278
+ }), /*#__PURE__*/_react.default.createElement(VideoSelectionWrapper, null, /*#__PURE__*/_react.default.createElement("div", null, searchResult), !!selected.length && /*#__PURE__*/_react.default.createElement(SeparationLine, null), /*#__PURE__*/_react.default.createElement(VideoMetaGrids, {
279
+ videoMetas: selected
280
+ })))));
281
+ }
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SideIndexButton = SideIndexButton;
7
+ exports.SideIndexInput = SideIndexInput;
8
+
9
+ var _react = _interopRequireWildcard(require("react"));
10
+
11
+ var _draftJs = require("draft-js");
12
+
13
+ var _modals = require("@keystone-ui/modals");
14
+
15
+ var _button = require("@keystone-ui/button");
16
+
17
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
18
+
19
+ var _imageSelector = require("./selector/image-selector");
20
+
21
+ var _fields = require("@keystone-ui/fields");
22
+
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+
25
+ 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); }
26
+
27
+ 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; }
28
+
29
+ const Label = _styledComponents.default.label`
30
+ display: block;
31
+ font-weight: 600;
32
+ margin: 10px 0;
33
+ `;
34
+ const ImageInputText = _styledComponents.default.span`
35
+ display: inline-block;
36
+ margin-right: 10px;
37
+ `;
38
+
39
+ function SideIndexInput(props) {
40
+ var _inputValue$sideIndex;
41
+
42
+ const {
43
+ isOpen,
44
+ onChange,
45
+ onCancel,
46
+ h2Text,
47
+ sideIndexText,
48
+ sideIndexUrl,
49
+ sideIndexImage
50
+ } = props;
51
+ const initialInputValue = {
52
+ h2Text: h2Text || '',
53
+ sideIndexText: sideIndexText || '',
54
+ sideIndexUrl: sideIndexUrl || '',
55
+ sideIndexImage: sideIndexImage || undefined
56
+ };
57
+ const [inputValue, setInputValue] = (0, _react.useState)(initialInputValue);
58
+ const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
59
+
60
+ const onImageSelectorChange = selectedImagesWithMeta => {
61
+ var _selectedImagesWithMe;
62
+
63
+ const image = selectedImagesWithMeta === null || selectedImagesWithMeta === void 0 ? void 0 : (_selectedImagesWithMe = selectedImagesWithMeta[0]) === null || _selectedImagesWithMe === void 0 ? void 0 : _selectedImagesWithMe.image;
64
+
65
+ if (!image) {
66
+ setToShowImageSelector(false);
67
+ return;
68
+ }
69
+
70
+ setInputValue(oldInputValue => ({ ...oldInputValue,
71
+ sideIndexImage: image
72
+ }));
73
+ setToShowImageSelector(false);
74
+ };
75
+
76
+ (0, _react.useEffect)(() => {
77
+ if (isOpen) {
78
+ setInputValue(initialInputValue);
79
+ }
80
+ }, [isOpen]);
81
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(_imageSelector.ImageSelector, {
82
+ onChange: onImageSelectorChange
83
+ }), /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
84
+ isOpen: isOpen
85
+ }, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
86
+ title: `Insert Side Index`,
87
+ actions: {
88
+ cancel: {
89
+ label: 'Cancel',
90
+ action: () => {
91
+ onCancel();
92
+ }
93
+ },
94
+ confirm: {
95
+ label: 'Confirm',
96
+ action: () => {
97
+ onChange({ ...inputValue
98
+ });
99
+ }
100
+ }
101
+ }
102
+ }, /*#__PURE__*/_react.default.createElement(Label, null, "\u6587\u5167\u6A19\u984C (\u82E5\u586B\u5165\u5916\u90E8\u9023\u7D50\u5247\u4E0D\u6703\u7522\u751F\u6587\u7AE0\u5167h2)"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
103
+ onChange: e => setInputValue(oldInputValue => ({ ...oldInputValue,
104
+ h2Text: e.target.value
105
+ })),
106
+ type: "text",
107
+ placeholder: "h2 text",
108
+ value: inputValue.h2Text
109
+ }), /*#__PURE__*/_react.default.createElement(Label, null, "\u5074\u6B04\u6A19\u984C (Optional, \u82E5\u672A\u8A2D\u5B9A\u6703\u76F4\u63A5\u7528\u6587\u5167\u6A19\u984C)"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
110
+ onChange: e => setInputValue(oldInputValue => ({ ...oldInputValue,
111
+ sideIndexText: e.target.value
112
+ })),
113
+ type: "text",
114
+ placeholder: "sideindex text",
115
+ value: inputValue.sideIndexText
116
+ }), /*#__PURE__*/_react.default.createElement(Label, null, "\u5074\u6B04 Url (Optional, \u5916\u90E8\u9023\u7D50\u624D\u9700\u4F7F\u7528)"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
117
+ onChange: e => setInputValue(oldInputValue => ({ ...oldInputValue,
118
+ sideIndexUrl: e.target.value
119
+ })),
120
+ type: "url",
121
+ placeholder: "sideindex url (optional)",
122
+ value: inputValue.sideIndexUrl
123
+ }), /*#__PURE__*/_react.default.createElement(Label, null, "\u5074\u6B04\u5716\u7247 (Optional)"), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(ImageInputText, null, (_inputValue$sideIndex = inputValue.sideIndexImage) !== null && _inputValue$sideIndex !== void 0 && _inputValue$sideIndex.name ? inputValue.sideIndexImage.name : '尚未選取圖片'), /*#__PURE__*/_react.default.createElement(_button.Button, {
124
+ type: "button",
125
+ onClick: () => setToShowImageSelector(true),
126
+ tone: "passive"
127
+ }, "\u6DFB\u52A0\u5716\u7247")))));
128
+ }
129
+
130
+ function SideIndexButton(props) {
131
+ const [toShowInput, setToShowInput] = (0, _react.useState)(false);
132
+ const {
133
+ className,
134
+ editorState,
135
+ onChange: onEditorStateChange
136
+ } = props;
137
+
138
+ const onChange = ({
139
+ h2Text,
140
+ sideIndexText,
141
+ sideIndexUrl,
142
+ sideIndexImage
143
+ }) => {
144
+ const contentState = editorState.getCurrentContent(); // create an SideIndex entity
145
+
146
+ const contentStateWithEntity = contentState.createEntity('SIDEINDEX', 'IMMUTABLE', {
147
+ h2Text,
148
+ sideIndexText,
149
+ sideIndexUrl,
150
+ sideIndexImage
151
+ });
152
+ const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
153
+
154
+ const newEditorState = _draftJs.EditorState.set(editorState, {
155
+ currentContent: contentStateWithEntity
156
+ }); //The third parameter here is a space string, not an empty string
157
+ //If you set an empty string, you will get an error: Unknown DraftEntity key: null
158
+
159
+
160
+ onEditorStateChange(_draftJs.AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '));
161
+ setToShowInput(false);
162
+ };
163
+
164
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(SideIndexInput, {
165
+ onChange: onChange,
166
+ onCancel: () => {
167
+ setToShowInput(false);
168
+ },
169
+ isOpen: toShowInput
170
+ }), /*#__PURE__*/_react.default.createElement("div", {
171
+ className: className,
172
+ onClick: () => {
173
+ setToShowInput(true);
174
+ }
175
+ }, /*#__PURE__*/_react.default.createElement("svg", {
176
+ width: "16",
177
+ height: "16",
178
+ viewBox: "0 0 16 16",
179
+ fill: "none",
180
+ xmlns: "http://www.w3.org/2000/svg"
181
+ }, /*#__PURE__*/_react.default.createElement("path", {
182
+ d: "M13.4626 0.211456H4.15859C3.93427 0.211456 3.71913 0.300569 3.56051 0.45919C3.40189 0.617811 3.31278 0.832947 3.31278 1.05727C3.31278 1.2816 3.40189 1.49673 3.56051 1.65535C3.71913 1.81397 3.93427 1.90309 4.15859 1.90309H13.4626C13.6866 1.90401 13.9012 1.99342 14.0596 2.15184C14.218 2.31027 14.3074 2.52486 14.3084 2.7489V13.4626C14.3074 13.6866 14.218 13.9012 14.0596 14.0596C13.9012 14.218 13.6866 14.3074 13.4626 14.3084H2.7489C2.52486 14.3074 2.31027 14.218 2.15184 14.0596C1.99342 13.9012 1.90401 13.6866 1.90309 13.4626V11.3093C1.90309 11.0849 1.81397 10.8698 1.65535 10.7112C1.49673 10.5526 1.2816 10.4634 1.05727 10.4634C0.832947 10.4634 0.617811 10.5526 0.45919 10.7112C0.300569 10.8698 0.211456 11.0849 0.211456 11.3093V13.4626C0.212389 14.1352 0.480025 14.7801 0.955687 15.2558C1.43135 15.7314 2.07622 15.9991 2.7489 16H13.4626C14.1352 15.9991 14.7801 15.7314 15.2558 15.2558C15.7314 14.7801 15.9991 14.1352 16 13.4626V2.7489C15.9991 2.07622 15.7314 1.43135 15.2558 0.955687C14.7801 0.480025 14.1352 0.212389 13.4626 0.211456Z",
183
+ fill: "#6b7280"
184
+ }), /*#__PURE__*/_react.default.createElement("path", {
185
+ d: "M1.05727 2.11454C1.64118 2.11454 2.11454 1.64118 2.11454 1.05727C2.11454 0.473355 1.64118 0 1.05727 0C0.473355 0 0 0.473355 0 1.05727C0 1.64118 0.473355 2.11454 1.05727 2.11454Z",
186
+ fill: "#6b7280"
187
+ }), /*#__PURE__*/_react.default.createElement("path", {
188
+ d: "M4.15859 5.48017H12.0529C12.2772 5.48017 12.4923 5.39106 12.6509 5.23244C12.8096 5.07382 12.8987 4.85868 12.8987 4.63436C12.8987 4.41003 12.8096 4.1949 12.6509 4.03628C12.4923 3.87766 12.2772 3.78854 12.0529 3.78854H4.15859C3.93427 3.78854 3.71913 3.87766 3.56051 4.03628C3.40189 4.1949 3.31277 4.41003 3.31277 4.63436C3.31277 4.85868 3.40189 5.07382 3.56051 5.23244C3.71913 5.39106 3.93427 5.48017 4.15859 5.48017Z",
189
+ fill: "#6b7280"
190
+ }), /*#__PURE__*/_react.default.createElement("path", {
191
+ d: "M1.05727 5.69162C1.64118 5.69162 2.11454 5.21827 2.11454 4.63436C2.11454 4.05044 1.64118 3.57709 1.05727 3.57709C0.473355 3.57709 0 4.05044 0 4.63436C0 5.21827 0.473355 5.69162 1.05727 5.69162Z",
192
+ fill: "#6b7280"
193
+ }), /*#__PURE__*/_react.default.createElement("path", {
194
+ d: "M4.15859 9.05726H12.0529C12.2772 9.05726 12.4923 8.96815 12.6509 8.80953C12.8096 8.65091 12.8987 8.43577 12.8987 8.21145C12.8987 7.98712 12.8096 7.77199 12.6509 7.61336C12.4923 7.45474 12.2772 7.36563 12.0529 7.36563H4.15859C3.93427 7.36563 3.71913 7.45474 3.56051 7.61336C3.40189 7.77199 3.31277 7.98712 3.31277 8.21145C3.31277 8.43577 3.40189 8.65091 3.56051 8.80953C3.71913 8.96815 3.93427 9.05726 4.15859 9.05726Z",
195
+ fill: "#6b7280"
196
+ }), /*#__PURE__*/_react.default.createElement("path", {
197
+ d: "M1.05727 9.26873C1.64118 9.26873 2.11454 8.79537 2.11454 8.21146C2.11454 7.62755 1.64118 7.15419 1.05727 7.15419C0.473355 7.15419 0 7.62755 0 8.21146C0 8.79537 0.473355 9.26873 1.05727 9.26873Z",
198
+ fill: "#6b7280"
199
+ })), /*#__PURE__*/_react.default.createElement("span", null, "SideIndex")));
200
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SlideshowButton = SlideshowButton;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _imageSelector = require("./selector/image-selector");
11
+
12
+ var _draftJs = require("draft-js");
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
+ function SlideshowButton(props) {
19
+ const {
20
+ editorState,
21
+ onChange,
22
+ className,
23
+ ImageSelector = _imageSelector.ImageSelector
24
+ } = props;
25
+ const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
26
+
27
+ const promptForImageSelector = () => {
28
+ setToShowImageSelector(true);
29
+ };
30
+
31
+ const onImageSelectorChange = (selected, align, delay) => {
32
+ if (selected.length === 0) {
33
+ setToShowImageSelector(false);
34
+ return;
35
+ }
36
+
37
+ const contentState = editorState.getCurrentContent(); // since 202206, only slideshow-v2 will be created
38
+
39
+ const contentStateWithEntity = contentState.createEntity('slideshow-v2', 'IMMUTABLE', {
40
+ alignment: align,
41
+ delay,
42
+ images: selected.map(ele => {
43
+ return { ...(ele === null || ele === void 0 ? void 0 : ele.image),
44
+ desc: ele === null || ele === void 0 ? void 0 : ele.desc
45
+ };
46
+ })
47
+ });
48
+ const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
49
+
50
+ const newEditorState = _draftJs.EditorState.set(editorState, {
51
+ currentContent: contentStateWithEntity
52
+ }); // The third parameter here is a space string, not an empty string
53
+ // If you set an empty string, you will get an error: Unknown DraftEntity key: null
54
+
55
+
56
+ onChange(_draftJs.AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '));
57
+ setToShowImageSelector(false);
58
+ };
59
+
60
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(ImageSelector, {
61
+ onChange: onImageSelectorChange,
62
+ enableCaption: true,
63
+ enableDelay: true,
64
+ enableMultiSelect: true
65
+ }), /*#__PURE__*/_react.default.createElement("div", {
66
+ className: className,
67
+ onClick: promptForImageSelector
68
+ }, /*#__PURE__*/_react.default.createElement("i", {
69
+ className: "far fa-images"
70
+ }), /*#__PURE__*/_react.default.createElement("span", null, " Slideshow")));
71
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TableButton = TableButton;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _draftJs = require("draft-js");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function TableButton(props) {
15
+ const {
16
+ editorState,
17
+ onChange,
18
+ className
19
+ } = props;
20
+
21
+ const onClick = () => {
22
+ const rawDarftContentState = {
23
+ blocks: [],
24
+ entityMap: {}
25
+ };
26
+ const contentState = editorState.getCurrentContent();
27
+ const contentStateWithEntity = contentState.createEntity('TABLE', 'IMMUTABLE', {
28
+ // `tableStyles` is to used to store custom React CSS inline styles.
29
+ // Therefore, please make sure the style name needs to be camelCase.
30
+ tableStyles: {
31
+ // We can customize the inline styles of each row.
32
+ rows: [// thead has different background color.
33
+ {
34
+ backgroundColor: '#f2f2f2'
35
+ }, {}, {}],
36
+ // TODO: add column styles and cell styles if needed
37
+ columns: [],
38
+ cells: []
39
+ },
40
+ // We use two dimensions array to store the data.
41
+ // The items of the array represent the rows,
42
+ // and each item is also an array, which represents the columns.
43
+ // Take the following array as example.
44
+ // It is a
45
+ // row: 3
46
+ // column: 2
47
+ // sheet data stored in a 2 dimensions arrary.
48
+ tableData: [[rawDarftContentState, rawDarftContentState], [rawDarftContentState, rawDarftContentState], [rawDarftContentState, rawDarftContentState]]
49
+ });
50
+ const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
51
+
52
+ const newEditorState = _draftJs.EditorState.set(editorState, {
53
+ currentContent: contentStateWithEntity
54
+ }); // The third parameter here is a space string, not an empty string
55
+ // If you set an empty string, you will get an error: Unknown DraftEntity key: null
56
+
57
+
58
+ onChange(_draftJs.AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '));
59
+ };
60
+
61
+ return /*#__PURE__*/_react.default.createElement("div", {
62
+ onClick: onClick,
63
+ className: className
64
+ }, /*#__PURE__*/_react.default.createElement("i", {
65
+ className: "fa fa-table"
66
+ }), /*#__PURE__*/_react.default.createElement("span", null, "Table"));
67
+ }