react-native-richify 1.0.4 → 1.0.5
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/lib/commonjs/components/RenderedOutput.js +168 -0
- package/lib/commonjs/components/RenderedOutput.js.map +1 -0
- package/lib/commonjs/components/RichTextInput.js +134 -15
- package/lib/commonjs/components/RichTextInput.js.map +1 -1
- package/lib/commonjs/components/Toolbar.js +41 -2
- package/lib/commonjs/components/Toolbar.js.map +1 -1
- package/lib/commonjs/constants/defaultStyles.js +55 -1
- package/lib/commonjs/constants/defaultStyles.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.js +40 -2
- package/lib/commonjs/hooks/useFormatting.js.map +1 -1
- package/lib/commonjs/hooks/useRichText.js +75 -6
- package/lib/commonjs/hooks/useRichText.js.map +1 -1
- package/lib/commonjs/utils/formatter.js +48 -9
- package/lib/commonjs/utils/formatter.js.map +1 -1
- package/lib/commonjs/utils/parser.js +1 -1
- package/lib/commonjs/utils/parser.js.map +1 -1
- package/lib/commonjs/utils/serializer.js +102 -6
- package/lib/commonjs/utils/serializer.js.map +1 -1
- package/lib/commonjs/utils/styleMapper.js +11 -0
- package/lib/commonjs/utils/styleMapper.js.map +1 -1
- package/lib/module/components/RenderedOutput.js +163 -0
- package/lib/module/components/RenderedOutput.js.map +1 -0
- package/lib/module/components/RichTextInput.js +135 -16
- package/lib/module/components/RichTextInput.js.map +1 -1
- package/lib/module/components/Toolbar.js +41 -2
- package/lib/module/components/Toolbar.js.map +1 -1
- package/lib/module/constants/defaultStyles.js +55 -1
- package/lib/module/constants/defaultStyles.js.map +1 -1
- package/lib/module/hooks/useFormatting.js +41 -3
- package/lib/module/hooks/useFormatting.js.map +1 -1
- package/lib/module/hooks/useRichText.js +75 -6
- package/lib/module/hooks/useRichText.js.map +1 -1
- package/lib/module/utils/formatter.js +46 -9
- package/lib/module/utils/formatter.js.map +1 -1
- package/lib/module/utils/parser.js +1 -1
- package/lib/module/utils/parser.js.map +1 -1
- package/lib/module/utils/serializer.js +102 -6
- package/lib/module/utils/serializer.js.map +1 -1
- package/lib/module/utils/styleMapper.js +11 -0
- package/lib/module/utils/styleMapper.js.map +1 -1
- package/lib/typescript/src/components/RenderedOutput.d.ts +9 -0
- package/lib/typescript/src/components/RenderedOutput.d.ts.map +1 -0
- package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
- package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
- package/lib/typescript/src/constants/defaultStyles.d.ts +1 -0
- package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useFormatting.d.ts +4 -1
- package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useRichText.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +94 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/formatter.d.ts +9 -1
- package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
- package/lib/typescript/src/utils/parser.d.ts.map +1 -1
- package/lib/typescript/src/utils/serializer.d.ts.map +1 -1
- package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/RenderedOutput.tsx +231 -0
- package/src/components/RichTextInput.tsx +197 -19
- package/src/components/Toolbar.tsx +54 -2
- package/src/constants/defaultStyles.d.ts +2 -1
- package/src/constants/defaultStyles.ts +21 -0
- package/src/hooks/useFormatting.ts +76 -2
- package/src/hooks/useRichText.ts +101 -5
- package/src/index.d.ts +1 -1
- package/src/index.ts +4 -0
- package/src/types/index.d.ts +94 -1
- package/src/types/index.ts +104 -1
- package/src/utils/formatter.ts +60 -6
- package/src/utils/parser.ts +6 -1
- package/src/utils/serializer.ts +150 -8
- package/src/utils/styleMapper.ts +21 -0
|
@@ -11,7 +11,23 @@ exports.serializeSegments = serializeSegments;
|
|
|
11
11
|
*/
|
|
12
12
|
function serializeSegments(segments, format = 'markdown') {
|
|
13
13
|
const lines = splitSegmentsByLine(segments);
|
|
14
|
-
|
|
14
|
+
const blocks = [];
|
|
15
|
+
for (let index = 0; index < lines.length;) {
|
|
16
|
+
const line = lines[index];
|
|
17
|
+
const listType = getLineListType(line);
|
|
18
|
+
if (listType && listType !== 'none') {
|
|
19
|
+
const listLines = [];
|
|
20
|
+
while (index < lines.length && getLineListType(lines[index]) === listType) {
|
|
21
|
+
listLines.push(lines[index]);
|
|
22
|
+
index++;
|
|
23
|
+
}
|
|
24
|
+
blocks.push(serializeListBlock(listLines, format, listType));
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
blocks.push(serializeBlockLine(line, format));
|
|
28
|
+
index++;
|
|
29
|
+
}
|
|
30
|
+
return blocks.join('\n');
|
|
15
31
|
}
|
|
16
32
|
|
|
17
33
|
/**
|
|
@@ -32,7 +48,7 @@ function splitSegmentsByLine(segments) {
|
|
|
32
48
|
for (const segment of segments) {
|
|
33
49
|
const parts = segment.text.split('\n');
|
|
34
50
|
parts.forEach((part, index) => {
|
|
35
|
-
if (part.length > 0) {
|
|
51
|
+
if (part.length > 0 || segment.styles.imageSrc) {
|
|
36
52
|
lines[lines.length - 1]?.push({
|
|
37
53
|
text: part,
|
|
38
54
|
styles: {
|
|
@@ -47,12 +63,34 @@ function splitSegmentsByLine(segments) {
|
|
|
47
63
|
}
|
|
48
64
|
return lines;
|
|
49
65
|
}
|
|
50
|
-
function
|
|
66
|
+
function serializeListBlock(lines, format, listType) {
|
|
67
|
+
if (format === 'html' || lines.some(line => !!getLineTextAlign(line))) {
|
|
68
|
+
const tag = listType === 'ordered' ? 'ol' : 'ul';
|
|
69
|
+
const items = lines.map(line => serializeHtmlListItem(line)).join('');
|
|
70
|
+
return `<${tag}>${items}</${tag}>`;
|
|
71
|
+
}
|
|
72
|
+
return lines.map((line, index) => {
|
|
73
|
+
const marker = listType === 'ordered' ? `${index + 1}.` : '-';
|
|
74
|
+
const content = serializeLineContent(line, format);
|
|
75
|
+
return content.length > 0 ? `${marker} ${content}` : marker;
|
|
76
|
+
}).join('\n');
|
|
77
|
+
}
|
|
78
|
+
function serializeHtmlListItem(line) {
|
|
79
|
+
const content = serializeLineContent(line, 'html');
|
|
80
|
+
const styleAttribute = buildBlockStyle(getLineTextAlign(line));
|
|
81
|
+
return `<li${styleAttribute ? ` style="${styleAttribute}"` : ''}>${content}</li>`;
|
|
82
|
+
}
|
|
83
|
+
function serializeBlockLine(line, format) {
|
|
51
84
|
const heading = getLineHeading(line);
|
|
52
|
-
const
|
|
85
|
+
const textAlign = getLineTextAlign(line);
|
|
86
|
+
const content = serializeLineContent(line, format, heading);
|
|
53
87
|
if (format === 'html') {
|
|
54
88
|
const blockTag = heading ?? 'p';
|
|
55
|
-
|
|
89
|
+
const styleAttribute = buildBlockStyle(textAlign);
|
|
90
|
+
return `<${blockTag}${styleAttribute ? ` style="${styleAttribute}"` : ''}>${content}</${blockTag}>`;
|
|
91
|
+
}
|
|
92
|
+
if (textAlign) {
|
|
93
|
+
return serializeAlignedMarkdownLine(content, heading, textAlign);
|
|
56
94
|
}
|
|
57
95
|
const headingPrefix = getHeadingPrefix(heading);
|
|
58
96
|
if (!headingPrefix) {
|
|
@@ -60,15 +98,37 @@ function serializeLine(line, format) {
|
|
|
60
98
|
}
|
|
61
99
|
return content.length > 0 ? `${headingPrefix} ${content}` : headingPrefix;
|
|
62
100
|
}
|
|
101
|
+
function serializeAlignedMarkdownLine(content, heading, textAlign) {
|
|
102
|
+
const blockTag = heading ?? 'p';
|
|
103
|
+
const styleAttribute = buildBlockStyle(textAlign);
|
|
104
|
+
return `<${blockTag} style="${styleAttribute}">${content}</${blockTag}>`;
|
|
105
|
+
}
|
|
106
|
+
function serializeLineContent(line, format, lineHeading) {
|
|
107
|
+
return line.map(fragment => serializeFragment(fragment, format, lineHeading)).join('');
|
|
108
|
+
}
|
|
63
109
|
function serializeFragment(fragment, format, lineHeading) {
|
|
110
|
+
if (fragment.styles.imageSrc) {
|
|
111
|
+
return serializeImageFragment(fragment, format);
|
|
112
|
+
}
|
|
64
113
|
const normalizedStyles = {
|
|
65
114
|
...fragment.styles,
|
|
66
115
|
heading: undefined,
|
|
67
|
-
|
|
116
|
+
listType: undefined,
|
|
117
|
+
textAlign: undefined,
|
|
118
|
+
imageSrc: undefined,
|
|
119
|
+
imageAlt: undefined,
|
|
68
120
|
bold: lineHeading && lineHeading !== 'none' ? false : fragment.styles.bold
|
|
69
121
|
};
|
|
70
122
|
return format === 'html' ? serializeHtmlFragment(fragment.text, normalizedStyles) : serializeMarkdownFragment(fragment.text, normalizedStyles);
|
|
71
123
|
}
|
|
124
|
+
function serializeImageFragment(fragment, format) {
|
|
125
|
+
const source = fragment.styles.imageSrc ?? '';
|
|
126
|
+
const altText = fragment.styles.imageAlt ?? extractImageAlt(fragment.text);
|
|
127
|
+
if (format === 'html') {
|
|
128
|
+
return `<img src="${escapeHtml(source)}" alt="${escapeHtml(altText)}" />`;
|
|
129
|
+
}
|
|
130
|
+
return `})`;
|
|
131
|
+
}
|
|
72
132
|
function serializeHtmlFragment(text, styles) {
|
|
73
133
|
let result = escapeHtml(text);
|
|
74
134
|
if (styles.code) {
|
|
@@ -90,6 +150,9 @@ function serializeHtmlFragment(text, styles) {
|
|
|
90
150
|
if (styleAttribute) {
|
|
91
151
|
result = `<span style="${styleAttribute}">${result}</span>`;
|
|
92
152
|
}
|
|
153
|
+
if (styles.link) {
|
|
154
|
+
result = `<a href="${escapeHtml(styles.link)}">${result}</a>`;
|
|
155
|
+
}
|
|
93
156
|
return result;
|
|
94
157
|
}
|
|
95
158
|
function serializeMarkdownFragment(text, styles) {
|
|
@@ -113,6 +176,9 @@ function serializeMarkdownFragment(text, styles) {
|
|
|
113
176
|
if (styleAttribute) {
|
|
114
177
|
result = `<span style="${styleAttribute}">${result}</span>`;
|
|
115
178
|
}
|
|
179
|
+
if (styles.link) {
|
|
180
|
+
result = `[${result}](${escapeMarkdownUrl(styles.link)})`;
|
|
181
|
+
}
|
|
116
182
|
return result;
|
|
117
183
|
}
|
|
118
184
|
function buildInlineStyle(styles) {
|
|
@@ -128,6 +194,13 @@ function buildInlineStyle(styles) {
|
|
|
128
194
|
}
|
|
129
195
|
return cssRules.join('; ');
|
|
130
196
|
}
|
|
197
|
+
function buildBlockStyle(textAlign) {
|
|
198
|
+
const cssRules = [];
|
|
199
|
+
if (textAlign) {
|
|
200
|
+
cssRules.push(`text-align: ${textAlign}`);
|
|
201
|
+
}
|
|
202
|
+
return cssRules.join('; ');
|
|
203
|
+
}
|
|
131
204
|
function getLineHeading(line) {
|
|
132
205
|
for (const fragment of line) {
|
|
133
206
|
if (fragment.styles.heading && fragment.styles.heading !== 'none') {
|
|
@@ -136,6 +209,22 @@ function getLineHeading(line) {
|
|
|
136
209
|
}
|
|
137
210
|
return undefined;
|
|
138
211
|
}
|
|
212
|
+
function getLineListType(line) {
|
|
213
|
+
for (const fragment of line) {
|
|
214
|
+
if (fragment.styles.listType && fragment.styles.listType !== 'none') {
|
|
215
|
+
return fragment.styles.listType;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
function getLineTextAlign(line) {
|
|
221
|
+
for (const fragment of line) {
|
|
222
|
+
if (fragment.styles.textAlign) {
|
|
223
|
+
return fragment.styles.textAlign;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
139
228
|
function getHeadingPrefix(heading) {
|
|
140
229
|
switch (heading) {
|
|
141
230
|
case 'h1':
|
|
@@ -148,12 +237,19 @@ function getHeadingPrefix(heading) {
|
|
|
148
237
|
return undefined;
|
|
149
238
|
}
|
|
150
239
|
}
|
|
240
|
+
function extractImageAlt(text) {
|
|
241
|
+
const normalized = text.replace(/^\[Image:\s*/i, '').replace(/^\[Image\]/i, '').replace(/\]$/, '').trim();
|
|
242
|
+
return normalized.length > 0 ? normalized : 'image';
|
|
243
|
+
}
|
|
151
244
|
function escapeHtml(text) {
|
|
152
245
|
return text.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"').replaceAll("'", ''');
|
|
153
246
|
}
|
|
154
247
|
function escapeMarkdown(text) {
|
|
155
248
|
return text.replace(/([\\`*_~[\]])/g, '\\$1');
|
|
156
249
|
}
|
|
250
|
+
function escapeMarkdownUrl(url) {
|
|
251
|
+
return url.replaceAll(' ', '%20').replaceAll(')', '%29');
|
|
252
|
+
}
|
|
157
253
|
function wrapInlineCode(text) {
|
|
158
254
|
const matches = text.match(/`+/g);
|
|
159
255
|
const longestBacktickRun = matches?.reduce((max, match) => Math.max(max, match.length), 0) ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["serializeSegments","segments","format","lines","splitSegmentsByLine","
|
|
1
|
+
{"version":3,"names":["serializeSegments","segments","format","lines","splitSegmentsByLine","blocks","index","length","line","listType","getLineListType","listLines","push","serializeListBlock","serializeBlockLine","join","segmentsToMarkdown","segmentsToHTML","segment","parts","text","split","forEach","part","styles","imageSrc","some","getLineTextAlign","tag","items","map","serializeHtmlListItem","marker","content","serializeLineContent","styleAttribute","buildBlockStyle","heading","getLineHeading","textAlign","blockTag","serializeAlignedMarkdownLine","headingPrefix","getHeadingPrefix","lineHeading","fragment","serializeFragment","serializeImageFragment","normalizedStyles","undefined","imageAlt","bold","serializeHtmlFragment","serializeMarkdownFragment","source","altText","extractImageAlt","escapeHtml","escapeMarkdown","escapeMarkdownUrl","result","code","italic","underline","strikethrough","buildInlineStyle","link","wrapInlineCode","cssRules","color","backgroundColor","fontSize","normalized","replace","trim","replaceAll","url","matches","match","longestBacktickRun","reduce","max","Math","fence","repeat"],"sourceRoot":"../../../src","sources":["utils/serializer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -56,6 +56,9 @@ function formatStyleToTextStyle(formatStyle, theme) {
|
|
|
56
56
|
if (formatStyle.fontSize) {
|
|
57
57
|
style.fontSize = formatStyle.fontSize;
|
|
58
58
|
}
|
|
59
|
+
if (formatStyle.textAlign) {
|
|
60
|
+
style.textAlign = formatStyle.textAlign;
|
|
61
|
+
}
|
|
59
62
|
|
|
60
63
|
// Heading — overrides font size and weight
|
|
61
64
|
if (formatStyle.heading && formatStyle.heading !== 'none') {
|
|
@@ -63,6 +66,14 @@ function formatStyleToTextStyle(formatStyle, theme) {
|
|
|
63
66
|
style.fontWeight = 'bold';
|
|
64
67
|
style.lineHeight = _defaultStyles.HEADING_FONT_SIZES[formatStyle.heading] * 1.3;
|
|
65
68
|
}
|
|
69
|
+
if (formatStyle.link) {
|
|
70
|
+
style.color = style.color ?? resolvedTheme.colors?.link ?? _defaultStyles.DEFAULT_THEME.colors?.link ?? _defaultStyles.DEFAULT_THEME.colors?.primary;
|
|
71
|
+
if (style.textDecorationLine === 'line-through') {
|
|
72
|
+
style.textDecorationLine = 'underline line-through';
|
|
73
|
+
} else if (!style.textDecorationLine || style.textDecorationLine === 'none') {
|
|
74
|
+
style.textDecorationLine = 'underline';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
66
77
|
return style;
|
|
67
78
|
}
|
|
68
79
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_defaultStyles","require","formatStyleToTextStyle","formatStyle","theme","resolvedTheme","DEFAULT_THEME","style","bold","fontWeight","italic","fontStyle","underline","strikethrough","textDecorationLine","code","codeStyle","Object","assign","color","backgroundColor","fontSize","heading","HEADING_FONT_SIZES","lineHeight","segmentToTextStyle","segment","baseStyle","baseTextStyle","styles","segmentsToTextStyles","segments","map","seg"],"sourceRoot":"../../../src","sources":["utils/styleMapper.ts"],"mappings":";;;;;;;;AAEA,IAAAA,cAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,WAAwB,EACxBC,KAAqB,EACV;EACX,MAAMC,aAAa,GAAGD,KAAK,IAAIE,4BAAa;EAC5C,MAAMC,KAAgB,GAAG,CAAC,CAAC;;EAE3B;EACA,IAAIJ,WAAW,CAACK,IAAI,EAAE;IACpBD,KAAK,CAACE,UAAU,GAAG,MAAM;EAC3B;;EAEA;EACA,IAAIN,WAAW,CAACO,MAAM,EAAE;IACtBH,KAAK,CAACI,SAAS,GAAG,QAAQ;EAC5B;;EAEA;EACA,IAAIR,WAAW,CAACS,SAAS,IAAIT,WAAW,CAACU,aAAa,EAAE;IACtDN,KAAK,CAACO,kBAAkB,GAAG,wBAAwB;EACrD,CAAC,MAAM,IAAIX,WAAW,CAACS,SAAS,EAAE;IAChCL,KAAK,CAACO,kBAAkB,GAAG,WAAW;EACxC,CAAC,MAAM,IAAIX,WAAW,CAACU,aAAa,EAAE;IACpCN,KAAK,CAACO,kBAAkB,GAAG,cAAc;EAC3C;;EAEA;EACA,IAAIX,WAAW,CAACY,IAAI,EAAE;IACpB,MAAMC,SAAS,GAAGX,aAAa,CAACW,SAAS,IAAIV,4BAAa,CAACU,SAAS;IACpE,IAAIA,SAAS,EAAE;MACbC,MAAM,CAACC,MAAM,CAACX,KAAK,EAAES,SAAS,CAAC;IACjC;EACF;;EAEA;EACA,IAAIb,WAAW,CAACgB,KAAK,EAAE;IACrBZ,KAAK,CAACY,KAAK,GAAGhB,WAAW,CAACgB,KAAK;EACjC;;EAEA;EACA,IAAIhB,WAAW,CAACiB,eAAe,EAAE;IAC/Bb,KAAK,CAACa,eAAe,GAAGjB,WAAW,CAACiB,eAAe;EACrD;;EAEA;EACA,IAAIjB,WAAW,CAACkB,QAAQ,EAAE;IACxBd,KAAK,CAACc,QAAQ,GAAGlB,WAAW,CAACkB,QAAQ;EACvC;;EAEA;EACA,
|
|
1
|
+
{"version":3,"names":["_defaultStyles","require","formatStyleToTextStyle","formatStyle","theme","resolvedTheme","DEFAULT_THEME","style","bold","fontWeight","italic","fontStyle","underline","strikethrough","textDecorationLine","code","codeStyle","Object","assign","color","backgroundColor","fontSize","textAlign","heading","HEADING_FONT_SIZES","lineHeight","link","colors","primary","segmentToTextStyle","segment","baseStyle","baseTextStyle","styles","segmentsToTextStyles","segments","map","seg"],"sourceRoot":"../../../src","sources":["utils/styleMapper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import { Image, StyleSheet, Text, View } from 'react-native';
|
|
5
|
+
import { DEFAULT_THEME } from '../constants/defaultStyles';
|
|
6
|
+
import { segmentToTextStyle } from '../utils/styleMapper';
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
export const RenderedOutput = /*#__PURE__*/React.memo(({
|
|
9
|
+
segments,
|
|
10
|
+
theme
|
|
11
|
+
}) => {
|
|
12
|
+
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
13
|
+
const lines = useMemo(() => splitSegmentsByLine(segments), [segments]);
|
|
14
|
+
let orderedIndex = 0;
|
|
15
|
+
return /*#__PURE__*/_jsx(View, {
|
|
16
|
+
style: [styles.container, resolvedTheme.renderedOutputStyle ?? DEFAULT_THEME.renderedOutputStyle],
|
|
17
|
+
children: lines.map((line, lineIndex) => {
|
|
18
|
+
const listType = getLineStyle(line, 'listType');
|
|
19
|
+
const textAlign = getLineStyle(line, 'textAlign');
|
|
20
|
+
const marker = listType === 'bullet' ? '\u2022' : listType === 'ordered' ? `${orderedIndex + 1}.` : undefined;
|
|
21
|
+
orderedIndex = listType === 'ordered' ? orderedIndex + 1 : 0;
|
|
22
|
+
const textFragments = line.filter(fragment => !fragment.styles.imageSrc && fragment.text.length > 0);
|
|
23
|
+
const imageFragments = line.filter(fragment => !!fragment.styles.imageSrc);
|
|
24
|
+
const contentAlignStyle = textAlign === 'center' ? styles.alignCenter : textAlign === 'right' ? styles.alignRight : styles.alignLeft;
|
|
25
|
+
if (textFragments.length === 0 && imageFragments.length === 0) {
|
|
26
|
+
return /*#__PURE__*/_jsx(View, {
|
|
27
|
+
style: [styles.emptyLine, contentAlignStyle]
|
|
28
|
+
}, `line-${lineIndex}`);
|
|
29
|
+
}
|
|
30
|
+
const textNode = textFragments.length > 0 ? /*#__PURE__*/_jsx(Text, {
|
|
31
|
+
style: [resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle, textAlign ? {
|
|
32
|
+
textAlign
|
|
33
|
+
} : undefined],
|
|
34
|
+
children: textFragments.map((fragment, fragmentIndex) => /*#__PURE__*/_jsx(Text, {
|
|
35
|
+
style: segmentToTextStyle(fragment, resolvedTheme),
|
|
36
|
+
children: fragment.text
|
|
37
|
+
}, `text-${lineIndex}-${fragmentIndex}`))
|
|
38
|
+
}) : null;
|
|
39
|
+
const imageNodes = imageFragments.map((fragment, fragmentIndex) => /*#__PURE__*/_jsxs(View, {
|
|
40
|
+
style: styles.imageBlock,
|
|
41
|
+
children: [/*#__PURE__*/_jsx(Image, {
|
|
42
|
+
source: {
|
|
43
|
+
uri: fragment.styles.imageSrc
|
|
44
|
+
},
|
|
45
|
+
style: styles.image,
|
|
46
|
+
resizeMode: "contain"
|
|
47
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
48
|
+
style: [styles.imageCaption, resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle, textAlign ? {
|
|
49
|
+
textAlign
|
|
50
|
+
} : undefined],
|
|
51
|
+
children: fragment.styles.imageAlt ?? extractImageAlt(fragment.text)
|
|
52
|
+
})]
|
|
53
|
+
}, `image-${lineIndex}-${fragmentIndex}`));
|
|
54
|
+
const content = /*#__PURE__*/_jsxs(View, {
|
|
55
|
+
style: [styles.lineContent, contentAlignStyle],
|
|
56
|
+
children: [textNode, imageNodes]
|
|
57
|
+
});
|
|
58
|
+
if (!marker) {
|
|
59
|
+
return /*#__PURE__*/_jsx(View, {
|
|
60
|
+
style: styles.line,
|
|
61
|
+
children: content
|
|
62
|
+
}, `line-${lineIndex}`);
|
|
63
|
+
}
|
|
64
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
65
|
+
style: styles.listLine,
|
|
66
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
67
|
+
style: [styles.listMarker, resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle],
|
|
68
|
+
children: marker
|
|
69
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
70
|
+
style: styles.listContent,
|
|
71
|
+
children: content
|
|
72
|
+
})]
|
|
73
|
+
}, `line-${lineIndex}`);
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
RenderedOutput.displayName = 'RenderedOutput';
|
|
78
|
+
function splitSegmentsByLine(segments) {
|
|
79
|
+
const lines = [[]];
|
|
80
|
+
for (const segment of segments) {
|
|
81
|
+
const parts = segment.text.split('\n');
|
|
82
|
+
parts.forEach((part, index) => {
|
|
83
|
+
if (part.length > 0 || segment.styles.imageSrc) {
|
|
84
|
+
lines[lines.length - 1]?.push({
|
|
85
|
+
text: part,
|
|
86
|
+
styles: {
|
|
87
|
+
...segment.styles
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (index < parts.length - 1) {
|
|
92
|
+
lines.push([]);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return lines;
|
|
97
|
+
}
|
|
98
|
+
function getLineStyle(line, key) {
|
|
99
|
+
for (const fragment of line) {
|
|
100
|
+
const value = fragment.styles[key];
|
|
101
|
+
if (value !== undefined) {
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
function extractImageAlt(text) {
|
|
108
|
+
const normalized = text.replace(/^\[Image:\s*/i, '').replace(/^\[Image\]/i, '').replace(/\]$/, '').trim();
|
|
109
|
+
return normalized.length > 0 ? normalized : 'image';
|
|
110
|
+
}
|
|
111
|
+
const styles = StyleSheet.create({
|
|
112
|
+
container: {
|
|
113
|
+
gap: 10
|
|
114
|
+
},
|
|
115
|
+
line: {
|
|
116
|
+
width: '100%'
|
|
117
|
+
},
|
|
118
|
+
lineContent: {
|
|
119
|
+
width: '100%',
|
|
120
|
+
gap: 8
|
|
121
|
+
},
|
|
122
|
+
listLine: {
|
|
123
|
+
width: '100%',
|
|
124
|
+
flexDirection: 'row',
|
|
125
|
+
alignItems: 'flex-start',
|
|
126
|
+
gap: 8
|
|
127
|
+
},
|
|
128
|
+
listMarker: {
|
|
129
|
+
minWidth: 20,
|
|
130
|
+
paddingTop: 1
|
|
131
|
+
},
|
|
132
|
+
listContent: {
|
|
133
|
+
flex: 1
|
|
134
|
+
},
|
|
135
|
+
alignLeft: {
|
|
136
|
+
alignItems: 'flex-start'
|
|
137
|
+
},
|
|
138
|
+
alignCenter: {
|
|
139
|
+
alignItems: 'center'
|
|
140
|
+
},
|
|
141
|
+
alignRight: {
|
|
142
|
+
alignItems: 'flex-end'
|
|
143
|
+
},
|
|
144
|
+
emptyLine: {
|
|
145
|
+
minHeight: 20,
|
|
146
|
+
width: '100%'
|
|
147
|
+
},
|
|
148
|
+
imageBlock: {
|
|
149
|
+
width: '100%',
|
|
150
|
+
gap: 6
|
|
151
|
+
},
|
|
152
|
+
image: {
|
|
153
|
+
width: '100%',
|
|
154
|
+
height: 160,
|
|
155
|
+
borderRadius: 10,
|
|
156
|
+
backgroundColor: '#E5E7EB'
|
|
157
|
+
},
|
|
158
|
+
imageCaption: {
|
|
159
|
+
fontSize: 13,
|
|
160
|
+
opacity: 0.8
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=RenderedOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useMemo","Image","StyleSheet","Text","View","DEFAULT_THEME","segmentToTextStyle","jsx","_jsx","jsxs","_jsxs","RenderedOutput","memo","segments","theme","resolvedTheme","lines","splitSegmentsByLine","orderedIndex","style","styles","container","renderedOutputStyle","children","map","line","lineIndex","listType","getLineStyle","textAlign","marker","undefined","textFragments","filter","fragment","imageSrc","text","length","imageFragments","contentAlignStyle","alignCenter","alignRight","alignLeft","emptyLine","textNode","baseTextStyle","fragmentIndex","imageNodes","imageBlock","source","uri","image","resizeMode","imageCaption","imageAlt","extractImageAlt","content","lineContent","listLine","listMarker","listContent","displayName","segment","parts","split","forEach","part","index","push","key","value","normalized","replace","trim","create","gap","width","flexDirection","alignItems","minWidth","paddingTop","flex","minHeight","height","borderRadius","backgroundColor","fontSize","opacity"],"sourceRoot":"../../../src","sources":["components/RenderedOutput.tsx"],"mappings":"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","ignoreList":[]}
|