@voiceflow/slate-serializer 2.1.4 → 4.0.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.
Files changed (85) hide show
  1. package/build/guards-CVGDr2Tx.mjs +7 -0
  2. package/build/guards-CVGDr2Tx.mjs.map +1 -0
  3. package/build/index.d.mts +12 -0
  4. package/build/index.d.mts.map +1 -0
  5. package/build/index.mjs +3 -0
  6. package/build/jsx.d.mts +11 -0
  7. package/build/jsx.d.mts.map +1 -0
  8. package/build/jsx.mjs +50 -0
  9. package/build/jsx.mjs.map +1 -0
  10. package/build/{esm/serializers/markdown.d.ts → markdown.d.mts} +6 -6
  11. package/build/markdown.d.mts.map +1 -0
  12. package/build/markdown.mjs +36 -0
  13. package/build/markdown.mjs.map +1 -0
  14. package/build/selectors-DQmdiI54.mjs +37 -0
  15. package/build/selectors-DQmdiI54.mjs.map +1 -0
  16. package/build/text.d.mts +11 -0
  17. package/build/text.d.mts.map +1 -0
  18. package/build/text.mjs +18 -0
  19. package/build/text.mjs.map +1 -0
  20. package/package.json +8 -42
  21. package/build/cjs/guards.d.ts +0 -4
  22. package/build/cjs/guards.d.ts.map +0 -1
  23. package/build/cjs/guards.js +0 -9
  24. package/build/cjs/guards.js.map +0 -1
  25. package/build/cjs/index.d.ts +0 -5
  26. package/build/cjs/index.d.ts.map +0 -1
  27. package/build/cjs/index.js +0 -21
  28. package/build/cjs/index.js.map +0 -1
  29. package/build/cjs/package.json +0 -1
  30. package/build/cjs/selectors.d.ts +0 -7
  31. package/build/cjs/selectors.d.ts.map +0 -1
  32. package/build/cjs/selectors.js +0 -45
  33. package/build/cjs/selectors.js.map +0 -1
  34. package/build/cjs/serializers/jsx.d.ts +0 -11
  35. package/build/cjs/serializers/jsx.d.ts.map +0 -1
  36. package/build/cjs/serializers/jsx.js +0 -76
  37. package/build/cjs/serializers/jsx.js.map +0 -1
  38. package/build/cjs/serializers/markdown.d.ts +0 -10
  39. package/build/cjs/serializers/markdown.d.ts.map +0 -1
  40. package/build/cjs/serializers/markdown.js +0 -93
  41. package/build/cjs/serializers/markdown.js.map +0 -1
  42. package/build/cjs/serializers/text.d.ts +0 -11
  43. package/build/cjs/serializers/text.d.ts.map +0 -1
  44. package/build/cjs/serializers/text.js +0 -51
  45. package/build/cjs/serializers/text.js.map +0 -1
  46. package/build/cjs/styles.d.ts +0 -4
  47. package/build/cjs/styles.d.ts.map +0 -1
  48. package/build/cjs/styles.js +0 -11
  49. package/build/cjs/styles.js.map +0 -1
  50. package/build/cjs/types.d.ts +0 -3
  51. package/build/cjs/types.d.ts.map +0 -1
  52. package/build/cjs/types.js +0 -3
  53. package/build/cjs/types.js.map +0 -1
  54. package/build/esm/guards.d.ts +0 -4
  55. package/build/esm/guards.d.ts.map +0 -1
  56. package/build/esm/guards.js +0 -4
  57. package/build/esm/guards.js.map +0 -1
  58. package/build/esm/index.d.ts +0 -5
  59. package/build/esm/index.d.ts.map +0 -1
  60. package/build/esm/index.js +0 -5
  61. package/build/esm/index.js.map +0 -1
  62. package/build/esm/package.json +0 -1
  63. package/build/esm/selectors.d.ts +0 -7
  64. package/build/esm/selectors.d.ts.map +0 -1
  65. package/build/esm/selectors.js +0 -38
  66. package/build/esm/selectors.js.map +0 -1
  67. package/build/esm/serializers/jsx.d.ts +0 -11
  68. package/build/esm/serializers/jsx.d.ts.map +0 -1
  69. package/build/esm/serializers/jsx.js +0 -39
  70. package/build/esm/serializers/jsx.js.map +0 -1
  71. package/build/esm/serializers/markdown.d.ts.map +0 -1
  72. package/build/esm/serializers/markdown.js +0 -55
  73. package/build/esm/serializers/markdown.js.map +0 -1
  74. package/build/esm/serializers/text.d.ts +0 -11
  75. package/build/esm/serializers/text.d.ts.map +0 -1
  76. package/build/esm/serializers/text.js +0 -14
  77. package/build/esm/serializers/text.js.map +0 -1
  78. package/build/esm/styles.d.ts +0 -4
  79. package/build/esm/styles.d.ts.map +0 -1
  80. package/build/esm/styles.js +0 -6
  81. package/build/esm/styles.js.map +0 -1
  82. package/build/esm/types.d.ts +0 -3
  83. package/build/esm/types.d.ts.map +0 -1
  84. package/build/esm/types.js +0 -2
  85. package/build/esm/types.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ import { SlateTextElementType } from "@voiceflow/dtos-interact";
2
+ // src/guards.ts
3
+ const isLinkElement = (element) => element.type === SlateTextElementType.LINK;
4
+ const isVariableElement = (element) => element.type === SlateTextElementType.VARIABLE;
5
+ export { isVariableElement as n, isLinkElement as t };
6
+
7
+ //# sourceMappingURL=guards-CVGDr2Tx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards-CVGDr2Tx.mjs","names":[],"sources":["../src/guards.ts"],"sourcesContent":["import type { AnySlateTextElement, SlateTextLinkElement, SlateTextVariableElement } from '@voiceflow/dtos-interact';\nimport { SlateTextElementType } from '@voiceflow/dtos-interact';\n\nexport const isLinkElement = (element: AnySlateTextElement): element is SlateTextLinkElement =>\n element.type === SlateTextElementType.LINK;\n\nexport const isVariableElement = (element: AnySlateTextElement): element is SlateTextVariableElement =>\n element.type === SlateTextElementType.VARIABLE;\n"],"mappings":";;AAGA,MAAa,iBAAiB,YAC5B,QAAQ,SAAS,qBAAqB;AAExC,MAAa,qBAAqB,YAChC,QAAQ,SAAS,qBAAqB"}
@@ -0,0 +1,12 @@
1
+ import { AnySlateTextElement, SlateText, SlateTextLinkElement, SlateTextVariableElement } from "@voiceflow/dtos-interact";
2
+ import CSS from "csstype";
3
+ export declare const isLinkElement: (element: AnySlateTextElement) => element is SlateTextLinkElement;
4
+ export declare const isVariableElement: (element: AnySlateTextElement) => element is SlateTextVariableElement;
5
+ export type CSSProperties = CSS.Properties<string | number>;
6
+ export declare const getElementCSSProperties: (element: AnySlateTextElement) => CSSProperties;
7
+ export declare const getTextCSSProperties: (text: SlateText) => CSSProperties;
8
+ export declare const getElementStyles: (element: AnySlateTextElement) => string;
9
+ export declare const getTextStyles: (text: SlateText) => string;
10
+ export declare const cssPropertyNameToStyleName: (name: string) => string;
11
+ export declare const convertCSSPropertiesToStyles: (properties: CSSProperties) => string;
12
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/guards.ts","../src/types.ts","../src/selectors.ts","../src/styles.ts"],"mappings":";;qBAGa,gBAAiB,SAAS,wBAAsB,WAAW;qBAG3D,oBAAqB,SAAS,wBAAsB,WAAW;YCJhE,gBAAgB,IAAI;qBCInB,0BAA2B,SAAS,wBAAsB;qBAU1D,uBAAwB,MAAM,cAAY;qBA2B1C,mBAAoB,SAAS;qBAG7B,gBAAiB,MAAM;qBC1CvB,6BAA8B;qBAG9B,+BAAgC,YAAY"}
@@ -0,0 +1,3 @@
1
+ import { n as isVariableElement, t as isLinkElement } from "./guards-CVGDr2Tx.mjs";
2
+ import { a as convertCSSPropertiesToStyles, i as getTextStyles, n as getElementStyles, o as cssPropertyNameToStyleName, r as getTextCSSProperties, t as getElementCSSProperties } from "./selectors-DQmdiI54.mjs";
3
+ export { convertCSSPropertiesToStyles, cssPropertyNameToStyleName, getElementCSSProperties, getElementStyles, getTextCSSProperties, getTextStyles, isLinkElement, isVariableElement };
@@ -0,0 +1,11 @@
1
+ import { SlateTextValue } from "@voiceflow/dtos-interact";
2
+ import React from "react";
3
+ export interface JSXSerializerOptions {
4
+ variablesMap?: Partial<Record<string, {
5
+ id: string;
6
+ name: string;
7
+ }>>;
8
+ transformHref?: (href: string) => string;
9
+ }
10
+ export declare const serializeToJSX: (content: SlateTextValue, options?: JSXSerializerOptions) => React.ReactNode;
11
+ //# sourceMappingURL=jsx.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx.d.mts","names":[],"sources":["../src/serializers/jsx.tsx"],"mappings":";;iBAciB;EACf,eAAe,QAAQ;IAAiB;IAAY;;EACpD,iBAAiB;;qBAyEN,iBAAkB,SAAS,gBAAgB,UAAS,yBAA4B,MAAM"}
package/build/jsx.mjs ADDED
@@ -0,0 +1,50 @@
1
+ import { n as isVariableElement, t as isLinkElement } from "./guards-CVGDr2Tx.mjs";
2
+ import { r as getTextCSSProperties, t as getElementCSSProperties } from "./selectors-DQmdiI54.mjs";
3
+ import * as Slate from "slate";
4
+ import "react";
5
+ import { Fragment, jsx } from "react/jsx-runtime";
6
+ // src/serializers/jsx.tsx
7
+ const serializeTextNode = (node, index) => {
8
+ const styles = getTextCSSProperties(node);
9
+ return /* @__PURE__ */ jsx("span", {
10
+ style: styles,
11
+ children: node.text || /* @__PURE__ */ jsx(Fragment, { children: "" })
12
+ }, index);
13
+ };
14
+ const serializeLinkElement = (node, index, options) => {
15
+ const children = node.children.map((node, index) => serializeNode(node, index, options));
16
+ const styles = getElementCSSProperties(node);
17
+ const href = options.transformHref?.(node.url ?? "") ?? node.url ?? "";
18
+ return /* @__PURE__ */ jsx("a", {
19
+ rel: "noopener noreferrer",
20
+ href,
21
+ target: "_blank",
22
+ style: {
23
+ ...styles,
24
+ pointerEvents: "all"
25
+ },
26
+ onClick: (event) => {
27
+ event.stopPropagation();
28
+ event.preventDefault();
29
+ if (!href) return;
30
+ window.open(href, "_blank", "noopener=true,noreferrer=true")?.focus();
31
+ },
32
+ children
33
+ }, index);
34
+ };
35
+ const serializeVariableElement = (node, index, options) => /* @__PURE__ */ jsx("span", { children: `{${options.variablesMap ? options.variablesMap[node.id]?.name ?? node.id : node.name}}` }, index);
36
+ const serializeElementNode = (node, index, options) => {
37
+ if (isLinkElement(node)) return serializeLinkElement(node, index, options);
38
+ if (isVariableElement(node)) return serializeVariableElement(node, index, options);
39
+ const children = node.children.map((node, index) => serializeNode(node, index, options));
40
+ const styles = getElementCSSProperties(node);
41
+ return /* @__PURE__ */ jsx("div", {
42
+ style: styles,
43
+ children
44
+ }, index);
45
+ };
46
+ const serializeNode = (node, index, options) => Slate.Text.isText(node) ? serializeTextNode(node, index) : Slate.Element.isElement(node) ? serializeElementNode(node, index, options) : null;
47
+ const serializeToJSX = (content, options = {}) => content.map((node, index) => serializeNode(node, index, options));
48
+ export { serializeToJSX };
49
+
50
+ //# sourceMappingURL=jsx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx.mjs","names":[],"sources":["../src/serializers/jsx.tsx"],"sourcesContent":["import type {\n AnySlateTextElement,\n Descendant,\n SlateText,\n SlateTextLinkElement,\n SlateTextValue,\n SlateTextVariableElement,\n} from '@voiceflow/dtos-interact';\nimport React from 'react';\nimport * as Slate from 'slate';\n\nimport { isLinkElement, isVariableElement } from '../guards';\nimport { getElementCSSProperties, getTextCSSProperties } from '../selectors';\n\nexport interface JSXSerializerOptions {\n variablesMap?: Partial<Record<string, { id: string; name: string }>>;\n transformHref?: (href: string) => string;\n}\n\nconst serializeTextNode = (node: SlateText, index: number): React.ReactNode => {\n const styles = getTextCSSProperties(node);\n\n return (\n <span key={index} style={styles}>\n {node.text || <>&#xFEFF;</>}\n </span>\n );\n};\n\nconst serializeLinkElement = (\n node: SlateTextLinkElement,\n index: number,\n options: JSXSerializerOptions\n): React.ReactNode => {\n const children = node.children.map((node, index) => serializeNode(node, index, options));\n const styles = getElementCSSProperties(node);\n const href = options.transformHref?.(node.url ?? '') ?? node.url ?? '';\n\n return (\n <a\n key={index}\n rel=\"noopener noreferrer\"\n href={href}\n target=\"_blank\"\n style={{ ...styles, pointerEvents: 'all' }}\n onClick={(event) => {\n event.stopPropagation();\n event.preventDefault();\n\n if (!href) return;\n\n window.open(href, '_blank', 'noopener=true,noreferrer=true')?.focus();\n }}\n >\n {children}\n </a>\n );\n};\n\nconst serializeVariableElement = (node: SlateTextVariableElement, index: number, options: JSXSerializerOptions) => (\n <span key={index}>{`{${options.variablesMap ? (options.variablesMap[node.id]?.name ?? node.id) : node.name}}`}</span>\n);\n\nconst serializeElementNode = (\n node: AnySlateTextElement,\n index: number,\n options: JSXSerializerOptions\n): React.ReactNode => {\n if (isLinkElement(node)) return serializeLinkElement(node, index, options);\n if (isVariableElement(node)) return serializeVariableElement(node, index, options);\n\n const children = node.children.map((node, index) => serializeNode(node, index, options));\n const styles = getElementCSSProperties(node);\n\n return (\n <div key={index} style={styles}>\n {children}\n </div>\n );\n};\n\nconst serializeNode = (node: Descendant, index: number, options: JSXSerializerOptions): React.ReactNode =>\n // eslint-disable-next-line no-nested-ternary\n Slate.Text.isText(node)\n ? serializeTextNode(node, index)\n : Slate.Element.isElement(node)\n ? serializeElementNode(node, index, options)\n : null;\n\nexport const serializeToJSX = (content: SlateTextValue, options: JSXSerializerOptions = {}): React.ReactNode =>\n content.map((node, index) => serializeNode(node, index, options));\n"],"mappings":";;;;;;AAmBA,MAAM,qBAAqB,MAAiB,UAAmC;CAC7E,MAAM,SAAS,qBAAqB,IAAI;CAExC,OACE,oBAAC,QAAD;EAAkB,OAAO;EACtB,UAAA,KAAK,QAAQ,oBAAA,UAAA,EAAA,UAAE,IAAU,CAAA;CACtB,GAFK,KAEL;AAEV;AAEA,MAAM,wBACJ,MACA,OACA,YACoB;CACpB,MAAM,WAAW,KAAK,SAAS,KAAK,MAAM,UAAU,cAAc,MAAM,OAAO,OAAO,CAAC;CACvF,MAAM,SAAS,wBAAwB,IAAI;CAC3C,MAAM,OAAO,QAAQ,gBAAgB,KAAK,OAAO,EAAE,KAAK,KAAK,OAAO;CAEpE,OACE,oBAAC,KAAD;EAEE,KAAI;EACE;EACN,QAAO;EACP,OAAO;GAAE,GAAG;GAAQ,eAAe;EAAM;EACzC,UAAU,UAAU;GAClB,MAAM,gBAAgB;GACtB,MAAM,eAAe;GAErB,IAAI,CAAC,MAAM;GAEX,OAAO,KAAK,MAAM,UAAU,+BAA+B,CAAC,EAAE,MAAM;EACtE;EAEC;CACA,GAfI,KAeJ;AAEP;AAEA,MAAM,4BAA4B,MAAgC,OAAe,YAC/E,oBAAC,QAAD,EAAA,UAAmB,IAAI,QAAQ,eAAgB,QAAQ,aAAa,KAAK,GAAG,EAAE,QAAQ,KAAK,KAAM,KAAK,KAAK,GAAS,GAAzG,KAAyG;AAGtH,MAAM,wBACJ,MACA,OACA,YACoB;CACpB,IAAI,cAAc,IAAI,GAAG,OAAO,qBAAqB,MAAM,OAAO,OAAO;CACzE,IAAI,kBAAkB,IAAI,GAAG,OAAO,yBAAyB,MAAM,OAAO,OAAO;CAEjF,MAAM,WAAW,KAAK,SAAS,KAAK,MAAM,UAAU,cAAc,MAAM,OAAO,OAAO,CAAC;CACvF,MAAM,SAAS,wBAAwB,IAAI;CAE3C,OACE,oBAAC,OAAD;EAAiB,OAAO;EACrB;CACE,GAFK,KAEL;AAET;AAEA,MAAM,iBAAiB,MAAkB,OAAe,YAEtD,MAAM,KAAK,OAAO,IAAI,IAClB,kBAAkB,MAAM,KAAK,IAC7B,MAAM,QAAQ,UAAU,IAAI,IAC1B,qBAAqB,MAAM,OAAO,OAAO,IACzC;AAER,MAAa,kBAAkB,SAAyB,UAAgC,CAAC,MACvF,QAAQ,KAAK,MAAM,UAAU,cAAc,MAAM,OAAO,OAAO,CAAC"}
@@ -1,10 +1,10 @@
1
- import type { SlateTextValue, SlateTextVariableElement } from '@voiceflow/dtos-interact';
1
+ import { SlateTextValue, SlateTextVariableElement } from "@voiceflow/dtos-interact";
2
2
  export interface MarkdownSerializerOptions {
3
- variablesMap?: Partial<Record<string, {
4
- id: string;
5
- name: string;
6
- }>>;
3
+ variablesMap?: Partial<Record<string, {
4
+ id: string;
5
+ name: string;
6
+ }>>;
7
7
  }
8
8
  export declare const serializeVariableElement: (node: SlateTextVariableElement, options: MarkdownSerializerOptions) => string;
9
9
  export declare const serializeToMarkdown: (content: SlateTextValue, options?: MarkdownSerializerOptions) => string;
10
- //# sourceMappingURL=markdown.d.ts.map
10
+ //# sourceMappingURL=markdown.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.mts","names":[],"sources":["../src/serializers/markdown.ts"],"mappings":";iBAaiB;EACf,eAAe,QAAQ;IAAiB;IAAY;;;qBAoCzC,2BAA4B,MAAM,0BAA0B,SAAS;qBAoBrE,sBAAuB,SAAS,gBAAgB,UAAS"}
@@ -0,0 +1,36 @@
1
+ import { n as isVariableElement, t as isLinkElement } from "./guards-CVGDr2Tx.mjs";
2
+ import { SlateTextProperty } from "@voiceflow/dtos-interact";
3
+ import * as Slate from "slate";
4
+ // src/serializers/markdown.ts
5
+ const serializeTextNode = (node) => {
6
+ const isItalic = node[SlateTextProperty.ITALIC];
7
+ const isUnderline = node[SlateTextProperty.UNDERLINE];
8
+ const isStrikeThrough = node[SlateTextProperty.STRIKE_THROUGH];
9
+ const fontWeight = node[SlateTextProperty.FONT_WEIGHT];
10
+ let { text } = node;
11
+ if (!text.trim()) return text;
12
+ const leadingWhitespace = text.match(/^\s+/) || "";
13
+ const trailingWhitespace = text.match(/\s+$/) || "";
14
+ text = text.trim();
15
+ if (isItalic) text = `*${text}*`;
16
+ if (isUnderline) text = `<u>${text}</u>`;
17
+ if (isStrikeThrough) text = `~~${text}~~`;
18
+ if (fontWeight) text = `**${text}**`;
19
+ return `${leadingWhitespace}${text}${trailingWhitespace}`;
20
+ };
21
+ const serializeLinkElement = (node, options) => {
22
+ return `[${node.children.map((node) => serializeNode(node, options))}](${node.url?.replace(/\s+/g, "")})`;
23
+ };
24
+ const serializeVariableElement = (node, options) => {
25
+ return `{${(options.variablesMap ? options.variablesMap[node.id]?.name ?? node.id : node.name).concat(node.path ?? "")}}`;
26
+ };
27
+ const serializeElementNode = (node, options) => {
28
+ if (isLinkElement(node)) return serializeLinkElement(node, options);
29
+ if (isVariableElement(node)) return serializeVariableElement(node, options);
30
+ return node.children.map((node) => serializeNode(node, options)).join("");
31
+ };
32
+ const serializeNode = (node, options) => Slate.Text.isText(node) ? serializeTextNode(node) : Slate.Element.isElement(node) ? serializeElementNode(node, options) : "";
33
+ const serializeToMarkdown = (content, options = {}) => content.map((node) => serializeNode(node, options)).join("\n").replace(/\n{3,}/g, (match) => `\n${"<br/>".repeat(match.length - 2)}\n\n`);
34
+ export { serializeToMarkdown, serializeVariableElement };
35
+
36
+ //# sourceMappingURL=markdown.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.mjs","names":[],"sources":["../src/serializers/markdown.ts"],"sourcesContent":["import type {\n AnySlateTextElement,\n Descendant,\n SlateText,\n SlateTextLinkElement,\n SlateTextValue,\n SlateTextVariableElement,\n} from '@voiceflow/dtos-interact';\nimport { SlateTextProperty } from '@voiceflow/dtos-interact';\nimport * as Slate from 'slate';\n\nimport { isLinkElement, isVariableElement } from '../guards';\n\nexport interface MarkdownSerializerOptions {\n variablesMap?: Partial<Record<string, { id: string; name: string }>>;\n}\n\nconst serializeTextNode = (node: SlateText): string => {\n const isItalic = node[SlateTextProperty.ITALIC];\n const isUnderline = node[SlateTextProperty.UNDERLINE];\n const isStrikeThrough = node[SlateTextProperty.STRIKE_THROUGH];\n const fontWeight = node[SlateTextProperty.FONT_WEIGHT];\n\n let { text } = node;\n\n if (!text.trim()) return text;\n\n // Extract leading and trailing whitespaces\n const leadingWhitespace = text.match(/^\\s+/) || '';\n // eslint-disable-next-line sonarjs/slow-regex\n const trailingWhitespace = text.match(/\\s+$/) || '';\n\n // Trim the text to remove leading and trailing whitespaces\n text = text.trim();\n\n if (isItalic) text = `*${text}*`;\n if (isUnderline) text = `<u>${text}</u>`;\n if (isStrikeThrough) text = `~~${text}~~`;\n if (fontWeight) text = `**${text}**`;\n\n // Add the leading and trailing whitespaces back to the outside of the markers\n return `${leadingWhitespace}${text}${trailingWhitespace}`;\n};\n\nconst serializeLinkElement = (node: SlateTextLinkElement, options: MarkdownSerializerOptions): string => {\n const children = node.children.map((node) => serializeNode(node, options));\n\n return `[${children}](${node.url?.replace(/\\s+/g, '')})`;\n};\n\nexport const serializeVariableElement = (node: SlateTextVariableElement, options: MarkdownSerializerOptions) => {\n const resultName = options.variablesMap ? (options.variablesMap[node.id]?.name ?? node.id) : node.name;\n return `{${resultName.concat(node.path ?? '')}}`;\n};\n\nconst serializeElementNode = (node: AnySlateTextElement, options: MarkdownSerializerOptions): string => {\n if (isLinkElement(node)) return serializeLinkElement(node, options);\n if (isVariableElement(node)) return serializeVariableElement(node, options);\n\n return node.children.map((node) => serializeNode(node, options)).join('');\n};\n\nconst serializeNode = (node: Descendant, options: MarkdownSerializerOptions): string =>\n // eslint-disable-next-line no-nested-ternary\n Slate.Text.isText(node)\n ? serializeTextNode(node)\n : Slate.Element.isElement(node)\n ? serializeElementNode(node, options)\n : '';\n\nexport const serializeToMarkdown = (content: SlateTextValue, options: MarkdownSerializerOptions = {}): string =>\n content\n .map((node) => serializeNode(node, options))\n .join('\\n')\n .replace(/\\n{3,}/g, (match) => `\\n${'<br/>'.repeat(match.length - 2)}\\n\\n`);\n"],"mappings":";;;;AAiBA,MAAM,qBAAqB,SAA4B;CACrD,MAAM,WAAW,KAAK,kBAAkB;CACxC,MAAM,cAAc,KAAK,kBAAkB;CAC3C,MAAM,kBAAkB,KAAK,kBAAkB;CAC/C,MAAM,aAAa,KAAK,kBAAkB;CAE1C,IAAI,EAAE,SAAS;CAEf,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO;CAGzB,MAAM,oBAAoB,KAAK,MAAM,MAAM,KAAK;CAEhD,MAAM,qBAAqB,KAAK,MAAM,MAAM,KAAK;CAGjD,OAAO,KAAK,KAAK;CAEjB,IAAI,UAAU,OAAO,IAAI,KAAK;CAC9B,IAAI,aAAa,OAAO,MAAM,KAAK;CACnC,IAAI,iBAAiB,OAAO,KAAK,KAAK;CACtC,IAAI,YAAY,OAAO,KAAK,KAAK;CAGjC,OAAO,GAAG,oBAAoB,OAAO;AACvC;AAEA,MAAM,wBAAwB,MAA4B,YAA+C;CAGvG,OAAO,IAFU,KAAK,SAAS,KAAK,SAAS,cAAc,MAAM,OAAO,CAEtD,EAAE,IAAI,KAAK,KAAK,QAAQ,QAAQ,EAAE,EAAE;AACxD;AAEA,MAAa,4BAA4B,MAAgC,YAAuC;CAE9G,OAAO,KADY,QAAQ,eAAgB,QAAQ,aAAa,KAAK,GAAG,EAAE,QAAQ,KAAK,KAAM,KAAK,KAAA,CAC5E,OAAO,KAAK,QAAQ,EAAE,EAAE;AAChD;AAEA,MAAM,wBAAwB,MAA2B,YAA+C;CACtG,IAAI,cAAc,IAAI,GAAG,OAAO,qBAAqB,MAAM,OAAO;CAClE,IAAI,kBAAkB,IAAI,GAAG,OAAO,yBAAyB,MAAM,OAAO;CAE1E,OAAO,KAAK,SAAS,KAAK,SAAS,cAAc,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1E;AAEA,MAAM,iBAAiB,MAAkB,YAEvC,MAAM,KAAK,OAAO,IAAI,IAClB,kBAAkB,IAAI,IACtB,MAAM,QAAQ,UAAU,IAAI,IAC1B,qBAAqB,MAAM,OAAO,IAClC;AAER,MAAa,uBAAuB,SAAyB,UAAqC,CAAC,MACjG,QACG,KAAK,SAAS,cAAc,MAAM,OAAO,CAAC,CAAC,CAC3C,KAAK,IAAI,CAAC,CACV,QAAQ,YAAY,UAAU,KAAK,QAAQ,OAAO,MAAM,SAAS,CAAC,EAAE,KAAK"}
@@ -0,0 +1,37 @@
1
+ import { SlateTextElementProperty, SlateTextProperty } from "@voiceflow/dtos-interact";
2
+ // src/styles.ts
3
+ const CAPITAL_LETTER_REGEXP = /[A-Z]/g;
4
+ const cssPropertyNameToStyleName = (name) => name.replace(CAPITAL_LETTER_REGEXP, (match) => `-${match.toLowerCase()}`);
5
+ const convertCSSPropertiesToStyles = (properties) => Object.entries(properties).map(([key, value]) => `${cssPropertyNameToStyleName(key)}:${value}`).join(";");
6
+ // src/selectors.ts
7
+ const getElementCSSProperties = (element) => {
8
+ const textAlign = element[SlateTextElementProperty.TEXT_ALIGN];
9
+ const styles = {};
10
+ if (textAlign) styles.textAlign = textAlign;
11
+ return styles;
12
+ };
13
+ const getTextCSSProperties = (text) => {
14
+ const color = text[SlateTextProperty.COLOR];
15
+ const isItalic = text[SlateTextProperty.ITALIC];
16
+ const fontWeight = text[SlateTextProperty.FONT_WEIGHT];
17
+ const fontFamily = text[SlateTextProperty.FONT_FAMILY];
18
+ const isUnderline = text[SlateTextProperty.UNDERLINE];
19
+ const isStrikeThrough = text[SlateTextProperty.STRIKE_THROUGH];
20
+ const styles = {};
21
+ if (color) styles.color = `rgba(${color.r},${color.g},${color.b},${color.a})`;
22
+ if (isItalic) styles.fontStyle = "italic";
23
+ if (fontWeight) styles.fontWeight = Number(fontWeight);
24
+ if (fontFamily) styles.fontFamily = `"${fontFamily}"`;
25
+ if (isUnderline || isStrikeThrough) {
26
+ let decoration = "";
27
+ if (isUnderline) decoration += "underline";
28
+ if (isStrikeThrough) decoration += " line-through";
29
+ styles.textDecoration = decoration.trim();
30
+ }
31
+ return styles;
32
+ };
33
+ const getElementStyles = (element) => convertCSSPropertiesToStyles(getElementCSSProperties(element));
34
+ const getTextStyles = (text) => convertCSSPropertiesToStyles(getTextCSSProperties(text));
35
+ export { convertCSSPropertiesToStyles as a, getTextStyles as i, getElementStyles as n, cssPropertyNameToStyleName as o, getTextCSSProperties as r, getElementCSSProperties as t };
36
+
37
+ //# sourceMappingURL=selectors-DQmdiI54.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors-DQmdiI54.mjs","names":[],"sources":["../src/styles.ts","../src/selectors.ts"],"sourcesContent":["import type { CSSProperties } from './types';\n\nconst CAPITAL_LETTER_REGEXP = /[A-Z]/g;\n\nexport const cssPropertyNameToStyleName = (name: string): string =>\n name.replace(CAPITAL_LETTER_REGEXP, (match) => `-${match.toLowerCase()}`);\n\nexport const convertCSSPropertiesToStyles = (properties: CSSProperties): string =>\n Object.entries(properties)\n .map(([key, value]) => `${cssPropertyNameToStyleName(key)}:${value}`)\n .join(';');\n","import type { AnySlateTextElement, SlateText } from '@voiceflow/dtos-interact';\nimport { SlateTextElementProperty, SlateTextProperty } from '@voiceflow/dtos-interact';\n\nimport { convertCSSPropertiesToStyles } from './styles';\nimport type { CSSProperties } from './types';\n\nexport const getElementCSSProperties = (element: AnySlateTextElement): CSSProperties => {\n const textAlign = element[SlateTextElementProperty.TEXT_ALIGN] as CSSProperties['textAlign'];\n\n const styles: CSSProperties = {};\n\n if (textAlign) styles.textAlign = textAlign;\n\n return styles;\n};\n\nexport const getTextCSSProperties = (text: SlateText): CSSProperties => {\n const color = text[SlateTextProperty.COLOR];\n const isItalic = text[SlateTextProperty.ITALIC];\n const fontWeight = text[SlateTextProperty.FONT_WEIGHT];\n const fontFamily = text[SlateTextProperty.FONT_FAMILY];\n const isUnderline = text[SlateTextProperty.UNDERLINE];\n const isStrikeThrough = text[SlateTextProperty.STRIKE_THROUGH];\n\n const styles: CSSProperties = {};\n\n if (color) styles.color = `rgba(${color.r},${color.g},${color.b},${color.a})`;\n if (isItalic) styles.fontStyle = 'italic';\n if (fontWeight) styles.fontWeight = Number(fontWeight);\n if (fontFamily) styles.fontFamily = `\"${fontFamily}\"`;\n\n if (isUnderline || isStrikeThrough) {\n let decoration = '';\n\n if (isUnderline) decoration += 'underline';\n if (isStrikeThrough) decoration += ' line-through';\n\n styles.textDecoration = decoration.trim();\n }\n\n return styles;\n};\n\nexport const getElementStyles = (element: AnySlateTextElement): string =>\n convertCSSPropertiesToStyles(getElementCSSProperties(element));\n\nexport const getTextStyles = (text: SlateText): string => convertCSSPropertiesToStyles(getTextCSSProperties(text));\n"],"mappings":";;AAEA,MAAM,wBAAwB;AAE9B,MAAa,8BAA8B,SACzC,KAAK,QAAQ,wBAAwB,UAAU,IAAI,MAAM,YAAY,GAAG;AAE1E,MAAa,gCAAgC,eAC3C,OAAO,QAAQ,UAAU,CAAC,CACvB,KAAK,CAAC,KAAK,WAAW,GAAG,2BAA2B,GAAG,EAAE,GAAG,OAAO,CAAC,CACpE,KAAK,GAAG;;ACJb,MAAa,2BAA2B,YAAgD;CACtF,MAAM,YAAY,QAAQ,yBAAyB;CAEnD,MAAM,SAAwB,CAAC;CAE/B,IAAI,WAAW,OAAO,YAAY;CAElC,OAAO;AACT;AAEA,MAAa,wBAAwB,SAAmC;CACtE,MAAM,QAAQ,KAAK,kBAAkB;CACrC,MAAM,WAAW,KAAK,kBAAkB;CACxC,MAAM,aAAa,KAAK,kBAAkB;CAC1C,MAAM,aAAa,KAAK,kBAAkB;CAC1C,MAAM,cAAc,KAAK,kBAAkB;CAC3C,MAAM,kBAAkB,KAAK,kBAAkB;CAE/C,MAAM,SAAwB,CAAC;CAE/B,IAAI,OAAO,OAAO,QAAQ,QAAQ,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;CAC3E,IAAI,UAAU,OAAO,YAAY;CACjC,IAAI,YAAY,OAAO,aAAa,OAAO,UAAU;CACrD,IAAI,YAAY,OAAO,aAAa,IAAI,WAAW;CAEnD,IAAI,eAAe,iBAAiB;EAClC,IAAI,aAAa;EAEjB,IAAI,aAAa,cAAc;EAC/B,IAAI,iBAAiB,cAAc;EAEnC,OAAO,iBAAiB,WAAW,KAAK;CAC1C;CAEA,OAAO;AACT;AAEA,MAAa,oBAAoB,YAC/B,6BAA6B,wBAAwB,OAAO,CAAC;AAE/D,MAAa,iBAAiB,SAA4B,6BAA6B,qBAAqB,IAAI,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { SlateTextValue } from "@voiceflow/dtos-interact";
2
+ export interface TextSerializerOptions {
3
+ variablesMap?: Partial<Record<string, {
4
+ id: string;
5
+ name: string;
6
+ }>>;
7
+ markdownLinks?: boolean;
8
+ encodeVariables?: boolean;
9
+ }
10
+ export declare const serializeToText: (content: SlateTextValue, { variablesMap, markdownLinks, encodeVariables }?: TextSerializerOptions) => string;
11
+ //# sourceMappingURL=text.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.mts","names":[],"sources":["../src/serializers/text.ts"],"mappings":";iBAKiB;EACf,eAAe,QAAQ;IAAiB;IAAY;;EACpD;EACA;;qBAiBW,kBACX,SAAS,kBACT,cAAA,eAAA,oBAAsE"}
package/build/text.mjs ADDED
@@ -0,0 +1,18 @@
1
+ import { n as isVariableElement, t as isLinkElement } from "./guards-CVGDr2Tx.mjs";
2
+ import * as Slate from "slate";
3
+ // src/serializers/text.ts
4
+ const nodeToString = (node, options) => {
5
+ if (!Slate.Element.isElement(node)) return Slate.Node.string(node);
6
+ if (isLinkElement(node) && options.markdownLinks) return `[${serializeToText(node.children)}](${node.url})`;
7
+ if (isVariableElement(node) && options.encodeVariables) return `{${options.variablesMap ? options.variablesMap[node.id]?.name ?? node.id : node.name}}`;
8
+ return nodesToString(node.children, options).join("");
9
+ };
10
+ const nodesToString = (nodes, options) => nodes.map((node) => nodeToString(node, options));
11
+ const serializeToText = (content, { variablesMap = {}, markdownLinks = false, encodeVariables = true } = {}) => nodesToString(content, {
12
+ variablesMap,
13
+ markdownLinks,
14
+ encodeVariables
15
+ }).join("\n").trim();
16
+ export { serializeToText };
17
+
18
+ //# sourceMappingURL=text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.mjs","names":[],"sources":["../src/serializers/text.ts"],"sourcesContent":["import type { Descendant, SlateTextValue } from '@voiceflow/dtos-interact';\nimport * as Slate from 'slate';\n\nimport { isLinkElement, isVariableElement } from '../guards';\n\nexport interface TextSerializerOptions {\n variablesMap?: Partial<Record<string, { id: string; name: string }>>;\n markdownLinks?: boolean;\n encodeVariables?: boolean;\n}\n\nconst nodeToString = (node: Descendant, options: TextSerializerOptions): string => {\n if (!Slate.Element.isElement(node)) return Slate.Node.string(node);\n\n if (isLinkElement(node) && options.markdownLinks) return `[${serializeToText(node.children)}](${node.url})`;\n\n if (isVariableElement(node) && options.encodeVariables)\n return `{${options.variablesMap ? (options.variablesMap[node.id]?.name ?? node.id) : node.name}}`;\n\n return nodesToString(node.children, options).join('');\n};\n\nconst nodesToString = (nodes: Descendant[], options: TextSerializerOptions): string[] =>\n nodes.map((node) => nodeToString(node, options));\n\nexport const serializeToText = (\n content: SlateTextValue,\n { variablesMap = {}, markdownLinks = false, encodeVariables = true }: TextSerializerOptions = {}\n): string => nodesToString(content, { variablesMap, markdownLinks, encodeVariables }).join('\\n').trim();\n"],"mappings":";;;AAWA,MAAM,gBAAgB,MAAkB,YAA2C;CACjF,IAAI,CAAC,MAAM,QAAQ,UAAU,IAAI,GAAG,OAAO,MAAM,KAAK,OAAO,IAAI;CAEjE,IAAI,cAAc,IAAI,KAAK,QAAQ,eAAe,OAAO,IAAI,gBAAgB,KAAK,QAAQ,EAAE,IAAI,KAAK,IAAI;CAEzG,IAAI,kBAAkB,IAAI,KAAK,QAAQ,iBACrC,OAAO,IAAI,QAAQ,eAAgB,QAAQ,aAAa,KAAK,GAAG,EAAE,QAAQ,KAAK,KAAM,KAAK,KAAK;CAEjG,OAAO,cAAc,KAAK,UAAU,OAAO,CAAC,CAAC,KAAK,EAAE;AACtD;AAEA,MAAM,iBAAiB,OAAqB,YAC1C,MAAM,KAAK,SAAS,aAAa,MAAM,OAAO,CAAC;AAEjD,MAAa,mBACX,SACA,EAAE,eAAe,CAAC,GAAG,gBAAgB,OAAO,kBAAkB,SAAgC,CAAC,MACpF,cAAc,SAAS;CAAE;CAAc;CAAe;AAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voiceflow/slate-serializer",
3
- "version": "2.1.4",
3
+ "version": "4.0.0",
4
4
  "description": "Utilities for serializing slate data",
5
5
  "keywords": [
6
6
  "react",
@@ -19,51 +19,17 @@
19
19
  "author": "Ben Teichman",
20
20
  "type": "module",
21
21
  "exports": {
22
- ".": {
23
- "types": "./build/esm/index.d.ts",
24
- "import": "./build/esm/index.js",
25
- "require": "./build/cjs/index.js"
26
- },
27
- "./text": {
28
- "types": "./build/esm/serializers/text.d.ts",
29
- "import": "./build/esm/serializers/text.js",
30
- "require": "./build/cjs/serializers/text.js"
31
- },
32
- "./markdown": {
33
- "types": "./build/esm/serializers/markdown.d.ts",
34
- "import": "./build/esm/serializers/markdown.js",
35
- "require": "./build/cjs/serializers/markdown.js"
36
- },
37
- "./jsx": {
38
- "types": "./build/esm/serializers/jsx.d.ts",
39
- "import": "./build/esm/serializers/jsx.js",
40
- "require": "./build/cjs/serializers/jsx.js"
41
- }
42
- },
43
- "main": "build/cjs/index.js",
44
- "module": "build/esm/index.js",
45
- "types": "build/esm/index.d.ts",
46
- "typesVersions": {
47
- "*": {
48
- "text": [
49
- "./build/esm/serializers/text.d.ts"
50
- ],
51
- "jsx": [
52
- "./build/esm/serializers/jsx.d.ts"
53
- ],
54
- "markdown": [
55
- "./build/esm/serializers/markdown.d.ts"
56
- ]
57
- }
22
+ ".": "./build/index.mjs",
23
+ "./jsx": "./build/jsx.mjs",
24
+ "./markdown": "./build/markdown.mjs",
25
+ "./text": "./build/text.mjs"
58
26
  },
59
27
  "files": [
60
28
  "build"
61
29
  ],
62
30
  "scripts": {
63
31
  "build": "yarn g:turbo run build:cmd --filter=@voiceflow/slate-serializer...",
64
- "build:cjs": "yarn g:build:pkg cjs",
65
- "build:cmd": "yarn g:run-p build:cjs build:esm",
66
- "build:esm": "yarn g:build:pkg esm",
32
+ "build:cmd": "yarn g:tsdown",
67
33
  "clean": "yarn g:rimraf build",
68
34
  "lint": "yarn g:run-p -c lint:eslint lint:prettier",
69
35
  "lint:eslint": "yarn g:eslint",
@@ -92,10 +58,10 @@
92
58
  "zod": "^3"
93
59
  },
94
60
  "engines": {
95
- "node": "20"
61
+ "node": "26"
96
62
  },
97
63
  "volta": {
98
64
  "extends": "../../package.json"
99
65
  },
100
- "gitHead": "6e26f53c5a481132b38329384748ca6274a700ea"
66
+ "gitHead": "856cf9c6f41c3510675115d0feb331c6165f0975"
101
67
  }
@@ -1,4 +0,0 @@
1
- import type { AnySlateTextElement, SlateTextLinkElement, SlateTextVariableElement } from '@voiceflow/dtos-interact';
2
- export declare const isLinkElement: (element: AnySlateTextElement) => element is SlateTextLinkElement;
3
- export declare const isVariableElement: (element: AnySlateTextElement) => element is SlateTextVariableElement;
4
- //# sourceMappingURL=guards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGpH,eAAO,MAAM,aAAa,GAAI,SAAS,mBAAmB,KAAG,OAAO,IAAI,oBAC5B,CAAC;AAE7C,eAAO,MAAM,iBAAiB,GAAI,SAAS,mBAAmB,KAAG,OAAO,IAAI,wBAC5B,CAAC"}
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isVariableElement = exports.isLinkElement = void 0;
4
- const dtos_interact_1 = require("@voiceflow/dtos-interact");
5
- const isLinkElement = (element) => element.type === dtos_interact_1.SlateTextElementType.LINK;
6
- exports.isLinkElement = isLinkElement;
7
- const isVariableElement = (element) => element.type === dtos_interact_1.SlateTextElementType.VARIABLE;
8
- exports.isVariableElement = isVariableElement;
9
- //# sourceMappingURL=guards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":";;;AACA,4DAAgE;AAEzD,MAAM,aAAa,GAAG,CAAC,OAA4B,EAAmC,EAAE,CAC7F,OAAO,CAAC,IAAI,KAAK,oCAAoB,CAAC,IAAI,CAAC;AADhC,QAAA,aAAa,iBACmB;AAEtC,MAAM,iBAAiB,GAAG,CAAC,OAA4B,EAAuC,EAAE,CACrG,OAAO,CAAC,IAAI,KAAK,oCAAoB,CAAC,QAAQ,CAAC;AADpC,QAAA,iBAAiB,qBACmB"}
@@ -1,5 +0,0 @@
1
- export * from './guards';
2
- export * from './selectors';
3
- export * from './styles';
4
- export * from './types';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./guards"), exports);
18
- __exportStar(require("./selectors"), exports);
19
- __exportStar(require("./styles"), exports);
20
- __exportStar(require("./types"), exports);
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB"}
@@ -1 +0,0 @@
1
- { "type": "commonjs" }
@@ -1,7 +0,0 @@
1
- import type { AnySlateTextElement, SlateText } from '@voiceflow/dtos-interact';
2
- import type { CSSProperties } from './types';
3
- export declare const getElementCSSProperties: (element: AnySlateTextElement) => CSSProperties;
4
- export declare const getTextCSSProperties: (text: SlateText) => CSSProperties;
5
- export declare const getElementStyles: (element: AnySlateTextElement) => string;
6
- export declare const getTextStyles: (text: SlateText) => string;
7
- //# sourceMappingURL=selectors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAI/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,uBAAuB,GAAI,SAAS,mBAAmB,KAAG,aAQtE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,KAAG,aAyBtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,mBAAmB,KAAG,MACA,CAAC;AAEjE,eAAO,MAAM,aAAa,GAAI,MAAM,SAAS,KAAG,MAAkE,CAAC"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTextStyles = exports.getElementStyles = exports.getTextCSSProperties = exports.getElementCSSProperties = void 0;
4
- const dtos_interact_1 = require("@voiceflow/dtos-interact");
5
- const styles_1 = require("./styles");
6
- const getElementCSSProperties = (element) => {
7
- const textAlign = element[dtos_interact_1.SlateTextElementProperty.TEXT_ALIGN];
8
- const styles = {};
9
- if (textAlign)
10
- styles.textAlign = textAlign;
11
- return styles;
12
- };
13
- exports.getElementCSSProperties = getElementCSSProperties;
14
- const getTextCSSProperties = (text) => {
15
- const color = text[dtos_interact_1.SlateTextProperty.COLOR];
16
- const isItalic = text[dtos_interact_1.SlateTextProperty.ITALIC];
17
- const fontWeight = text[dtos_interact_1.SlateTextProperty.FONT_WEIGHT];
18
- const fontFamily = text[dtos_interact_1.SlateTextProperty.FONT_FAMILY];
19
- const isUnderline = text[dtos_interact_1.SlateTextProperty.UNDERLINE];
20
- const isStrikeThrough = text[dtos_interact_1.SlateTextProperty.STRIKE_THROUGH];
21
- const styles = {};
22
- if (color)
23
- styles.color = `rgba(${color.r},${color.g},${color.b},${color.a})`;
24
- if (isItalic)
25
- styles.fontStyle = 'italic';
26
- if (fontWeight)
27
- styles.fontWeight = Number(fontWeight);
28
- if (fontFamily)
29
- styles.fontFamily = `"${fontFamily}"`;
30
- if (isUnderline || isStrikeThrough) {
31
- let decoration = '';
32
- if (isUnderline)
33
- decoration += 'underline';
34
- if (isStrikeThrough)
35
- decoration += ' line-through';
36
- styles.textDecoration = decoration.trim();
37
- }
38
- return styles;
39
- };
40
- exports.getTextCSSProperties = getTextCSSProperties;
41
- const getElementStyles = (element) => (0, styles_1.convertCSSPropertiesToStyles)((0, exports.getElementCSSProperties)(element));
42
- exports.getElementStyles = getElementStyles;
43
- const getTextStyles = (text) => (0, styles_1.convertCSSPropertiesToStyles)((0, exports.getTextCSSProperties)(text));
44
- exports.getTextStyles = getTextStyles;
45
- //# sourceMappingURL=selectors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/selectors.ts"],"names":[],"mappings":";;;AACA,4DAAuF;AAEvF,qCAAwD;AAGjD,MAAM,uBAAuB,GAAG,CAAC,OAA4B,EAAiB,EAAE;IACrF,MAAM,SAAS,GAAG,OAAO,CAAC,wCAAwB,CAAC,UAAU,CAA+B,CAAC;IAE7F,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAE5C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AARW,QAAA,uBAAuB,2BAQlC;AAEK,MAAM,oBAAoB,GAAG,CAAC,IAAe,EAAiB,EAAE;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,iCAAiB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iCAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,iCAAiB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,iCAAiB,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,CAAC,iCAAiB,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,iCAAiB,CAAC,cAAc,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,IAAI,KAAK;QAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC;IAC9E,IAAI,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC1C,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,IAAI,UAAU,GAAG,CAAC;IAEtD,IAAI,WAAW,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,IAAI,WAAW;YAAE,UAAU,IAAI,WAAW,CAAC;QAC3C,IAAI,eAAe;YAAE,UAAU,IAAI,eAAe,CAAC;QAEnD,MAAM,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAzBW,QAAA,oBAAoB,wBAyB/B;AAEK,MAAM,gBAAgB,GAAG,CAAC,OAA4B,EAAU,EAAE,CACvE,IAAA,qCAA4B,EAAC,IAAA,+BAAuB,EAAC,OAAO,CAAC,CAAC,CAAC;AADpD,QAAA,gBAAgB,oBACoC;AAE1D,MAAM,aAAa,GAAG,CAAC,IAAe,EAAU,EAAE,CAAC,IAAA,qCAA4B,EAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,CAAC,CAAC;AAAtG,QAAA,aAAa,iBAAyF"}
@@ -1,11 +0,0 @@
1
- import type { SlateTextValue } from '@voiceflow/dtos-interact';
2
- import React from 'react';
3
- export interface JSXSerializerOptions {
4
- variablesMap?: Partial<Record<string, {
5
- id: string;
6
- name: string;
7
- }>>;
8
- transformHref?: (href: string) => string;
9
- }
10
- export declare const serializeToJSX: (content: SlateTextValue, options?: JSXSerializerOptions) => React.ReactNode;
11
- //# sourceMappingURL=jsx.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../../src/serializers/jsx.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,cAAc,EAEf,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACrE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAwED,eAAO,MAAM,cAAc,GAAI,SAAS,cAAc,EAAE,UAAS,oBAAyB,KAAG,KAAK,CAAC,SAChC,CAAC"}
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.serializeToJSX = void 0;
37
- const jsx_runtime_1 = require("react/jsx-runtime");
38
- const Slate = __importStar(require("slate"));
39
- const guards_1 = require("../guards");
40
- const selectors_1 = require("../selectors");
41
- const serializeTextNode = (node, index) => {
42
- const styles = (0, selectors_1.getTextCSSProperties)(node);
43
- return ((0, jsx_runtime_1.jsx)("span", { style: styles, children: node.text || (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: "\uFEFF" }) }, index));
44
- };
45
- const serializeLinkElement = (node, index, options) => {
46
- const children = node.children.map((node, index) => serializeNode(node, index, options));
47
- const styles = (0, selectors_1.getElementCSSProperties)(node);
48
- const href = options.transformHref?.(node.url ?? '') ?? node.url ?? '';
49
- return ((0, jsx_runtime_1.jsx)("a", { rel: "noopener noreferrer", href: href, target: "_blank", style: { ...styles, pointerEvents: 'all' }, onClick: (event) => {
50
- event.stopPropagation();
51
- event.preventDefault();
52
- if (!href)
53
- return;
54
- window.open(href, '_blank', 'noopener=true,noreferrer=true')?.focus();
55
- }, children: children }, index));
56
- };
57
- const serializeVariableElement = (node, index, options) => ((0, jsx_runtime_1.jsx)("span", { children: `{${options.variablesMap ? (options.variablesMap[node.id]?.name ?? node.id) : node.name}}` }, index));
58
- const serializeElementNode = (node, index, options) => {
59
- if ((0, guards_1.isLinkElement)(node))
60
- return serializeLinkElement(node, index, options);
61
- if ((0, guards_1.isVariableElement)(node))
62
- return serializeVariableElement(node, index, options);
63
- const children = node.children.map((node, index) => serializeNode(node, index, options));
64
- const styles = (0, selectors_1.getElementCSSProperties)(node);
65
- return ((0, jsx_runtime_1.jsx)("div", { style: styles, children: children }, index));
66
- };
67
- const serializeNode = (node, index, options) =>
68
- // eslint-disable-next-line no-nested-ternary
69
- Slate.Text.isText(node)
70
- ? serializeTextNode(node, index)
71
- : Slate.Element.isElement(node)
72
- ? serializeElementNode(node, index, options)
73
- : null;
74
- const serializeToJSX = (content, options = {}) => content.map((node, index) => serializeNode(node, index, options));
75
- exports.serializeToJSX = serializeToJSX;
76
- //# sourceMappingURL=jsx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/serializers/jsx.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { SlateTextValue, SlateTextVariableElement } from '@voiceflow/dtos-interact';
2
- export interface MarkdownSerializerOptions {
3
- variablesMap?: Partial<Record<string, {
4
- id: string;
5
- name: string;
6
- }>>;
7
- }
8
- export declare const serializeVariableElement: (node: SlateTextVariableElement, options: MarkdownSerializerOptions) => string;
9
- export declare const serializeToMarkdown: (content: SlateTextValue, options?: MarkdownSerializerOptions) => string;
10
- //# sourceMappingURL=markdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/serializers/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,cAAc,EACd,wBAAwB,EACzB,MAAM,0BAA0B,CAAC;AAMlC,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACtE;AAmCD,eAAO,MAAM,wBAAwB,GAAI,MAAM,wBAAwB,EAAE,SAAS,yBAAyB,WAG1G,CAAC;AAiBF,eAAO,MAAM,mBAAmB,GAAI,SAAS,cAAc,EAAE,UAAS,yBAA8B,KAAG,MAIxB,CAAC"}