@supernova-studio/client 0.26.0 → 0.28.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/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +37 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/yjs/docs-editor/blocks-to-prosemirror.ts +1 -0
- package/src/yjs/docs-editor/prosemirror-to-blocks.ts +49 -22
package/package.json
CHANGED
|
@@ -624,6 +624,7 @@ export function serializeAsCustomBlock(block: PageBlockEditorModel, definition:
|
|
|
624
624
|
...(block.data.variantId && { variantId: block.data.variantId }),
|
|
625
625
|
items: JSON.stringify(items),
|
|
626
626
|
|
|
627
|
+
...(block.data.appearance && { appearance: JSON.stringify(block.data.appearance) }),
|
|
627
628
|
...(columns && { columns: columns }),
|
|
628
629
|
},
|
|
629
630
|
};
|
|
@@ -38,11 +38,9 @@ import {
|
|
|
38
38
|
PageBlockItemTableCell,
|
|
39
39
|
PageBlockTableCellAlignment,
|
|
40
40
|
PageBlockAppearanceV2,
|
|
41
|
-
ColorValue,
|
|
42
41
|
nullishToOptional,
|
|
43
42
|
PageBlockItemFigmaNodeValue,
|
|
44
43
|
PageBlockColorV2,
|
|
45
|
-
SupernovaException,
|
|
46
44
|
PageSectionItemV2,
|
|
47
45
|
PageSectionColumnV2,
|
|
48
46
|
} from "@supernova-studio/model";
|
|
@@ -50,8 +48,7 @@ import { PageBlockEditorModel, PageSectionEditorModel } from "./model/block";
|
|
|
50
48
|
import { DocumentationPageEditorModel } from "./model/page";
|
|
51
49
|
import { BlockDefinitionUtils } from "./utils";
|
|
52
50
|
import { yXmlFragmentToProsemirrorJSON } from "y-prosemirror";
|
|
53
|
-
import {
|
|
54
|
-
import { o } from "vitest/dist/types-198fd1d9";
|
|
51
|
+
import { ZodSchema, ZodTypeDef, z } from "zod";
|
|
55
52
|
|
|
56
53
|
export function yDocToPage(yDoc: Y.Doc, definitions: PageBlockDefinition[]): DocumentationPageEditorModel {
|
|
57
54
|
return yXmlFragmentToPage(yDoc.getXmlFragment("default"), definitions);
|
|
@@ -72,7 +69,7 @@ export function prosemirrorDocToPage(
|
|
|
72
69
|
const definitionsById = mapByUnique(definitions, d => d.id);
|
|
73
70
|
|
|
74
71
|
return {
|
|
75
|
-
blocks:
|
|
72
|
+
blocks: internalProsemirrorNodesToPageItems(prosemirrorDoc.content ?? [], definitionsById),
|
|
76
73
|
};
|
|
77
74
|
}
|
|
78
75
|
|
|
@@ -150,31 +147,53 @@ export function prosemirrorNodesToBlocks(prosemirrorNodes: ProsemirrorNode[], de
|
|
|
150
147
|
return internalProsemirrorNodesToBlocks(prosemirrorNodes, definitionsById);
|
|
151
148
|
}
|
|
152
149
|
|
|
150
|
+
function internalProsemirrorNodesToPageItems(
|
|
151
|
+
prosemirrorNodes: ProsemirrorNode[],
|
|
152
|
+
definitionsMap: Map<string, PageBlockDefinition>
|
|
153
|
+
): (PageBlockEditorModel | PageSectionEditorModel)[] {
|
|
154
|
+
return prosemirrorNodes
|
|
155
|
+
.map(prosemirrorNode => {
|
|
156
|
+
if (prosemirrorNode.type === "tabsSection") {
|
|
157
|
+
return prosemirrorNodeToSection(prosemirrorNode, Array.from(definitionsMap.values()));
|
|
158
|
+
} else {
|
|
159
|
+
return internalProsemirrorNodeToBlock(prosemirrorNode, definitionsMap);
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
.filter(nonNullFilter);
|
|
163
|
+
}
|
|
164
|
+
|
|
153
165
|
function internalProsemirrorNodesToBlocks(
|
|
154
166
|
prosemirrorNodes: ProsemirrorNode[],
|
|
155
167
|
definitionsMap: Map<string, PageBlockDefinition>
|
|
156
168
|
): PageBlockEditorModel[] {
|
|
157
169
|
return prosemirrorNodes
|
|
158
170
|
.map(prosemirrorNode => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
171
|
+
return internalProsemirrorNodeToBlock(prosemirrorNode, definitionsMap);
|
|
172
|
+
})
|
|
173
|
+
.filter(nonNullFilter);
|
|
174
|
+
}
|
|
162
175
|
|
|
163
|
-
|
|
164
|
-
|
|
176
|
+
function internalProsemirrorNodeToBlock(
|
|
177
|
+
prosemirrorNode: ProsemirrorNode,
|
|
178
|
+
definitionsMap: Map<string, PageBlockDefinition>
|
|
179
|
+
) {
|
|
180
|
+
const definitionId = getProsemirrorAttribute(prosemirrorNode, "definitionId", z.string());
|
|
181
|
+
if (!definitionId) {
|
|
182
|
+
console.warn(`definitionId on ${prosemirrorNode.type} is required to be interpreted as a block, skipping node`);
|
|
165
183
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
console.warn(
|
|
169
|
-
`Block definitionId "${definitionId}" (prosemirror node ${prosemirrorNode.type}) is not among available definitions`
|
|
170
|
-
);
|
|
171
|
-
console.warn(prosemirrorNode);
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
174
186
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
.
|
|
187
|
+
const definition = definitionsMap.get(definitionId);
|
|
188
|
+
if (!definition) {
|
|
189
|
+
console.warn(
|
|
190
|
+
`Block definitionId "${definitionId}" (prosemirror node ${prosemirrorNode.type}) is not among available definitions`
|
|
191
|
+
);
|
|
192
|
+
console.warn(prosemirrorNode);
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return prosemirrorNodeToBlock(prosemirrorNode, definition);
|
|
178
197
|
}
|
|
179
198
|
|
|
180
199
|
export function prosemirrorNodeToBlock(
|
|
@@ -623,7 +642,15 @@ function parseBlockItems(prosemirrorNode: ProsemirrorNode, definition: PageBlock
|
|
|
623
642
|
}
|
|
624
643
|
|
|
625
644
|
function parseAppearance(prosemirrorNode: ProsemirrorNode): PageBlockAppearanceV2 | undefined {
|
|
626
|
-
|
|
645
|
+
let appearance: PageBlockAppearanceV2 = {};
|
|
646
|
+
|
|
647
|
+
const rawAppearanceString = getProsemirrorAttribute(prosemirrorNode, "appearance", z.string().optional());
|
|
648
|
+
if (rawAppearanceString) {
|
|
649
|
+
const parsedAppearance = PageBlockAppearanceV2.safeParse(JSON.parse(rawAppearanceString));
|
|
650
|
+
if (parsedAppearance.success) {
|
|
651
|
+
appearance = parsedAppearance.data;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
627
654
|
|
|
628
655
|
const columns = getProsemirrorAttribute(prosemirrorNode, "columns", z.number().optional());
|
|
629
656
|
if (columns) {
|