@moneylion/react-native-offer-carousel 1.10.2 → 1.11.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/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 1.11.0 (2026-06-02)
2
+
3
+ - Updated the offer carousel component to use an improved markdown rendering library
4
+
1
5
  ## 1.10.2 (2026-05-19)
2
6
 
3
7
  - Reduced bundle size through dependency cleanup and import optimization.
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createMarkdownComponents = void 0;
6
+ exports.renderMarkdown = renderMarkdown;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _Abbreviation = require("./Abbreviation");
10
- var _reactNativeMarkdownDisplay = require("react-native-markdown-display");
10
+ var _marked = require("marked");
11
11
  var _Text = _interopRequireDefault(require("../../../../../../components/Text"));
12
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
@@ -37,133 +37,125 @@ const BoldText = ({
37
37
  }, processChildren(children));
38
38
  };
39
39
 
40
- // Helper to create text variants
41
- const createTextVariant = props => (node, children) => {
42
- return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
43
- key: node.key || `${node.type}-${node.index}`
44
- }, props, {
45
- testID: `${node.type}-${node.index}`
46
- }), children);
47
- };
48
- const createMarkdownComponents = ({
40
+ // infer the type based on our entry point for rendering tokens
41
+
42
+ /**
43
+ * Parses `content` and renders the marked token tree to React Native
44
+ * components.
45
+ *
46
+ * Recursively renders a marked token tree to React Native components. Other
47
+ * methods from marked are not suitable, as we need to build a component node
48
+ * and thread all the children into the parent element.
49
+ */
50
+ function renderMarkdown(content, {
49
51
  numberOfLines,
50
- variant,
51
- weight,
52
- color
53
- }) => {
54
- // Keep track of the first list item
55
- let isFirstListItem = true;
56
- return {
57
- // Headings
58
- heading1: createTextVariant({
59
- variant: "title-1"
60
- }),
61
- heading2: createTextVariant({
62
- variant: "title-2"
63
- }),
64
- heading3: createTextVariant({
65
- variant: "title-3"
66
- }),
67
- heading4: createTextVariant({
68
- variant: "title-4"
69
- }),
70
- heading5: createTextVariant({
71
- variant: "title-5"
72
- }),
73
- // Lists
74
- bullet_list: (node, children) => {
75
- // Reset the flag when a new list starts
76
- isFirstListItem = true;
77
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
78
- key: node.key || `${node.type}-${node.index}`,
79
- variant: variant,
80
- weight: weight,
81
- color: color,
82
- numberOfLines: numberOfLines,
83
- style: styles.bulletList,
84
- testID: `${node.type}-${node.index}`
85
- }, children);
86
- },
87
- // Links - Add detection for abbreviations in the text content
88
- link: (node, children) => {
89
- // Check if this link has a title attribute - if so, treat it as an abbreviation
90
- if (node.attributes && node.attributes.title) {
91
- return /*#__PURE__*/_react.default.createElement(_Abbreviation.Abbreviation, {
92
- key: node.key || `${node.type}-${node.index}`,
93
- title: node.attributes.title
94
- }, children);
95
- }
96
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
97
- key: node.key || `${node.type}-${node.index}`,
98
- variant: variant,
99
- weight: weight,
100
- color: color,
101
- style: styles.linkText,
102
- onPress: () => (0, _reactNativeMarkdownDisplay.openUrl)(node.attributes.href || ""),
103
- testID: `${node.type}-${node.index}`
104
- }, children);
105
- },
106
- // Custom parser for text to find potential abbreviation patterns
107
- text: node => {
108
- // If this implementation doesn't catch abbreviations, we'll need to
109
- // pre-process the markdown before passing it to the renderer
110
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
111
- key: node.key || `${node.type}-${node.index}`,
112
- variant: variant,
113
- weight: weight,
114
- color: color
115
- }, node.content);
116
- },
117
- // List items
118
- list_item: (node, children) => {
119
- // Only add \n if this is not the first item
120
- const prefix = isFirstListItem ? "" : "\n";
121
- // Set flag to false after the first item
122
- isFirstListItem = false;
123
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
124
- key: node.key || `${node.type}-${node.index}`,
125
- variant: variant || "body-3",
126
- weight: weight,
127
- color: color,
128
- testID: `${node.type}-${node.index}`
129
- }, /*#__PURE__*/_react.default.createElement(_Text.default, {
130
- variant: "body-1"
131
- }, prefix, "\u2022 "), children);
132
- },
133
- // Paragraphs
134
- paragraph: (node, children) => {
135
- return /*#__PURE__*/_react.default.createElement(_Text.default, {
136
- key: node.key || `${node.type}-${node.index}`,
137
- variant: variant,
138
- weight: weight,
139
- color: color,
140
- testID: `${node.type}-${node.index}`
141
- }, children);
142
- },
143
- strong: (node, children) => /*#__PURE__*/_react.default.createElement(BoldText, {
144
- key: node.key || `${node.type}-${node.index}`,
145
- testID: `${node.type}-${node.index}`
146
- }, children)
147
- };
148
- };
149
- exports.createMarkdownComponents = createMarkdownComponents;
52
+ ...props
53
+ }) {
54
+ const tokens = (0, _marked.lexer)(content, {
55
+ gfm: false
56
+ });
57
+ let nodeIdx = 0;
58
+ function renderTokens(tokenList) {
59
+ if (!tokenList || tokenList.length === 0) {
60
+ return null;
61
+ }
62
+ return tokenList.map(token => renderToken(token));
63
+ }
64
+ function renderToken(token) {
65
+ const id = nodeIdx++;
66
+ const key = `${token.type}-${id}`;
67
+
68
+ // general reference to child tokens for DRY-ness
69
+ const childTokens = "tokens" in token && token.tokens ? token.tokens : undefined;
70
+ switch (token.type) {
71
+ case "heading":
72
+ {
73
+ const variant = `title-${token.depth}`;
74
+ return /*#__PURE__*/_react.default.createElement(_Text.default, {
75
+ key: key,
76
+ variant: variant,
77
+ testID: `heading${token.depth}-${id}`
78
+ }, renderTokens(childTokens));
79
+ }
80
+ case "paragraph":
81
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
82
+ key: key
83
+ }, props, {
84
+ testID: `paragraph-${id}`
85
+ }), renderTokens(childTokens));
86
+ case "list":
87
+ {
88
+ // attempt to assert child items as an array, since it is typed as any
89
+ const tokenItems = token.items && Array.isArray(token.items) ? token.items : [];
90
+ const renderedItems = tokenItems.map((item, i) => {
91
+ const itemId = nodeIdx++;
92
+ const prefix = i === 0 ? "" : "\n";
93
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
94
+ key: `list_item-${itemId}`
95
+ }, props, {
96
+ variant: props.variant || "body-3",
97
+ testID: `list_item-${itemId}`
98
+ }), /*#__PURE__*/_react.default.createElement(_Text.default, {
99
+ variant: "body-1"
100
+ }, prefix, "\u2022 "), "tokens" in item ? renderTokens(item.tokens) : null);
101
+ });
102
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
103
+ key: key
104
+ }, props, {
105
+ numberOfLines: numberOfLines,
106
+ style: styles.bulletList,
107
+ testID: `bullet_list-${id}`
108
+ }), renderedItems);
109
+ }
110
+ case "strong":
111
+ return /*#__PURE__*/_react.default.createElement(BoldText, {
112
+ key: key,
113
+ testID: `strong-${id}`
114
+ }, renderTokens(childTokens));
115
+ case "text":
116
+ {
117
+ const inlineChildren = renderTokens(childTokens);
118
+ if (inlineChildren) {
119
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
120
+ key: key
121
+ }, inlineChildren);
122
+ }
123
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
124
+ key: key
125
+ }, props), token.text);
126
+ }
127
+ case "escape":
128
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
129
+ key: key
130
+ }, props), token.text);
131
+ case "link":
132
+ {
133
+ if (token.title) {
134
+ return /*#__PURE__*/_react.default.createElement(_Abbreviation.Abbreviation, {
135
+ key: key,
136
+ title: token.title
137
+ }, renderTokens(childTokens));
138
+ }
139
+ return /*#__PURE__*/_react.default.createElement(_Text.default, _extends({
140
+ key: key
141
+ }, props, {
142
+ style: styles.linkText,
143
+ onPress: () => _reactNative.Linking.openURL(token.href),
144
+ testID: `link-${id}`
145
+ }), renderTokens(childTokens));
146
+ }
147
+ default:
148
+ return null;
149
+ }
150
+ }
151
+ return renderTokens(tokens);
152
+ }
150
153
  const styles = _reactNative.StyleSheet.create({
151
154
  bulletList: {
152
155
  marginVertical: 8,
153
156
  flexDirection: "column",
154
157
  alignItems: "flex-start"
155
158
  },
156
- bulletPoint: {
157
- width: 6,
158
- height: 6,
159
- borderRadius: 3,
160
- backgroundColor: "black",
161
- marginTop: 8,
162
- marginRight: 8
163
- },
164
- listItemText: {
165
- marginBottom: 4
166
- },
167
159
  linkText: {
168
160
  textDecorationLine: "underline"
169
161
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Abbreviation","_reactNativeMarkdownDisplay","_Text","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BoldText","children","testID","processChildren","_children","React","Children","map","child","createElement","weight","isValidElement","type","Text","newProps","style","props","cloneElement","createTextVariant","node","key","index","createMarkdownComponents","numberOfLines","variant","color","isFirstListItem","heading1","heading2","heading3","heading4","heading5","bullet_list","styles","bulletList","link","attributes","title","Abbreviation","linkText","onPress","openUrl","href","text","content","list_item","prefix","paragraph","strong","exports","StyleSheet","create","marginVertical","flexDirection","alignItems","bulletPoint","width","height","borderRadius","backgroundColor","marginTop","marginRight","listItemText","marginBottom","textDecorationLine"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Abbreviation","_marked","_Text","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","BoldText","children","testID","processChildren","_children","React","Children","map","child","createElement","weight","isValidElement","type","Text","newProps","style","props","cloneElement","renderMarkdown","content","numberOfLines","tokens","lexer","gfm","nodeIdx","renderTokens","tokenList","token","renderToken","id","key","childTokens","undefined","variant","depth","tokenItems","items","Array","isArray","renderedItems","item","i","itemId","prefix","styles","bulletList","inlineChildren","Fragment","text","title","Abbreviation","linkText","onPress","Linking","openURL","href","StyleSheet","create","marginVertical","flexDirection","alignItems","textDecorationLine"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.MarkdownText = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
8
9
  var _components = require("./components");
9
10
  var _markdownPreprocessor = require("./markdownPreprocessor");
10
- var _reactNativeMarkdownDisplay = _interopRequireDefault(require("react-native-markdown-display"));
11
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  const MarkdownText = ({
13
13
  content,
@@ -16,39 +16,17 @@ const MarkdownText = ({
16
16
  weight,
17
17
  variant
18
18
  }) => {
19
- // Create style object for text properties
20
- const textStyle = {
21
- color: color
22
- };
23
-
24
- // Prepare styles for markdown
25
- const markdownStyles = {
26
- body: {
27
- ...textStyle,
28
- flexShrink: 1
29
- },
30
- paragraph: {
19
+ const preparedContent = (0, _markdownPreprocessor.preprocessMarkdown)(content);
20
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
21
+ style: {
31
22
  flexShrink: 1
32
- },
33
- // Include styles for all markdown elements that need to respect text properties
34
- text: {
35
- ...textStyle
36
23
  }
37
- };
38
-
39
- // Use the factory function to create components with numberOfLines support
40
- const customRules = (0, _components.createMarkdownComponents)({
24
+ }, (0, _components.renderMarkdown)(preparedContent, {
41
25
  numberOfLines,
42
- variant,
26
+ color,
43
27
  weight,
44
- color
45
- });
46
- // Preprocess the markdown to handle abbreviations
47
- const processedContent = (0, _markdownPreprocessor.preprocessMarkdown)(content);
48
- return /*#__PURE__*/_react.default.createElement(_reactNativeMarkdownDisplay.default, {
49
- rules: customRules,
50
- style: markdownStyles
51
- }, processedContent);
28
+ variant
29
+ }));
52
30
  };
53
31
  exports.MarkdownText = MarkdownText;
54
32
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_components","_markdownPreprocessor","_reactNativeMarkdownDisplay","e","__esModule","default","MarkdownText","content","numberOfLines","color","weight","variant","textStyle","markdownStyles","body","flexShrink","paragraph","text","customRules","createMarkdownComponents","processedContent","preprocessMarkdown","createElement","rules","style","exports"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAF,OAAA;AACA,IAAAG,2BAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAqD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAO9C,MAAMG,YAAY,GAAGA,CAAC;EAC5BC,OAAO;EACPC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACM,CAAC,KAAK;EACZ;EACA,MAAMC,SAAS,GAAG;IACjBH,KAAK,EAAEA;EACR,CAAC;;EAED;EACA,MAAMI,cAAc,GAAG;IACtBC,IAAI,EAAE;MACL,GAAGF,SAAS;MACZG,UAAU,EAAE;IACb,CAAC;IACDC,SAAS,EAAE;MACVD,UAAU,EAAE;IACb,CAAC;IACD;IACAE,IAAI,EAAE;MACL,GAAGL;IACJ;EACD,CAAC;;EAED;EACA,MAAMM,WAAW,GAAG,IAAAC,oCAAwB,EAAC;IAC5CX,aAAa;IACbG,OAAO;IACPD,MAAM;IACND;EACD,CAAC,CAAC;EACF;EACA,MAAMW,gBAAgB,GAAG,IAAAC,wCAAkB,EAACd,OAAO,CAAC;EACpD,oBACCV,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAACpB,2BAAA,CAAAG,OAAQ;IAACkB,KAAK,EAAEL,WAAY;IAACM,KAAK,EAAEX;EAAe,GAClDO,gBACQ,CAAC;AAEb,CAAC;AAACK,OAAA,CAAAnB,YAAA,GAAAA,YAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_components","_markdownPreprocessor","e","__esModule","default","MarkdownText","content","numberOfLines","color","weight","variant","preparedContent","preprocessMarkdown","createElement","View","style","flexShrink","renderMarkdown","exports"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AAA4D,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAOrD,MAAMG,YAAY,GAAGA,CAAC;EAC5BC,OAAO;EACPC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACM,CAAC,KAAK;EACZ,MAAMC,eAAe,GAAG,IAAAC,wCAAkB,EAACN,OAAO,CAAC;EAEnD,oBACCV,MAAA,CAAAQ,OAAA,CAAAS,aAAA,CAACd,YAAA,CAAAe,IAAI;IAACC,KAAK,EAAE;MAAEC,UAAU,EAAE;IAAE;EAAE,GAC7B,IAAAC,0BAAc,EAACN,eAAe,EAAE;IAChCJ,aAAa;IACbC,KAAK;IACLC,MAAM;IACNC;EACD,CAAC,CACI,CAAC;AAET,CAAC;AAACQ,OAAA,CAAAb,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -5,5 +5,5 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VERSION = void 0;
7
7
  // Version is kept in sync with package.json via the sync-version script
8
- const VERSION = exports.VERSION = "1.10.2";
8
+ const VERSION = exports.VERSION = "1.11.0";
9
9
  //# sourceMappingURL=version.js.map
@@ -1,8 +1,8 @@
1
1
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
2
  import React from "react";
3
- import { StyleSheet } from "react-native";
3
+ import { Linking, StyleSheet } from "react-native";
4
4
  import { Abbreviation } from "./Abbreviation";
5
- import { openUrl } from "react-native-markdown-display";
5
+ import { lexer } from "marked";
6
6
  import Text from "../../../../../../components/Text";
7
7
  const BoldText = ({
8
8
  children,
@@ -30,132 +30,125 @@ const BoldText = ({
30
30
  }, processChildren(children));
31
31
  };
32
32
 
33
- // Helper to create text variants
34
- const createTextVariant = props => (node, children) => {
35
- return /*#__PURE__*/React.createElement(Text, _extends({
36
- key: node.key || `${node.type}-${node.index}`
37
- }, props, {
38
- testID: `${node.type}-${node.index}`
39
- }), children);
40
- };
41
- export const createMarkdownComponents = ({
33
+ // infer the type based on our entry point for rendering tokens
34
+
35
+ /**
36
+ * Parses `content` and renders the marked token tree to React Native
37
+ * components.
38
+ *
39
+ * Recursively renders a marked token tree to React Native components. Other
40
+ * methods from marked are not suitable, as we need to build a component node
41
+ * and thread all the children into the parent element.
42
+ */
43
+ export function renderMarkdown(content, {
42
44
  numberOfLines,
43
- variant,
44
- weight,
45
- color
46
- }) => {
47
- // Keep track of the first list item
48
- let isFirstListItem = true;
49
- return {
50
- // Headings
51
- heading1: createTextVariant({
52
- variant: "title-1"
53
- }),
54
- heading2: createTextVariant({
55
- variant: "title-2"
56
- }),
57
- heading3: createTextVariant({
58
- variant: "title-3"
59
- }),
60
- heading4: createTextVariant({
61
- variant: "title-4"
62
- }),
63
- heading5: createTextVariant({
64
- variant: "title-5"
65
- }),
66
- // Lists
67
- bullet_list: (node, children) => {
68
- // Reset the flag when a new list starts
69
- isFirstListItem = true;
70
- return /*#__PURE__*/React.createElement(Text, {
71
- key: node.key || `${node.type}-${node.index}`,
72
- variant: variant,
73
- weight: weight,
74
- color: color,
75
- numberOfLines: numberOfLines,
76
- style: styles.bulletList,
77
- testID: `${node.type}-${node.index}`
78
- }, children);
79
- },
80
- // Links - Add detection for abbreviations in the text content
81
- link: (node, children) => {
82
- // Check if this link has a title attribute - if so, treat it as an abbreviation
83
- if (node.attributes && node.attributes.title) {
84
- return /*#__PURE__*/React.createElement(Abbreviation, {
85
- key: node.key || `${node.type}-${node.index}`,
86
- title: node.attributes.title
87
- }, children);
88
- }
89
- return /*#__PURE__*/React.createElement(Text, {
90
- key: node.key || `${node.type}-${node.index}`,
91
- variant: variant,
92
- weight: weight,
93
- color: color,
94
- style: styles.linkText,
95
- onPress: () => openUrl(node.attributes.href || ""),
96
- testID: `${node.type}-${node.index}`
97
- }, children);
98
- },
99
- // Custom parser for text to find potential abbreviation patterns
100
- text: node => {
101
- // If this implementation doesn't catch abbreviations, we'll need to
102
- // pre-process the markdown before passing it to the renderer
103
- return /*#__PURE__*/React.createElement(Text, {
104
- key: node.key || `${node.type}-${node.index}`,
105
- variant: variant,
106
- weight: weight,
107
- color: color
108
- }, node.content);
109
- },
110
- // List items
111
- list_item: (node, children) => {
112
- // Only add \n if this is not the first item
113
- const prefix = isFirstListItem ? "" : "\n";
114
- // Set flag to false after the first item
115
- isFirstListItem = false;
116
- return /*#__PURE__*/React.createElement(Text, {
117
- key: node.key || `${node.type}-${node.index}`,
118
- variant: variant || "body-3",
119
- weight: weight,
120
- color: color,
121
- testID: `${node.type}-${node.index}`
122
- }, /*#__PURE__*/React.createElement(Text, {
123
- variant: "body-1"
124
- }, prefix, "\u2022 "), children);
125
- },
126
- // Paragraphs
127
- paragraph: (node, children) => {
128
- return /*#__PURE__*/React.createElement(Text, {
129
- key: node.key || `${node.type}-${node.index}`,
130
- variant: variant,
131
- weight: weight,
132
- color: color,
133
- testID: `${node.type}-${node.index}`
134
- }, children);
135
- },
136
- strong: (node, children) => /*#__PURE__*/React.createElement(BoldText, {
137
- key: node.key || `${node.type}-${node.index}`,
138
- testID: `${node.type}-${node.index}`
139
- }, children)
140
- };
141
- };
45
+ ...props
46
+ }) {
47
+ const tokens = lexer(content, {
48
+ gfm: false
49
+ });
50
+ let nodeIdx = 0;
51
+ function renderTokens(tokenList) {
52
+ if (!tokenList || tokenList.length === 0) {
53
+ return null;
54
+ }
55
+ return tokenList.map(token => renderToken(token));
56
+ }
57
+ function renderToken(token) {
58
+ const id = nodeIdx++;
59
+ const key = `${token.type}-${id}`;
60
+
61
+ // general reference to child tokens for DRY-ness
62
+ const childTokens = "tokens" in token && token.tokens ? token.tokens : undefined;
63
+ switch (token.type) {
64
+ case "heading":
65
+ {
66
+ const variant = `title-${token.depth}`;
67
+ return /*#__PURE__*/React.createElement(Text, {
68
+ key: key,
69
+ variant: variant,
70
+ testID: `heading${token.depth}-${id}`
71
+ }, renderTokens(childTokens));
72
+ }
73
+ case "paragraph":
74
+ return /*#__PURE__*/React.createElement(Text, _extends({
75
+ key: key
76
+ }, props, {
77
+ testID: `paragraph-${id}`
78
+ }), renderTokens(childTokens));
79
+ case "list":
80
+ {
81
+ // attempt to assert child items as an array, since it is typed as any
82
+ const tokenItems = token.items && Array.isArray(token.items) ? token.items : [];
83
+ const renderedItems = tokenItems.map((item, i) => {
84
+ const itemId = nodeIdx++;
85
+ const prefix = i === 0 ? "" : "\n";
86
+ return /*#__PURE__*/React.createElement(Text, _extends({
87
+ key: `list_item-${itemId}`
88
+ }, props, {
89
+ variant: props.variant || "body-3",
90
+ testID: `list_item-${itemId}`
91
+ }), /*#__PURE__*/React.createElement(Text, {
92
+ variant: "body-1"
93
+ }, prefix, "\u2022 "), "tokens" in item ? renderTokens(item.tokens) : null);
94
+ });
95
+ return /*#__PURE__*/React.createElement(Text, _extends({
96
+ key: key
97
+ }, props, {
98
+ numberOfLines: numberOfLines,
99
+ style: styles.bulletList,
100
+ testID: `bullet_list-${id}`
101
+ }), renderedItems);
102
+ }
103
+ case "strong":
104
+ return /*#__PURE__*/React.createElement(BoldText, {
105
+ key: key,
106
+ testID: `strong-${id}`
107
+ }, renderTokens(childTokens));
108
+ case "text":
109
+ {
110
+ const inlineChildren = renderTokens(childTokens);
111
+ if (inlineChildren) {
112
+ return /*#__PURE__*/React.createElement(React.Fragment, {
113
+ key: key
114
+ }, inlineChildren);
115
+ }
116
+ return /*#__PURE__*/React.createElement(Text, _extends({
117
+ key: key
118
+ }, props), token.text);
119
+ }
120
+ case "escape":
121
+ return /*#__PURE__*/React.createElement(Text, _extends({
122
+ key: key
123
+ }, props), token.text);
124
+ case "link":
125
+ {
126
+ if (token.title) {
127
+ return /*#__PURE__*/React.createElement(Abbreviation, {
128
+ key: key,
129
+ title: token.title
130
+ }, renderTokens(childTokens));
131
+ }
132
+ return /*#__PURE__*/React.createElement(Text, _extends({
133
+ key: key
134
+ }, props, {
135
+ style: styles.linkText,
136
+ onPress: () => Linking.openURL(token.href),
137
+ testID: `link-${id}`
138
+ }), renderTokens(childTokens));
139
+ }
140
+ default:
141
+ return null;
142
+ }
143
+ }
144
+ return renderTokens(tokens);
145
+ }
142
146
  const styles = StyleSheet.create({
143
147
  bulletList: {
144
148
  marginVertical: 8,
145
149
  flexDirection: "column",
146
150
  alignItems: "flex-start"
147
151
  },
148
- bulletPoint: {
149
- width: 6,
150
- height: 6,
151
- borderRadius: 3,
152
- backgroundColor: "black",
153
- marginTop: 8,
154
- marginRight: 8
155
- },
156
- listItemText: {
157
- marginBottom: 4
158
- },
159
152
  linkText: {
160
153
  textDecorationLine: "underline"
161
154
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","StyleSheet","Abbreviation","openUrl","Text","BoldText","children","testID","processChildren","_children","Children","map","child","createElement","weight","isValidElement","type","newProps","style","props","cloneElement","createTextVariant","node","_extends","key","index","createMarkdownComponents","numberOfLines","variant","color","isFirstListItem","heading1","heading2","heading3","heading4","heading5","bullet_list","styles","bulletList","link","attributes","title","linkText","onPress","href","text","content","list_item","prefix","paragraph","strong","create","marginVertical","flexDirection","alignItems","bulletPoint","width","height","borderRadius","backgroundColor","marginTop","marginRight","listItemText","marginBottom","textDecorationLine"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Linking","StyleSheet","Abbreviation","lexer","Text","BoldText","children","testID","processChildren","_children","Children","map","child","createElement","weight","isValidElement","type","newProps","style","props","cloneElement","renderMarkdown","content","numberOfLines","tokens","gfm","nodeIdx","renderTokens","tokenList","length","token","renderToken","id","key","childTokens","undefined","variant","depth","_extends","tokenItems","items","Array","isArray","renderedItems","item","i","itemId","prefix","styles","bulletList","inlineChildren","Fragment","text","title","linkText","onPress","openURL","href","create","marginVertical","flexDirection","alignItems","textDecorationLine"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,EAAEC,UAAU,QAAQ,cAAc;AAClD,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,KAAK,QAAQ,QAAQ;AAC9B,OAAOC,IAAI,MAIJ,mCAAmC;AAG1C,MAAMC,QAAQ,GAAGA,CAAC;EACjBC,QAAQ;EACRC;AAID,CAAC,KAAK;EACL,MAAMC,eAAe,GAAIC,SAA0B,IAAK;IACvD,OAAOV,KAAK,CAACW,QAAQ,CAACC,GAAG,CAACF,SAAS,EAAGG,KAAK,IAAK;MAC/C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;QAC9B,oBAAOb,KAAA,CAAAc,aAAA,CAACT,IAAI;UAACU,MAAM,EAAC;QAAM,GAAEF,KAAY,CAAC;MAC1C;MAEA,IAAI,aAAAb,KAAK,CAACgB,cAAc,CAACH,KAAK,CAAC,IAAIA,KAAK,CAACI,IAAI,KAAKZ,IAAI,EAAE;QACvD,MAAMa,QAAQ,GAAG;UAChBH,MAAM,EAAE,MAAoB;UAC5BI,KAAK,EAAEN,KAAK,CAACO,KAAK,CAACD;QACpB,CAAC;QACD,oBAAOnB,KAAK,CAACqB,YAAY,CAACR,KAAK,EAAEK,QAAQ,CAAC;MAC3C;MACA,OAAOL,KAAK;IACb,CAAC,CAAC;EACH,CAAC;EACD,oBAAOb,KAAA,CAAAc,aAAA,CAACT,IAAI;IAACG,MAAM,EAAEA;EAAO,GAAEC,eAAe,CAACF,QAAQ,CAAQ,CAAC;AAChE,CAAC;;AASD;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASe,cAAcA,CAC7BC,OAAe,EACf;EAAEC,aAAa;EAAE,GAAGJ;AAAmB,CAAC,EACtB;EAClB,MAAMK,MAAM,GAAGrB,KAAK,CAACmB,OAAO,EAAE;IAAEG,GAAG,EAAE;EAAM,CAAC,CAAC;EAC7C,IAAIC,OAAO,GAAG,CAAC;EAEf,SAASC,YAAYA,CACpBC,SAAyC,EACvB;IAClB,IAAI,CAACA,SAAS,IAAIA,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;MACzC,OAAO,IAAI;IACZ;IACA,OAAOD,SAAS,CAACjB,GAAG,CAAEmB,KAAK,IAAKC,WAAW,CAACD,KAAK,CAAC,CAAC;EACpD;EAEA,SAASC,WAAWA,CAACD,KAAuB,EAAmB;IAC9D,MAAME,EAAE,GAAGN,OAAO,EAAE;IACpB,MAAMO,GAAG,GAAG,GAAGH,KAAK,CAACd,IAAI,IAAIgB,EAAE,EAAE;;IAEjC;IACA,MAAME,WAAW,GAChB,QAAQ,IAAIJ,KAAK,IAAIA,KAAK,CAACN,MAAM,GAAGM,KAAK,CAACN,MAAM,GAAGW,SAAS;IAE7D,QAAQL,KAAK,CAACd,IAAI;MACjB,KAAK,SAAS;QAAE;UACf,MAAMoB,OAAO,GAAG,SAASN,KAAK,CAACO,KAAK,EAAa;UAEjD,oBACCtC,KAAA,CAAAc,aAAA,CAACT,IAAI;YACJ6B,GAAG,EAAEA,GAAI;YACTG,OAAO,EAAEA,OAAQ;YACjB7B,MAAM,EAAE,UAAUuB,KAAK,CAACO,KAAK,IAAIL,EAAE;UAAG,GAErCL,YAAY,CAACO,WAAW,CACpB,CAAC;QAET;MAEA,KAAK,WAAW;QACf,oBACCnC,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;UAACL,GAAG,EAAEA;QAAI,GAAKd,KAAK;UAAEZ,MAAM,EAAE,aAAayB,EAAE;QAAG,IACnDL,YAAY,CAACO,WAAW,CACpB,CAAC;MAGT,KAAK,MAAM;QAAE;UACZ;UACA,MAAMK,UAA8B,GACnCT,KAAK,CAACU,KAAK,IAAIC,KAAK,CAACC,OAAO,CAACZ,KAAK,CAACU,KAAK,CAAC,GAAGV,KAAK,CAACU,KAAK,GAAG,EAAE;UAE7D,MAAMG,aAAa,GAAGJ,UAAU,CAAC5B,GAAG,CAAC,CAACiC,IAAI,EAAEC,CAAC,KAAK;YACjD,MAAMC,MAAM,GAAGpB,OAAO,EAAE;YACxB,MAAMqB,MAAM,GAAGF,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;YAElC,oBACC9C,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;cACJL,GAAG,EAAE,aAAaa,MAAM;YAAG,GACvB3B,KAAK;cACTiB,OAAO,EAAEjB,KAAK,CAACiB,OAAO,IAAI,QAAS;cACnC7B,MAAM,EAAE,aAAauC,MAAM;YAAG,iBAE9B/C,KAAA,CAAAc,aAAA,CAACT,IAAI;cAACgC,OAAO,EAAC;YAAQ,GAAEW,MAAM,EAAC,SAAQ,CAAC,EACvC,QAAQ,IAAIH,IAAI,GAAGjB,YAAY,CAACiB,IAAI,CAACpB,MAAM,CAAC,GAAG,IAC3C,CAAC;UAET,CAAC,CAAC;UAEF,oBACCzB,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;YACJL,GAAG,EAAEA;UAAI,GACLd,KAAK;YACTI,aAAa,EAAEA,aAAc;YAC7BL,KAAK,EAAE8B,MAAM,CAACC,UAAW;YACzB1C,MAAM,EAAE,eAAeyB,EAAE;UAAG,IAE3BW,aACI,CAAC;QAET;MAEA,KAAK,QAAQ;QACZ,oBACC5C,KAAA,CAAAc,aAAA,CAACR,QAAQ;UAAC4B,GAAG,EAAEA,GAAI;UAAC1B,MAAM,EAAE,UAAUyB,EAAE;QAAG,GACzCL,YAAY,CAACO,WAAW,CAChB,CAAC;MAGb,KAAK,MAAM;QAAE;UACZ,MAAMgB,cAAc,GAAGvB,YAAY,CAACO,WAAW,CAAC;UAChD,IAAIgB,cAAc,EAAE;YACnB,oBAAOnD,KAAA,CAAAc,aAAA,CAACd,KAAK,CAACoD,QAAQ;cAAClB,GAAG,EAAEA;YAAI,GAAEiB,cAA+B,CAAC;UACnE;UAEA,oBACCnD,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;YAACL,GAAG,EAAEA;UAAI,GAAKd,KAAK,GACvBW,KAAK,CAACsB,IACF,CAAC;QAET;MAEA,KAAK,QAAQ;QACZ,oBACCrD,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;UAACL,GAAG,EAAEA;QAAI,GAAKd,KAAK,GACvBW,KAAK,CAACsB,IACF,CAAC;MAGT,KAAK,MAAM;QAAE;UACZ,IAAItB,KAAK,CAACuB,KAAK,EAAE;YAChB,oBACCtD,KAAA,CAAAc,aAAA,CAACX,YAAY;cAAC+B,GAAG,EAAEA,GAAI;cAACoB,KAAK,EAAEvB,KAAK,CAACuB;YAAM,GACzC1B,YAAY,CAACO,WAAW,CACZ,CAAC;UAEjB;UAEA,oBACCnC,KAAA,CAAAc,aAAA,CAACT,IAAI,EAAAkC,QAAA;YACJL,GAAG,EAAEA;UAAI,GACLd,KAAK;YACTD,KAAK,EAAE8B,MAAM,CAACM,QAAS;YACvBC,OAAO,EAAEA,CAAA,KAAMvD,OAAO,CAACwD,OAAO,CAAC1B,KAAK,CAAC2B,IAAI,CAAE;YAC3ClD,MAAM,EAAE,QAAQyB,EAAE;UAAG,IAEpBL,YAAY,CAACO,WAAW,CACpB,CAAC;QAET;MAEA;QACC,OAAO,IAAI;IACb;EACD;EAEA,OAAOP,YAAY,CAACH,MAAM,CAAC;AAC5B;AAEA,MAAMwB,MAAM,GAAG/C,UAAU,CAACyD,MAAM,CAAC;EAChCT,UAAU,EAAE;IACXU,cAAc,EAAE,CAAC;IACjBC,aAAa,EAAE,QAAQ;IACvBC,UAAU,EAAE;EACb,CAAC;EACDP,QAAQ,EAAE;IACTQ,kBAAkB,EAAE;EACrB;AACD,CAAC,CAAC","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import { createMarkdownComponents } from "./components";
2
+ import { View } from "react-native";
3
+ import { renderMarkdown } from "./components";
3
4
  import { preprocessMarkdown } from "./markdownPreprocessor";
4
- import Markdown from "react-native-markdown-display";
5
5
  export const MarkdownText = ({
6
6
  content,
7
7
  numberOfLines,
@@ -9,38 +9,16 @@ export const MarkdownText = ({
9
9
  weight,
10
10
  variant
11
11
  }) => {
12
- // Create style object for text properties
13
- const textStyle = {
14
- color: color
15
- };
16
-
17
- // Prepare styles for markdown
18
- const markdownStyles = {
19
- body: {
20
- ...textStyle,
12
+ const preparedContent = preprocessMarkdown(content);
13
+ return /*#__PURE__*/React.createElement(View, {
14
+ style: {
21
15
  flexShrink: 1
22
- },
23
- paragraph: {
24
- flexShrink: 1
25
- },
26
- // Include styles for all markdown elements that need to respect text properties
27
- text: {
28
- ...textStyle
29
16
  }
30
- };
31
-
32
- // Use the factory function to create components with numberOfLines support
33
- const customRules = createMarkdownComponents({
17
+ }, renderMarkdown(preparedContent, {
34
18
  numberOfLines,
35
- variant,
19
+ color,
36
20
  weight,
37
- color
38
- });
39
- // Preprocess the markdown to handle abbreviations
40
- const processedContent = preprocessMarkdown(content);
41
- return /*#__PURE__*/React.createElement(Markdown, {
42
- rules: customRules,
43
- style: markdownStyles
44
- }, processedContent);
21
+ variant
22
+ }));
45
23
  };
46
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","createMarkdownComponents","preprocessMarkdown","Markdown","MarkdownText","content","numberOfLines","color","weight","variant","textStyle","markdownStyles","body","flexShrink","paragraph","text","customRules","processedContent","createElement","rules","style"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,wBAAwB,QAAQ,cAAc;AACvD,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,OAAOC,QAAQ,MAAM,+BAA+B;AAOpD,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAC5BC,OAAO;EACPC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACM,CAAC,KAAK;EACZ;EACA,MAAMC,SAAS,GAAG;IACjBH,KAAK,EAAEA;EACR,CAAC;;EAED;EACA,MAAMI,cAAc,GAAG;IACtBC,IAAI,EAAE;MACL,GAAGF,SAAS;MACZG,UAAU,EAAE;IACb,CAAC;IACDC,SAAS,EAAE;MACVD,UAAU,EAAE;IACb,CAAC;IACD;IACAE,IAAI,EAAE;MACL,GAAGL;IACJ;EACD,CAAC;;EAED;EACA,MAAMM,WAAW,GAAGf,wBAAwB,CAAC;IAC5CK,aAAa;IACbG,OAAO;IACPD,MAAM;IACND;EACD,CAAC,CAAC;EACF;EACA,MAAMU,gBAAgB,GAAGf,kBAAkB,CAACG,OAAO,CAAC;EACpD,oBACCL,KAAA,CAAAkB,aAAA,CAACf,QAAQ;IAACgB,KAAK,EAAEH,WAAY;IAACI,KAAK,EAAET;EAAe,GAClDM,gBACQ,CAAC;AAEb,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","View","renderMarkdown","preprocessMarkdown","MarkdownText","content","numberOfLines","color","weight","variant","preparedContent","createElement","style","flexShrink"],"sourceRoot":"../../../../../../../../src","sources":["capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,cAAc,QAAQ,cAAc;AAC7C,SAASC,kBAAkB,QAAQ,wBAAwB;AAO3D,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAC5BC,OAAO;EACPC,aAAa;EACbC,KAAK;EACLC,MAAM;EACNC;AACM,CAAC,KAAK;EACZ,MAAMC,eAAe,GAAGP,kBAAkB,CAACE,OAAO,CAAC;EAEnD,oBACCL,KAAA,CAAAW,aAAA,CAACV,IAAI;IAACW,KAAK,EAAE;MAAEC,UAAU,EAAE;IAAE;EAAE,GAC7BX,cAAc,CAACQ,eAAe,EAAE;IAChCJ,aAAa;IACbC,KAAK;IACLC,MAAM;IACNC;EACD,CAAC,CACI,CAAC;AAET,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  // Version is kept in sync with package.json via the sync-version script
2
- export const VERSION = "1.10.2";
2
+ export const VERSION = "1.11.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -1,10 +1,19 @@
1
- import { type RenderRules } from "react-native-markdown-display";
1
+ import React from "react";
2
2
  import { type TextWeight, type Variant } from "../../../../../../components/Text";
3
3
  import type { ThemeColors } from "../../../../../../context/ThemeProvider";
4
- export declare const createMarkdownComponents: ({ numberOfLines, variant, weight, color, }: {
4
+ export type RenderProps = {
5
5
  numberOfLines?: number;
6
6
  variant?: Variant;
7
7
  weight?: TextWeight;
8
8
  color?: keyof ThemeColors;
9
- }) => RenderRules;
9
+ };
10
+ /**
11
+ * Parses `content` and renders the marked token tree to React Native
12
+ * components.
13
+ *
14
+ * Recursively renders a marked token tree to React Native components. Other
15
+ * methods from marked are not suitable, as we need to build a component node
16
+ * and thread all the children into the parent element.
17
+ */
18
+ export declare function renderMarkdown(content: string, { numberOfLines, ...props }: RenderProps): React.ReactNode;
10
19
  //# sourceMappingURL=components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../../../../../../src/capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"names":[],"mappings":"AAGA,OAAO,EAGN,KAAK,WAAW,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAa,EAEZ,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AA0C3E,eAAO,MAAM,wBAAwB,GAAI,4CAKtC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,WAAW,CAAC;CAC1B,KAAG,WAyHH,CAAC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../../../../../../src/capabilities/ui/elements/src/components/MarkdownText/components.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAa,EAEZ,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AA4B3E,MAAM,MAAM,WAAW,GAAG;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,WAAW,CAAC;CAC1B,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC7B,OAAO,EAAE,MAAM,EACf,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,GACtC,KAAK,CAAC,SAAS,CAqIjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,WAAW,KAAM,SAAQ,SAAS;IACvC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,GAAI,qDAM1B,KAAK,sBAmCP,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/capabilities/ui/elements/src/components/MarkdownText/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,WAAW,KAAM,SAAQ,SAAS;IACvC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,YAAY,GAAI,qDAM1B,KAAK,sBAaP,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.10.2";
1
+ export declare const VERSION = "1.11.0";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneylion/react-native-offer-carousel",
3
- "version": "1.10.2",
3
+ "version": "1.11.0",
4
4
  "description": "React Native components for the Engine by MoneyLion Mobile SDK",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -59,7 +59,7 @@
59
59
  ]
60
60
  },
61
61
  "dependencies": {
62
- "radash": "11.0.0",
63
- "react-native-markdown-display": "^7.0.2"
62
+ "marked": "^18.0.3",
63
+ "radash": "11.0.0"
64
64
  }
65
65
  }
@@ -1,11 +1,7 @@
1
1
  import React from "react";
2
- import { StyleSheet } from "react-native";
2
+ import { Linking, StyleSheet } from "react-native";
3
3
  import { Abbreviation } from "./Abbreviation";
4
- import {
5
- openUrl,
6
- type ASTNode,
7
- type RenderRules,
8
- } from "react-native-markdown-display";
4
+ import { lexer } from "marked";
9
5
  import Text, {
10
6
  type TextProps,
11
7
  type TextWeight,
@@ -39,152 +35,161 @@ const BoldText = ({
39
35
  return <Text testID={testID}>{processChildren(children)}</Text>;
40
36
  };
41
37
 
42
- // Helper to create text variants
43
- const createTextVariant =
44
- (props: TextProps) => (node: ASTNode, children: React.ReactNode) => {
45
- return (
46
- <Text
47
- key={node.key || `${node.type}-${node.index}`}
48
- {...props}
49
- testID={`${node.type}-${node.index}`}
50
- >
51
- {children}
52
- </Text>
53
- );
54
- };
55
-
56
- export const createMarkdownComponents = ({
57
- numberOfLines,
58
- variant,
59
- weight,
60
- color,
61
- }: {
38
+ export type RenderProps = {
62
39
  numberOfLines?: number;
63
40
  variant?: Variant;
64
41
  weight?: TextWeight;
65
42
  color?: keyof ThemeColors;
66
- }): RenderRules => {
67
- // Keep track of the first list item
68
- let isFirstListItem = true;
69
-
70
- return {
71
- // Headings
72
- heading1: createTextVariant({ variant: "title-1" }),
73
- heading2: createTextVariant({ variant: "title-2" }),
74
- heading3: createTextVariant({ variant: "title-3" }),
75
- heading4: createTextVariant({ variant: "title-4" }),
76
- heading5: createTextVariant({ variant: "title-5" }),
77
-
78
- // Lists
79
- bullet_list: (node: ASTNode, children: React.ReactNode) => {
80
- // Reset the flag when a new list starts
81
- isFirstListItem = true;
82
- return (
83
- <Text
84
- key={node.key || `${node.type}-${node.index}`}
85
- variant={variant}
86
- weight={weight}
87
- color={color}
88
- numberOfLines={numberOfLines}
89
- style={styles.bulletList}
90
- testID={`${node.type}-${node.index}`}
91
- >
92
- {children}
93
- </Text>
94
- );
95
- },
96
-
97
- // Links - Add detection for abbreviations in the text content
98
- link: (node: ASTNode, children: React.ReactNode) => {
99
- // Check if this link has a title attribute - if so, treat it as an abbreviation
100
- if (node.attributes && node.attributes.title) {
43
+ };
44
+
45
+ // infer the type based on our entry point for rendering tokens
46
+ type AssumedTokenType = ReturnType<typeof lexer>[number];
47
+
48
+ /**
49
+ * Parses `content` and renders the marked token tree to React Native
50
+ * components.
51
+ *
52
+ * Recursively renders a marked token tree to React Native components. Other
53
+ * methods from marked are not suitable, as we need to build a component node
54
+ * and thread all the children into the parent element.
55
+ */
56
+ export function renderMarkdown(
57
+ content: string,
58
+ { numberOfLines, ...props }: RenderProps
59
+ ): React.ReactNode {
60
+ const tokens = lexer(content, { gfm: false });
61
+ let nodeIdx = 0;
62
+
63
+ function renderTokens(
64
+ tokenList: AssumedTokenType[] | undefined
65
+ ): React.ReactNode {
66
+ if (!tokenList || tokenList.length === 0) {
67
+ return null;
68
+ }
69
+ return tokenList.map((token) => renderToken(token));
70
+ }
71
+
72
+ function renderToken(token: AssumedTokenType): React.ReactNode {
73
+ const id = nodeIdx++;
74
+ const key = `${token.type}-${id}`;
75
+
76
+ // general reference to child tokens for DRY-ness
77
+ const childTokens =
78
+ "tokens" in token && token.tokens ? token.tokens : undefined;
79
+
80
+ switch (token.type) {
81
+ case "heading": {
82
+ const variant = `title-${token.depth}` as Variant;
83
+
101
84
  return (
102
- <Abbreviation
103
- key={node.key || `${node.type}-${node.index}`}
104
- title={node.attributes.title}
85
+ <Text
86
+ key={key}
87
+ variant={variant}
88
+ testID={`heading${token.depth}-${id}`}
105
89
  >
106
- {children}
107
- </Abbreviation>
90
+ {renderTokens(childTokens)}
91
+ </Text>
108
92
  );
109
93
  }
110
94
 
111
- return (
112
- <Text
113
- key={node.key || `${node.type}-${node.index}`}
114
- variant={variant}
115
- weight={weight}
116
- color={color}
117
- style={styles.linkText}
118
- onPress={() => openUrl(node.attributes.href || "")}
119
- testID={`${node.type}-${node.index}`}
120
- >
121
- {children}
122
- </Text>
123
- );
124
- },
125
-
126
- // Custom parser for text to find potential abbreviation patterns
127
- text: (node: ASTNode) => {
128
- // If this implementation doesn't catch abbreviations, we'll need to
129
- // pre-process the markdown before passing it to the renderer
130
- return (
131
- <Text
132
- key={node.key || `${node.type}-${node.index}`}
133
- variant={variant}
134
- weight={weight}
135
- color={color}
136
- >
137
- {node.content}
138
- </Text>
139
- );
140
- },
141
-
142
- // List items
143
- list_item: (node: ASTNode, children: React.ReactNode) => {
144
- // Only add \n if this is not the first item
145
- const prefix = isFirstListItem ? "" : "\n";
146
- // Set flag to false after the first item
147
- isFirstListItem = false;
148
-
149
- return (
150
- <Text
151
- key={node.key || `${node.type}-${node.index}`}
152
- variant={variant || "body-3"}
153
- weight={weight}
154
- color={color}
155
- testID={`${node.type}-${node.index}`}
156
- >
157
- <Text variant={"body-1"}>{prefix}• </Text>
158
- {children}
159
- </Text>
160
- );
161
- },
162
-
163
- // Paragraphs
164
- paragraph: (node: ASTNode, children: React.ReactNode) => {
165
- return (
166
- <Text
167
- key={node.key || `${node.type}-${node.index}`}
168
- variant={variant}
169
- weight={weight}
170
- color={color}
171
- testID={`${node.type}-${node.index}`}
172
- >
173
- {children}
174
- </Text>
175
- );
176
- },
177
-
178
- strong: (node, children) => (
179
- <BoldText
180
- key={node.key || `${node.type}-${node.index}`}
181
- testID={`${node.type}-${node.index}`}
182
- >
183
- {children}
184
- </BoldText>
185
- ),
186
- };
187
- };
95
+ case "paragraph":
96
+ return (
97
+ <Text key={key} {...props} testID={`paragraph-${id}`}>
98
+ {renderTokens(childTokens)}
99
+ </Text>
100
+ );
101
+
102
+ case "list": {
103
+ // attempt to assert child items as an array, since it is typed as any
104
+ const tokenItems: AssumedTokenType[] =
105
+ token.items && Array.isArray(token.items) ? token.items : [];
106
+
107
+ const renderedItems = tokenItems.map((item, i) => {
108
+ const itemId = nodeIdx++;
109
+ const prefix = i === 0 ? "" : "\n";
110
+
111
+ return (
112
+ <Text
113
+ key={`list_item-${itemId}`}
114
+ {...props}
115
+ variant={props.variant || "body-3"}
116
+ testID={`list_item-${itemId}`}
117
+ >
118
+ <Text variant="body-1">{prefix}• </Text>
119
+ {"tokens" in item ? renderTokens(item.tokens) : null}
120
+ </Text>
121
+ );
122
+ });
123
+
124
+ return (
125
+ <Text
126
+ key={key}
127
+ {...props}
128
+ numberOfLines={numberOfLines}
129
+ style={styles.bulletList}
130
+ testID={`bullet_list-${id}`}
131
+ >
132
+ {renderedItems}
133
+ </Text>
134
+ );
135
+ }
136
+
137
+ case "strong":
138
+ return (
139
+ <BoldText key={key} testID={`strong-${id}`}>
140
+ {renderTokens(childTokens)}
141
+ </BoldText>
142
+ );
143
+
144
+ case "text": {
145
+ const inlineChildren = renderTokens(childTokens);
146
+ if (inlineChildren) {
147
+ return <React.Fragment key={key}>{inlineChildren}</React.Fragment>;
148
+ }
149
+
150
+ return (
151
+ <Text key={key} {...props}>
152
+ {token.text}
153
+ </Text>
154
+ );
155
+ }
156
+
157
+ case "escape":
158
+ return (
159
+ <Text key={key} {...props}>
160
+ {token.text}
161
+ </Text>
162
+ );
163
+
164
+ case "link": {
165
+ if (token.title) {
166
+ return (
167
+ <Abbreviation key={key} title={token.title}>
168
+ {renderTokens(childTokens)}
169
+ </Abbreviation>
170
+ );
171
+ }
172
+
173
+ return (
174
+ <Text
175
+ key={key}
176
+ {...props}
177
+ style={styles.linkText}
178
+ onPress={() => Linking.openURL(token.href)}
179
+ testID={`link-${id}`}
180
+ >
181
+ {renderTokens(childTokens)}
182
+ </Text>
183
+ );
184
+ }
185
+
186
+ default:
187
+ return null;
188
+ }
189
+ }
190
+
191
+ return renderTokens(tokens);
192
+ }
188
193
 
189
194
  const styles = StyleSheet.create({
190
195
  bulletList: {
@@ -192,17 +197,6 @@ const styles = StyleSheet.create({
192
197
  flexDirection: "column",
193
198
  alignItems: "flex-start",
194
199
  },
195
- bulletPoint: {
196
- width: 6,
197
- height: 6,
198
- borderRadius: 3,
199
- backgroundColor: "black",
200
- marginTop: 8,
201
- marginRight: 8,
202
- },
203
- listItemText: {
204
- marginBottom: 4,
205
- },
206
200
  linkText: {
207
201
  textDecorationLine: "underline",
208
202
  },
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import { createMarkdownComponents } from "./components";
2
+ import { View } from "react-native";
3
+ import { renderMarkdown } from "./components";
3
4
  import { preprocessMarkdown } from "./markdownPreprocessor";
4
- import Markdown from "react-native-markdown-display";
5
5
  import type { TextProps } from "../../../../../../components/Text";
6
6
 
7
7
  export interface Props extends TextProps {
@@ -15,38 +15,16 @@ export const MarkdownText = ({
15
15
  weight,
16
16
  variant,
17
17
  }: Props) => {
18
- // Create style object for text properties
19
- const textStyle = {
20
- color: color,
21
- };
18
+ const preparedContent = preprocessMarkdown(content);
22
19
 
23
- // Prepare styles for markdown
24
- const markdownStyles = {
25
- body: {
26
- ...textStyle,
27
- flexShrink: 1,
28
- },
29
- paragraph: {
30
- flexShrink: 1,
31
- },
32
- // Include styles for all markdown elements that need to respect text properties
33
- text: {
34
- ...textStyle,
35
- },
36
- };
37
-
38
- // Use the factory function to create components with numberOfLines support
39
- const customRules = createMarkdownComponents({
40
- numberOfLines,
41
- variant,
42
- weight,
43
- color,
44
- });
45
- // Preprocess the markdown to handle abbreviations
46
- const processedContent = preprocessMarkdown(content);
47
20
  return (
48
- <Markdown rules={customRules} style={markdownStyles}>
49
- {processedContent}
50
- </Markdown>
21
+ <View style={{ flexShrink: 1 }}>
22
+ {renderMarkdown(preparedContent, {
23
+ numberOfLines,
24
+ color,
25
+ weight,
26
+ variant,
27
+ })}
28
+ </View>
51
29
  );
52
30
  };
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Version is kept in sync with package.json via the sync-version script
2
- export const VERSION = "1.10.2";
2
+ export const VERSION = "1.11.0";