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,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RenderedOutput = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _defaultStyles = require("../constants/defaultStyles");
|
|
10
|
+
var _styleMapper = require("../utils/styleMapper");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
const RenderedOutput = exports.RenderedOutput = /*#__PURE__*/_react.default.memo(({
|
|
14
|
+
segments,
|
|
15
|
+
theme
|
|
16
|
+
}) => {
|
|
17
|
+
const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
|
|
18
|
+
const lines = (0, _react.useMemo)(() => splitSegmentsByLine(segments), [segments]);
|
|
19
|
+
let orderedIndex = 0;
|
|
20
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
21
|
+
style: [styles.container, resolvedTheme.renderedOutputStyle ?? _defaultStyles.DEFAULT_THEME.renderedOutputStyle],
|
|
22
|
+
children: lines.map((line, lineIndex) => {
|
|
23
|
+
const listType = getLineStyle(line, 'listType');
|
|
24
|
+
const textAlign = getLineStyle(line, 'textAlign');
|
|
25
|
+
const marker = listType === 'bullet' ? '\u2022' : listType === 'ordered' ? `${orderedIndex + 1}.` : undefined;
|
|
26
|
+
orderedIndex = listType === 'ordered' ? orderedIndex + 1 : 0;
|
|
27
|
+
const textFragments = line.filter(fragment => !fragment.styles.imageSrc && fragment.text.length > 0);
|
|
28
|
+
const imageFragments = line.filter(fragment => !!fragment.styles.imageSrc);
|
|
29
|
+
const contentAlignStyle = textAlign === 'center' ? styles.alignCenter : textAlign === 'right' ? styles.alignRight : styles.alignLeft;
|
|
30
|
+
if (textFragments.length === 0 && imageFragments.length === 0) {
|
|
31
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
32
|
+
style: [styles.emptyLine, contentAlignStyle]
|
|
33
|
+
}, `line-${lineIndex}`);
|
|
34
|
+
}
|
|
35
|
+
const textNode = textFragments.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
36
|
+
style: [resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, textAlign ? {
|
|
37
|
+
textAlign
|
|
38
|
+
} : undefined],
|
|
39
|
+
children: textFragments.map((fragment, fragmentIndex) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
40
|
+
style: (0, _styleMapper.segmentToTextStyle)(fragment, resolvedTheme),
|
|
41
|
+
children: fragment.text
|
|
42
|
+
}, `text-${lineIndex}-${fragmentIndex}`))
|
|
43
|
+
}) : null;
|
|
44
|
+
const imageNodes = imageFragments.map((fragment, fragmentIndex) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
45
|
+
style: styles.imageBlock,
|
|
46
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
|
|
47
|
+
source: {
|
|
48
|
+
uri: fragment.styles.imageSrc
|
|
49
|
+
},
|
|
50
|
+
style: styles.image,
|
|
51
|
+
resizeMode: "contain"
|
|
52
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
53
|
+
style: [styles.imageCaption, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, textAlign ? {
|
|
54
|
+
textAlign
|
|
55
|
+
} : undefined],
|
|
56
|
+
children: fragment.styles.imageAlt ?? extractImageAlt(fragment.text)
|
|
57
|
+
})]
|
|
58
|
+
}, `image-${lineIndex}-${fragmentIndex}`));
|
|
59
|
+
const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
60
|
+
style: [styles.lineContent, contentAlignStyle],
|
|
61
|
+
children: [textNode, imageNodes]
|
|
62
|
+
});
|
|
63
|
+
if (!marker) {
|
|
64
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
65
|
+
style: styles.line,
|
|
66
|
+
children: content
|
|
67
|
+
}, `line-${lineIndex}`);
|
|
68
|
+
}
|
|
69
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
70
|
+
style: styles.listLine,
|
|
71
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
72
|
+
style: [styles.listMarker, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle],
|
|
73
|
+
children: marker
|
|
74
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
75
|
+
style: styles.listContent,
|
|
76
|
+
children: content
|
|
77
|
+
})]
|
|
78
|
+
}, `line-${lineIndex}`);
|
|
79
|
+
})
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
RenderedOutput.displayName = 'RenderedOutput';
|
|
83
|
+
function splitSegmentsByLine(segments) {
|
|
84
|
+
const lines = [[]];
|
|
85
|
+
for (const segment of segments) {
|
|
86
|
+
const parts = segment.text.split('\n');
|
|
87
|
+
parts.forEach((part, index) => {
|
|
88
|
+
if (part.length > 0 || segment.styles.imageSrc) {
|
|
89
|
+
lines[lines.length - 1]?.push({
|
|
90
|
+
text: part,
|
|
91
|
+
styles: {
|
|
92
|
+
...segment.styles
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (index < parts.length - 1) {
|
|
97
|
+
lines.push([]);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return lines;
|
|
102
|
+
}
|
|
103
|
+
function getLineStyle(line, key) {
|
|
104
|
+
for (const fragment of line) {
|
|
105
|
+
const value = fragment.styles[key];
|
|
106
|
+
if (value !== undefined) {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
function extractImageAlt(text) {
|
|
113
|
+
const normalized = text.replace(/^\[Image:\s*/i, '').replace(/^\[Image\]/i, '').replace(/\]$/, '').trim();
|
|
114
|
+
return normalized.length > 0 ? normalized : 'image';
|
|
115
|
+
}
|
|
116
|
+
const styles = _reactNative.StyleSheet.create({
|
|
117
|
+
container: {
|
|
118
|
+
gap: 10
|
|
119
|
+
},
|
|
120
|
+
line: {
|
|
121
|
+
width: '100%'
|
|
122
|
+
},
|
|
123
|
+
lineContent: {
|
|
124
|
+
width: '100%',
|
|
125
|
+
gap: 8
|
|
126
|
+
},
|
|
127
|
+
listLine: {
|
|
128
|
+
width: '100%',
|
|
129
|
+
flexDirection: 'row',
|
|
130
|
+
alignItems: 'flex-start',
|
|
131
|
+
gap: 8
|
|
132
|
+
},
|
|
133
|
+
listMarker: {
|
|
134
|
+
minWidth: 20,
|
|
135
|
+
paddingTop: 1
|
|
136
|
+
},
|
|
137
|
+
listContent: {
|
|
138
|
+
flex: 1
|
|
139
|
+
},
|
|
140
|
+
alignLeft: {
|
|
141
|
+
alignItems: 'flex-start'
|
|
142
|
+
},
|
|
143
|
+
alignCenter: {
|
|
144
|
+
alignItems: 'center'
|
|
145
|
+
},
|
|
146
|
+
alignRight: {
|
|
147
|
+
alignItems: 'flex-end'
|
|
148
|
+
},
|
|
149
|
+
emptyLine: {
|
|
150
|
+
minHeight: 20,
|
|
151
|
+
width: '100%'
|
|
152
|
+
},
|
|
153
|
+
imageBlock: {
|
|
154
|
+
width: '100%',
|
|
155
|
+
gap: 6
|
|
156
|
+
},
|
|
157
|
+
image: {
|
|
158
|
+
width: '100%',
|
|
159
|
+
height: 160,
|
|
160
|
+
borderRadius: 10,
|
|
161
|
+
backgroundColor: '#E5E7EB'
|
|
162
|
+
},
|
|
163
|
+
imageCaption: {
|
|
164
|
+
fontSize: 13,
|
|
165
|
+
opacity: 0.8
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
//# sourceMappingURL=RenderedOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_styleMapper","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RenderedOutput","exports","React","memo","segments","theme","resolvedTheme","DEFAULT_THEME","lines","useMemo","splitSegmentsByLine","orderedIndex","jsx","View","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","Text","baseTextStyle","fragmentIndex","segmentToTextStyle","imageNodes","jsxs","imageBlock","Image","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","StyleSheet","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":[]}
|
|
@@ -7,28 +7,21 @@ exports.RichTextInput = void 0;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var _defaultStyles = require("../constants/defaultStyles");
|
|
10
|
-
var _parser = require("../utils/parser");
|
|
11
10
|
var _useRichText = require("../hooks/useRichText");
|
|
12
|
-
var
|
|
11
|
+
var _parser = require("../utils/parser");
|
|
12
|
+
var _serializer = require("../utils/serializer");
|
|
13
|
+
var _RenderedOutput = require("./RenderedOutput");
|
|
13
14
|
var _Toolbar = require("./Toolbar");
|
|
14
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
16
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
17
|
+
const DEFAULT_OUTPUT_PANEL_MAX_HEIGHT = 180;
|
|
18
|
+
const isJestRuntime = typeof globalThis.process?.env?.JEST_WORKER_ID === 'string';
|
|
19
|
+
|
|
16
20
|
/**
|
|
17
21
|
* RichTextInput — The main rich text editor component.
|
|
18
22
|
*
|
|
19
|
-
* Uses the
|
|
20
|
-
*
|
|
21
|
-
* - A styled `<Text>` layer behind it renders the formatted content
|
|
22
|
-
* - Both share identical font metrics for pixel-perfect alignment
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```tsx
|
|
26
|
-
* <RichTextInput
|
|
27
|
-
* placeholder="Start typing..."
|
|
28
|
-
* showToolbar
|
|
29
|
-
* onChangeSegments={(segments) => console.log(segments)}
|
|
30
|
-
* />
|
|
31
|
-
* ```
|
|
23
|
+
* Uses a plain `TextInput` for editing and renders the serialized rich output
|
|
24
|
+
* below it as Markdown or HTML.
|
|
32
25
|
*/
|
|
33
26
|
const RichTextInput = ({
|
|
34
27
|
initialSegments,
|
|
@@ -41,6 +34,17 @@ const RichTextInput = ({
|
|
|
41
34
|
toolbarPosition = 'top',
|
|
42
35
|
toolbarItems,
|
|
43
36
|
theme,
|
|
37
|
+
showOutputPreview = true,
|
|
38
|
+
outputFormat,
|
|
39
|
+
defaultOutputFormat = 'markdown',
|
|
40
|
+
outputPreviewMode,
|
|
41
|
+
defaultOutputPreviewMode = 'literal',
|
|
42
|
+
maxOutputHeight = DEFAULT_OUTPUT_PANEL_MAX_HEIGHT,
|
|
43
|
+
onChangeOutput,
|
|
44
|
+
onChangeOutputFormat,
|
|
45
|
+
onChangeOutputPreviewMode,
|
|
46
|
+
onRequestLink,
|
|
47
|
+
onRequestImage,
|
|
44
48
|
multiline = true,
|
|
45
49
|
minHeight = 120,
|
|
46
50
|
maxHeight,
|
|
@@ -50,6 +54,10 @@ const RichTextInput = ({
|
|
|
50
54
|
onReady
|
|
51
55
|
}) => {
|
|
52
56
|
const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
|
|
57
|
+
const previewProgress = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
|
|
58
|
+
const [internalOutputFormat, setInternalOutputFormat] = (0, _react.useState)(defaultOutputFormat);
|
|
59
|
+
const [internalOutputPreviewMode, setInternalOutputPreviewMode] = (0, _react.useState)(defaultOutputPreviewMode);
|
|
60
|
+
const [contentHeight, setContentHeight] = (0, _react.useState)(minHeight);
|
|
53
61
|
const {
|
|
54
62
|
state,
|
|
55
63
|
actions
|
|
@@ -58,16 +66,37 @@ const RichTextInput = ({
|
|
|
58
66
|
onChangeSegments,
|
|
59
67
|
onChangeText
|
|
60
68
|
});
|
|
61
|
-
|
|
62
|
-
// Expose actions via onReady callback
|
|
63
69
|
(0, _react.useEffect)(() => {
|
|
64
70
|
onReady?.(actions);
|
|
65
|
-
}, [
|
|
66
|
-
|
|
67
|
-
// Build plain text for the TextInput value
|
|
71
|
+
}, [actions, onReady]);
|
|
68
72
|
const plainText = (0, _parser.segmentsToPlainText)(state.segments);
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
const resolvedOutputFormat = outputFormat ?? internalOutputFormat;
|
|
74
|
+
const resolvedOutputPreviewMode = outputPreviewMode ?? internalOutputPreviewMode;
|
|
75
|
+
const inputHeight = Math.max(minHeight, typeof maxHeight === 'number' ? Math.min(contentHeight, maxHeight) : contentHeight);
|
|
76
|
+
const shouldScrollInput = typeof maxHeight === 'number' && contentHeight > maxHeight;
|
|
77
|
+
const serializedOutput = (0, _react.useMemo)(() => (0, _serializer.serializeSegments)(state.segments, resolvedOutputFormat), [resolvedOutputFormat, state.segments]);
|
|
78
|
+
const shouldShowOutputPreview = showOutputPreview && plainText.length > 0;
|
|
79
|
+
const normalizedSelection = (0, _react.useMemo)(() => ({
|
|
80
|
+
start: Math.min(state.selection.start, state.selection.end),
|
|
81
|
+
end: Math.max(state.selection.start, state.selection.end)
|
|
82
|
+
}), [state.selection.end, state.selection.start]);
|
|
83
|
+
const selectedText = (0, _react.useMemo)(() => plainText.slice(normalizedSelection.start, normalizedSelection.end), [normalizedSelection.end, normalizedSelection.start, plainText]);
|
|
84
|
+
const selectionStyle = (0, _react.useMemo)(() => actions.getSelectionStyle(), [actions, state.activeStyles, state.segments, state.selection]);
|
|
85
|
+
(0, _react.useEffect)(() => {
|
|
86
|
+
onChangeOutput?.(serializedOutput, resolvedOutputFormat);
|
|
87
|
+
}, [onChangeOutput, resolvedOutputFormat, serializedOutput]);
|
|
88
|
+
(0, _react.useEffect)(() => {
|
|
89
|
+
if (isJestRuntime) {
|
|
90
|
+
previewProgress.setValue(shouldShowOutputPreview ? 1 : 0);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
_reactNative.Animated.timing(previewProgress, {
|
|
94
|
+
toValue: shouldShowOutputPreview ? 1 : 0,
|
|
95
|
+
duration: 180,
|
|
96
|
+
easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
|
|
97
|
+
useNativeDriver: false
|
|
98
|
+
}).start();
|
|
99
|
+
}, [previewProgress, shouldShowOutputPreview]);
|
|
71
100
|
const onSelectionChange = (0, _react.useCallback)(e => {
|
|
72
101
|
const {
|
|
73
102
|
start,
|
|
@@ -78,30 +107,103 @@ const RichTextInput = ({
|
|
|
78
107
|
end
|
|
79
108
|
});
|
|
80
109
|
}, [actions]);
|
|
81
|
-
|
|
82
|
-
|
|
110
|
+
const onContentSizeChange = (0, _react.useCallback)(e => {
|
|
111
|
+
setContentHeight(Math.ceil(e.nativeEvent.contentSize.height));
|
|
112
|
+
textInputProps?.onContentSizeChange?.(e);
|
|
113
|
+
}, [textInputProps]);
|
|
114
|
+
const handleOutputFormatChange = (0, _react.useCallback)(format => {
|
|
115
|
+
if (outputFormat === undefined) {
|
|
116
|
+
setInternalOutputFormat(format);
|
|
117
|
+
}
|
|
118
|
+
onChangeOutputFormat?.(format);
|
|
119
|
+
}, [onChangeOutputFormat, outputFormat]);
|
|
120
|
+
const handleOutputPreviewModeChange = (0, _react.useCallback)(mode => {
|
|
121
|
+
if (outputPreviewMode === undefined) {
|
|
122
|
+
setInternalOutputPreviewMode(mode);
|
|
123
|
+
}
|
|
124
|
+
onChangeOutputPreviewMode?.(mode);
|
|
125
|
+
}, [onChangeOutputPreviewMode, outputPreviewMode]);
|
|
126
|
+
const handleRequestLink = (0, _react.useCallback)(() => {
|
|
127
|
+
if (onRequestLink) {
|
|
128
|
+
onRequestLink({
|
|
129
|
+
selectedText,
|
|
130
|
+
currentUrl: selectionStyle.link,
|
|
131
|
+
applyLink: actions.setLink
|
|
132
|
+
});
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (selectionStyle.link) {
|
|
136
|
+
actions.setLink(undefined);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const detectedUrl = detectLinkTarget(selectedText);
|
|
140
|
+
if (detectedUrl) {
|
|
141
|
+
actions.setLink(detectedUrl);
|
|
142
|
+
}
|
|
143
|
+
}, [actions, onRequestLink, selectedText, selectionStyle.link]);
|
|
144
|
+
const handleRequestImage = (0, _react.useCallback)(() => {
|
|
145
|
+
if (onRequestImage) {
|
|
146
|
+
onRequestImage({
|
|
147
|
+
insertImage: actions.insertImage
|
|
148
|
+
});
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const detectedSource = detectImageSource(selectedText);
|
|
152
|
+
if (detectedSource) {
|
|
153
|
+
actions.insertImage(detectedSource, {
|
|
154
|
+
alt: selectedText.trim() || undefined
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}, [actions, onRequestImage, selectedText]);
|
|
158
|
+
const outputLabel = (0, _react.useMemo)(() => {
|
|
159
|
+
const formatLabel = resolvedOutputFormat === 'html' ? 'HTML' : 'Markdown';
|
|
160
|
+
if (resolvedOutputPreviewMode === 'rendered') {
|
|
161
|
+
return `${formatLabel} preview`;
|
|
162
|
+
}
|
|
163
|
+
return `${formatLabel} output`;
|
|
164
|
+
}, [resolvedOutputFormat, resolvedOutputPreviewMode]);
|
|
83
165
|
const containerStyle = [resolvedTheme.containerStyle ?? _defaultStyles.DEFAULT_THEME.containerStyle];
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
maxHeight
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
166
|
+
const inputAreaStyle = [styles.inputArea];
|
|
167
|
+
const inputStyle = [styles.textInput, resolvedTheme.baseTextStyle ?? _defaultStyles.DEFAULT_THEME.baseTextStyle, resolvedTheme.inputStyle ?? _defaultStyles.DEFAULT_THEME.inputStyle, {
|
|
168
|
+
height: inputHeight
|
|
169
|
+
}, textInputProps?.style];
|
|
170
|
+
const outputAnimatedStyle = {
|
|
171
|
+
maxHeight: previewProgress.interpolate({
|
|
172
|
+
inputRange: [0, 1],
|
|
173
|
+
outputRange: [0, maxOutputHeight + 72]
|
|
174
|
+
}),
|
|
175
|
+
opacity: previewProgress,
|
|
176
|
+
marginTop: previewProgress.interpolate({
|
|
177
|
+
inputRange: [0, 1],
|
|
178
|
+
outputRange: [0, 12]
|
|
179
|
+
}),
|
|
180
|
+
marginBottom: previewProgress.interpolate({
|
|
181
|
+
inputRange: [0, 1],
|
|
182
|
+
outputRange: [0, 16]
|
|
183
|
+
}),
|
|
184
|
+
transform: [{
|
|
185
|
+
translateY: previewProgress.interpolate({
|
|
186
|
+
inputRange: [0, 1],
|
|
187
|
+
outputRange: [-8, 0]
|
|
188
|
+
})
|
|
189
|
+
}]
|
|
190
|
+
};
|
|
191
|
+
const outputContainerStyle = [resolvedTheme.outputContainerStyle ?? _defaultStyles.DEFAULT_THEME.outputContainerStyle];
|
|
192
|
+
const outputLabelStyle = [resolvedTheme.outputLabelStyle ?? _defaultStyles.DEFAULT_THEME.outputLabelStyle];
|
|
193
|
+
const outputTextStyle = [resolvedTheme.outputTextStyle ?? _defaultStyles.DEFAULT_THEME.outputTextStyle];
|
|
96
194
|
const toolbarComponent = showToolbar ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toolbar.Toolbar, {
|
|
97
195
|
actions: actions,
|
|
98
196
|
state: state,
|
|
99
197
|
items: toolbarItems,
|
|
100
198
|
theme: resolvedTheme,
|
|
199
|
+
outputFormat: resolvedOutputFormat,
|
|
200
|
+
outputPreviewMode: resolvedOutputPreviewMode,
|
|
201
|
+
onOutputFormatChange: handleOutputFormatChange,
|
|
202
|
+
onOutputPreviewModeChange: handleOutputPreviewModeChange,
|
|
203
|
+
onRequestLink: handleRequestLink,
|
|
204
|
+
onRequestImage: handleRequestImage,
|
|
101
205
|
renderToolbar: renderToolbar
|
|
102
206
|
}) : null;
|
|
103
|
-
|
|
104
|
-
// Toolbar border
|
|
105
207
|
const toolbarBorderStyle = toolbarPosition === 'top' ? {
|
|
106
208
|
borderBottomWidth: 1,
|
|
107
209
|
borderBottomColor: resolvedTheme.colors?.toolbarBorder ?? _defaultStyles.DEFAULT_THEME.colors?.toolbarBorder
|
|
@@ -116,26 +218,45 @@ const RichTextInput = ({
|
|
|
116
218
|
children: toolbarComponent
|
|
117
219
|
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
118
220
|
style: inputAreaStyle,
|
|
119
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
120
|
-
segments: state.segments,
|
|
121
|
-
baseTextStyle: resolvedTheme.baseTextStyle,
|
|
122
|
-
theme: resolvedTheme
|
|
123
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
221
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
124
222
|
...textInputProps,
|
|
125
223
|
style: inputStyle,
|
|
126
224
|
value: plainText,
|
|
127
225
|
onChangeText: actions.handleTextChange,
|
|
128
226
|
onSelectionChange: onSelectionChange,
|
|
227
|
+
onContentSizeChange: onContentSizeChange,
|
|
129
228
|
multiline: multiline,
|
|
130
229
|
placeholder: placeholder,
|
|
131
230
|
placeholderTextColor: resolvedTheme.colors?.placeholder ?? _defaultStyles.DEFAULT_THEME.colors?.placeholder,
|
|
132
231
|
editable: editable,
|
|
133
232
|
maxLength: maxLength,
|
|
134
233
|
autoFocus: autoFocus,
|
|
135
|
-
underlineColorAndroid: "transparent",
|
|
136
234
|
selectionColor: resolvedTheme.colors?.cursor ?? _defaultStyles.DEFAULT_THEME.colors?.cursor,
|
|
137
235
|
textAlignVertical: "top",
|
|
138
|
-
scrollEnabled:
|
|
236
|
+
scrollEnabled: shouldScrollInput
|
|
237
|
+
}), showOutputPreview && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
238
|
+
pointerEvents: shouldShowOutputPreview ? 'auto' : 'none',
|
|
239
|
+
style: [styles.outputAnimatedWrapper, outputAnimatedStyle],
|
|
240
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
241
|
+
style: outputContainerStyle,
|
|
242
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
243
|
+
style: outputLabelStyle,
|
|
244
|
+
children: outputLabel
|
|
245
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
246
|
+
style: {
|
|
247
|
+
maxHeight: maxOutputHeight
|
|
248
|
+
},
|
|
249
|
+
showsVerticalScrollIndicator: false,
|
|
250
|
+
children: resolvedOutputPreviewMode === 'rendered' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_RenderedOutput.RenderedOutput, {
|
|
251
|
+
segments: state.segments,
|
|
252
|
+
theme: resolvedTheme
|
|
253
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
254
|
+
selectable: true,
|
|
255
|
+
style: outputTextStyle,
|
|
256
|
+
children: serializedOutput
|
|
257
|
+
})
|
|
258
|
+
})]
|
|
259
|
+
})
|
|
139
260
|
})]
|
|
140
261
|
}), toolbarPosition === 'bottom' && toolbarComponent && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
141
262
|
style: toolbarBorderStyle,
|
|
@@ -150,14 +271,37 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
150
271
|
position: 'relative'
|
|
151
272
|
},
|
|
152
273
|
textInput: {
|
|
153
|
-
position: 'relative'
|
|
154
|
-
zIndex: 1
|
|
274
|
+
position: 'relative'
|
|
155
275
|
},
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
color: 'transparent',
|
|
159
|
-
backgroundColor: 'transparent',
|
|
160
|
-
textShadowColor: 'transparent'
|
|
276
|
+
outputAnimatedWrapper: {
|
|
277
|
+
overflow: 'hidden'
|
|
161
278
|
}
|
|
162
279
|
});
|
|
280
|
+
function detectLinkTarget(value) {
|
|
281
|
+
const trimmed = value.trim();
|
|
282
|
+
if (trimmed.length === 0) {
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
if (/^https?:\/\//i.test(trimmed) || /^mailto:/i.test(trimmed)) {
|
|
286
|
+
return trimmed;
|
|
287
|
+
}
|
|
288
|
+
if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) {
|
|
289
|
+
return `mailto:${trimmed}`;
|
|
290
|
+
}
|
|
291
|
+
if (/^[^\s]+\.[^\s]+$/.test(trimmed)) {
|
|
292
|
+
return `https://${trimmed}`;
|
|
293
|
+
}
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
function detectImageSource(value) {
|
|
297
|
+
const normalized = detectLinkTarget(value);
|
|
298
|
+
if (!normalized) {
|
|
299
|
+
return undefined;
|
|
300
|
+
}
|
|
301
|
+
const candidate = normalized.replace(/^mailto:/i, '');
|
|
302
|
+
if (/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/i.test(candidate)) {
|
|
303
|
+
return normalized;
|
|
304
|
+
}
|
|
305
|
+
return undefined;
|
|
306
|
+
}
|
|
163
307
|
//# sourceMappingURL=RichTextInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_parser","_useRichText","_OverlayText","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RichTextInput","initialSegments","onChangeSegments","onChangeText","placeholder","editable","maxLength","showToolbar","toolbarPosition","toolbarItems","theme","multiline","minHeight","maxHeight","autoFocus","textInputProps","renderToolbar","onReady","resolvedTheme","DEFAULT_THEME","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","onSelectionChange","useCallback","start","end","nativeEvent","selection","handleSelectionChange","containerStyle","inputAreaStyle","styles","inputArea","undefined","inputStyle","textInput","baseTextStyle","style","hiddenInputText","toolbarComponent","jsx","Toolbar","items","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","OverlayText","TextInput","value","handleTextChange","placeholderTextColor","underlineColorAndroid","selectionColor","cursor","textAlignVertical","scrollEnabled","exports","displayName","StyleSheet","create","position","zIndex","color","backgroundColor","textShadowColor"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_defaultStyles","_useRichText","_parser","_serializer","_RenderedOutput","_Toolbar","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","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","DEFAULT_THEME","previewProgress","useRef","Animated","Value","current","internalOutputFormat","setInternalOutputFormat","useState","internalOutputPreviewMode","setInternalOutputPreviewMode","contentHeight","setContentHeight","state","actions","useRichText","useEffect","plainText","segmentsToPlainText","segments","resolvedOutputFormat","resolvedOutputPreviewMode","inputHeight","Math","max","min","shouldScrollInput","serializedOutput","useMemo","serializeSegments","shouldShowOutputPreview","length","normalizedSelection","start","selection","end","selectedText","slice","selectionStyle","getSelectionStyle","activeStyles","setValue","timing","toValue","duration","easing","Easing","out","cubic","useNativeDriver","onSelectionChange","useCallback","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","jsx","Toolbar","items","onOutputFormatChange","onOutputPreviewModeChange","toolbarBorderStyle","borderBottomWidth","borderBottomColor","colors","toolbarBorder","borderTopWidth","borderTopColor","jsxs","View","children","TextInput","value","handleTextChange","placeholderTextColor","selectionColor","cursor","textAlignVertical","scrollEnabled","pointerEvents","outputAnimatedWrapper","Text","ScrollView","showsVerticalScrollIndicator","RenderedOutput","selectable","exports","displayName","StyleSheet","create","position","overflow","trimmed","test","normalized","candidate","replace"],"sourceRoot":"../../../src","sources":["components/RichTextInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,6 +25,12 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
|
|
|
25
25
|
items,
|
|
26
26
|
theme,
|
|
27
27
|
visible = true,
|
|
28
|
+
outputFormat = 'markdown',
|
|
29
|
+
outputPreviewMode = 'literal',
|
|
30
|
+
onOutputFormatChange,
|
|
31
|
+
onOutputPreviewModeChange,
|
|
32
|
+
onRequestLink,
|
|
33
|
+
onRequestImage,
|
|
28
34
|
renderToolbar
|
|
29
35
|
}) => {
|
|
30
36
|
const resolvedTheme = theme ?? _defaultStyles.DEFAULT_THEME;
|
|
@@ -41,19 +47,40 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
|
|
|
41
47
|
if (item.heading) {
|
|
42
48
|
isActive = selectionStyle.heading === item.heading;
|
|
43
49
|
}
|
|
50
|
+
if (item.listType) {
|
|
51
|
+
isActive = selectionStyle.listType === item.listType;
|
|
52
|
+
}
|
|
53
|
+
if (item.textAlign) {
|
|
54
|
+
isActive = selectionStyle.textAlign === item.textAlign;
|
|
55
|
+
}
|
|
56
|
+
if (item.outputFormat) {
|
|
57
|
+
isActive = outputFormat === item.outputFormat;
|
|
58
|
+
}
|
|
59
|
+
if (item.outputPreviewMode) {
|
|
60
|
+
isActive = outputPreviewMode === item.outputPreviewMode;
|
|
61
|
+
}
|
|
62
|
+
if (item.actionType === 'link') {
|
|
63
|
+
isActive = !!selectionStyle.link;
|
|
64
|
+
}
|
|
44
65
|
return {
|
|
45
66
|
...item,
|
|
46
67
|
active: item.active ?? isActive
|
|
47
68
|
};
|
|
48
69
|
});
|
|
49
|
-
}, [actions, toolbarItems]);
|
|
70
|
+
}, [actions, outputFormat, outputPreviewMode, toolbarItems]);
|
|
50
71
|
|
|
51
72
|
// Custom render
|
|
52
73
|
if (renderToolbar) {
|
|
53
74
|
return renderToolbar({
|
|
54
75
|
items: enrichedItems,
|
|
55
76
|
state,
|
|
56
|
-
actions
|
|
77
|
+
actions,
|
|
78
|
+
outputFormat,
|
|
79
|
+
outputPreviewMode,
|
|
80
|
+
onOutputFormatChange: onOutputFormatChange ?? (() => undefined),
|
|
81
|
+
onOutputPreviewModeChange: onOutputPreviewModeChange ?? (() => undefined),
|
|
82
|
+
onRequestLink,
|
|
83
|
+
onRequestImage
|
|
57
84
|
});
|
|
58
85
|
}
|
|
59
86
|
if (!visible) {
|
|
@@ -79,6 +106,18 @@ const Toolbar = exports.Toolbar = /*#__PURE__*/_react.default.memo(({
|
|
|
79
106
|
actions.toggleFormat(item.format);
|
|
80
107
|
} else if (item.heading) {
|
|
81
108
|
actions.setHeading(item.heading);
|
|
109
|
+
} else if (item.listType) {
|
|
110
|
+
actions.setListType(item.listType);
|
|
111
|
+
} else if (item.textAlign) {
|
|
112
|
+
actions.setTextAlign(item.textAlign);
|
|
113
|
+
} else if (item.outputFormat) {
|
|
114
|
+
onOutputFormatChange?.(item.outputFormat);
|
|
115
|
+
} else if (item.outputPreviewMode) {
|
|
116
|
+
onOutputPreviewModeChange?.(item.outputPreviewMode);
|
|
117
|
+
} else if (item.actionType === 'link') {
|
|
118
|
+
onRequestLink?.();
|
|
119
|
+
} else if (item.actionType === 'image') {
|
|
120
|
+
onRequestImage?.();
|
|
82
121
|
}
|
|
83
122
|
}
|
|
84
123
|
}, item.id))
|