@mirrormedia/lilith-draft-editor 1.1.0-alpha.9 → 1.2.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.
- package/lib/draft-js/buttons/audio.js +3 -2
- package/lib/draft-js/buttons/image.js +3 -3
- package/lib/draft-js/buttons/link.js +49 -22
- package/lib/draft-js/buttons/selector/audio-selector.js +5 -0
- package/lib/draft-js/buttons/selector/image-selector.js +14 -10
- package/lib/draft-js/buttons/video.js +3 -2
- package/lib/draft-js/buttons/youtube.js +147 -0
- package/lib/draft-js/draft-converter/atomic-block-processor.js +15 -34
- package/lib/draft-js/draft-converter/entities.js +6 -0
- package/lib/draft-js/util.js +32 -0
- package/lib/website/mirrormedia/block-renderer/embedded-code-block.js +3 -0
- package/lib/website/mirrormedia/block-renderer/image-block.js +108 -0
- package/lib/website/mirrormedia/block-renderer/slideshow-block.js +85 -6
- package/lib/website/mirrormedia/block-renderer-fn.js +24 -5
- package/lib/website/mirrormedia/draft-editor.js +26 -2
- package/lib/website/mirrormedia/entity-decorator.js +8 -1
- package/lib/website/mirrormedia/selector/audio-selector.js +4 -3
- package/lib/website/mirrormedia/selector/image-selector.js +26 -12
- package/lib/website/mirrormedia/selector/post-selector.js +1 -0
- package/lib/website/mirrormedia/selector/video-selector.js +4 -3
- package/lib/website/mirrormedia/shared-style/index.js +17 -0
- package/lib/website/readr/block-renderer/background-image-block.js +53 -5
- package/lib/website/readr/block-renderer/background-video-block.js +63 -5
- package/lib/website/readr/block-renderer/image-block.js +106 -0
- package/lib/website/readr/block-renderer-fn.js +3 -2
- package/lib/website/readr/selector/audio-selector.js +1 -0
- package/lib/website/readr/selector/image-selector.js +13 -10
- package/lib/website/readr/selector/post-selector.js +3 -9
- package/lib/website/readr/selector/video-selector.js +1 -0
- package/lib/website/readr/theme/index.js +11 -0
- package/package.json +9 -9
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ImageEditorBlock = ImageEditorBlock;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
13
|
+
|
|
14
|
+
var _imageSelector = require("../selector/image-selector");
|
|
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
|
+
ImageBlock
|
|
24
|
+
} = _readr.default.blockRenderers;
|
|
25
|
+
const ImageBlockWrapper = _styledComponents.default.div`
|
|
26
|
+
img {
|
|
27
|
+
min-width: 300px;
|
|
28
|
+
max-width: 600px;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
const ImageEditButton = _styledComponents.default.span`
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
background-color: white;
|
|
34
|
+
padding: 6px;
|
|
35
|
+
border-radius: 6px;
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
function ImageEditorBlock(props) {
|
|
39
|
+
const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
|
|
40
|
+
const {
|
|
41
|
+
block,
|
|
42
|
+
blockProps,
|
|
43
|
+
contentState
|
|
44
|
+
} = props;
|
|
45
|
+
const {
|
|
46
|
+
onEditStart,
|
|
47
|
+
onEditFinish
|
|
48
|
+
} = blockProps;
|
|
49
|
+
const entityKey = block.getEntityAt(0);
|
|
50
|
+
const entity = contentState.getEntity(entityKey);
|
|
51
|
+
const {
|
|
52
|
+
id,
|
|
53
|
+
name,
|
|
54
|
+
imageFile,
|
|
55
|
+
resized,
|
|
56
|
+
desc,
|
|
57
|
+
url,
|
|
58
|
+
alignment
|
|
59
|
+
} = entity.getData();
|
|
60
|
+
const imageWithMeta = {
|
|
61
|
+
image: {
|
|
62
|
+
id,
|
|
63
|
+
name,
|
|
64
|
+
imageFile,
|
|
65
|
+
resized
|
|
66
|
+
},
|
|
67
|
+
desc,
|
|
68
|
+
url
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const onImageSelectorChange = (params, align) => {
|
|
72
|
+
if (params.length === 0) {
|
|
73
|
+
onEditFinish({});
|
|
74
|
+
} else {
|
|
75
|
+
const imageEntity = params[0];
|
|
76
|
+
onEditFinish({
|
|
77
|
+
entityKey,
|
|
78
|
+
entityData: { ...imageEntity.image,
|
|
79
|
+
desc: imageEntity.desc,
|
|
80
|
+
url: imageEntity.url,
|
|
81
|
+
alignment: align
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
setToShowImageSelector(false);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(_imageSelector.ImageSelector, {
|
|
90
|
+
onChange: onImageSelectorChange,
|
|
91
|
+
enableCaption: true,
|
|
92
|
+
enableUrl: true,
|
|
93
|
+
enableAlignment: true,
|
|
94
|
+
initialAlign: alignment,
|
|
95
|
+
initialSelected: [imageWithMeta]
|
|
96
|
+
}), /*#__PURE__*/_react.default.createElement(ImageBlockWrapper, null, /*#__PURE__*/_react.default.createElement(ImageBlock, props)), /*#__PURE__*/_react.default.createElement(ImageEditButton, {
|
|
97
|
+
onClick: () => {
|
|
98
|
+
// call `onEditStart` prop as we are trying to update the BGImage entity
|
|
99
|
+
onEditStart(); // open `BGImageInput`
|
|
100
|
+
|
|
101
|
+
setToShowImageSelector(true);
|
|
102
|
+
}
|
|
103
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
104
|
+
className: "fa-solid fa-pen"
|
|
105
|
+
}), /*#__PURE__*/_react.default.createElement("span", null, "Modify")));
|
|
106
|
+
}
|
|
@@ -17,6 +17,8 @@ var _backgroundVideoBlock = require("./block-renderer/background-video-block");
|
|
|
17
17
|
|
|
18
18
|
var _sideIndexBlock = require("./block-renderer/side-index-block");
|
|
19
19
|
|
|
20
|
+
var _imageBlock = require("./block-renderer/image-block");
|
|
21
|
+
|
|
20
22
|
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
21
23
|
|
|
22
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -24,7 +26,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
24
26
|
const {
|
|
25
27
|
EmbeddedCodeBlock,
|
|
26
28
|
MediaBlock,
|
|
27
|
-
ImageBlock,
|
|
28
29
|
SlideshowBlock,
|
|
29
30
|
SlideshowBlockV2,
|
|
30
31
|
DividerBlock,
|
|
@@ -47,7 +48,7 @@ const AtomicBlock = props => {
|
|
|
47
48
|
|
|
48
49
|
case 'image':
|
|
49
50
|
{
|
|
50
|
-
return
|
|
51
|
+
return (0, _imageBlock.ImageEditorBlock)(props);
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
case 'slideshow':
|
|
@@ -34,6 +34,7 @@ const imagesQuery = (0, _apollo.gql)`
|
|
|
34
34
|
photosCount(where: { name: { contains: $searchText } })
|
|
35
35
|
photos(
|
|
36
36
|
where: { name: { contains: $searchText } }
|
|
37
|
+
orderBy: { id: desc }
|
|
37
38
|
take: $take
|
|
38
39
|
skip: $skip
|
|
39
40
|
) {
|
|
@@ -242,6 +243,16 @@ function DelayInput(props) {
|
|
|
242
243
|
}
|
|
243
244
|
|
|
244
245
|
function ImageSelector(props) {
|
|
246
|
+
const {
|
|
247
|
+
enableMultiSelect = false,
|
|
248
|
+
enableCaption = false,
|
|
249
|
+
enableUrl = false,
|
|
250
|
+
enableAlignment = false,
|
|
251
|
+
enableDelay = false,
|
|
252
|
+
onChange,
|
|
253
|
+
initialSelected = [],
|
|
254
|
+
initialAlign
|
|
255
|
+
} = props;
|
|
245
256
|
const [queryImages, {
|
|
246
257
|
loading,
|
|
247
258
|
error,
|
|
@@ -255,9 +266,9 @@ function ImageSelector(props) {
|
|
|
255
266
|
const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
|
|
256
267
|
|
|
257
268
|
const [searchText, setSearchText] = (0, _react.useState)('');
|
|
258
|
-
const [selected, setSelected] = (0, _react.useState)(
|
|
269
|
+
const [selected, setSelected] = (0, _react.useState)(initialSelected);
|
|
259
270
|
const [delay, setDelay] = (0, _react.useState)('5');
|
|
260
|
-
const [align, setAlign] = (0, _react.useState)(
|
|
271
|
+
const [align, setAlign] = (0, _react.useState)(initialAlign);
|
|
261
272
|
const contentWrapperRef = (0, _react.useRef)();
|
|
262
273
|
const pageSize = 6;
|
|
263
274
|
const options = [{
|
|
@@ -273,14 +284,6 @@ function ImageSelector(props) {
|
|
|
273
284
|
label: 'right',
|
|
274
285
|
isDisabled: false
|
|
275
286
|
}];
|
|
276
|
-
const {
|
|
277
|
-
enableMultiSelect = false,
|
|
278
|
-
enableCaption = false,
|
|
279
|
-
enableUrl = false,
|
|
280
|
-
enableAlignment = false,
|
|
281
|
-
enableDelay = false,
|
|
282
|
-
onChange
|
|
283
|
-
} = props;
|
|
284
287
|
|
|
285
288
|
const onSave = () => {
|
|
286
289
|
let adjustedDelay = +delay;
|
|
@@ -28,6 +28,7 @@ const postsQuery = (0, _apollo.gql)`
|
|
|
28
28
|
postsCount(where: { name: { contains: $searchText } })
|
|
29
29
|
posts(
|
|
30
30
|
where: { name: { contains: $searchText } }
|
|
31
|
+
orderBy: { id: desc }
|
|
31
32
|
take: $take
|
|
32
33
|
skip: $skip
|
|
33
34
|
) {
|
|
@@ -206,8 +207,7 @@ function PostSelector(props) {
|
|
|
206
207
|
const {
|
|
207
208
|
onChange,
|
|
208
209
|
enableMultiSelect = false,
|
|
209
|
-
minSelectCount = 1
|
|
210
|
-
maxSelectCount = 3
|
|
210
|
+
minSelectCount = 1
|
|
211
211
|
} = props;
|
|
212
212
|
|
|
213
213
|
const onSave = () => {
|
|
@@ -242,15 +242,9 @@ function PostSelector(props) {
|
|
|
242
242
|
|
|
243
243
|
|
|
244
244
|
if (enableMultiSelect) {
|
|
245
|
-
|
|
245
|
+
return selected.concat([{
|
|
246
246
|
post: postEntity
|
|
247
247
|
}]);
|
|
248
|
-
|
|
249
|
-
if (maxSelectCount && newSelected.length >= maxSelectCount) {
|
|
250
|
-
newSelected = newSelected.slice(-maxSelectCount);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return newSelected;
|
|
254
248
|
} // single select
|
|
255
249
|
|
|
256
250
|
|
|
@@ -21,6 +21,17 @@ const theme = {
|
|
|
21
21
|
lg: `@media (min-width: ${mediaSize.lg}px)`,
|
|
22
22
|
xl: `@media (min-width: ${mediaSize.xl}px)`,
|
|
23
23
|
xxl: `@media (min-width: ${mediaSize.xxl}px)`
|
|
24
|
+
},
|
|
25
|
+
fontSize: {
|
|
26
|
+
xs: 'font-size: 14px;',
|
|
27
|
+
sm: 'font-size: 16px;',
|
|
28
|
+
md: 'font-size: 18px;',
|
|
29
|
+
lg: 'font-size: 24px;',
|
|
30
|
+
xl: 'font-size: 28px;'
|
|
31
|
+
},
|
|
32
|
+
margin: {
|
|
33
|
+
default: 'margin: 32px auto;',
|
|
34
|
+
narrow: 'margin: 16px auto;'
|
|
24
35
|
}
|
|
25
36
|
};
|
|
26
37
|
exports.theme = theme;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirrormedia/lilith-draft-editor",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -23,18 +23,18 @@
|
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"draft-js": "^0.11.7",
|
|
26
|
-
"@mirrormedia/lilith-draft-renderer": "1.
|
|
26
|
+
"@mirrormedia/lilith-draft-renderer": "1.3.0-alpha.26"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"react": "18.
|
|
30
|
-
"react-dom": "18.
|
|
29
|
+
"react": "18.2.0",
|
|
30
|
+
"react-dom": "18.2.0",
|
|
31
31
|
"styled-components": "5.3.5",
|
|
32
|
-
"@keystone-6/core": "
|
|
33
|
-
"@keystone-ui/button": "^
|
|
34
|
-
"@keystone-ui/fields": "^
|
|
35
|
-
"@keystone-ui/modals": "^
|
|
32
|
+
"@keystone-6/core": "5.2.0",
|
|
33
|
+
"@keystone-ui/button": "^7.0.2",
|
|
34
|
+
"@keystone-ui/fields": "^7.2.0",
|
|
35
|
+
"@keystone-ui/modals": "^6.0.3"
|
|
36
36
|
},
|
|
37
37
|
"files": [
|
|
38
38
|
"lib"
|
|
39
39
|
]
|
|
40
|
-
}
|
|
40
|
+
}
|