@vonaffenfels/slate-editor 1.0.44 → 1.0.46

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vonaffenfels/slate-editor",
3
- "version": "1.0.44",
3
+ "version": "1.0.46",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -71,7 +71,7 @@
71
71
  "cssnano": "^5.0.1",
72
72
  "escape-html": "^1.0.3"
73
73
  },
74
- "gitHead": "9bcbf3b9b1002d4d41a6d23fb3ab6b567fc1de4f",
74
+ "gitHead": "39c70a07e3c6f82a79775993560a4e902467bf21",
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  }
package/scss/editor.scss CHANGED
@@ -303,9 +303,20 @@
303
303
  }
304
304
  }
305
305
 
306
+ .layout-block-auto-fill {
307
+ grid-template-columns: auto 1fr;
308
+ }
309
+
310
+ .layout-block-fill-auto {
311
+ grid-template-columns: 1fr auto;
312
+ }
313
+
314
+ .layout-block-auto-fill-auto {
315
+ grid-template-columns: auto 1fr auto;
316
+ }
317
+
306
318
  .layout-block {
307
- display: flex;
308
- flex-direction: row;
319
+ display: grid;
309
320
 
310
321
  &.article-width {
311
322
  width: 44.44444444435556%;
@@ -321,6 +332,14 @@
321
332
  position: relative;
322
333
  outline: 1px dashed grey;
323
334
 
335
+ .storybook-element-component {
336
+ display: block;
337
+ }
338
+
339
+ .layout-slot-content {
340
+ flex-grow: 1;
341
+ }
342
+
324
343
  .layout-slot-options {
325
344
  background-color: grey;
326
345
  color: white;
@@ -339,53 +358,11 @@
339
358
  text-transform: uppercase;
340
359
  display: inline-block;
341
360
  }
342
-
343
- }
344
-
345
- .layout-slot-content {
346
- }
347
-
348
- &.layout-slot-widecol {
349
- flex-grow: 1;
350
- }
351
-
352
- &.layout-slot-maincol {
353
- flex-grow: 1;
354
- }
355
-
356
- &.layout-slot-sidecol {
357
- flex-grow: 0;
358
- width: 30%;
359
- }
360
-
361
- &.layout-slot-grid-half {
362
- flex-grow: 0;
363
- width: 50%;
364
- }
365
-
366
- &.layout-slot-grid-3 {
367
- flex-grow: 0;
368
- width: 100%;
369
- }
370
-
371
- &.layout-slot-grid-2 {
372
- flex-grow: 0;
373
- width: 66.6666666666%;
374
- }
375
-
376
- &.layout-slot-grid-1 {
377
- flex-grow: 0;
378
- width: 33.3333333333%;
379
- }
380
-
381
- &.layout-slot-grid-fill {
382
- flex-grow: 1;
383
361
  }
362
+ }
384
363
 
385
- &.layout-slot-grid-auto {
386
- flex-grow: 0;
387
- width: auto;
388
- }
364
+ @media only screen and (max-width: 360px) {
365
+ grid-template-columns: 1fr;
389
366
  }
390
367
  }
391
368
  }
@@ -17,9 +17,8 @@ import "../scss/editor.scss";
17
17
  import {ListItemPlugin} from "./plugins/ListItem";
18
18
  import ErrorBoundary from "../src/Blocks/ErrorBoundary";
19
19
  import SidebarEditor from './SidebarEditor';
20
- import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
21
- import {faSpinner} from '@fortawesome/free-solid-svg-icons';
22
20
  import {Spinner} from '@contentful/forma-36-react-components';
21
+ import {ObjectId} from "./ObjectId";
23
22
 
24
23
  export default function BlockEditor({
25
24
  onChange,
@@ -170,17 +169,24 @@ export default function BlockEditor({
170
169
  block: newStorybookElement.block,
171
170
  isEmpty: false,
172
171
  isInline: selectedStorybookElement.isInline,
173
- attributes: newStorybookElement.attributes,
172
+ attributes: newStorybookElement.attributes || {},
174
173
  type: "storybook",
175
174
  };
176
175
 
177
176
  Transforms.setNodes(editor, newNodeProps, {at: selectedStorybookElement.path});
178
177
 
179
178
  onSlateChange(editor.children);
180
- setSelectedStorybookElement({
179
+
180
+ const mergedValue = {
181
181
  ...selectedStorybookElement,
182
182
  ...newNodeProps,
183
- });
183
+ };
184
+
185
+ if (!mergedValue.attributes.teasermanagerSlotId) {
186
+ mergedValue.attributes.teasermanagerSlotId = ObjectId();
187
+ }
188
+
189
+ setSelectedStorybookElement(mergedValue);
184
190
  };
185
191
 
186
192
  const handleSidebarDeleteClick = (element) => {
@@ -171,6 +171,27 @@ export const LayoutBlock = ({
171
171
  }, {at: path});
172
172
  };
173
173
 
174
+ const switchMobileColumnSpan = () => {
175
+ let node = ReactEditor.toSlateNode(editor, attributes.ref.current);
176
+ let fromPath = ReactEditor.findPath(editor, node);
177
+
178
+ if (!fromPath) {
179
+ return;
180
+ }
181
+
182
+ let mobileColumnSpan = element?.attributes?.mobileColumnSpan === 1 ? 2 : 1;
183
+
184
+ Transforms.setNodes(editor, {
185
+ type: "layout",
186
+ attributes: {
187
+ ...(element.attributes || {}),
188
+ mobileColumnSpan,
189
+ },
190
+ }, {at: fromPath});
191
+ };
192
+
193
+ console.log({element});
194
+
174
195
  return <div className="options-wrapper" onClick={() => onElementClick(element)}>
175
196
  <div className="options-container">
176
197
  <span className="options-container-option options-container-option-remove" onClick={onRemoveClick}>
@@ -212,19 +233,29 @@ export const LayoutBlock = ({
212
233
  <span>Rahmen</span>
213
234
  )}
214
235
  </span>
236
+ <span className="mx-2 cursor-pointer" onClick={switchMobileColumnSpan}>
237
+ <span>Mobile Spalten: {element?.attributes?.mobileColumnSpan || 1}</span>
238
+ </span>
215
239
  <ToolMargin margin={element?.attributes?.margin} onChange={onMarginChange}/>
216
240
  </div>
217
241
  <div
218
- className={`layout-block layout-grid layout-grid-cols-${children.length} ` + classNames({
242
+ className={`layout-block layout-grid layout-grid-cols-${children.length} ${element?.attributes?.className || ""} ` + classNames({
219
243
  [classNameArticle + " article-width"]: element?.attributes?.width === "article" || !element?.attributes?.width,
220
244
  [classNameSite + " site-width"]: element?.attributes?.width === "full",
221
245
  "block-editor-table-border-wrapper": element?.attributes?.tableBorder,
222
- "justify-center": element?.attributes?.justifyCenter,
223
- "space-x-4": element?.attributes?.spacing,
246
+ "mx-auto": element?.attributes?.justifyCenter,
247
+ "gap-4": element?.attributes?.spacing,
224
248
  "editor-mt-large": element?.attributes?.margin?.top,
225
249
  "editor-mr-large": element?.attributes?.margin?.right,
226
250
  "editor-mb-large": element?.attributes?.margin?.bottom,
227
251
  "editor-ml-large": element?.attributes?.margin?.left,
252
+ "md:grid-cols-1": element?.children?.length === 1,
253
+ "md:grid-cols-2": element?.children?.length === 2,
254
+ "md:grid-cols-3": element?.children?.length === 3,
255
+ "md:grid-cols-4": element?.children?.length === 4,
256
+ "md:grid-cols-5": element?.children?.length === 5,
257
+ "grid-cols-1": element?.attributes?.mobileColumnSpan === 1,
258
+ "grid-cols-2": element?.attributes?.mobileColumnSpan === 2,
228
259
  })}
229
260
  {...attributes}
230
261
  >
@@ -30,7 +30,7 @@ export const LayoutSlot = ({
30
30
 
31
31
  return <div
32
32
  className={classNames({
33
- ["layout-slot layout-slot-" + element.attributes.name]: true,
33
+ ["layout-slot"]: true,
34
34
  "editor-mt-4": element?.attributes?.margin?.top,
35
35
  "editor-mr-4": element?.attributes?.margin?.right,
36
36
  "editor-mb-4": element?.attributes?.margin?.bottom,
@@ -0,0 +1,4 @@
1
+ export const ObjectId = (
2
+ m = Math, d = Date, h = 16, s = s => m.floor(s).toString(h),
3
+ ) =>
4
+ s(d.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(m.random() * h));
@@ -130,7 +130,7 @@ export function Serializer({
130
130
  return <Wrapper>
131
131
  <div
132
132
  data-cols={props.children.length}
133
- className={classNames({
133
+ className={classNames(props?.attributes?.className || "", {
134
134
  "block-editor-layout": true,
135
135
  "md:space-x-4": props.attributes?.spacing,
136
136
  "mt-16": props?.attributes?.margin?.top,
@@ -138,7 +138,7 @@ export function Serializer({
138
138
  "mb-16": props?.attributes?.margin?.bottom,
139
139
  "ml-16": props?.attributes?.margin?.left,
140
140
  "block-editor-table-border-wrapper": props?.attributes?.tableBorder,
141
- "justify-center": props?.attributes?.justifyCenter,
141
+ "mx-auto": props?.attributes?.justifyCenter,
142
142
  [typeProps.classNameSite + " site-width"]: !isInSlot && (props.attributes?.width === "site" || props.attributes?.width === "full"),
143
143
  [typeProps.classNameArticle + " article-width"]: !isInSlot && (props.attributes?.width === "article" || !props.attributes?.width),
144
144
  })}
@@ -273,6 +273,7 @@ export const InsertGridButton = () => {
273
273
  </InsertLayoutButton>
274
274
  <InsertLayoutButton insert={{
275
275
  "type": "layout",
276
+ "attributes": {"className": "layout-block-auto-fill"},
276
277
  "children": [
277
278
  {
278
279
  "type": "layout-slot",
@@ -304,6 +305,7 @@ export const InsertGridButton = () => {
304
305
  </InsertLayoutButton>
305
306
  <InsertLayoutButton insert={{
306
307
  "type": "layout",
308
+ "attributes": {"className": "layout-block-fill-auto"},
307
309
  "children": [
308
310
  {
309
311
  "type": "layout-slot",
@@ -335,6 +337,7 @@ export const InsertGridButton = () => {
335
337
  </InsertLayoutButton>
336
338
  <InsertLayoutButton insert={{
337
339
  "type": "layout",
340
+ "attributes": {"className": "layout-block-auto-fill-auto"},
338
341
  "children": [
339
342
  {
340
343
  "type": "layout-slot",