@vonaffenfels/slate-editor 1.0.1

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 (77) hide show
  1. package/.babelrc +44 -0
  2. package/README.md +5 -0
  3. package/componentLoader.js +52 -0
  4. package/dist/BlockEditor.css +93 -0
  5. package/dist/BlockEditor.js +2 -0
  6. package/dist/BlockEditor.js.LICENSE.txt +61 -0
  7. package/dist/Renderer.js +2 -0
  8. package/dist/Renderer.js.LICENSE.txt +15 -0
  9. package/dist/fromHTML.js +1 -0
  10. package/dist/index.css +93 -0
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.LICENSE.txt +69 -0
  13. package/dist/toHTML.js +2 -0
  14. package/dist/toHTML.js.LICENSE.txt +23 -0
  15. package/dist/toText.js +2 -0
  16. package/dist/toText.js.LICENSE.txt +23 -0
  17. package/package.json +79 -0
  18. package/postcss.config.js +7 -0
  19. package/scss/demo.scss +142 -0
  20. package/scss/editor.scss +394 -0
  21. package/scss/storybook.scss +66 -0
  22. package/scss/toolbar.scss +160 -0
  23. package/src/BlockEditor.js +252 -0
  24. package/src/Blocks/EmptyBlock.js +12 -0
  25. package/src/Blocks/EmptyWrapper.js +5 -0
  26. package/src/Blocks/ErrorBoundary.js +41 -0
  27. package/src/Blocks/LayoutBlock.js +179 -0
  28. package/src/Blocks/LayoutSlot.js +61 -0
  29. package/src/Context/StorybookContext.js +7 -0
  30. package/src/Nodes/Default.js +151 -0
  31. package/src/Nodes/Element.js +72 -0
  32. package/src/Nodes/Leaf.js +40 -0
  33. package/src/Nodes/Storybook.js +170 -0
  34. package/src/Nodes/StorybookDisplay.js +118 -0
  35. package/src/Nodes/Text.js +67 -0
  36. package/src/Renderer.js +41 -0
  37. package/src/Serializer/Html.js +43 -0
  38. package/src/Serializer/Serializer.js +318 -0
  39. package/src/Serializer/Text.js +18 -0
  40. package/src/Serializer/ads.js +175 -0
  41. package/src/Serializer/index.js +4 -0
  42. package/src/SidebarEditor/SidebarEditorField.js +249 -0
  43. package/src/SidebarEditor.css +90 -0
  44. package/src/SidebarEditor.js +236 -0
  45. package/src/Storybook.js +152 -0
  46. package/src/Toolbar/Align.js +65 -0
  47. package/src/Toolbar/Block.js +121 -0
  48. package/src/Toolbar/Element.js +49 -0
  49. package/src/Toolbar/Formats.js +60 -0
  50. package/src/Toolbar/Insert.js +29 -0
  51. package/src/Toolbar/Layout.js +333 -0
  52. package/src/Toolbar/Link.js +165 -0
  53. package/src/Toolbar/Toolbar.js +164 -0
  54. package/src/Tools/Margin.js +52 -0
  55. package/src/dev/App.js +61 -0
  56. package/src/dev/draftToSlate.json +3148 -0
  57. package/src/dev/index.css +3 -0
  58. package/src/dev/index.html +11 -0
  59. package/src/dev/index.js +5 -0
  60. package/src/dev/sampleValue1.json +4295 -0
  61. package/src/dev/sampleValue2.json +0 -0
  62. package/src/dev/sampleValueValid.json +411 -0
  63. package/src/dev/testComponents/TestStory.js +9 -0
  64. package/src/dev/testComponents/TestStory.stories.js +172 -0
  65. package/src/dev/testSampleValue.json +747 -0
  66. package/src/fromHTML.js +5 -0
  67. package/src/index.js +9 -0
  68. package/src/plugins/ListItem.js +49 -0
  69. package/src/plugins/SoftBreak.js +24 -0
  70. package/src/toHTML.js +7 -0
  71. package/src/toText.js +7 -0
  72. package/src/util.js +20 -0
  73. package/storyLoader.js +46 -0
  74. package/tailwind.config.js +5 -0
  75. package/webpack.config.build.js +53 -0
  76. package/webpack.config.dev.js +61 -0
  77. package/webpack.config.js +117 -0
package/.babelrc ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "presets": [
3
+ "next/babel",
4
+ [
5
+ "@babel/preset-env",
6
+ {
7
+ "modules": false,
8
+ "targets": {
9
+ "browsers": [
10
+ "last 2 Chrome versions",
11
+ "last 2 Firefox versions",
12
+ "last 2 Safari versions",
13
+ "last 2 iOS versions",
14
+ "last 1 Android version",
15
+ "last 1 ChromeAndroid version",
16
+ "ie 11"
17
+ ]
18
+ }
19
+ }
20
+ ],
21
+ "@babel/preset-react"
22
+ ],
23
+ "plugins": [
24
+ [
25
+ "@babel/plugin-proposal-private-methods",
26
+ {
27
+ "loose": true
28
+ }
29
+ ],
30
+ [
31
+ "@babel/plugin-proposal-private-property-in-object",
32
+ {
33
+ "loose": true
34
+ }
35
+ ],
36
+ [
37
+ "@babel/plugin-proposal-class-properties",
38
+ {
39
+ "loose": true
40
+ }
41
+ ],
42
+ "@babel/plugin-syntax-dynamic-import"
43
+ ]
44
+ }
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # dev
2
+
3
+ run config EDITOR :: DEV or in repo root yarn devEditor
4
+
5
+ http://localhost:9000/dist/
@@ -0,0 +1,52 @@
1
+ const walkSync = require("walk-sync");
2
+
3
+ module.exports = async function componentLoader() {
4
+ const options = this.getOptions();
5
+
6
+ const files = walkSync(options.componentRoot, {
7
+ directories: false,
8
+ globs: ["**/*.js", "**/*.jsx", "**/*.ts"],
9
+ ignore: [
10
+ "**/*.stories.js",
11
+ "**/*.stories.jsx",
12
+ "**/*.stories.ts",
13
+ "**/*.loader.js",
14
+ "**/*.loader.jsx",
15
+ "**/*.loader.ts",
16
+ "atomic/**/*",
17
+ ],
18
+ });
19
+
20
+ console.log(`Found ${files.length} components in ${options.componentRoot}`);
21
+ const components = files.map(file => {
22
+ let componentNameParts = file.split(".");
23
+ componentNameParts.pop();
24
+ return {name: componentNameParts.join("/"), file: `${options.componentImportRoot}/${file}`};
25
+ })
26
+
27
+ const componentImports = components.map(component => {
28
+ return `const ${component.name} = dynamic(() => import("${component.file}").then(v => v?.[${component.name}] || v.default));`;
29
+ });
30
+
31
+ return `
32
+ import dynamic from 'next/dynamic';
33
+
34
+ ${componentImports.join("\n")}
35
+
36
+ export default function componentLoader(block) {
37
+ const localBlock = String(block).toLowerCase();
38
+
39
+ switch(localBlock) {
40
+ ${components.map(component => {
41
+ return `
42
+ case "${component.name.toLowerCase()}":
43
+ return ${component.name};
44
+ `;
45
+ })}
46
+ default:
47
+ console.warn(\`No Component found for \${block}\`);
48
+ return null;
49
+ }
50
+ }
51
+ `;
52
+ };
@@ -0,0 +1,93 @@
1
+ .toolbar{background-color:rgba(255,255,255,.95);border-bottom:1px solid rgba(0,0,0,.3);display:none;flex-direction:row;justify-content:space-between;padding:5px;position:absolute;z-index:500}.toolbar.toolbar-static{display:block;position:fixed;width:100%;max-width:100%;top:0px;left:0px}.toolbar.active{display:block}.toolbar .toolbar-btns{display:flex}.toolbar .toolbar-btn{border-radius:3px;color:#000;cursor:pointer;font-weight:bold;margin-right:5px;padding:5px 7px;z-index:500;position:relative;display:block}.toolbar .toolbar-btn.active{background-color:rgba(0,0,0,.3)}.toolbar .toolbar-btn:last-child{margin-right:0px}.toolbar .toolbar-btn:hover,.toolbar .toolbar-btn:active{background-color:rgba(0,0,0,.2)}.toolbar .toolbar-btn:hover .toolbar-btn-config,.toolbar .toolbar-btn:active .toolbar-btn-config{display:block}.toolbar .toolbar-btn .toolbar-btn-config{position:absolute;top:28px;left:0px;display:none;background-color:rgba(255,255,255,.95);border-bottom:1px solid rgba(0,0,0,.3);padding:5px 7px}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner{display:flex;flex-direction:column}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row{min-width:250px;padding:5px 7px;display:flex;flex-direction:row}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row .toolbar-form-label{flex-grow:0;padding:0 7px 0 0}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row .toolbar-form-input{flex-grow:1}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row .toolbar-form-input input{padding:5px;border:1px solid gray;background-color:#fff;color:#000}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row .toolbar-form-input input[type=checkbox]:checked{color:#fff;background-color:#000}.toolbar .toolbar-btn .toolbar-btn-config .toolbar-btn-config-inner .toolbar-btn-config-row .toolbar-btn{display:flex;flex-grow:1;border:1px solid #000}.toolbar .toolbar-btn-expand{z-index:500;display:block;max-height:28px;overflow:hidden}.toolbar .toolbar-btn-expand .toolbar-btn-expand-inner{display:flex;flex-direction:column}.toolbar .toolbar-btn-expand .toolbar-btn-expand-inner .toolbar-btn.active{order:-1}.toolbar .toolbar-btn-expand:hover{overflow:visible}.toolbar .toolbar-btn-expand:hover .toolbar-btn-expand-inner{background-color:rgba(255,255,255,.95);border-bottom:1px solid rgba(0,0,0,.3)}.toolbar .toolbar-btn-expand-right{z-index:500;display:block;max-height:28px;overflow:hidden}.toolbar .toolbar-btn-expand-right .toolbar-btn-expand-inner{left:100%;display:flex;flex-direction:column}.toolbar .toolbar-btn-expand-right .toolbar-btn-expand-inner .toolbar-btn.active{order:-1}.toolbar .toolbar-btn-expand-right:hover{overflow:visible}.toolbar .toolbar-btn-expand-right:hover .toolbar-btn-expand-inner{background-color:rgba(255,255,255,.95);border-bottom:1px solid rgba(0,0,0,.3)}
2
+ .storybook-element{display:inline}.storybook-element.storybook-element-float-left{float:left}.storybook-element.storybook-element-float-right{float:right}.storybook-element .storybook-element-component{user-select:none;display:block}.storybook-element .storybook-element-component.storybook-inline{display:inline-block}.storybook-element .storybook-element-component .editor-empty-element{background-color:red;border:1px solid #000;min-height:20px;min-width:100px}.storybook-element .storybook-element-component .storybook-element-display:empty{display:block;background-color:red;border:1px solid #000;min-height:30px;min-width:100px}.storybook-element .storybook-element-component .storybook-element-display.storybook-element-display-empty{display:block;background-color:red;border:1px solid #000;color:#fff;font-weight:bold;font-size:110%;padding:10px;min-height:30px;min-width:100px;position:relative}.storybook-element .storybook-element-component .storybook-element-display.storybook-element-display-empty::after{position:absolute;top:0px;left:0px;content:attr(data-content)}.storybook-element .storybook-element-error{background-color:red;padding:15px;font-size:18px;font-weight:bold;min-height:100px;min-width:100px}
3
+ .block-editor-wrapper{position:relative;display:flex;height:100%;max-height:100%;max-width:100%;width:100%}.block-editor-wrapper.storybook-active .slate-editor{display:none;overflow:hidden}.block-editor-wrapper .storybook-target{display:block;height:100%;left:0px;position:fixed;top:0px;width:100%;z-index:1000}.block-editor-wrapper .storybook-target:empty{display:none}.block-editor-wrapper .storybook-target .storybook-frame{height:100%;width:100%}.block-editor-wrapper .storybook-target .storybook-frame iframe{height:100%;width:100%}.block-editor-wrapper .slate-editor{max-height:100%;height:100%;z-index:100;max-width:100%;overflow-y:auto;padding:40px 60px 0 60px;position:relative;width:100%}.block-editor-wrapper .slate-editor span[data-slate-node=text]{font-family:"Font TWO BR",sans-serif}.block-editor-wrapper .slate-editor p[data-slate-node=element]{padding-bottom:20px;position:relative}.block-editor-wrapper .slate-editor p[data-slate-node=element]:after{font-size:1em;content:"P";color:#cecece;position:absolute;left:-20px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h1[data-slate-node=element]{font-size:2em;position:relative}.block-editor-wrapper .slate-editor h1[data-slate-node=element]:after{content:"h1";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h2[data-slate-node=element]{font-size:1.5em;position:relative}.block-editor-wrapper .slate-editor h2[data-slate-node=element]:after{content:"h2";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h3[data-slate-node=element]{font-size:1.3em;position:relative}.block-editor-wrapper .slate-editor h3[data-slate-node=element]:after{content:"h3";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h4[data-slate-node=element]{font-size:1.1em;position:relative}.block-editor-wrapper .slate-editor h4[data-slate-node=element]:after{content:"h4";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h5[data-slate-node=element]{font-size:1em;position:relative}.block-editor-wrapper .slate-editor h5[data-slate-node=element]:after{content:"h5";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor h6[data-slate-node=element]{font-size:1em;position:relative}.block-editor-wrapper .slate-editor h6[data-slate-node=element]:after{content:"h6";color:#cecece;position:absolute;left:-26px;text-transform:uppercase;top:1px;user-select:none}.block-editor-wrapper .slate-editor ul[data-slate-node=element]{list-style:circle}.block-editor-wrapper .slate-editor ol[data-slate-node=element]{list-style:decimal}.block-editor-wrapper .slate-editor a[data-slate-node=element]{color:rgb(var(--color-secondary));text-decoration:underline}.block-editor-wrapper .slate-editor div[data-slate-editor=true]{height:100%}.block-editor-wrapper .slate-editor .align-left{text-align:left}.block-editor-wrapper .slate-editor .align-right{text-align:right}.block-editor-wrapper .slate-editor .align-center{text-align:center}.block-editor-wrapper .slate-editor .align-justify{text-align:justify}.block-editor-wrapper .slate-editor .block-align-left{display:inline-block;float:left;margin-right:15px}.block-editor-wrapper .slate-editor .block-align-undefined{display:inline-block}.block-editor-wrapper .slate-editor .block-align-right{display:inline-block;float:right;margin-left:15px}.block-editor-wrapper .options-wrapper{position:relative}.block-editor-wrapper .options-wrapper:hover .options-container{display:flex}.block-editor-wrapper .options-wrapper .options-container{display:none;flex-direction:row;justify-content:center;left:0px;position:absolute;top:0px;z-index:200;background-color:gray;padding:4px 4px 4px 4px}.block-editor-wrapper .options-wrapper .options-container .options-container-option{cursor:pointer;width:26px}.block-editor-wrapper .options-wrapper .options-container .options-container-option>svg{width:100%}.block-editor-wrapper .options-wrapper .options-container .options-container-option.options-container-option-expand-text{width:100px}.block-editor-wrapper .options-wrapper .options-container .options-container-option.options-container-option-delete{color:red}.block-editor-wrapper .options-wrapper .options-container.options-container-right{left:-26px}.block-editor-wrapper .layout-slot-option-padding{position:relative;width:20px;height:20px;display:inline-block}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-item{background-color:#000;display:block;position:absolute;cursor:pointer}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-item:hover{background-color:#fff;z-index:10}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-item.active{background-color:#d3d3d3;z-index:10}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-top{height:5px;width:20px;top:0;left:0}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-right{height:20px;width:5px;right:0;top:0}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-bottom{height:5px;width:20px;bottom:0;left:0}.block-editor-wrapper .layout-slot-option-padding .layout-slot-option-padding-left{height:20px;width:5px;top:0;left:0}.block-editor-wrapper .layout-block{display:flex;flex-direction:row}.block-editor-wrapper .layout-block.article-width{width:44.4444444444%}.block-editor-wrapper .layout-block.site-width{width:66.6666666667%}.block-editor-wrapper .layout-block .layout-slot{display:flex;flex-direction:column;position:relative;outline:1px dashed gray}.block-editor-wrapper .layout-block .layout-slot .layout-slot-options{background-color:gray;color:#fff;font-size:24px;padding:10px;display:flex;flex-direction:row;justify-content:space-between}.block-editor-wrapper .layout-block .layout-slot .layout-slot-options .layout-slot-option{text-transform:uppercase;display:inline-block}.block-editor-wrapper .layout-block .layout-slot .layout-slot-options .layout-slot-name{text-transform:uppercase;display:inline-block}.block-editor-wrapper .layout-block .layout-slot.layout-slot-widecol{flex-grow:1}.block-editor-wrapper .layout-block .layout-slot.layout-slot-maincol{flex-grow:1}.block-editor-wrapper .layout-block .layout-slot.layout-slot-sidecol{flex-grow:0;width:30%}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-half{flex-grow:0;width:50%}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-3{flex-grow:0;width:100%}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-2{flex-grow:0;width:66.6666666666%}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-1{flex-grow:0;width:33.3333333333%}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-fill{flex-grow:1}.block-editor-wrapper .layout-block .layout-slot.layout-slot-grid-auto{flex-grow:0;width:auto}
4
+ * {
5
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !important;
6
+ }
7
+
8
+ #sidebar-editor {
9
+ background-color: rgb(247, 249, 250);
10
+ height: 100%;
11
+ overflow-y: auto;
12
+ flex-basis: 400px;
13
+ flex-shrink: 0;
14
+ padding: 61px 16px 16px 16px;
15
+ }
16
+
17
+ select {
18
+ font-size: 0.875rem !important;
19
+ color: rgb(90, 101, 124) !important;
20
+ background-color: white !important;
21
+ border: 1px solid #cfd9e0 !important;
22
+ border-radius: 6px !important;
23
+ box-shadow: none !important;
24
+ filter: none !important;
25
+ }
26
+
27
+ p, label {
28
+ color: rgb(90, 101, 124);
29
+ }
30
+
31
+ label {
32
+ display: block;
33
+ margin: 0 0 4px 0 !important;
34
+ }
35
+
36
+ input[type="text"],
37
+ input[type="number"],
38
+ input[type="color"],
39
+ input[type="date"],
40
+ textarea {
41
+ display: block;
42
+ font-size: 0.875rem !important;
43
+ color: rgb(90, 101, 124) !important;
44
+ background-color: white !important;
45
+ border: 1px solid #cfd9e0 !important;
46
+ border-radius: 6px !important;
47
+ box-shadow: none !important;
48
+ filter: none !important;
49
+ width: 100% !important;
50
+ padding: 8px 0.75rem;
51
+ }
52
+
53
+ input[type="color"] {
54
+ padding: 0;
55
+ }
56
+
57
+ input[type="range"] {
58
+ display: block;
59
+ width: 100%;
60
+ }
61
+
62
+ input[type="radio"],
63
+ input[type="checkbox"] {
64
+ margin-right: 4px;
65
+ }
66
+
67
+ /* button[data-test-id="cf-ui-button"] span {
68
+ color: #036fe3 !important;
69
+ }
70
+
71
+ button[data-test-id="cf-ui-button"] svg {
72
+ fill: #036fe3 !important;
73
+ }
74
+
75
+ button[data-test-id="cf-ui-button"]:hover span {
76
+ color: #FFFFFF !important;
77
+ }
78
+
79
+ button[data-test-id="cf-ui-button"]:hover svg {
80
+ fill: #FFFFFF !important;
81
+ } */
82
+
83
+ .inline-check-wrapper {
84
+ display: inline-block;
85
+ margin-right: 8px;
86
+ }
87
+
88
+ button {
89
+ width: 100%;
90
+ padding: 8px !important;
91
+ color: #036fe3 !important;
92
+ border: 1px solid #036fe3 !important;
93
+ }