@uniformdev/richtext 19.173.1-alpha.17 → 19.173.2-alpha.258

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 CHANGED
@@ -1,4 +1,5 @@
1
- import { LinkParamValue, RichTextParamValue, RichTextBuiltInElement, RichTextBuiltInFormat } from '@uniformdev/canvas';
1
+ import { AssetParamValueItem } from '@uniformdev/assets';
2
+ import { SerializedEditorState, SerializedParagraphNode } from 'lexical';
2
3
 
3
4
  declare function purifyText(text: string): string;
4
5
  declare function isPureTextAlign(format?: string): format is string;
@@ -24,9 +25,15 @@ interface NodeStringRendererProps {
24
25
  renderChildren(children?: RichTextNode[] | unknown): string;
25
26
  }
26
27
  type NodeStringRenderer = (props: NodeStringRendererProps) => string;
27
- type ParameterRichTextValue = {
28
- root: RichTextNode;
29
- } | undefined;
28
+ type ParameterRichTextValue = SerializedEditorState | undefined | null;
29
+ type RichTextBuiltInFormat = 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'superscript' | 'subscript';
30
+ type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table' | 'asset';
31
+
32
+ interface AssetNode extends RichTextNode {
33
+ __asset?: NonNullable<AssetParamValueItem>;
34
+ __error?: string;
35
+ }
36
+ declare const assetHtmlRenderer: NodeStringRenderer;
30
37
 
31
38
  interface HeadingNode extends RichTextNode {
32
39
  tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
@@ -37,6 +44,19 @@ interface LinkNode extends RichTextNode {
37
44
  link: NonNullable<LinkParamValue>;
38
45
  }
39
46
  declare const linkHtmlRenderer: NodeStringRenderer;
47
+ type LinkParameterType = 'projectMapNode' | 'url' | 'tel' | 'email';
48
+ type ProjectMapLinkParamValue = {
49
+ type: 'projectMapNode';
50
+ projectMapId: string;
51
+ nodeId: string;
52
+ path: string;
53
+ dynamicInputValues?: Record<string, string>;
54
+ };
55
+ type NonProjectMapLinkParamValue = {
56
+ type: Exclude<LinkParameterType, 'projectMapNode'>;
57
+ path: string;
58
+ };
59
+ type LinkParamValue = ProjectMapLinkParamValue | NonProjectMapLinkParamValue | undefined;
40
60
  declare function linkParamValueToHref(link: LinkParamValue): string | undefined;
41
61
 
42
62
  interface ListNode extends RichTextNode {
@@ -58,6 +78,30 @@ declare const paragraphHtmlRenderer: NodeStringRenderer;
58
78
 
59
79
  declare const rootHtmlRenderer: NodeStringRenderer;
60
80
 
81
+ interface TableNode extends RichTextNode {
82
+ }
83
+ declare const tableHtmlRenderer: NodeStringRenderer;
84
+
85
+ interface TableCellNode extends RichTextNode {
86
+ /**
87
+ * headerState:
88
+ * 0: no header
89
+ * 1: row header
90
+ * 2: column header
91
+ * 3: row and column header
92
+ */
93
+ headerState: number;
94
+ }
95
+ declare const tablecellHtmlRenderer: NodeStringRenderer;
96
+ /**
97
+ * Convert headerState into relevant tag
98
+ */
99
+ declare function getRichTextTagFromTableCellHeaderState(headerState: number): "td" | "th";
100
+
101
+ interface TableRowNode extends RichTextNode {
102
+ }
103
+ declare const tablerowHtmlRenderer: NodeStringRenderer;
104
+
61
105
  interface TextNode extends RichTextNode {
62
106
  /**
63
107
  * The format is a bitflag value
@@ -82,15 +126,16 @@ declare function getRichTextTagsFromTextFormat(format: number): string[];
82
126
 
83
127
  declare function isArrayWithLength<T>(arr: T[] | unknown | undefined): arr is T[];
84
128
  declare function isRichTextNode(node: unknown): node is RichTextNode;
85
- declare function isRichTextValue(value: unknown): value is NonNullable<RichTextParamValue>;
129
+ declare function isRichTextValue(value: unknown): value is NonNullable<ParameterRichTextValue>;
86
130
  declare function isRichTextNodeType(node: unknown, type: 'heading'): node is HeadingNode;
87
131
  declare function isRichTextNodeType(node: unknown, type: 'paragraph'): node is ParagraphNode;
88
132
  declare function isRichTextNodeType(node: unknown, type: 'text'): node is TextNode;
89
133
  declare function isRichTextNodeType(node: unknown, type: 'list'): node is ListNode;
90
134
  declare function isRichTextNodeType(node: unknown, type: 'listitem'): node is ListItemNode;
91
135
  declare function isRichTextNodeType(node: unknown, type: 'link'): node is LinkNode;
136
+ declare function isRichTextNodeType(node: unknown, type: 'asset'): node is AssetNode;
92
137
  declare function isRichTextNodeType(node: unknown, type: string): node is RichTextNode;
93
- declare function isRichTextValueConsideredEmpty(value: RichTextParamValue): boolean;
138
+ declare function isRichTextValueConsideredEmpty(value: ParameterRichTextValue): boolean;
94
139
  declare function hasChildren<TRichTextNode extends RichTextNode>(node: TRichTextNode): node is TRichTextNode & {
95
140
  children: RichTextNode[];
96
141
  };
@@ -144,15 +189,25 @@ declare function renderToText(node: RichTextNode | null | undefined, parentConte
144
189
  declare function renderChildrenToText(children: RichTextNode[] | undefined, context: StringRenderContext): string;
145
190
 
146
191
  declare const walkRichTextTree: (node: RichTextNode, callback: (node: RichTextNode, parent: RichTextNode | undefined) => void, parent?: RichTextNode) => void;
147
- declare const richTextBuiltInElements: {
192
+ declare const richTextBuiltInElements: Array<{
148
193
  label: string;
149
194
  type: RichTextBuiltInElement;
150
- }[];
151
- declare const richTextBuiltInFormats: {
195
+ }>;
196
+ declare const richTextBuiltInFormats: Array<{
152
197
  label: string;
153
198
  type: RichTextBuiltInFormat;
154
- }[];
199
+ }>;
155
200
  declare const getLabelForElement: (type: string) => string;
156
201
  declare const getLabelForFormat: (type: string) => string;
202
+ declare const emptyRichTextValue: {
203
+ root: {
204
+ type: string;
205
+ version: number;
206
+ direction: null;
207
+ format: "";
208
+ indent: number;
209
+ children: SerializedParagraphNode[];
210
+ };
211
+ };
157
212
 
158
- export { type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TextNode, getLabelForElement, getLabelForFormat, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, textHtmlRenderer, walkRichTextTree };
213
+ export { type AssetNode, type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, assetHtmlRenderer, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { LinkParamValue, RichTextParamValue, RichTextBuiltInElement, RichTextBuiltInFormat } from '@uniformdev/canvas';
1
+ import { AssetParamValueItem } from '@uniformdev/assets';
2
+ import { SerializedEditorState, SerializedParagraphNode } from 'lexical';
2
3
 
3
4
  declare function purifyText(text: string): string;
4
5
  declare function isPureTextAlign(format?: string): format is string;
@@ -24,9 +25,15 @@ interface NodeStringRendererProps {
24
25
  renderChildren(children?: RichTextNode[] | unknown): string;
25
26
  }
26
27
  type NodeStringRenderer = (props: NodeStringRendererProps) => string;
27
- type ParameterRichTextValue = {
28
- root: RichTextNode;
29
- } | undefined;
28
+ type ParameterRichTextValue = SerializedEditorState | undefined | null;
29
+ type RichTextBuiltInFormat = 'code' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'superscript' | 'subscript';
30
+ type RichTextBuiltInElement = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'unorderedList' | 'orderedList' | 'link' | 'quote' | 'code' | 'variable' | 'table' | 'asset';
31
+
32
+ interface AssetNode extends RichTextNode {
33
+ __asset?: NonNullable<AssetParamValueItem>;
34
+ __error?: string;
35
+ }
36
+ declare const assetHtmlRenderer: NodeStringRenderer;
30
37
 
31
38
  interface HeadingNode extends RichTextNode {
32
39
  tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
@@ -37,6 +44,19 @@ interface LinkNode extends RichTextNode {
37
44
  link: NonNullable<LinkParamValue>;
38
45
  }
39
46
  declare const linkHtmlRenderer: NodeStringRenderer;
47
+ type LinkParameterType = 'projectMapNode' | 'url' | 'tel' | 'email';
48
+ type ProjectMapLinkParamValue = {
49
+ type: 'projectMapNode';
50
+ projectMapId: string;
51
+ nodeId: string;
52
+ path: string;
53
+ dynamicInputValues?: Record<string, string>;
54
+ };
55
+ type NonProjectMapLinkParamValue = {
56
+ type: Exclude<LinkParameterType, 'projectMapNode'>;
57
+ path: string;
58
+ };
59
+ type LinkParamValue = ProjectMapLinkParamValue | NonProjectMapLinkParamValue | undefined;
40
60
  declare function linkParamValueToHref(link: LinkParamValue): string | undefined;
41
61
 
42
62
  interface ListNode extends RichTextNode {
@@ -58,6 +78,30 @@ declare const paragraphHtmlRenderer: NodeStringRenderer;
58
78
 
59
79
  declare const rootHtmlRenderer: NodeStringRenderer;
60
80
 
81
+ interface TableNode extends RichTextNode {
82
+ }
83
+ declare const tableHtmlRenderer: NodeStringRenderer;
84
+
85
+ interface TableCellNode extends RichTextNode {
86
+ /**
87
+ * headerState:
88
+ * 0: no header
89
+ * 1: row header
90
+ * 2: column header
91
+ * 3: row and column header
92
+ */
93
+ headerState: number;
94
+ }
95
+ declare const tablecellHtmlRenderer: NodeStringRenderer;
96
+ /**
97
+ * Convert headerState into relevant tag
98
+ */
99
+ declare function getRichTextTagFromTableCellHeaderState(headerState: number): "td" | "th";
100
+
101
+ interface TableRowNode extends RichTextNode {
102
+ }
103
+ declare const tablerowHtmlRenderer: NodeStringRenderer;
104
+
61
105
  interface TextNode extends RichTextNode {
62
106
  /**
63
107
  * The format is a bitflag value
@@ -82,15 +126,16 @@ declare function getRichTextTagsFromTextFormat(format: number): string[];
82
126
 
83
127
  declare function isArrayWithLength<T>(arr: T[] | unknown | undefined): arr is T[];
84
128
  declare function isRichTextNode(node: unknown): node is RichTextNode;
85
- declare function isRichTextValue(value: unknown): value is NonNullable<RichTextParamValue>;
129
+ declare function isRichTextValue(value: unknown): value is NonNullable<ParameterRichTextValue>;
86
130
  declare function isRichTextNodeType(node: unknown, type: 'heading'): node is HeadingNode;
87
131
  declare function isRichTextNodeType(node: unknown, type: 'paragraph'): node is ParagraphNode;
88
132
  declare function isRichTextNodeType(node: unknown, type: 'text'): node is TextNode;
89
133
  declare function isRichTextNodeType(node: unknown, type: 'list'): node is ListNode;
90
134
  declare function isRichTextNodeType(node: unknown, type: 'listitem'): node is ListItemNode;
91
135
  declare function isRichTextNodeType(node: unknown, type: 'link'): node is LinkNode;
136
+ declare function isRichTextNodeType(node: unknown, type: 'asset'): node is AssetNode;
92
137
  declare function isRichTextNodeType(node: unknown, type: string): node is RichTextNode;
93
- declare function isRichTextValueConsideredEmpty(value: RichTextParamValue): boolean;
138
+ declare function isRichTextValueConsideredEmpty(value: ParameterRichTextValue): boolean;
94
139
  declare function hasChildren<TRichTextNode extends RichTextNode>(node: TRichTextNode): node is TRichTextNode & {
95
140
  children: RichTextNode[];
96
141
  };
@@ -144,15 +189,25 @@ declare function renderToText(node: RichTextNode | null | undefined, parentConte
144
189
  declare function renderChildrenToText(children: RichTextNode[] | undefined, context: StringRenderContext): string;
145
190
 
146
191
  declare const walkRichTextTree: (node: RichTextNode, callback: (node: RichTextNode, parent: RichTextNode | undefined) => void, parent?: RichTextNode) => void;
147
- declare const richTextBuiltInElements: {
192
+ declare const richTextBuiltInElements: Array<{
148
193
  label: string;
149
194
  type: RichTextBuiltInElement;
150
- }[];
151
- declare const richTextBuiltInFormats: {
195
+ }>;
196
+ declare const richTextBuiltInFormats: Array<{
152
197
  label: string;
153
198
  type: RichTextBuiltInFormat;
154
- }[];
199
+ }>;
155
200
  declare const getLabelForElement: (type: string) => string;
156
201
  declare const getLabelForFormat: (type: string) => string;
202
+ declare const emptyRichTextValue: {
203
+ root: {
204
+ type: string;
205
+ version: number;
206
+ direction: null;
207
+ format: "";
208
+ indent: number;
209
+ children: SerializedParagraphNode[];
210
+ };
211
+ };
157
212
 
158
- export { type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TextNode, getLabelForElement, getLabelForFormat, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, textHtmlRenderer, walkRichTextTree };
213
+ export { type AssetNode, type HeadingNode, type LinkNode, type ListItemNode, type ListNode, type NodeStringRenderer, type NodeStringRendererProps, type ParagraphNode, type ParameterRichTextValue, type ResolveStringRenderer, type RichTextBuiltInElement, type RichTextBuiltInFormat, type RichTextNode, type RichTextNodeWithChildren, type StringRenderContext, type TableCellNode, type TableNode, type TableRowNode, type TextNode, assetHtmlRenderer, emptyRichTextValue, getLabelForElement, getLabelForFormat, getRichTextTagFromTableCellHeaderState, getRichTextTagsFromTextFormat, hasChildren, headingHtmlRenderer, isArrayWithLength, isPureDirection, isPureTextAlign, isRichTextNode, isRichTextNodeType, isRichTextValue, isRichTextValueConsideredEmpty, linkHtmlRenderer, linkParamValueToHref, listHtmlRenderer, listitemHtmlRenderer, paragraphHtmlRenderer, purifyText, renderChildrenToHtml, renderChildrenToText, renderHtmlElement, renderToHtml, renderToText, resolveDefaultRenderer$1 as resolveDefaultHtmlRenderer, resolveDefaultRenderer as resolveDefaultTextRenderer, richTextBuiltInElements, richTextBuiltInFormats, rootHtmlRenderer, tableHtmlRenderer, tablecellHtmlRenderer, tablerowHtmlRenderer, textHtmlRenderer, walkRichTextTree };
package/dist/index.esm.js CHANGED
@@ -66,6 +66,26 @@ function hasChildren(node) {
66
66
  return "children" in node && isArrayWithLength(node.children);
67
67
  }
68
68
 
69
+ // src/nodes/asset.ts
70
+ var assetHtmlRenderer = ({ context }) => {
71
+ var _a, _b;
72
+ const node = context.currentNode;
73
+ if (node.__asset === void 0) {
74
+ return "";
75
+ }
76
+ if (node.__asset.type !== "image") {
77
+ return "";
78
+ }
79
+ const imgAttributes = /* @__PURE__ */ new Map();
80
+ imgAttributes.set("src", node.__asset.fields.url.value);
81
+ if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
82
+ imgAttributes.set("alt", node.__asset.fields.title.value);
83
+ }
84
+ const img = renderHtmlElement("img", imgAttributes);
85
+ const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
86
+ return renderHtmlElement("figure", null, `${img}${figcaption}`);
87
+ };
88
+
69
89
  // src/nodes/heading.ts
70
90
  var headingHtmlRenderer = ({ context, renderChildren }) => {
71
91
  var _a;
@@ -155,6 +175,40 @@ var rootHtmlRenderer = ({ context, renderChildren }) => {
155
175
  return hasChildren(context.currentNode) ? renderChildren(context.currentNode.children) : "";
156
176
  };
157
177
 
178
+ // src/nodes/table.ts
179
+ var tableHtmlRenderer = ({ context, renderChildren }) => {
180
+ return ["table", "tbody"].reduceRight((children, tag) => {
181
+ return renderHtmlElement(tag, null, children);
182
+ }, renderChildren(context.currentNode.children));
183
+ };
184
+ var tableTextRenderer = ({ context, renderChildren }) => {
185
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
186
+ };
187
+
188
+ // src/nodes/tablecell.ts
189
+ var tablecellHtmlRenderer = ({ context, renderChildren }) => {
190
+ const node = context.currentNode;
191
+ const tag = getRichTextTagFromTableCellHeaderState(node.headerState);
192
+ return renderHtmlElement(tag, null, renderChildren(context.currentNode.children));
193
+ };
194
+ var tablecellTextRenderer = ({ context, renderChildren }) => {
195
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
196
+ };
197
+ function getRichTextTagFromTableCellHeaderState(headerState) {
198
+ if (headerState === 0) {
199
+ return "td";
200
+ }
201
+ return "th";
202
+ }
203
+
204
+ // src/nodes/tablerow.ts
205
+ var tablerowHtmlRenderer = ({ context, renderChildren }) => {
206
+ return renderHtmlElement("tr", null, renderChildren(context.currentNode.children));
207
+ };
208
+ var tablerowTextRenderer = ({ context, renderChildren }) => {
209
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
210
+ };
211
+
158
212
  // src/nodes/text.ts
159
213
  var textHtmlRenderer = ({ context }) => {
160
214
  const node = context.currentNode;
@@ -211,7 +265,11 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
211
265
  ["paragraph", paragraphHtmlRenderer],
212
266
  ["root", rootHtmlRenderer],
213
267
  ["text", textHtmlRenderer],
214
- ["tab", tabHtmlRenderer]
268
+ ["tab", tabHtmlRenderer],
269
+ ["table", tableHtmlRenderer],
270
+ ["tablecell", tablecellHtmlRenderer],
271
+ ["tablerow", tablerowHtmlRenderer],
272
+ ["asset", assetHtmlRenderer]
215
273
  ]);
216
274
  var resolveDefaultRenderer = (context) => {
217
275
  const renderer = rendererTypeMap.get(context.currentNode.type);
@@ -279,7 +337,10 @@ var rendererTypeMap2 = /* @__PURE__ */ new Map([
279
337
  ["linebreak", linebreakTextRenderer],
280
338
  ["paragraph", paragraphTextRenderer],
281
339
  ["listitem", listitemTextRenderer],
282
- ["heading", headingTextRenderer]
340
+ ["heading", headingTextRenderer],
341
+ ["table", tableTextRenderer],
342
+ ["tablecell", tablecellTextRenderer],
343
+ ["tablerow", tablerowTextRenderer]
283
344
  ]);
284
345
  var resolveDefaultRenderer2 = (context) => {
285
346
  const renderer = rendererTypeMap2.get(context.currentNode.type);
@@ -382,6 +443,14 @@ var richTextBuiltInElements = [
382
443
  label: "Code Block",
383
444
  type: "code"
384
445
  },
446
+ {
447
+ label: "Table",
448
+ type: "table"
449
+ },
450
+ {
451
+ label: "Asset",
452
+ type: "asset"
453
+ },
385
454
  {
386
455
  label: "Dynamic Token",
387
456
  type: "variable"
@@ -430,9 +499,33 @@ var getLabelForFormat = (type) => {
430
499
  const format = richTextBuiltInFormats.find((element) => element.type === type);
431
500
  return (_a = format == null ? void 0 : format.label) != null ? _a : type;
432
501
  };
502
+ var emptyRichTextValue = {
503
+ root: {
504
+ type: "root",
505
+ version: 1,
506
+ direction: null,
507
+ format: "",
508
+ indent: 0,
509
+ children: [
510
+ {
511
+ type: "paragraph",
512
+ version: 1,
513
+ format: "start",
514
+ indent: 0,
515
+ direction: null,
516
+ children: [],
517
+ textFormat: 0,
518
+ textStyle: ""
519
+ }
520
+ ]
521
+ }
522
+ };
433
523
  export {
524
+ assetHtmlRenderer,
525
+ emptyRichTextValue,
434
526
  getLabelForElement,
435
527
  getLabelForFormat,
528
+ getRichTextTagFromTableCellHeaderState,
436
529
  getRichTextTagsFromTextFormat,
437
530
  hasChildren,
438
531
  headingHtmlRenderer,
@@ -459,6 +552,9 @@ export {
459
552
  richTextBuiltInElements,
460
553
  richTextBuiltInFormats,
461
554
  rootHtmlRenderer,
555
+ tableHtmlRenderer,
556
+ tablecellHtmlRenderer,
557
+ tablerowHtmlRenderer,
462
558
  textHtmlRenderer,
463
559
  walkRichTextTree
464
560
  };
package/dist/index.js CHANGED
@@ -20,8 +20,11 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
+ assetHtmlRenderer: () => assetHtmlRenderer,
24
+ emptyRichTextValue: () => emptyRichTextValue,
23
25
  getLabelForElement: () => getLabelForElement,
24
26
  getLabelForFormat: () => getLabelForFormat,
27
+ getRichTextTagFromTableCellHeaderState: () => getRichTextTagFromTableCellHeaderState,
25
28
  getRichTextTagsFromTextFormat: () => getRichTextTagsFromTextFormat,
26
29
  hasChildren: () => hasChildren,
27
30
  headingHtmlRenderer: () => headingHtmlRenderer,
@@ -48,6 +51,9 @@ __export(src_exports, {
48
51
  richTextBuiltInElements: () => richTextBuiltInElements,
49
52
  richTextBuiltInFormats: () => richTextBuiltInFormats,
50
53
  rootHtmlRenderer: () => rootHtmlRenderer,
54
+ tableHtmlRenderer: () => tableHtmlRenderer,
55
+ tablecellHtmlRenderer: () => tablecellHtmlRenderer,
56
+ tablerowHtmlRenderer: () => tablerowHtmlRenderer,
51
57
  textHtmlRenderer: () => textHtmlRenderer,
52
58
  walkRichTextTree: () => walkRichTextTree
53
59
  });
@@ -121,6 +127,26 @@ function hasChildren(node) {
121
127
  return "children" in node && isArrayWithLength(node.children);
122
128
  }
123
129
 
130
+ // src/nodes/asset.ts
131
+ var assetHtmlRenderer = ({ context }) => {
132
+ var _a, _b;
133
+ const node = context.currentNode;
134
+ if (node.__asset === void 0) {
135
+ return "";
136
+ }
137
+ if (node.__asset.type !== "image") {
138
+ return "";
139
+ }
140
+ const imgAttributes = /* @__PURE__ */ new Map();
141
+ imgAttributes.set("src", node.__asset.fields.url.value);
142
+ if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
143
+ imgAttributes.set("alt", node.__asset.fields.title.value);
144
+ }
145
+ const img = renderHtmlElement("img", imgAttributes);
146
+ const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
147
+ return renderHtmlElement("figure", null, `${img}${figcaption}`);
148
+ };
149
+
124
150
  // src/nodes/heading.ts
125
151
  var headingHtmlRenderer = ({ context, renderChildren }) => {
126
152
  var _a;
@@ -210,6 +236,40 @@ var rootHtmlRenderer = ({ context, renderChildren }) => {
210
236
  return hasChildren(context.currentNode) ? renderChildren(context.currentNode.children) : "";
211
237
  };
212
238
 
239
+ // src/nodes/table.ts
240
+ var tableHtmlRenderer = ({ context, renderChildren }) => {
241
+ return ["table", "tbody"].reduceRight((children, tag) => {
242
+ return renderHtmlElement(tag, null, children);
243
+ }, renderChildren(context.currentNode.children));
244
+ };
245
+ var tableTextRenderer = ({ context, renderChildren }) => {
246
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
247
+ };
248
+
249
+ // src/nodes/tablecell.ts
250
+ var tablecellHtmlRenderer = ({ context, renderChildren }) => {
251
+ const node = context.currentNode;
252
+ const tag = getRichTextTagFromTableCellHeaderState(node.headerState);
253
+ return renderHtmlElement(tag, null, renderChildren(context.currentNode.children));
254
+ };
255
+ var tablecellTextRenderer = ({ context, renderChildren }) => {
256
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
257
+ };
258
+ function getRichTextTagFromTableCellHeaderState(headerState) {
259
+ if (headerState === 0) {
260
+ return "td";
261
+ }
262
+ return "th";
263
+ }
264
+
265
+ // src/nodes/tablerow.ts
266
+ var tablerowHtmlRenderer = ({ context, renderChildren }) => {
267
+ return renderHtmlElement("tr", null, renderChildren(context.currentNode.children));
268
+ };
269
+ var tablerowTextRenderer = ({ context, renderChildren }) => {
270
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
271
+ };
272
+
213
273
  // src/nodes/text.ts
214
274
  var textHtmlRenderer = ({ context }) => {
215
275
  const node = context.currentNode;
@@ -266,7 +326,11 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
266
326
  ["paragraph", paragraphHtmlRenderer],
267
327
  ["root", rootHtmlRenderer],
268
328
  ["text", textHtmlRenderer],
269
- ["tab", tabHtmlRenderer]
329
+ ["tab", tabHtmlRenderer],
330
+ ["table", tableHtmlRenderer],
331
+ ["tablecell", tablecellHtmlRenderer],
332
+ ["tablerow", tablerowHtmlRenderer],
333
+ ["asset", assetHtmlRenderer]
270
334
  ]);
271
335
  var resolveDefaultRenderer = (context) => {
272
336
  const renderer = rendererTypeMap.get(context.currentNode.type);
@@ -334,7 +398,10 @@ var rendererTypeMap2 = /* @__PURE__ */ new Map([
334
398
  ["linebreak", linebreakTextRenderer],
335
399
  ["paragraph", paragraphTextRenderer],
336
400
  ["listitem", listitemTextRenderer],
337
- ["heading", headingTextRenderer]
401
+ ["heading", headingTextRenderer],
402
+ ["table", tableTextRenderer],
403
+ ["tablecell", tablecellTextRenderer],
404
+ ["tablerow", tablerowTextRenderer]
338
405
  ]);
339
406
  var resolveDefaultRenderer2 = (context) => {
340
407
  const renderer = rendererTypeMap2.get(context.currentNode.type);
@@ -437,6 +504,14 @@ var richTextBuiltInElements = [
437
504
  label: "Code Block",
438
505
  type: "code"
439
506
  },
507
+ {
508
+ label: "Table",
509
+ type: "table"
510
+ },
511
+ {
512
+ label: "Asset",
513
+ type: "asset"
514
+ },
440
515
  {
441
516
  label: "Dynamic Token",
442
517
  type: "variable"
@@ -485,10 +560,34 @@ var getLabelForFormat = (type) => {
485
560
  const format = richTextBuiltInFormats.find((element) => element.type === type);
486
561
  return (_a = format == null ? void 0 : format.label) != null ? _a : type;
487
562
  };
563
+ var emptyRichTextValue = {
564
+ root: {
565
+ type: "root",
566
+ version: 1,
567
+ direction: null,
568
+ format: "",
569
+ indent: 0,
570
+ children: [
571
+ {
572
+ type: "paragraph",
573
+ version: 1,
574
+ format: "start",
575
+ indent: 0,
576
+ direction: null,
577
+ children: [],
578
+ textFormat: 0,
579
+ textStyle: ""
580
+ }
581
+ ]
582
+ }
583
+ };
488
584
  // Annotate the CommonJS export names for ESM import in node:
489
585
  0 && (module.exports = {
586
+ assetHtmlRenderer,
587
+ emptyRichTextValue,
490
588
  getLabelForElement,
491
589
  getLabelForFormat,
590
+ getRichTextTagFromTableCellHeaderState,
492
591
  getRichTextTagsFromTextFormat,
493
592
  hasChildren,
494
593
  headingHtmlRenderer,
@@ -515,6 +614,9 @@ var getLabelForFormat = (type) => {
515
614
  richTextBuiltInElements,
516
615
  richTextBuiltInFormats,
517
616
  rootHtmlRenderer,
617
+ tableHtmlRenderer,
618
+ tablecellHtmlRenderer,
619
+ tablerowHtmlRenderer,
518
620
  textHtmlRenderer,
519
621
  walkRichTextTree
520
622
  });
package/dist/index.mjs CHANGED
@@ -66,6 +66,26 @@ function hasChildren(node) {
66
66
  return "children" in node && isArrayWithLength(node.children);
67
67
  }
68
68
 
69
+ // src/nodes/asset.ts
70
+ var assetHtmlRenderer = ({ context }) => {
71
+ var _a, _b;
72
+ const node = context.currentNode;
73
+ if (node.__asset === void 0) {
74
+ return "";
75
+ }
76
+ if (node.__asset.type !== "image") {
77
+ return "";
78
+ }
79
+ const imgAttributes = /* @__PURE__ */ new Map();
80
+ imgAttributes.set("src", node.__asset.fields.url.value);
81
+ if ((_a = node.__asset.fields.title) == null ? void 0 : _a.value) {
82
+ imgAttributes.set("alt", node.__asset.fields.title.value);
83
+ }
84
+ const img = renderHtmlElement("img", imgAttributes);
85
+ const figcaption = ((_b = node.__asset.fields.description) == null ? void 0 : _b.value) ? renderHtmlElement("figcaption", null, node.__asset.fields.description.value) : "";
86
+ return renderHtmlElement("figure", null, `${img}${figcaption}`);
87
+ };
88
+
69
89
  // src/nodes/heading.ts
70
90
  var headingHtmlRenderer = ({ context, renderChildren }) => {
71
91
  var _a;
@@ -155,6 +175,40 @@ var rootHtmlRenderer = ({ context, renderChildren }) => {
155
175
  return hasChildren(context.currentNode) ? renderChildren(context.currentNode.children) : "";
156
176
  };
157
177
 
178
+ // src/nodes/table.ts
179
+ var tableHtmlRenderer = ({ context, renderChildren }) => {
180
+ return ["table", "tbody"].reduceRight((children, tag) => {
181
+ return renderHtmlElement(tag, null, children);
182
+ }, renderChildren(context.currentNode.children));
183
+ };
184
+ var tableTextRenderer = ({ context, renderChildren }) => {
185
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
186
+ };
187
+
188
+ // src/nodes/tablecell.ts
189
+ var tablecellHtmlRenderer = ({ context, renderChildren }) => {
190
+ const node = context.currentNode;
191
+ const tag = getRichTextTagFromTableCellHeaderState(node.headerState);
192
+ return renderHtmlElement(tag, null, renderChildren(context.currentNode.children));
193
+ };
194
+ var tablecellTextRenderer = ({ context, renderChildren }) => {
195
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
196
+ };
197
+ function getRichTextTagFromTableCellHeaderState(headerState) {
198
+ if (headerState === 0) {
199
+ return "td";
200
+ }
201
+ return "th";
202
+ }
203
+
204
+ // src/nodes/tablerow.ts
205
+ var tablerowHtmlRenderer = ({ context, renderChildren }) => {
206
+ return renderHtmlElement("tr", null, renderChildren(context.currentNode.children));
207
+ };
208
+ var tablerowTextRenderer = ({ context, renderChildren }) => {
209
+ return hasChildren(context.currentNode) ? `${renderChildren(context.currentNode.children)} ` : "";
210
+ };
211
+
158
212
  // src/nodes/text.ts
159
213
  var textHtmlRenderer = ({ context }) => {
160
214
  const node = context.currentNode;
@@ -211,7 +265,11 @@ var rendererTypeMap = /* @__PURE__ */ new Map([
211
265
  ["paragraph", paragraphHtmlRenderer],
212
266
  ["root", rootHtmlRenderer],
213
267
  ["text", textHtmlRenderer],
214
- ["tab", tabHtmlRenderer]
268
+ ["tab", tabHtmlRenderer],
269
+ ["table", tableHtmlRenderer],
270
+ ["tablecell", tablecellHtmlRenderer],
271
+ ["tablerow", tablerowHtmlRenderer],
272
+ ["asset", assetHtmlRenderer]
215
273
  ]);
216
274
  var resolveDefaultRenderer = (context) => {
217
275
  const renderer = rendererTypeMap.get(context.currentNode.type);
@@ -279,7 +337,10 @@ var rendererTypeMap2 = /* @__PURE__ */ new Map([
279
337
  ["linebreak", linebreakTextRenderer],
280
338
  ["paragraph", paragraphTextRenderer],
281
339
  ["listitem", listitemTextRenderer],
282
- ["heading", headingTextRenderer]
340
+ ["heading", headingTextRenderer],
341
+ ["table", tableTextRenderer],
342
+ ["tablecell", tablecellTextRenderer],
343
+ ["tablerow", tablerowTextRenderer]
283
344
  ]);
284
345
  var resolveDefaultRenderer2 = (context) => {
285
346
  const renderer = rendererTypeMap2.get(context.currentNode.type);
@@ -382,6 +443,14 @@ var richTextBuiltInElements = [
382
443
  label: "Code Block",
383
444
  type: "code"
384
445
  },
446
+ {
447
+ label: "Table",
448
+ type: "table"
449
+ },
450
+ {
451
+ label: "Asset",
452
+ type: "asset"
453
+ },
385
454
  {
386
455
  label: "Dynamic Token",
387
456
  type: "variable"
@@ -430,9 +499,33 @@ var getLabelForFormat = (type) => {
430
499
  const format = richTextBuiltInFormats.find((element) => element.type === type);
431
500
  return (_a = format == null ? void 0 : format.label) != null ? _a : type;
432
501
  };
502
+ var emptyRichTextValue = {
503
+ root: {
504
+ type: "root",
505
+ version: 1,
506
+ direction: null,
507
+ format: "",
508
+ indent: 0,
509
+ children: [
510
+ {
511
+ type: "paragraph",
512
+ version: 1,
513
+ format: "start",
514
+ indent: 0,
515
+ direction: null,
516
+ children: [],
517
+ textFormat: 0,
518
+ textStyle: ""
519
+ }
520
+ ]
521
+ }
522
+ };
433
523
  export {
524
+ assetHtmlRenderer,
525
+ emptyRichTextValue,
434
526
  getLabelForElement,
435
527
  getLabelForFormat,
528
+ getRichTextTagFromTableCellHeaderState,
436
529
  getRichTextTagsFromTextFormat,
437
530
  hasChildren,
438
531
  headingHtmlRenderer,
@@ -459,6 +552,9 @@ export {
459
552
  richTextBuiltInElements,
460
553
  richTextBuiltInFormats,
461
554
  rootHtmlRenderer,
555
+ tableHtmlRenderer,
556
+ tablecellHtmlRenderer,
557
+ tablerowHtmlRenderer,
462
558
  textHtmlRenderer,
463
559
  walkRichTextTree
464
560
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/richtext",
3
- "version": "19.173.1-alpha.17+25c1176cea",
3
+ "version": "19.173.2-alpha.258+e8775b83de",
4
4
  "description": "Common functionality and types for Uniform Rich Text parameters",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -40,13 +40,13 @@
40
40
  "document": "api-extractor run --local"
41
41
  },
42
42
  "devDependencies": {
43
- "@lexical/headless": "0.16.1",
44
- "@lexical/html": "0.16.1",
45
- "@lexical/link": "0.16.1",
46
- "@lexical/list": "0.16.1",
47
- "@lexical/rich-text": "0.16.1",
48
- "@uniformdev/canvas": "^19.173.1-alpha.17+25c1176cea",
49
- "lexical": "0.16.1"
43
+ "@lexical/headless": "0.17.1",
44
+ "@lexical/html": "0.17.1",
45
+ "@lexical/link": "0.17.1",
46
+ "@lexical/list": "0.17.1",
47
+ "@lexical/rich-text": "0.17.1",
48
+ "@uniformdev/assets": "19.173.2-alpha.258+e8775b83de",
49
+ "lexical": "0.17.1"
50
50
  },
51
51
  "files": [
52
52
  "/dist"
@@ -54,5 +54,5 @@
54
54
  "publishConfig": {
55
55
  "access": "public"
56
56
  },
57
- "gitHead": "25c1176cea8d5114b92fc75cdd8bba4aa6463a50"
57
+ "gitHead": "e8775b83dec606ce6e2198182152d8b386e15f94"
58
58
  }