@mirrormedia/lilith-draft-editor 1.0.0-beta

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 (105) hide show
  1. package/lib/draft-js/block-renderer/background-image-block.tsx +113 -0
  2. package/lib/draft-js/block-renderer/background-video-block.tsx +120 -0
  3. package/lib/draft-js/block-renderer/color-box-block.tsx +85 -0
  4. package/lib/draft-js/block-renderer/divider-block.tsx +12 -0
  5. package/lib/draft-js/block-renderer/embedded-code-block.tsx +65 -0
  6. package/lib/draft-js/block-renderer/image-block.tsx +41 -0
  7. package/lib/draft-js/block-renderer/info-box-block.tsx +85 -0
  8. package/lib/draft-js/block-renderer/media-block.tsx +36 -0
  9. package/lib/draft-js/block-renderer/related-post-block.tsx +47 -0
  10. package/lib/draft-js/block-renderer/side-index-block.tsx +113 -0
  11. package/lib/draft-js/block-renderer/slideshow-block.tsx +62 -0
  12. package/lib/draft-js/block-renderer/table-block.tsx +488 -0
  13. package/lib/draft-js/buttons/annotation.tsx +113 -0
  14. package/lib/draft-js/buttons/background-color.tsx +125 -0
  15. package/lib/draft-js/buttons/background-image.tsx +276 -0
  16. package/lib/draft-js/buttons/background-video.tsx +275 -0
  17. package/lib/draft-js/buttons/color-box.tsx +207 -0
  18. package/lib/draft-js/buttons/divider.tsx +56 -0
  19. package/lib/draft-js/buttons/embedded-code.tsx +126 -0
  20. package/lib/draft-js/buttons/enlarge.tsx +11 -0
  21. package/lib/draft-js/buttons/font-color.tsx +113 -0
  22. package/lib/draft-js/buttons/image.tsx +71 -0
  23. package/lib/draft-js/buttons/info-box.tsx +170 -0
  24. package/lib/draft-js/buttons/link.tsx +103 -0
  25. package/lib/draft-js/buttons/media.tsx +120 -0
  26. package/lib/draft-js/buttons/related-post.tsx +81 -0
  27. package/lib/draft-js/buttons/selector/align-selector.tsx +65 -0
  28. package/lib/draft-js/buttons/selector/image-selector.tsx +485 -0
  29. package/lib/draft-js/buttons/selector/pagination.tsx +83 -0
  30. package/lib/draft-js/buttons/selector/post-selector.tsx +367 -0
  31. package/lib/draft-js/buttons/selector/search-box.tsx +39 -0
  32. package/lib/draft-js/buttons/selector/video-selector.tsx +312 -0
  33. package/lib/draft-js/buttons/side-index.tsx +257 -0
  34. package/lib/draft-js/buttons/slideshow.tsx +81 -0
  35. package/lib/draft-js/buttons/table.tsx +63 -0
  36. package/lib/draft-js/buttons/text-align.tsx +88 -0
  37. package/lib/draft-js/editor/basic-editor.tsx +384 -0
  38. package/lib/draft-js/editor/block-redender-fn.tsx +77 -0
  39. package/lib/draft-js/editor/draft-converter/api-data-instance.js +58 -0
  40. package/lib/draft-js/editor/draft-converter/atomic-block-processor.js +233 -0
  41. package/lib/draft-js/editor/draft-converter/entities.js +76 -0
  42. package/lib/draft-js/editor/draft-converter/index.js +201 -0
  43. package/lib/draft-js/editor/draft-converter/inline-styles-processor.js +238 -0
  44. package/lib/draft-js/editor/entity-decorator.tsx +7 -0
  45. package/lib/draft-js/editor/modifier.tsx +71 -0
  46. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +81 -0
  47. package/lib/draft-js/entity-decorator/link-decorator.tsx +27 -0
  48. package/lib/index.js +31 -0
  49. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +128 -0
  50. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +135 -0
  51. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +98 -0
  52. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +12 -0
  53. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +65 -0
  54. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +41 -0
  55. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +98 -0
  56. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +36 -0
  57. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +47 -0
  58. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +125 -0
  59. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +62 -0
  60. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +537 -0
  61. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +81 -0
  62. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +27 -0
  63. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +65 -0
  64. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +485 -0
  65. package/lib/website/mirrormedia/custom/selector/pagination.tsx +83 -0
  66. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +367 -0
  67. package/lib/website/mirrormedia/custom/selector/search-box.tsx +39 -0
  68. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +310 -0
  69. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +77 -0
  70. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +7 -0
  71. package/lib/website/mirrormedia/draft-editor/index.tsx +909 -0
  72. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +77 -0
  73. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +7 -0
  74. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +43 -0
  75. package/lib/website/mirrormedia/draft-renderer/index.tsx +150 -0
  76. package/lib/website/mirrormedia/index.js +19 -0
  77. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +128 -0
  78. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +135 -0
  79. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +98 -0
  80. package/lib/website/readr/custom/block-renderer/divider-block.tsx +12 -0
  81. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +65 -0
  82. package/lib/website/readr/custom/block-renderer/image-block.tsx +41 -0
  83. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +98 -0
  84. package/lib/website/readr/custom/block-renderer/media-block.tsx +36 -0
  85. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +47 -0
  86. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +125 -0
  87. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +62 -0
  88. package/lib/website/readr/custom/block-renderer/table-block.tsx +537 -0
  89. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +81 -0
  90. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +27 -0
  91. package/lib/website/readr/custom/selector/align-selector.tsx +65 -0
  92. package/lib/website/readr/custom/selector/image-selector.tsx +485 -0
  93. package/lib/website/readr/custom/selector/pagination.tsx +83 -0
  94. package/lib/website/readr/custom/selector/post-selector.tsx +367 -0
  95. package/lib/website/readr/custom/selector/search-box.tsx +39 -0
  96. package/lib/website/readr/custom/selector/video-selector.tsx +310 -0
  97. package/lib/website/readr/draft-editor/block-redender-fn.tsx +77 -0
  98. package/lib/website/readr/draft-editor/entity-decorator.tsx +7 -0
  99. package/lib/website/readr/draft-editor/index.tsx +909 -0
  100. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +77 -0
  101. package/lib/website/readr/draft-renderer/entity-decorator.tsx +7 -0
  102. package/lib/website/readr/draft-renderer/index-deprecated.tsx +43 -0
  103. package/lib/website/readr/draft-renderer/index.tsx +150 -0
  104. package/lib/website/readr/index.js +19 -0
  105. package/package.json +39 -0
@@ -0,0 +1,77 @@
1
+ import { EmbeddedCodeBlock } from '../custom/block-renderer/embedded-code-block'
2
+ import { MediaBlock } from '../custom/block-renderer/media-block'
3
+ import { ImageBlock } from '../custom/block-renderer/image-block'
4
+ import { InfoBoxBlock } from '../custom/block-renderer/info-box-block'
5
+ import {
6
+ SlideshowBlock,
7
+ SlideshowBlockV2,
8
+ } from '../custom/block-renderer/slideshow-block'
9
+ import { DividerBlock } from '../custom/block-renderer/divider-block'
10
+ import { TableBlock } from '../custom/block-renderer/table-block'
11
+ import { ColorBoxBlock } from '../custom/block-renderer/color-box-block'
12
+ import { BGImageBlock } from '../custom/block-renderer/background-image-block'
13
+ import { BGVideoBlock } from '../custom/block-renderer/background-video-block'
14
+ import { RelatedPostBlock } from '../custom/block-renderer/related-post-block'
15
+ import { SideIndexBlock } from '../custom/block-renderer/side-index-block'
16
+
17
+ const AtomicBlock = (props) => {
18
+ const entity = props.contentState.getEntity(props.block.getEntityAt(0))
19
+
20
+ const entityType = entity.getType()
21
+
22
+ switch (entityType) {
23
+ case 'audioLink':
24
+ case 'imageLink':
25
+ case 'videoLink': {
26
+ return MediaBlock(entity)
27
+ }
28
+ case 'image': {
29
+ return ImageBlock(entity)
30
+ }
31
+ case 'slideshow': {
32
+ return SlideshowBlock(entity)
33
+ }
34
+ case 'slideshow-v2': {
35
+ return SlideshowBlockV2(entity)
36
+ }
37
+ case 'EMBEDDEDCODE': {
38
+ return EmbeddedCodeBlock(entity)
39
+ }
40
+ case 'INFOBOX': {
41
+ return InfoBoxBlock(props)
42
+ }
43
+ case 'DIVIDER': {
44
+ return DividerBlock()
45
+ }
46
+ case 'TABLE': {
47
+ return TableBlock(props)
48
+ }
49
+ case 'COLORBOX': {
50
+ return ColorBoxBlock(props)
51
+ }
52
+ case 'BACKGROUNDIMAGE': {
53
+ return BGImageBlock(props)
54
+ }
55
+ case 'BACKGROUNDVIDEO': {
56
+ return BGVideoBlock(props)
57
+ }
58
+ case 'RELATEDPOST': {
59
+ return RelatedPostBlock(entity)
60
+ }
61
+ case 'SIDEINDEX': {
62
+ return SideIndexBlock(props)
63
+ }
64
+ }
65
+ return null
66
+ }
67
+
68
+ export function atomicBlockRenderer(block) {
69
+ if (block.getType() === 'atomic') {
70
+ return {
71
+ component: AtomicBlock,
72
+ editable: false,
73
+ }
74
+ }
75
+
76
+ return null
77
+ }
@@ -0,0 +1,7 @@
1
+ import { CompositeDecorator } from 'draft-js'
2
+ import { annotationDecorator } from '../custom/entity-decorator/annotation-decorator'
3
+ import { linkDecorator } from '../custom/entity-decorator/link-decorator'
4
+
5
+ const decorators = new CompositeDecorator([annotationDecorator, linkDecorator])
6
+
7
+ export default decorators
@@ -0,0 +1,43 @@
1
+ import React from 'react'
2
+ import { Editor, EditorState, convertFromRaw } from 'draft-js'
3
+ import decorators from '../draft-editor/entity-decorator'
4
+ import { atomicBlockRenderer } from '../draft-editor/block-redender-fn'
5
+
6
+ // to be separate
7
+ const styleMap = {
8
+ CODE: {
9
+ backgroundColor: 'rgba(0, 0, 0, 0.05)',
10
+ fontFamily: '"Inconsolata", "Menlo", "Consolas", monospace',
11
+ fontSize: 16,
12
+ padding: 2,
13
+ },
14
+ }
15
+ const blockRendererFn = (block) => {
16
+ const atomicBlockObj = atomicBlockRenderer(block)
17
+ return atomicBlockObj
18
+ }
19
+
20
+ const getBlockStyle = (block) => {
21
+ switch (block.getType()) {
22
+ case 'blockquote':
23
+ return 'RichEditor-blockquote'
24
+
25
+ default:
26
+ return null
27
+ }
28
+ }
29
+
30
+ export default function DraftRenderer({ rawContentBlock }) {
31
+ const contentState = convertFromRaw(rawContentBlock)
32
+ const editorState = EditorState.createWithContent(contentState, decorators)
33
+
34
+ return (
35
+ <Editor
36
+ editorState={editorState}
37
+ readOnly
38
+ customStyleMap={styleMap}
39
+ blockRendererFn={blockRendererFn}
40
+ blockStyleFn={getBlockStyle}
41
+ />
42
+ )
43
+ }
@@ -0,0 +1,150 @@
1
+ import React from 'react'
2
+ import styled from 'styled-components'
3
+
4
+ import { Editor, EditorState } from 'draft-js'
5
+
6
+ import { atomicBlockRenderer } from './block-redender-fn'
7
+ import decorators from './entity-decorator'
8
+
9
+ import { CUSTOM_STYLE_PREFIX_FONT_COLOR } from '../../../draft-js/buttons/font-color'
10
+ import { CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR } from '../../../draft-js/buttons/background-color'
11
+
12
+ const DraftEditorWrapper = styled.div`
13
+ /* Rich-editor default setting (.RichEditor-root)*/
14
+ background: #fff;
15
+ border: 1px solid #ddd;
16
+ font-family: 'Georgia', serif;
17
+ font-size: 14px;
18
+ padding: 15px;
19
+
20
+ /* Custom setting */
21
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
22
+ 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
23
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
24
+ width: 100%;
25
+ height: 100%;
26
+ background: rgb(255, 255, 255);
27
+ border-radius: 6px;
28
+ padding: 0 1rem 1rem;
29
+
30
+ /* Draft built-in buttons' style */
31
+ .public-DraftStyleDefault-header-two {
32
+ }
33
+ .public-DraftStyleDefault-header-three {
34
+ }
35
+ .public-DraftStyleDefault-header-four {
36
+ }
37
+ .public-DraftStyleDefault-blockquote {
38
+ }
39
+ .public-DraftStyleDefault-ul {
40
+ }
41
+ .public-DraftStyleDefault-unorderedListItem {
42
+ }
43
+ .public-DraftStyleDefault-ol {
44
+ }
45
+ .public-DraftStyleDefault-orderedListItem {
46
+ }
47
+ /* code-block */
48
+ .public-DraftStyleDefault-pre {
49
+ }
50
+ .alignCenter * {
51
+ text-align: center;
52
+ }
53
+ .alignLeft * {
54
+ text-align: left;
55
+ }
56
+ `
57
+
58
+ type RichTextEditorProps = {
59
+ onChange: (editorState) => void
60
+ editorState: EditorState
61
+ }
62
+ type State = {
63
+ isEnlarged?: boolean
64
+ readOnly?: boolean
65
+ }
66
+
67
+ const customStyleMap = {
68
+ CODE: {
69
+ backgroundColor: 'rgba(0, 0, 0, 0.05)',
70
+ fontFamily: '"Inconsolata", "Menlo", "Consolas", monospace',
71
+ fontSize: 16,
72
+ padding: 2,
73
+ },
74
+ }
75
+
76
+ const customStyleFn = (style) => {
77
+ return style.reduce((styles, styleName) => {
78
+ if (styleName?.startsWith(CUSTOM_STYLE_PREFIX_FONT_COLOR)) {
79
+ styles['color'] = styleName.split(CUSTOM_STYLE_PREFIX_FONT_COLOR)[1]
80
+ }
81
+ if (styleName?.startsWith(CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR)) {
82
+ styles['backgroundColor'] = styleName.split(
83
+ CUSTOM_STYLE_PREFIX_BACKGROUND_COLOR
84
+ )[1]
85
+ }
86
+ return styles
87
+ }, {})
88
+ }
89
+
90
+ const blockStyleFn = (editorState, block) => {
91
+ const entityKey = block.getEntityAt(0)
92
+ const entity = entityKey
93
+ ? editorState.getCurrentContent().getEntity(entityKey)
94
+ : null
95
+
96
+ let result = ''
97
+ const blockData = block.getData()
98
+ if (blockData) {
99
+ const textAlign = blockData?.get('textAlign')
100
+ if (textAlign === 'center') {
101
+ result += 'alignCenter '
102
+ } else if (textAlign === 'left') {
103
+ result += 'alignLeft '
104
+ }
105
+ }
106
+
107
+ switch (block.getType()) {
108
+ case 'header-two':
109
+ case 'header-three':
110
+ case 'header-four':
111
+ case 'blockquote':
112
+ result += 'public-DraftStyleDefault-' + block.getType()
113
+ break
114
+ case 'atomic':
115
+ if (entity.getData()?.alignment) {
116
+ // support all atomic block to set alignment
117
+ result += ' ' + entity.getData().alignment
118
+ }
119
+ break
120
+ default:
121
+ break
122
+ }
123
+ return result
124
+ }
125
+
126
+ const blockRendererFn = (block) => {
127
+ const atomicBlockObj = atomicBlockRenderer(block)
128
+ return atomicBlockObj
129
+ }
130
+
131
+ function RichTextEditor({ editorState }) {
132
+ return (
133
+ <DraftEditorWrapper>
134
+ <Editor
135
+ editorState={editorState}
136
+ customStyleMap={customStyleMap}
137
+ blockStyleFn={blockStyleFn.bind(null, editorState)}
138
+ blockRendererFn={blockRendererFn}
139
+ customStyleFn={customStyleFn}
140
+ readOnly
141
+ />
142
+ </DraftEditorWrapper>
143
+ )
144
+ }
145
+
146
+ const DraftRenderer = {
147
+ RichTextEditor,
148
+ decorators,
149
+ }
150
+ export default DraftRenderer
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _draftEditor = _interopRequireDefault(require("./draft-editor"));
9
+
10
+ var _draftRenderer = _interopRequireDefault(require("./draft-renderer"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const Readr = {
15
+ DraftEditor: _draftEditor.default,
16
+ DraftRenderer: _draftRenderer.default
17
+ };
18
+ var _default = Readr;
19
+ exports.default = _default;
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@mirrormedia/lilith-draft-editor",
3
+ "version": "1.0.0-beta",
4
+ "description": "",
5
+ "main": "lib/index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "dev": "make dev",
9
+ "build": "make build",
10
+ "clean": "make clean",
11
+ "build-lib": "make build-lib"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/readr-media/react.git",
16
+ "directory": "packages/draft-editor"
17
+ },
18
+ "keywords": [
19
+ "react",
20
+ "readr",
21
+ "draft.js"
22
+ ],
23
+ "license": "MIT",
24
+ "dependencies": {
25
+ "draft-js": "^0.11.7"
26
+ },
27
+ "peerDependencies": {
28
+ "react": "18.1.0",
29
+ "react-dom": "^18.1.0",
30
+ "styled-components": "5.3.5",
31
+ "@keystone-6/core": "1.1.1",
32
+ "@keystone-ui/button": "^6.0.0",
33
+ "@keystone-ui/fields": "^6.0.0",
34
+ "@keystone-ui/modals": "^5.0.0"
35
+ },
36
+ "files": [
37
+ "lib"
38
+ ]
39
+ }