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.
Files changed (90) hide show
  1. package/lib/commonjs/components/RenderedOutput.js +168 -0
  2. package/lib/commonjs/components/RenderedOutput.js.map +1 -0
  3. package/lib/commonjs/components/RichTextInput.js +196 -52
  4. package/lib/commonjs/components/RichTextInput.js.map +1 -1
  5. package/lib/commonjs/components/Toolbar.js +41 -2
  6. package/lib/commonjs/components/Toolbar.js.map +1 -1
  7. package/lib/commonjs/constants/defaultStyles.js +81 -2
  8. package/lib/commonjs/constants/defaultStyles.js.map +1 -1
  9. package/lib/commonjs/hooks/useFormatting.js +46 -2
  10. package/lib/commonjs/hooks/useFormatting.js.map +1 -1
  11. package/lib/commonjs/hooks/useRichText.js +130 -12
  12. package/lib/commonjs/hooks/useRichText.js.map +1 -1
  13. package/lib/commonjs/index.d.js +19 -0
  14. package/lib/commonjs/index.d.js.map +1 -1
  15. package/lib/commonjs/index.js +19 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/utils/formatter.js +48 -12
  18. package/lib/commonjs/utils/formatter.js.map +1 -1
  19. package/lib/commonjs/utils/parser.js +1 -1
  20. package/lib/commonjs/utils/parser.js.map +1 -1
  21. package/lib/commonjs/utils/serializer.d.js +6 -0
  22. package/lib/commonjs/utils/serializer.d.js.map +1 -0
  23. package/lib/commonjs/utils/serializer.js +259 -0
  24. package/lib/commonjs/utils/serializer.js.map +1 -0
  25. package/lib/commonjs/utils/styleMapper.js +11 -0
  26. package/lib/commonjs/utils/styleMapper.js.map +1 -1
  27. package/lib/module/components/RenderedOutput.js +163 -0
  28. package/lib/module/components/RenderedOutput.js.map +1 -0
  29. package/lib/module/components/RichTextInput.js +198 -55
  30. package/lib/module/components/RichTextInput.js.map +1 -1
  31. package/lib/module/components/Toolbar.js +41 -2
  32. package/lib/module/components/Toolbar.js.map +1 -1
  33. package/lib/module/constants/defaultStyles.js +81 -2
  34. package/lib/module/constants/defaultStyles.js.map +1 -1
  35. package/lib/module/hooks/useFormatting.js +47 -3
  36. package/lib/module/hooks/useFormatting.js.map +1 -1
  37. package/lib/module/hooks/useRichText.js +130 -12
  38. package/lib/module/hooks/useRichText.js.map +1 -1
  39. package/lib/module/index.d.js +1 -0
  40. package/lib/module/index.d.js.map +1 -1
  41. package/lib/module/index.js +1 -0
  42. package/lib/module/index.js.map +1 -1
  43. package/lib/module/utils/formatter.js +46 -12
  44. package/lib/module/utils/formatter.js.map +1 -1
  45. package/lib/module/utils/parser.js +1 -1
  46. package/lib/module/utils/parser.js.map +1 -1
  47. package/lib/module/utils/serializer.d.js +4 -0
  48. package/lib/module/utils/serializer.d.js.map +1 -0
  49. package/lib/module/utils/serializer.js +253 -0
  50. package/lib/module/utils/serializer.js.map +1 -0
  51. package/lib/module/utils/styleMapper.js +11 -0
  52. package/lib/module/utils/styleMapper.js.map +1 -1
  53. package/lib/typescript/src/components/RenderedOutput.d.ts +9 -0
  54. package/lib/typescript/src/components/RenderedOutput.d.ts.map +1 -0
  55. package/lib/typescript/src/components/RichTextInput.d.ts +2 -13
  56. package/lib/typescript/src/components/RichTextInput.d.ts.map +1 -1
  57. package/lib/typescript/src/components/Toolbar.d.ts.map +1 -1
  58. package/lib/typescript/src/constants/defaultStyles.d.ts +3 -0
  59. package/lib/typescript/src/constants/defaultStyles.d.ts.map +1 -1
  60. package/lib/typescript/src/hooks/useFormatting.d.ts +4 -1
  61. package/lib/typescript/src/hooks/useFormatting.d.ts.map +1 -1
  62. package/lib/typescript/src/hooks/useRichText.d.ts.map +1 -1
  63. package/lib/typescript/src/index.d.ts +2 -1
  64. package/lib/typescript/src/index.d.ts.map +1 -1
  65. package/lib/typescript/src/types/index.d.ts +112 -1
  66. package/lib/typescript/src/types/index.d.ts.map +1 -1
  67. package/lib/typescript/src/utils/formatter.d.ts +9 -1
  68. package/lib/typescript/src/utils/formatter.d.ts.map +1 -1
  69. package/lib/typescript/src/utils/parser.d.ts.map +1 -1
  70. package/lib/typescript/src/utils/serializer.d.ts +14 -0
  71. package/lib/typescript/src/utils/serializer.d.ts.map +1 -0
  72. package/lib/typescript/src/utils/styleMapper.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/RenderedOutput.tsx +231 -0
  75. package/src/components/RichTextInput.d.ts +3 -14
  76. package/src/components/RichTextInput.tsx +291 -56
  77. package/src/components/Toolbar.tsx +54 -2
  78. package/src/constants/defaultStyles.d.ts +3 -0
  79. package/src/constants/defaultStyles.ts +47 -1
  80. package/src/hooks/useFormatting.ts +89 -2
  81. package/src/hooks/useRichText.ts +193 -11
  82. package/src/index.d.ts +2 -1
  83. package/src/index.ts +10 -0
  84. package/src/types/index.d.ts +112 -1
  85. package/src/types/index.ts +123 -1
  86. package/src/utils/formatter.ts +60 -10
  87. package/src/utils/parser.ts +6 -1
  88. package/src/utils/serializer.d.ts +13 -0
  89. package/src/utils/serializer.ts +365 -0
  90. 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 { View, TextInput, StyleSheet } from 'react-native';
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 { OverlayText } from './OverlayText';
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 Overlay Technique:
15
- * - A transparent `TextInput` on top captures user input and selection
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
- }, [onReady, actions]);
62
-
63
- // Build plain text for the TextInput value
66
+ }, [actions, onReady]);
64
67
  const plainText = segmentsToPlainText(state.segments);
65
-
66
- // Handle selection change from TextInput
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
- // Container style
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
- // Input area style
82
- const inputAreaStyle = [styles.inputArea, {
83
- minHeight
84
- }, maxHeight ? {
85
- maxHeight
86
- } : undefined];
87
-
88
- // Input style
89
- const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? DEFAULT_THEME.inputStyle, textInputProps?.style, styles.hiddenInputText];
90
-
91
- // Toolbar component
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(OverlayText, {
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: typeof maxHeight === 'number'
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
- hiddenInputText: {
152
- // Keep the editable layer invisible while preserving the caret.
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":"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","ignoreList":[]}
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":[]}