react-native-richify 1.0.3 → 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 +196 -52
- 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 +81 -2
- package/lib/commonjs/constants/defaultStyles.js.map +1 -1
- package/lib/commonjs/hooks/useFormatting.js +46 -2
- package/lib/commonjs/hooks/useFormatting.js.map +1 -1
- package/lib/commonjs/hooks/useRichText.js +130 -12
- package/lib/commonjs/hooks/useRichText.js.map +1 -1
- package/lib/commonjs/index.d.js +19 -0
- package/lib/commonjs/index.d.js.map +1 -1
- package/lib/commonjs/index.js +19 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/formatter.js +48 -12
- 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.d.js +6 -0
- package/lib/commonjs/utils/serializer.d.js.map +1 -0
- package/lib/commonjs/utils/serializer.js +259 -0
- package/lib/commonjs/utils/serializer.js.map +1 -0
- 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 +198 -55
- 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 +81 -2
- package/lib/module/constants/defaultStyles.js.map +1 -1
- package/lib/module/hooks/useFormatting.js +47 -3
- package/lib/module/hooks/useFormatting.js.map +1 -1
- package/lib/module/hooks/useRichText.js +130 -12
- package/lib/module/hooks/useRichText.js.map +1 -1
- package/lib/module/index.d.js +1 -0
- package/lib/module/index.d.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/formatter.js +46 -12
- 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.d.js +4 -0
- package/lib/module/utils/serializer.d.js.map +1 -0
- package/lib/module/utils/serializer.js +253 -0
- package/lib/module/utils/serializer.js.map +1 -0
- 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 +2 -13
- 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 +3 -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 +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +112 -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 +14 -0
- package/lib/typescript/src/utils/serializer.d.ts.map +1 -0
- 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.d.ts +3 -14
- package/src/components/RichTextInput.tsx +291 -56
- package/src/components/Toolbar.tsx +54 -2
- package/src/constants/defaultStyles.d.ts +3 -0
- package/src/constants/defaultStyles.ts +47 -1
- package/src/hooks/useFormatting.ts +89 -2
- package/src/hooks/useRichText.ts +193 -11
- package/src/index.d.ts +2 -1
- package/src/index.ts +10 -0
- package/src/types/index.d.ts +112 -1
- package/src/types/index.ts +123 -1
- package/src/utils/formatter.ts +60 -10
- package/src/utils/parser.ts +6 -1
- package/src/utils/serializer.d.ts +13 -0
- package/src/utils/serializer.ts +365 -0
- package/src/utils/styleMapper.ts +21 -0
|
@@ -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":[]}
|
|
@@ -1,31 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useEffect, useCallback } from 'react';
|
|
4
|
-
import {
|
|
3
|
+
import React, { useEffect, useCallback, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Animated, Easing, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';
|
|
5
5
|
import { DEFAULT_THEME } from '../constants/defaultStyles';
|
|
6
|
-
import { segmentsToPlainText } from '../utils/parser';
|
|
7
6
|
import { useRichText } from '../hooks/useRichText';
|
|
8
|
-
import {
|
|
7
|
+
import { segmentsToPlainText } from '../utils/parser';
|
|
8
|
+
import { serializeSegments } from '../utils/serializer';
|
|
9
|
+
import { RenderedOutput } from './RenderedOutput';
|
|
9
10
|
import { Toolbar } from './Toolbar';
|
|
11
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
const DEFAULT_OUTPUT_PANEL_MAX_HEIGHT = 180;
|
|
13
|
+
const isJestRuntime = typeof globalThis.process?.env?.JEST_WORKER_ID === 'string';
|
|
10
14
|
|
|
11
15
|
/**
|
|
12
16
|
* RichTextInput — The main rich text editor component.
|
|
13
17
|
*
|
|
14
|
-
* Uses the
|
|
15
|
-
*
|
|
16
|
-
* - A styled `<Text>` layer behind it renders the formatted content
|
|
17
|
-
* - Both share identical font metrics for pixel-perfect alignment
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```tsx
|
|
21
|
-
* <RichTextInput
|
|
22
|
-
* placeholder="Start typing..."
|
|
23
|
-
* showToolbar
|
|
24
|
-
* onChangeSegments={(segments) => console.log(segments)}
|
|
25
|
-
* />
|
|
26
|
-
* ```
|
|
18
|
+
* Uses a plain `TextInput` for editing and renders the serialized rich output
|
|
19
|
+
* below it as Markdown or HTML.
|
|
27
20
|
*/
|
|
28
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
21
|
export const RichTextInput = ({
|
|
30
22
|
initialSegments,
|
|
31
23
|
onChangeSegments,
|
|
@@ -37,6 +29,17 @@ export const RichTextInput = ({
|
|
|
37
29
|
toolbarPosition = 'top',
|
|
38
30
|
toolbarItems,
|
|
39
31
|
theme,
|
|
32
|
+
showOutputPreview = true,
|
|
33
|
+
outputFormat,
|
|
34
|
+
defaultOutputFormat = 'markdown',
|
|
35
|
+
outputPreviewMode,
|
|
36
|
+
defaultOutputPreviewMode = 'literal',
|
|
37
|
+
maxOutputHeight = DEFAULT_OUTPUT_PANEL_MAX_HEIGHT,
|
|
38
|
+
onChangeOutput,
|
|
39
|
+
onChangeOutputFormat,
|
|
40
|
+
onChangeOutputPreviewMode,
|
|
41
|
+
onRequestLink,
|
|
42
|
+
onRequestImage,
|
|
40
43
|
multiline = true,
|
|
41
44
|
minHeight = 120,
|
|
42
45
|
maxHeight,
|
|
@@ -46,6 +49,10 @@ export const RichTextInput = ({
|
|
|
46
49
|
onReady
|
|
47
50
|
}) => {
|
|
48
51
|
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
52
|
+
const previewProgress = useRef(new Animated.Value(0)).current;
|
|
53
|
+
const [internalOutputFormat, setInternalOutputFormat] = useState(defaultOutputFormat);
|
|
54
|
+
const [internalOutputPreviewMode, setInternalOutputPreviewMode] = useState(defaultOutputPreviewMode);
|
|
55
|
+
const [contentHeight, setContentHeight] = useState(minHeight);
|
|
49
56
|
const {
|
|
50
57
|
state,
|
|
51
58
|
actions
|
|
@@ -54,16 +61,37 @@ export const RichTextInput = ({
|
|
|
54
61
|
onChangeSegments,
|
|
55
62
|
onChangeText
|
|
56
63
|
});
|
|
57
|
-
|
|
58
|
-
// Expose actions via onReady callback
|
|
59
64
|
useEffect(() => {
|
|
60
65
|
onReady?.(actions);
|
|
61
|
-
}, [
|
|
62
|
-
|
|
63
|
-
// Build plain text for the TextInput value
|
|
66
|
+
}, [actions, onReady]);
|
|
64
67
|
const plainText = segmentsToPlainText(state.segments);
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
const resolvedOutputFormat = outputFormat ?? internalOutputFormat;
|
|
69
|
+
const resolvedOutputPreviewMode = outputPreviewMode ?? internalOutputPreviewMode;
|
|
70
|
+
const inputHeight = Math.max(minHeight, typeof maxHeight === 'number' ? Math.min(contentHeight, maxHeight) : contentHeight);
|
|
71
|
+
const shouldScrollInput = typeof maxHeight === 'number' && contentHeight > maxHeight;
|
|
72
|
+
const serializedOutput = useMemo(() => serializeSegments(state.segments, resolvedOutputFormat), [resolvedOutputFormat, state.segments]);
|
|
73
|
+
const shouldShowOutputPreview = showOutputPreview && plainText.length > 0;
|
|
74
|
+
const normalizedSelection = useMemo(() => ({
|
|
75
|
+
start: Math.min(state.selection.start, state.selection.end),
|
|
76
|
+
end: Math.max(state.selection.start, state.selection.end)
|
|
77
|
+
}), [state.selection.end, state.selection.start]);
|
|
78
|
+
const selectedText = useMemo(() => plainText.slice(normalizedSelection.start, normalizedSelection.end), [normalizedSelection.end, normalizedSelection.start, plainText]);
|
|
79
|
+
const selectionStyle = useMemo(() => actions.getSelectionStyle(), [actions, state.activeStyles, state.segments, state.selection]);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
onChangeOutput?.(serializedOutput, resolvedOutputFormat);
|
|
82
|
+
}, [onChangeOutput, resolvedOutputFormat, serializedOutput]);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (isJestRuntime) {
|
|
85
|
+
previewProgress.setValue(shouldShowOutputPreview ? 1 : 0);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
Animated.timing(previewProgress, {
|
|
89
|
+
toValue: shouldShowOutputPreview ? 1 : 0,
|
|
90
|
+
duration: 180,
|
|
91
|
+
easing: Easing.out(Easing.cubic),
|
|
92
|
+
useNativeDriver: false
|
|
93
|
+
}).start();
|
|
94
|
+
}, [previewProgress, shouldShowOutputPreview]);
|
|
67
95
|
const onSelectionChange = useCallback(e => {
|
|
68
96
|
const {
|
|
69
97
|
start,
|
|
@@ -74,30 +102,103 @@ export const RichTextInput = ({
|
|
|
74
102
|
end
|
|
75
103
|
});
|
|
76
104
|
}, [actions]);
|
|
77
|
-
|
|
78
|
-
|
|
105
|
+
const onContentSizeChange = useCallback(e => {
|
|
106
|
+
setContentHeight(Math.ceil(e.nativeEvent.contentSize.height));
|
|
107
|
+
textInputProps?.onContentSizeChange?.(e);
|
|
108
|
+
}, [textInputProps]);
|
|
109
|
+
const handleOutputFormatChange = useCallback(format => {
|
|
110
|
+
if (outputFormat === undefined) {
|
|
111
|
+
setInternalOutputFormat(format);
|
|
112
|
+
}
|
|
113
|
+
onChangeOutputFormat?.(format);
|
|
114
|
+
}, [onChangeOutputFormat, outputFormat]);
|
|
115
|
+
const handleOutputPreviewModeChange = useCallback(mode => {
|
|
116
|
+
if (outputPreviewMode === undefined) {
|
|
117
|
+
setInternalOutputPreviewMode(mode);
|
|
118
|
+
}
|
|
119
|
+
onChangeOutputPreviewMode?.(mode);
|
|
120
|
+
}, [onChangeOutputPreviewMode, outputPreviewMode]);
|
|
121
|
+
const handleRequestLink = useCallback(() => {
|
|
122
|
+
if (onRequestLink) {
|
|
123
|
+
onRequestLink({
|
|
124
|
+
selectedText,
|
|
125
|
+
currentUrl: selectionStyle.link,
|
|
126
|
+
applyLink: actions.setLink
|
|
127
|
+
});
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (selectionStyle.link) {
|
|
131
|
+
actions.setLink(undefined);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const detectedUrl = detectLinkTarget(selectedText);
|
|
135
|
+
if (detectedUrl) {
|
|
136
|
+
actions.setLink(detectedUrl);
|
|
137
|
+
}
|
|
138
|
+
}, [actions, onRequestLink, selectedText, selectionStyle.link]);
|
|
139
|
+
const handleRequestImage = useCallback(() => {
|
|
140
|
+
if (onRequestImage) {
|
|
141
|
+
onRequestImage({
|
|
142
|
+
insertImage: actions.insertImage
|
|
143
|
+
});
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const detectedSource = detectImageSource(selectedText);
|
|
147
|
+
if (detectedSource) {
|
|
148
|
+
actions.insertImage(detectedSource, {
|
|
149
|
+
alt: selectedText.trim() || undefined
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}, [actions, onRequestImage, selectedText]);
|
|
153
|
+
const outputLabel = useMemo(() => {
|
|
154
|
+
const formatLabel = resolvedOutputFormat === 'html' ? 'HTML' : 'Markdown';
|
|
155
|
+
if (resolvedOutputPreviewMode === 'rendered') {
|
|
156
|
+
return `${formatLabel} preview`;
|
|
157
|
+
}
|
|
158
|
+
return `${formatLabel} output`;
|
|
159
|
+
}, [resolvedOutputFormat, resolvedOutputPreviewMode]);
|
|
79
160
|
const containerStyle = [resolvedTheme.containerStyle ?? DEFAULT_THEME.containerStyle];
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
maxHeight
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
161
|
+
const inputAreaStyle = [styles.inputArea];
|
|
162
|
+
const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? DEFAULT_THEME.inputStyle, {
|
|
163
|
+
height: inputHeight
|
|
164
|
+
}, textInputProps?.style];
|
|
165
|
+
const outputAnimatedStyle = {
|
|
166
|
+
maxHeight: previewProgress.interpolate({
|
|
167
|
+
inputRange: [0, 1],
|
|
168
|
+
outputRange: [0, maxOutputHeight + 72]
|
|
169
|
+
}),
|
|
170
|
+
opacity: previewProgress,
|
|
171
|
+
marginTop: previewProgress.interpolate({
|
|
172
|
+
inputRange: [0, 1],
|
|
173
|
+
outputRange: [0, 12]
|
|
174
|
+
}),
|
|
175
|
+
marginBottom: previewProgress.interpolate({
|
|
176
|
+
inputRange: [0, 1],
|
|
177
|
+
outputRange: [0, 16]
|
|
178
|
+
}),
|
|
179
|
+
transform: [{
|
|
180
|
+
translateY: previewProgress.interpolate({
|
|
181
|
+
inputRange: [0, 1],
|
|
182
|
+
outputRange: [-8, 0]
|
|
183
|
+
})
|
|
184
|
+
}]
|
|
185
|
+
};
|
|
186
|
+
const outputContainerStyle = [resolvedTheme.outputContainerStyle ?? DEFAULT_THEME.outputContainerStyle];
|
|
187
|
+
const outputLabelStyle = [resolvedTheme.outputLabelStyle ?? DEFAULT_THEME.outputLabelStyle];
|
|
188
|
+
const outputTextStyle = [resolvedTheme.outputTextStyle ?? DEFAULT_THEME.outputTextStyle];
|
|
92
189
|
const toolbarComponent = showToolbar ? /*#__PURE__*/_jsx(Toolbar, {
|
|
93
190
|
actions: actions,
|
|
94
191
|
state: state,
|
|
95
192
|
items: toolbarItems,
|
|
96
193
|
theme: resolvedTheme,
|
|
194
|
+
outputFormat: resolvedOutputFormat,
|
|
195
|
+
outputPreviewMode: resolvedOutputPreviewMode,
|
|
196
|
+
onOutputFormatChange: handleOutputFormatChange,
|
|
197
|
+
onOutputPreviewModeChange: handleOutputPreviewModeChange,
|
|
198
|
+
onRequestLink: handleRequestLink,
|
|
199
|
+
onRequestImage: handleRequestImage,
|
|
97
200
|
renderToolbar: renderToolbar
|
|
98
201
|
}) : null;
|
|
99
|
-
|
|
100
|
-
// Toolbar border
|
|
101
202
|
const toolbarBorderStyle = toolbarPosition === 'top' ? {
|
|
102
203
|
borderBottomWidth: 1,
|
|
103
204
|
borderBottomColor: resolvedTheme.colors?.toolbarBorder ?? DEFAULT_THEME.colors?.toolbarBorder
|
|
@@ -112,26 +213,45 @@ export const RichTextInput = ({
|
|
|
112
213
|
children: toolbarComponent
|
|
113
214
|
}), /*#__PURE__*/_jsxs(View, {
|
|
114
215
|
style: inputAreaStyle,
|
|
115
|
-
children: [/*#__PURE__*/_jsx(
|
|
116
|
-
segments: state.segments,
|
|
117
|
-
baseTextStyle: resolvedTheme.baseTextStyle,
|
|
118
|
-
theme: resolvedTheme
|
|
119
|
-
}), /*#__PURE__*/_jsx(TextInput, {
|
|
216
|
+
children: [/*#__PURE__*/_jsx(TextInput, {
|
|
120
217
|
...textInputProps,
|
|
121
218
|
style: inputStyle,
|
|
122
219
|
value: plainText,
|
|
123
220
|
onChangeText: actions.handleTextChange,
|
|
124
221
|
onSelectionChange: onSelectionChange,
|
|
222
|
+
onContentSizeChange: onContentSizeChange,
|
|
125
223
|
multiline: multiline,
|
|
126
224
|
placeholder: placeholder,
|
|
127
225
|
placeholderTextColor: resolvedTheme.colors?.placeholder ?? DEFAULT_THEME.colors?.placeholder,
|
|
128
226
|
editable: editable,
|
|
129
227
|
maxLength: maxLength,
|
|
130
228
|
autoFocus: autoFocus,
|
|
131
|
-
underlineColorAndroid: "transparent",
|
|
132
229
|
selectionColor: resolvedTheme.colors?.cursor ?? DEFAULT_THEME.colors?.cursor,
|
|
133
230
|
textAlignVertical: "top",
|
|
134
|
-
scrollEnabled:
|
|
231
|
+
scrollEnabled: shouldScrollInput
|
|
232
|
+
}), showOutputPreview && /*#__PURE__*/_jsx(Animated.View, {
|
|
233
|
+
pointerEvents: shouldShowOutputPreview ? 'auto' : 'none',
|
|
234
|
+
style: [styles.outputAnimatedWrapper, outputAnimatedStyle],
|
|
235
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
236
|
+
style: outputContainerStyle,
|
|
237
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
238
|
+
style: outputLabelStyle,
|
|
239
|
+
children: outputLabel
|
|
240
|
+
}), /*#__PURE__*/_jsx(ScrollView, {
|
|
241
|
+
style: {
|
|
242
|
+
maxHeight: maxOutputHeight
|
|
243
|
+
},
|
|
244
|
+
showsVerticalScrollIndicator: false,
|
|
245
|
+
children: resolvedOutputPreviewMode === 'rendered' ? /*#__PURE__*/_jsx(RenderedOutput, {
|
|
246
|
+
segments: state.segments,
|
|
247
|
+
theme: resolvedTheme
|
|
248
|
+
}) : /*#__PURE__*/_jsx(Text, {
|
|
249
|
+
selectable: true,
|
|
250
|
+
style: outputTextStyle,
|
|
251
|
+
children: serializedOutput
|
|
252
|
+
})
|
|
253
|
+
})]
|
|
254
|
+
})
|
|
135
255
|
})]
|
|
136
256
|
}), toolbarPosition === 'bottom' && toolbarComponent && /*#__PURE__*/_jsx(View, {
|
|
137
257
|
style: toolbarBorderStyle,
|
|
@@ -145,14 +265,37 @@ const styles = StyleSheet.create({
|
|
|
145
265
|
position: 'relative'
|
|
146
266
|
},
|
|
147
267
|
textInput: {
|
|
148
|
-
position: 'relative'
|
|
149
|
-
zIndex: 1
|
|
268
|
+
position: 'relative'
|
|
150
269
|
},
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
color: 'transparent',
|
|
154
|
-
backgroundColor: 'transparent',
|
|
155
|
-
textShadowColor: 'transparent'
|
|
270
|
+
outputAnimatedWrapper: {
|
|
271
|
+
overflow: 'hidden'
|
|
156
272
|
}
|
|
157
273
|
});
|
|
274
|
+
function detectLinkTarget(value) {
|
|
275
|
+
const trimmed = value.trim();
|
|
276
|
+
if (trimmed.length === 0) {
|
|
277
|
+
return undefined;
|
|
278
|
+
}
|
|
279
|
+
if (/^https?:\/\//i.test(trimmed) || /^mailto:/i.test(trimmed)) {
|
|
280
|
+
return trimmed;
|
|
281
|
+
}
|
|
282
|
+
if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) {
|
|
283
|
+
return `mailto:${trimmed}`;
|
|
284
|
+
}
|
|
285
|
+
if (/^[^\s]+\.[^\s]+$/.test(trimmed)) {
|
|
286
|
+
return `https://${trimmed}`;
|
|
287
|
+
}
|
|
288
|
+
return undefined;
|
|
289
|
+
}
|
|
290
|
+
function detectImageSource(value) {
|
|
291
|
+
const normalized = detectLinkTarget(value);
|
|
292
|
+
if (!normalized) {
|
|
293
|
+
return undefined;
|
|
294
|
+
}
|
|
295
|
+
const candidate = normalized.replace(/^mailto:/i, '');
|
|
296
|
+
if (/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/i.test(candidate)) {
|
|
297
|
+
return normalized;
|
|
298
|
+
}
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
158
301
|
//# sourceMappingURL=RichTextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useCallback","View","TextInput","StyleSheet","DEFAULT_THEME","segmentsToPlainText","useRichText","OverlayText","Toolbar","jsx","_jsx","jsxs","_jsxs","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","state","actions","plainText","segments","onSelectionChange","e","start","end","nativeEvent","selection","handleSelectionChange","containerStyle","inputAreaStyle","styles","inputArea","undefined","inputStyle","textInput","baseTextStyle","style","hiddenInputText","toolbarComponent","items","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","children","value","handleTextChange","placeholderTextColor","underlineColorAndroid","selectionColor","cursor","textAlignVertical","scrollEnabled","displayName","create","position","zIndex","color","backgroundColor","textShadowColor"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useCallback","useMemo","useRef","useState","Animated","Easing","ScrollView","StyleSheet","Text","TextInput","View","DEFAULT_THEME","useRichText","segmentsToPlainText","serializeSegments","RenderedOutput","Toolbar","jsx","_jsx","jsxs","_jsxs","DEFAULT_OUTPUT_PANEL_MAX_HEIGHT","isJestRuntime","globalThis","process","env","JEST_WORKER_ID","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","showOutputPreview","outputFormat","defaultOutputFormat","outputPreviewMode","defaultOutputPreviewMode","maxOutputHeight","onChangeOutput","onChangeOutputFormat","onChangeOutputPreviewMode","onRequestLink","onRequestImage","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","previewProgress","Value","current","internalOutputFormat","setInternalOutputFormat","internalOutputPreviewMode","setInternalOutputPreviewMode","contentHeight","setContentHeight","state","actions","plainText","segments","resolvedOutputFormat","resolvedOutputPreviewMode","inputHeight","Math","max","min","shouldScrollInput","serializedOutput","shouldShowOutputPreview","length","normalizedSelection","start","selection","end","selectedText","slice","selectionStyle","getSelectionStyle","activeStyles","setValue","timing","toValue","duration","easing","out","cubic","useNativeDriver","onSelectionChange","e","nativeEvent","handleSelectionChange","onContentSizeChange","ceil","contentSize","height","handleOutputFormatChange","format","undefined","handleOutputPreviewModeChange","mode","handleRequestLink","currentUrl","link","applyLink","setLink","detectedUrl","detectLinkTarget","handleRequestImage","insertImage","detectedSource","detectImageSource","alt","trim","outputLabel","formatLabel","containerStyle","inputAreaStyle","styles","inputArea","inputStyle","textInput","baseTextStyle","style","outputAnimatedStyle","interpolate","inputRange","outputRange","opacity","marginTop","marginBottom","transform","translateY","outputContainerStyle","outputLabelStyle","outputTextStyle","toolbarComponent","items","onOutputFormatChange","onOutputPreviewModeChange","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","children","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","showsVerticalScrollIndicator","selectable","displayName","create","position","overflow","trimmed","test","normalized","candidate","replace"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,12 @@ export const Toolbar = /*#__PURE__*/React.memo(({
|
|
|
21
21
|
items,
|
|
22
22
|
theme,
|
|
23
23
|
visible = true,
|
|
24
|
+
outputFormat = 'markdown',
|
|
25
|
+
outputPreviewMode = 'literal',
|
|
26
|
+
onOutputFormatChange,
|
|
27
|
+
onOutputPreviewModeChange,
|
|
28
|
+
onRequestLink,
|
|
29
|
+
onRequestImage,
|
|
24
30
|
renderToolbar
|
|
25
31
|
}) => {
|
|
26
32
|
const resolvedTheme = theme ?? DEFAULT_THEME;
|
|
@@ -37,19 +43,40 @@ export const Toolbar = /*#__PURE__*/React.memo(({
|
|
|
37
43
|
if (item.heading) {
|
|
38
44
|
isActive = selectionStyle.heading === item.heading;
|
|
39
45
|
}
|
|
46
|
+
if (item.listType) {
|
|
47
|
+
isActive = selectionStyle.listType === item.listType;
|
|
48
|
+
}
|
|
49
|
+
if (item.textAlign) {
|
|
50
|
+
isActive = selectionStyle.textAlign === item.textAlign;
|
|
51
|
+
}
|
|
52
|
+
if (item.outputFormat) {
|
|
53
|
+
isActive = outputFormat === item.outputFormat;
|
|
54
|
+
}
|
|
55
|
+
if (item.outputPreviewMode) {
|
|
56
|
+
isActive = outputPreviewMode === item.outputPreviewMode;
|
|
57
|
+
}
|
|
58
|
+
if (item.actionType === 'link') {
|
|
59
|
+
isActive = !!selectionStyle.link;
|
|
60
|
+
}
|
|
40
61
|
return {
|
|
41
62
|
...item,
|
|
42
63
|
active: item.active ?? isActive
|
|
43
64
|
};
|
|
44
65
|
});
|
|
45
|
-
}, [actions, toolbarItems]);
|
|
66
|
+
}, [actions, outputFormat, outputPreviewMode, toolbarItems]);
|
|
46
67
|
|
|
47
68
|
// Custom render
|
|
48
69
|
if (renderToolbar) {
|
|
49
70
|
return renderToolbar({
|
|
50
71
|
items: enrichedItems,
|
|
51
72
|
state,
|
|
52
|
-
actions
|
|
73
|
+
actions,
|
|
74
|
+
outputFormat,
|
|
75
|
+
outputPreviewMode,
|
|
76
|
+
onOutputFormatChange: onOutputFormatChange ?? (() => undefined),
|
|
77
|
+
onOutputPreviewModeChange: onOutputPreviewModeChange ?? (() => undefined),
|
|
78
|
+
onRequestLink,
|
|
79
|
+
onRequestImage
|
|
53
80
|
});
|
|
54
81
|
}
|
|
55
82
|
if (!visible) {
|
|
@@ -75,6 +102,18 @@ export const Toolbar = /*#__PURE__*/React.memo(({
|
|
|
75
102
|
actions.toggleFormat(item.format);
|
|
76
103
|
} else if (item.heading) {
|
|
77
104
|
actions.setHeading(item.heading);
|
|
105
|
+
} else if (item.listType) {
|
|
106
|
+
actions.setListType(item.listType);
|
|
107
|
+
} else if (item.textAlign) {
|
|
108
|
+
actions.setTextAlign(item.textAlign);
|
|
109
|
+
} else if (item.outputFormat) {
|
|
110
|
+
onOutputFormatChange?.(item.outputFormat);
|
|
111
|
+
} else if (item.outputPreviewMode) {
|
|
112
|
+
onOutputPreviewModeChange?.(item.outputPreviewMode);
|
|
113
|
+
} else if (item.actionType === 'link') {
|
|
114
|
+
onRequestLink?.();
|
|
115
|
+
} else if (item.actionType === 'image') {
|
|
116
|
+
onRequestImage?.();
|
|
78
117
|
}
|
|
79
118
|
}
|
|
80
119
|
}, item.id))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","View","ScrollView","StyleSheet","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","ToolbarButton","jsx","_jsx","Toolbar","memo","actions","state","items","theme","visible","renderToolbar","resolvedTheme","toolbarItems","enrichedItems","selectionStyle","getSelectionStyle","map","item","isActive","format","isFormatActive","heading","active","toolbarStyle","style","children","horizontal","showsHorizontalScrollIndicator","keyboardShouldPersistTaps","contentContainerStyle","styles","scrollContent","label","renderButton","onPress","toggleFormat","setHeading","id","displayName","create","flexDirection","alignItems","gap"],"sourceRoot":"../../../src","sources":["components/Toolbar.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,IAAI,EAAEC,UAAU,EAAEC,UAAU,QAAQ,cAAc;AAE3D,SAASC,aAAa,EAAEC,qBAAqB,QAAQ,4BAA4B;AACjF,SAASC,aAAa,QAAQ,iBAAiB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AARA,SAAAC,GAAA,IAAAC,IAAA;AASA,OAAO,MAAMC,OAA+B,gBAAGV,KAAK,CAACW,IAAI,CACvD,CAAC;
|
|
1
|
+
{"version":3,"names":["React","useMemo","View","ScrollView","StyleSheet","DEFAULT_THEME","DEFAULT_TOOLBAR_ITEMS","ToolbarButton","jsx","_jsx","Toolbar","memo","actions","state","items","theme","visible","outputFormat","outputPreviewMode","onOutputFormatChange","onOutputPreviewModeChange","onRequestLink","onRequestImage","renderToolbar","resolvedTheme","toolbarItems","enrichedItems","selectionStyle","getSelectionStyle","map","item","isActive","format","isFormatActive","heading","listType","textAlign","actionType","link","active","undefined","toolbarStyle","style","children","horizontal","showsHorizontalScrollIndicator","keyboardShouldPersistTaps","contentContainerStyle","styles","scrollContent","label","renderButton","onPress","toggleFormat","setHeading","setListType","setTextAlign","id","displayName","create","flexDirection","alignItems","gap"],"sourceRoot":"../../../src","sources":["components/Toolbar.tsx"],"mappings":"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","ignoreList":[]}
|